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.