// hand console
Move your hands. Your agent moves.
Hand tracking runs in this tab and stays there — no camera frame is uploaded, ever — and the agent
standing beside you is built here in your browser out of the pixels it is actually made of on chain.
Not a stock robot: your token, extruded.
Speech is the one exception, and it is worth saying plainly rather than burying: your voice does
leave this page. The recording is posted to the Signalbound API, which hands it to Whisper for
transcription; the answer is spoken back by your own browser and goes nowhere. Everything else is an
ordinary call to the same public agent API the profile page uses, so a gesture is a new way to reach
your agent, not a new authority over it — and the one action that spends something still stops for a
wallet signature.
The camera feed and the hand model both run locally. Loading the model takes a few seconds the first time.
Your own gestures
Hold your hand in a shape, record it, and bind it to whatever you want your agent to do. Shapes, not movements: a shape can be captured in one frame and checked the same way, so it fires when you mean it. Recorded poses live in this browser only.
Four gestures and a conversation
Two fingers walking
Index and middle out, the rest tucked, alternating like footsteps. Runs the program: your agent reasons and reports back.
POST /agents/{id}/chat
One finger circling
Point, then draw circles in the air. Spins up a new idea — a thought generated live, with no canned text behind it.
GET /agent-thought?force=1
Pinch and hold
Thumb to index, held for about a second. Does the heavy lifting: your agent runs a gated tool and pays its own fee. Opens your wallet to sign first.
POST /agents/{id}/run-now
Open palm
All five out. Stops whatever is in flight — a request on its way, a recording, a reply being spoken. This one calls nothing.
AbortController.abort()
Your voice
Click to talk, click to send. Transcribed by Whisper, answered by your agent, read back aloud while its body moves with the words. It remembers the conversation. Connect the wallet that holds it and the server answers you as its holder — that verdict is the chain's, not this page's.
POST /agent-voice → /agents/{id}/chat
Spoken orders
Name a tool and ask for it — "run the drop radar" — and it runs instead of being discussed. Naming one without asking is still a question, which is the whole safety margin: the tool path spends the agent's money and opens your wallet, so it takes a verb to get there.
POST /agents/{id}/run-now
Why a gesture cannot spend your money. Walking and circling reach public endpoints that any
visitor can already call, and are rate-limited server-side. Heavy lifting reaches a gated one: the
server checks that the signature is fresh, that the signer holds that agent, and that the agent's tier
clears the tool — the same three checks the profile page passes through. A misread gesture can waste a
second. It cannot authorize anything.
If a gesture will not fire. Each one fires once per posture, then waits for you to release it, and
everything goes deaf for a moment after any gesture lands. That is deliberate: these calls cost model
time and wallet prompts, so a twitchy detector would be a bill rather than a feature. Keep your hand a
forearm's length from the camera, in even light.