// 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.

Agent —: —
Status: OFFLINE
Click to talk

The camera feed and the hand model both run locally. Loading the model takes a few seconds the first time.

holder@signalbound ~ % agent --watch (live output, nothing pre-written)

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.