harness
harness
The harness is the durable turn loop that wires session-manager, llm-router,
and context-manager into an agent. A consumer stays thin: it kicks off a turn,
renders the conversation from the session transcript, and reacts to turn
boundaries and human-gated calls. The harness streams the assistant message into
the session as it generates, so you watch the session, not the harness — there
is no agent::events stream, and harness::status is a point-in-time recovery
read, not a render feed.
Every invocation is a trigger (iii.trigger({ function_id, payload })); there is
no separate "call" verb. Tool dispatch is deny-by-default: a send with no
options.functions.allow is a plain chat loop and every model-requested call is
refused until you allow globs per send. Sessions are minted by the harness
(s_<uuid>) or supplied by you; a send into a running turn folds in as steering
(merged: true) instead of erroring, and a repeated idempotency_key returns
the original turn without appending.