Skip to content

About

A voice-first Wear OS remote control for Codex — browse threads, dictate replies, and feel when the agent is done.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SmartCodex — Codex on your wrist

SmartCodex turns a Wear OS watch into a tiny, always-available interface for Codex. It lets you browse local Codex projects and threads, read conversations, dictate a reply, watch agent activity stream live, and get a haptic notification when the work is done.

I work remotely, and when I step away from my desk I deliberately leave my phone behind. I still want long-running agentic work to keep moving without turning every break into more screen time. SmartCodex gives me the smallest possible interaction loop: raise my wrist, answer with my voice, put my arm down, and feel a vibration when Codex finishes.

The design goal is maximum agentic power per pixel — and, finally, a reason for the smartwatch to be useful.

What it does

  • Groups all local Codex threads by project, with a separate Chats view.
  • Shows recent conversations and live working/idle state.
  • Sends replies using Wear OS voice dictation or the watch keyboard.
  • Streams Codex text, command, file-edit, reasoning, and web-search activity over WebSockets.
  • Notifies and vibrates on turn completion, with a deep link back to the thread.
  • Adds watch-face complications for five-hour quota, weekly quota, and active thread count.
  • Adds tiles for recent threads and quota at a glance.

Architecture

Galaxy Watch (Wear OS + Jetpack Compose)
        │  REST + WebSocket over local Wi-Fi, port 8788
        ▼
Local Node.js / TypeScript bridge
        │  JSON-RPC over stdio
        ▼
codex app-server  ──► existing local ~/.codex threads and login

The watch is intentionally thin. The Kotlin app handles the round-screen experience, dictation, tiles, complications, and notifications. A small TypeScript bridge on the Mac translates its REST calls into codex app-server JSON-RPC requests and relays app-server events back to the watch over WebSockets.

This proof of concept stays local: there is no cloud relay and no separate SmartCodex account.

How Codex and GPT-5.6 were used

The entire project was built by Codex. I supplied the problem, product direction, and real-device feedback; Codex designed and wrote the TypeScript bridge, the Kotlin Wear OS app, the round-screen Compose UI, the JSON-RPC integration with codex app-server, the REST and WebSocket layers, voice-reply flow, live activity streaming, notifications, tiles, complications, setup instructions, and validation workflow.

GPT-5.6 in Codex was used for the final architecture and implementation audit, to validate the Node and Android builds, trace the end-to-end event flow, identify the security boundaries of the local proof of concept, and prepare a reproducible judge-ready package. The primary core-build Codex session ID is 019f2523-8e4f-7231-9e01-31b58858a3f9; the GPT-5.6 validation and packaging session ID is 019f81ec-f35d-7471-9146-8f46bc9e3384.

Requirements

  • macOS with Node.js 20+
  • Codex CLI installed and signed in (codex login)
  • JDK 21 and Android SDK for building the watch app
  • A Wear OS watch and the Mac on the same Wi-Fi network

Run the bridge

cd bridge
npm ci
npm run typecheck
HOST=0.0.0.0 CODEX_AUTO_APPROVE=1 npm start

The safe default binds to 127.0.0.1:8788 and denies command/file approval requests. The command above explicitly enables trusted-LAN demo mode so a physical watch can connect and wrist-started turns can proceed without an approval UI. Quick checks:

curl localhost:8788/health
curl localhost:8788/projects

Bridge API

Method Route Purpose
GET /projects Projects grouped by working directory
GET /threads?cwd=... Threads for a project
GET /threads/{id} Normalized thread messages
POST /threads/{id}/reply Start a turn with { "text": "..." }
POST /threads/{id}/interrupt Interrupt a turn
GET /quota Five-hour and weekly remaining quota
GET /running Active local threads
WS /ws?threadId=... Live events for one thread
WS /ws Global activity events for notifications

Build and install the watch app

cd watch
export JAVA_HOME=/opt/homebrew/opt/openjdk@21/libexec/openjdk.jdk/Contents/Home
./gradlew assembleDebug

Enable developer mode, ADB debugging, and wireless debugging on the watch, then:

adb pair <WATCH_IP>:<PAIRING_PORT>
adb connect <WATCH_IP>:<DEBUG_PORT>
adb install -r app/build/outputs/apk/debug/app-debug.apk

Open Codex on the watch. In Settings, set the bridge address to http://<MAC_LAN_IP>:8788 if the default address does not match your network.

Validation

The submission build was validated with:

cd bridge && npm ci && npm run typecheck
cd watch && JAVA_HOME=/opt/homebrew/opt/openjdk@21/libexec/openjdk.jdk/Contents/Home ./gradlew assembleDebug

Both checks pass on macOS. The resulting debug APK is at watch/app/build/outputs/apk/debug/app-debug.apk.

Security and scope

SmartCodex is a local-network proof of concept, not a production service.

  • The bridge has no authentication or TLS and must not be exposed to the public internet.
  • Safe defaults bind only to loopback and deny command/file approvals.
  • HOST=0.0.0.0 CODEX_AUTO_APPROVE=1 is intentionally explicit. It exposes the bridge to the LAN and auto-approves Codex command/file requests so wrist-started turns cannot stall. Use it only on a trusted machine and trusted LAN, and stop it when not in use.
  • The quota endpoint reads the existing local Codex login and only returns aggregate usage percentages; credentials are never sent to the watch.
  • For remote use, add authentication and TLS or place the bridge behind a private network such as Tailscale.

Built with

Codex, GPT-5.6, Wear OS, Kotlin, Jetpack Compose for Wear OS, AndroidX Wear Tiles, Watch Face Complications, Node.js, TypeScript, JSON-RPC, WebSockets, OkHttp, and Kotlin Serialization.

License

MIT — see LICENSE.

About

A voice-first Wear OS remote control for Codex — browse threads, dictate replies, and feel when the agent is done.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages