INIO-bus

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/release claim an asset so other agents see they'd collide; claims lists holdings still live.
  • Consume — pull recent events per topic (intent, momentum, touches, observation, coordination, pipeline), filter by field, or --follow like tail -f.
  • Status dashboard — inio-bus status renders 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 --slug atomically 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 | cancelled
  • momentum — created | active | expired
  • touches — claimed | released
  • pipeline — started, then success | 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.