A few months into living inside Claude Code, I hit the same friction over and over: Claude pauses for a
permission prompt, I'm three rooms away from my laptop, and the session just sits there waiting. Or I think
of a prompt while making coffee and by the time I'm back at the desk I've half-forgotten it.
So I built a Wear OS app. It's called CCWEAROS, and it does
three things:
- Approve permission prompts from your wrist
- Voice-prompt your Mac while away from the keyboard
- Resume past sessions without alt-tabbing back
## How it works
Two pieces:
- A Node.js daemon on the Mac that wraps
claudein a pty, parses its output for permission prompts, and ships state up. - A Wear OS 4+ app (Jetpack Compose Material3) on the watch that subscribes to that state and sends commands back down.
Both sides talk through Firebase Realtime Database. No cloud relay, no third-party services beyond
Firebase (yours) and Anthropic (your key). A macOS LaunchAgent keeps the daemon alive across reboots; FCM
wakes the watch when the daemon has something new.
## How Claude wrote most of it
Roughly 90% of the codebase came out of Claude Code sessions. I drove architecture decisions, validated UX on
a real Galaxy Watch 8, and pushed back when something felt wrong — but the Kotlin, the TypeScript, the FCM
wake flow, the pty wrangling, all of it was Claude pairing with me through four sprints.
A few patterns that worked:
-
CLAUDE.mdas the single source of truth. Project conventions, RTDB schema, hard rules ("never useResponse.redirectin middleware", etc.). Reloaded every session so I didn't have to re-explain. -
One file per sprint in
docs/CHANGELOG.md. Dense but specific — future-me (and future contributors) can trace why every decision was made. - Pushing back early. When Claude proposed a fix that addressed the symptom instead of the root cause, I'd interrupt and ask for the cause first. That habit alone saved hours of debugging.
## Honest constraints
I put these at the top of the README too — better to lose a curious reader at second 30 than have them angry
at minute 30:
- Mac must be awake. No cloud relay. Mac sleeps = watch shows OFFLINE.
-
Voice mode auto-allows tool use. It runs
claude -pnon-interactively, so permission prompts get bypassed. Use the interactive path if you want gates. - Tested only on macOS + Wear OS 4 (Galaxy Watch 8). No Pixel Watch, no Apple Watch, no Linux, no Windows.
## What surprised me
The thing that took longest wasn't the bridge — it was getting the watch UI to feel right. Wear OS has
weird quirks: emulator behaves nothing like a real device, touch targets need to be 48dp minimum or they
miss, AnimatedContent re-creates child composables on state change unless you pin them with a contentKey.
The wrapper code was a weekend. The polish was three weeks.
## Try it
Repo (MIT): github.com/caamanoluismiguel/ccwearos
Setup is ~10 minutes from clone to a daemon talking to the emulator. Real watch is another 10 if you've never
sideloaded a Wear OS app before.
Would love feedback from anyone running Claude Code daily — especially: what other "away from the laptop"
moments would you want to handle?

Top comments (0)