INIO-bus is the coordination bus that lets independent tools and agents —
including AI agents — share state and hand off work without a central
controller. It is a single-binary client for publishing
CloudEvents 1.0 to Apache Kafka, written in pure
Rust with no librdkafka, Python, or Java dependency — drop it on any
Linux host and publish.
What it does
- Event-driven governance — intents, momentum, touches/claims, and observations are emitted as first-class events, so concurrent work can be swept for collisions before it starts (pre-flight context sweep).
- Coordination shortcuts —
claim/releaseclaim an asset so other agents see they'd collide;claimslists holdings still live. - Consume — pull recent events per topic (
intent,momentum,touches,observation,coordination,pipeline), filter by field, or--followliketail -f. - Status dashboard —
inio-bus statusrenders an effort-routing view: who is busy, idle, stale (a leaked claim or un-completed intent), or silent (expected but emitting nothing), plus a recent-builds panel fed by the pipeline events. - ADR numbering —
inio-bus adr reserve --slugatomically claims the next ADR number via Neo4j (Kafka has no compare-and-swap), so parallel work never double-allocates a number. - Merge daemon — a separate daemon picks up PRs that already carry a qualifying two-eyes review, and merges them.
The bus has no single controller: every participant writes its own state,
and the bus only carries the messages that let them stay consistent.
Event vocabulary
intent—declared|active|completed|cancelledmomentum—created|active|expiredtouches—claimed|releasedpipeline—started, thensuccess|failure|error|killed|cancelled|skipped, mirroring the CI's status vocabulary
A storage/shorthand design: pipeline events carry the full CI status
vocabulary so status collapses each lifecycle into one row per pipeline.
Design invariants
- CloudEvents 1.0 envelope — interoperable by construction, not by convention.
- Pure Rust, single binary — the same published artifact on any host.
- Configured through the environment — broker and identity are set via env vars and flags (
AGENT_ID,KAFKA_BOOTSTRAP_SERVER,NEO4J_*, ...), never hard-coded into the binary.