Stable JSON contracts
← index
colibri-contracts holds the stable, language-agnostic wire shapes shared
between Colibri (Rust) and Clawdie agents (TypeScript). It owns schemas and
(De)serialize, not business logic.
Why a separate contracts crate
Section titled “Why a separate contracts crate”- Prevent duplicated definitions between Rust and TypeScript lanes.
- Keep committed manifests in
manifests/parseable by both sides. - Centralize schema strings, field renaming aliases, and backward-compat defaults.
Active schemas
Section titled “Active schemas”| Schema | Rust struct | Purpose |
|---|---|---|
clawdie.interagent.run-manifest.v1 | RunManifest | Records a build/test run — role, agent, artifacts, summary. |
clawdie.runtime-version-inventory.v1 | RuntimeInventory | Host runtime snapshot — OS, package versions, npm/node/zot/pi. |
clawdie.provider-test.result.v1 | ProviderTestResult | DeepSeek cache-hit probe result and token accounting. |
clawdie.task-cost-summary.v1 | TaskCostSummary | Per-task cost breakdown — input/output/cache tokens, cost_usd. |
Schema constants and structs live in crates/colibri-contracts/src/lib.rs.
Evolution rules
Section titled “Evolution rules”- The crate carries no logic — only
serdestructs and schema constants. - New fields are normally optional with
#[serde(default)]so old manifests still parse. RuntimeInventory.piis optional because not every host installspiorzot.HostStatus.rawis a catch-allserde_json::Valueso hostile collector output can be captured without forcing a schema bump.
Golden tests
Section titled “Golden tests”crates/colibri-contracts/tests/fixtures.rs parses every committed manifest in
manifests/ and asserts round-trip equality. The fixtures are intended to be
cross-platform — if a manifest produced on Linux differs from one produced
on FreeBSD 15, the difference must be understood and documented before it is
merged.
See also
Section titled “See also”- cost-model — how the provider-test result feeds cache-hit metering.
- runtime-inventory — where the runtime inventory is produced.