Ony sits between your coding agent and the actions it cannot undo. It detects the risky tool call, re-derives the real risk on the server, calls your phone, and delivers a signed verdict back to the agent. No terminal scraping, no keystroke injection.
Six automatic stages. The trust boundary stays on the server and your device the whole way through. You show up only for the decision.
A PreToolUse hook intercepts every tool call before it runs. Reads and ordinary edits pass straight through. A deploy, a force-push, a schema change, or a secret access gets held for classification.
The server re-derives the real risk from its own action taxonomy. The agent's own hint is never trusted. Anything the taxonomy does not recognize fails closed to critical.
Ony places a real phone call through your telephony provider. You hear the action and its risk, never the raw command or your secrets.
Press 1 to approve, 2 to deny. High-risk actions add a 6-digit code, so an overheard call alone cannot authorize a deploy.
The verdict is HMAC-signed per device and bound to the exact request. The local connector verifies the signature before honoring it. Forged or replayed approvals are rejected.
The decision reaches the agent by cached flag or session resume, never keystroke injection, and lands in a keyed, hash-chained, append-only log the dashboard can verify.
Real event surfaces, not a wrapper. Ony binds to the hook and app-server interfaces the agents already expose, then normalizes every event into one model.
Hooks plus pause-resume delivery
PreToolUse is the primary pre-execution blocking gate.Notification (permission_prompt / idle_prompt) flags a blockage.Stop and SubagentStop track lifecycle.claude -p --resume.# stdin to: ony hooks claude
{
"hook_event_name": "PreToolUse",
"tool_name": "Bash",
"tool_input": { "command": "terraform apply" }
}
[ony] gated: production deploy (critical)
[ony] decision pending, calling you _App-server over ndjson JSON-RPC
# request from the app-server
{"method":"item/commandExecution/requestApproval",
"params":{"command":"rm -rf build"}}
# signed response from ony
{"result":{"decision":"approved",
"sig":"hmac:…"}}
[ony] signature verified, resumingThe /ony command is a Claude Code skill. Type it in the session to change how much Ony gates, right now, without restarting the agent.
/ony onThe default. Safe tool calls run ungated at full speed. Only high-risk, irreversible actions ring your phone.
/ony awayCall me for every actionable step. Drive the agent from your keypad while you are away from the terminal.
/ony offHand control back to the agent's normal approval flow. Ony stays out of the way until you turn it on again.
/ony herepoint decisions at this device,/ony statusshow the current mode and bound session.Claude Code has no official mid-turn input channel, so Ony does not pretend one exists. A decision becomes the next turn, two ways.
The daemon caches the verdict against the session id and the tool name. The next time the PreToolUse hook fires for that exact call, it consults the cache and lets the action proceed or denies it. The agent never pauses on a keystroke that was injected from outside.
For headless flows, claude -p --resume SESSION_IDstarts a fresh turn with the decision as the next prompt. It is an ordinary continuation, not a hijacked terminal, so it works in CI and across parallel sessions.
Ony does not scrape terminal output or inject PTY keystrokes. Handoffs bind to the stable agent_session_id, not the per-resume session id, so a decision always lands on the work it was made for, even after a resume.
A single console for the devices that approve, the decisions they made, and the tamper-evident record that proves nothing was rewritten after the fact.
Enroll a phone with a decision_key, see what is active, and revoke instantly. Each device verifies signatures independently.
Full history with approver attribution. See which device approved, when, and against which exact request.
One-click hash-chain verification. Rewrite a single event and the chain breaks, end to end, in plain view.
A decision_key binds a phone to your org. Per-device HMAC keys never leave the trust boundary.
Audit chain
prod-api, last 4 decisions
terraform apply
approved, +6-digit code
9f3c…a1git push --force
denied
2b7e…c4DROP TABLE sessions
denied
5d10…7falembic upgrade head
approved
e8a2…3dChain intact, no event rewritten
4 / 4Install the connector, point it at Claude Code or Codex, and enroll your phone. Open source and self-hostable, or fully managed on Ony Cloud.