tools[] array:
| Mode | When | How it runs |
|---|---|---|
| Client-loop (default) | Browser apps, telephony bridges, anything already running your code on the WS | Engine → tool_call frame; you → tool_result on the same socket |
| Engine-POST (optional) | Thin clients with a public HTTPS backend | Set endpoint on the tool; engine POSTs arguments to your URL |
kb_endpoint and is
rolling out for registered webhook tools.
Quick start (client-loop)
- Open an Omni session (
omni:sessionscope):
-
Send a
configureframe withtools[](see the wire protocol). -
Handle
tool_call→ reply withtool_result.
omni-mock example.
Register webhook tools (optional)
For engine-POST or reusable tool definitions bound to agent profiles:hmac_secret — it is shown once and verifies signed
delivery from PyAI.
Bind tools to an agent profile:
Timeouts & errors
Tools are load-bearing — the agent’s answer depends on the result. Unlikekb_endpoint grounding (300 ms, fail-open), tools use a ~5 s default budget.
On timeout the engine injects a structured error so the agent can apologize;
results over ~6 KB are truncated.
See also
Omni wire protocol
Full frame reference including
tool_call / tool_result.Browser voice agent
End-to-end website agent with grounding.
API reference
/v1/tools and /v1/agents/{id}/tools.Offline mock server
Build your client before you have a key.