Agent harness: zot + Colibri
Decision
Section titled “Decision”Two binaries, not one (Sam rejected merging them, 13.jun.2026):
- zot — the agent (front door to the model). Go binary; acts.
- Colibri — the control plane (supervisor). Rust; watches agents via glasspane, runs the task board, owns cost. It observes zot/pi; it does not contain them.
Canonical statement: AGENTS.md (lines ~18–32). clawdie-ai (TS) is being
pruned; surviving features move to zot/Colibri.
There is no
ADR-agent-harness-consolidation.md(it was referenced in the past; those references have since been cleaned up). TreatAGENTS.mdas the ADR.
Runtimes
Section titled “Runtimes”Glasspane normalizes events from both harnesses into one taxonomy via
AgentRuntime { Pi, Zot, Local } — crates/colibri-glasspane/src/lib.rs
(zot_event_type() maps zot’s events onto the pi-style names).
Autospawn + the RPC driver (colibri#143)
Section titled “Autospawn + the RPC driver (colibri#143)”The spawner’s contract: spawn the agent, read stdout JSONL.
- pi self-drives (
pi --mode json) withstdinnull — fits directly. - zot’s only structured persistent mode is
zot rpc, a request/response peer that reads stdin. So the spawner pipes stdin for RPC agents and the daemon sends the prompt over anRpcSender.
Where it lives:
- spawn contract +
rpc_stdin+RpcSender:crates/colibri-daemon/src/spawner.rs - autospawn binary-aware argv (
zot → rpc, pi →--mode json):crates/colibri-daemon/src/socket.rs(default_agent_args,autospawn_agent_if_configured) - wire format (verified against real zot): agent-events-reference
- end-to-end proof:
crates/colibri-daemon/tests/zot_rpc_smoke.rs(#[ignore],ZOT_BIN-gated)
OOTB default harness is zot; pi remains a supported fallback
(COLIBRI_AUTOSPAWN_BINARY=pi).
See also
Section titled “See also”- naming-decisions — the
pi → zotneutral-naming work - quality-gates — how a half-finished rename reached
main