A Hermes terminal you wear on your wrist.
Picture it: you're in the garden, hands in the soil, and an idea strikes. You glance down, tap a few keys on the little band wrapped around your wrist, and Hermes answers — right there on a screen the size of a postage stamp. No phone. No laptop. Just you, your thoughts, and a warm thread of WiFi connecting you to the Jetson humming away on your desk.
That's the dream this project chases, and it chases it with joy.
Hermes Wristband is a thin client: the band itself is an ultralight, WiFi-enabled microcontroller (an ESP32-S3-class part, a few grams, a few dollars) that does exactly three things — render text, send keystrokes, and hold a WebSocket open to the Jetson on your local network. All the heavy thinking, all the Hermes magic, happens on the Jetson where it belongs.
This repository is the Jetson-side reference implementation: a Python package that models the wristband's terminal, serves the WebSocket the band connects to, manages a Hermes subprocess per band, and exposes a tiny health endpoint the band can poll. Build the firmware, point it at this server, and you're wearing Hermes.
Because the best interface is the one that's already with you. Because a terminal you can't lose in a couch cushion is a terminal you'll actually use. Because there is something quietly wonderful about whispering to your AI companion from the produce aisle.
Twenty testable prompts live in prompts/hardware_prompts.md,
each one a hypothesis you can take to a workbench:
- The brain — ESP32-S3R8 for balance, ESP32-C6 for battery life, or a zero-solder LilyGo T-Display-S3 to get started this weekend.
- The screen — a crisp 1.69" IPS for daily wear, a sunlight-readable SHARP memory LCD for always-on glances, or a flexible e-ink panel that curves around your wrist for the full sci-fi effect.
- The keyboard — a 32-pad capacitive matrix for thinness, a 30-key snap-dome array for real tactile clicks, a stripped Rii i8+ for the impatient, or pure on-screen T9 for the minimalist.
- The power — a 400mAh pouch cell, a polite 100mA charger that won't warm your skin, and antenna placement that respects your metal watchband.
Every prompt is measurable: price, weight, milliamps, words-per-minute, milliseconds of latency. Bring a multimeter and a curious heart.
Each module is small, tested, and does one thing well:
| Module | What it does |
|---|---|
config |
Display profiles (40×12 IPS, 49×8 flex e-ink, …) and every tunable in one dataclass |
terminal_model |
A tiny scrollable cell buffer with proper VT-style wrap semantics |
display_driver |
Virtual framebuffer with damage-region tracking, so the band only redraws what changed |
keyboard_mapper |
Three physical layouts (matrix32 / dome30 / t9), layers, multi-tap |
message_router |
Key events → bytes: VT100 arrows, Ctrl-C, the works |
wifi_link |
mDNS advertise + discover, so the band finds hermes-wristband.local with no hardcoded IP |
transport |
One-band-at-a-time WebSocket server + test client |
session_manager |
Spawns a Hermes CLI per band in a real pty, sized to the band's screen |
power_manager |
Battery model: deep-sleep to active draw, dim-as-it-fades policy |
health_server |
GET /health and GET /config so the band can sync on connect |
wristband_orchestrator |
The conductor — wires them all together into one runnable server |
git clone https://github.com/drwjkirkpatrick-web/hermes-wristband.git
cd hermes-wristband
python3 -m pip install -e '.[net,dev]'
pytest -q # 83 tests, all greenRun the server on your Jetson:
import asyncio
from hermes_wristband import wristband_orchestrator
async def main():
orch = wristband_orchestrator.WristbandOrchestrator()
await orch.start(advertise_mdns=True) # band finds us as hermes-wristband.local
await orch.run_forever()
asyncio.run(main())The WebSocket listens on :9296, health on :9297. Point your band's
firmware at ws://hermes-wristband.local:9296, send
{"cmd":"new_session","argv":["hermes"]}, and start typing.
Early days, bright eyes. The Jetson side is real and tested
(83 passing tests, a genuine pty round-trip through /bin/cat standing in
for Hermes). The firmware and the 3D-printed case are the next adventure —
and the hardware prompts are the map.
Come build it with us. The wrist is warm, the WiFi is strong, and Hermes is waiting to say hello. 🔥
Built with the Phosphorus personality — The Charismatic Communicator.