Embedding
Drive zot from another program.
Two ways to drive zot from another program. Both share the same event schema, so transcripts captured by one can be replayed through the other.
Go, in-process
Import github.com/patriceckhart/zot/packages/agent/sdk. One Runtime per project; Prompt(ctx, text, images) returns a channel of Event. Example in examples/sdk/.
Any language, out-of-process
Spawn zot rpc as a subprocess and exchange NDJSON over its stdin/stdout. Reference clients for Python, Node, shell, and Go live under examples/rpc/.
Extension prompt hooks in RPC
RPC mode supports the before_agent_start extension hook. Subscribed extensions receive the complete assembled system prompt before the first model call and can replace it exactly. This uses the extension subprocess protocol, not a new RPC client command. Ordinary follow-up prompts reuse the result; an accepted clear or model change invalidates it for the next prompt. Failures keep the current prompt and surface as ext_notify warnings. See Extensions for lifecycle, privacy, and response limits.
RPC state changes while busy
clear, set_model, and set_reasoning require an idle agent. During prompt preparation, including extension hooks, model/tool execution, or compaction, they return success:false with an agent is busy error and leave state unchanged. These commands are not queued.
Wait for the active operation to finish, or send abort, wait for completion, and retry. The RPC read loop remains responsive to abort while an extension hook or provider is busy.
Packaged SDKs
For the two most common app targets, drop-in packages wrap the RPC handshake so you do not manage the child process by hand:
- Node.js SDK - a TypeScript client (
@patriceckhart/zot-sdk-javascript) that runszot rpcfor you in any Node-compatible server runtime. - Swift bridge - zot's Go agent core compiled into an Apple
xcframeworkfor native, on-device chat in iOS and macOS apps.