gibandClaude Opus 5.5 bdfb79b891 Watch app MVP: XcodeGen project, gateway client, pair, feed, thread, new thread, notifications
SwiftUI watch-only app in watch/, generated by XcodeGen. Codable models mirror
gateway/src/contract.ts, with lenient string enums so new phases or decisions
still decode. A DemoGateway serves fixtures from the docs/api.md examples for
previews and demo mode. Swift Testing covers decoding the documented JSON,
request encoding, notification action parsing and the small view helpers.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-01 02:33:15 -05:00
2026-11-01 01:45:04 -05:00

WristCode

An Apple Watch client for T3 Code. Browse threads across every T3 Code environment you run, reply by dictation, start new threads, and get a notification when an agent finishes. It works over the watch's own cellular connection, with no phone nearby.

Early work in progress.

How it fits together

watchOS only allows WebSockets for audio streaming apps, and T3 Code clients talk to their server over a WebSocket. So the watch talks HTTPS to a small gateway, and the gateway talks to each T3 Code server.

Apple Watch  --HTTPS-->  gateway  --WebSocket-->  T3 Code server (one per environment)
                            |
                            +--APNs-->  notifications on the watch
  • gateway/ is the gateway: Bun and TypeScript, shipped as a container image.
  • watch/ is the watchOS app: SwiftUI, watch only, no iPhone companion.
  • docs/ holds the design notes and the T3 Code protocol reference.
  • mocks/ holds static UI mocks of the watch screens.

Running the gateway

The gateway is one container with one SQLite file in /data. deploy/compose.yml is the stack on server-gib, and gateway/Containerfile builds the image. CI builds and deploys every push to main that touches gateway/.

Operators use the wristcode CLI inside the container:

# Connect a T3 Code server. Make the one-time credential on that server first:
t3 auth pairing create --scope orchestration:read --scope orchestration:operate --label "WristCode gateway"
docker exec -it wristcode-gateway wristcode host add https://t3mac.gbrown.org <credential> --label "Mac mini"

# Pair a watch: enter the printed code on the watch within 5 minutes.
docker exec -it wristcode-gateway wristcode pair

docker exec -it wristcode-gateway wristcode host list
docker exec -it wristcode-gateway wristcode device list
docker exec -it wristcode-gateway wristcode device revoke <id or name>

The gateway exchanges the credential for a 30 day T3 session limited to reading and driving threads, so the long-lived token never leaves the gateway. T3 sessions cannot be refreshed. A week before one expires, the watch gets a notification, and running host add again with a fresh credential renews it.

For local development, run bun --watch src/main.ts in gateway/ with WRISTCODE_DB pointing at a scratch file. Without APNs settings, pushes are logged instead of sent.

License

MIT

S
Description
An Apple Watch client for T3 Code: browse threads, reply, start agents, and get notified, over cellular.
Readme MIT
4.6 MiB
0 Stars 1 Watchers 0 Forks
Languages
Swift 56.8%
TypeScript 25.1%
HTML 17.1%
Shell 0.8%
Dockerfile 0.2%