Apple Watch + Discord

Pinchy

Push-to-talk from your Apple Watch to Discord. Voice in, voice out.

Watch
📱iPhone
🖥Proxy
💬Discord
🤖OpenClaw
Before You Start
Apple Watch paired to an iPhone
💬A Discord server you own or admin
🤖A bot in your server (OpenClaw or any bot that replies to messages)
🖥A server or Raspberry Pi to run the proxy
📦Docker on that machine (or Node.js 18+ and ffmpeg)
Setup
1
Step 1
Create a Discord Bot
Create the app
Get your bot token
  • 1. Click "Bot" in the left sidebar
  • 2. Click "Reset Token" and copy it
Enable required permissions
  • 1. On the Bot page, scroll to "Privileged Gateway Intents"
  • 2. Turn on "Message Content Intent"
Invite the bot to your server
  • 1. Go to OAuth2 → URL Generator
  • 2. Check "bot" under Scopes
  • 3. Check: Send Messages, Attach Files, Read Message History
  • 4. Copy the URL and open it to add the bot
2
Step 2
Run the Proxy Server
What is the proxy?
  • A small program that handles audio conversion and Discord API calls. The Watch can't talk to Discord directly — the proxy bridges that gap.
  • Run it on the same machine as your bot. It requires Node.js 18+ and ffmpeg.
With Docker (recommended)
docker run -d --name pinchy-proxy \ -p 3847:3847 \ -e PROXY_SECRET=make_up_a_password \ ghcr.io/phil-gao/pinchy-proxy
Without Docker
# Install prerequisites first: # Pi/Linux: sudo apt install -y nodejs npm ffmpeg # macOS: brew install node ffmpeg git clone https://github.com/phil-gao/pinchy-proxy.git cd pinchy-proxy && npm install cp .env.template .env # Edit .env and set PROXY_SECRET to a random password node server.js
Verify
  • Open http://your-ip:3847/health in your browser
  • You should see {"ok":true}
  • If you get a connection error, check that port 3847 is not blocked by a firewall
Remote access with Tailscale
  • Pinchy only works on your local network by default.
  • To use Pinchy away from home, install Tailscale on both your server and your iPhone.
  • Use your server's Tailscale IP (e.g. 100.x.x.x) as the proxy host in Step 3.
  • Enable "Connect on Demand" in iPhone Settings → Tailscale to keep the connection alive.
3
Step 3
Configure the iOS App
Open Settings in Pinchy and fill in:
  • Host:Port — your machine's IP and port (e.g. 192.168.1.50:3847 or Tailscale IP 100.x.x.x:3847)
  • Proxy Secret — the password you chose in Step 2
  • Bot Token — the token from Step 1
  • Responder User ID (optional) — the Discord user ID of the bot you want replies from
Finding your machine's IP
  • Raspberry Pi / Linux: hostname -I
  • macOS: ipconfig getifaddr en0
  • Windows: ipconfig (look for IPv4 Address)
  • Tailscale: use the 100.x.x.x IP from your Tailscale dashboard
Finding your bot's user ID (optional)
  • 1. In Discord: Settings → Advanced → turn on Developer Mode
  • 2. Right-click your bot in the member list → Copy User ID
What does success look like?
  • Home tab shows "PINCHY" with a green dot and "Connected"
  • Settings shows Proxy: Connected and Discord Bot: Connected
  • Channels sync to your Watch automatically
4
Step 4
Configure Your Bot
What is OpenClaw?
  • OpenClaw is a cross-platform personal AI assistant that connects to Discord and other services. It works great with Pinchy, but any Discord bot that replies to messages will work.
Allow Pinchy's bot
  • Most bots ignore messages from other bots by default.
  • Whitelist Pinchy's bot ID so your bot responds to Pinchy's messages.
  • Find Pinchy's bot ID: Developer Portal → your Pinchy app → General Information → Application ID
How replies work
  • If your bot replies with a voice message (OGG/Opus, flags:8192), Pinchy plays the audio on the Watch.
  • If your bot replies with text, Pinchy displays it on the Watch screen.
  • Pinchy handles both automatically — no special configuration needed on the Pinchy side.
5
Step 5
Teach Your Bot the Rules
On first save
  • Pinchy shows a full-screen rules card
  • Screenshot it and send it to your bot's Discord channel
  • Your bot learns how to respond from the image
6
Step 6
Test It
Verify end-to-end
  • 1. Open Pinchy on your Apple Watch
  • 2. Select a channel from the dropdown
  • 3. Hold "Hold to Speak" and say "Hello, testing"
  • 4. Release and wait — your message should appear in Discord
  • 5. Your bot replies — the Watch plays audio or shows text
If it doesn't work
  • Check the iOS app Home tab — is it showing "Connected"?
  • Check Discord — did the message appear in the channel?
  • Check your bot — did it reply?
  • See Troubleshooting below for common issues.
📋 PINCHY DEFAULT RULES
💬📝 = reply in text
🔊🎙️ = reply in audio
If both appear, use the most recent marker
If no marker appears, default to text
Keep replies short, clear, and direct
📄Match the requested length and format
If audio fails, fall back to text and say so
Reply to the same message/thread when possible
📝= text
🎙️= audio
no marker = default to text
✂️keep it short
🔄fall back to text if audio fails
Using Pinchy
1
Open Pinchy on your Apple Watch
2
Tap the channel name to switch channels
3
Hold "Hold to Speak" and talk
4
Release — your message is sent to Discord
5
Swipe left for text mode, right for voice mode
6
Your bot's reply plays back automatically
7
Use the Digital Crown to adjust volume (voice) or scroll text (text)
Troubleshooting
Proxy unreachable
Make sure the proxy is running. Test with http://your-ip:3847/health
Works at home but not outside
Install Tailscale on your server and iPhone. Use the Tailscale IP as your proxy host. Enable "Connect on Demand" in iPhone Settings → Tailscale.
Auth error on Discord
Bot token is wrong. Developer Portal → Bot → Reset Token and copy again.
Bot not responding
Enable Message Content Intent in Developer Portal → Bot → Privileged Gateway Intents.
OpenClaw ignoring Pinchy
Whitelist Pinchy's bot Application ID in your OpenClaw config.
No channels on Watch
Open the iOS app → Settings → Save to sync channels.
Voice not playing
Grant microphone access when prompted on the Watch. If audio cuts out when the screen dims, the app stays alive in the background — try again.
Messages don't send when iPhone is backgrounded
Don't force-quit the iOS app (swipe up in app switcher). Leave it running in the background. If using Tailscale, enable "Connect on Demand".
Watch shows "Timed out"
Your bot took too long to reply, or the audio conversion was slow. Try again — Pinchy waits up to 90 seconds.