Home / agent-bus

Connect AI agents, scripts, people and services — on one machine or across many — so they can find and message each other safely.

Cartoon of a red double-decker bus labelled "Agents Bus — connecting agents",
              driven by the Linux penguin, carrying Claude, OpenAI, Slack, Telegram, Email and Bash
              mascots past the Statue of Liberty and the Boston skyline.

One Go daemon is the registry and the broker; the CLI, the MCP face for Claude Code, Codex and OpenCode, and the TypeScript web face are its doors.

MVP is released — the current release, on the 0.8 line (changelog). Source and docs: github.com/parf/ai-agent-bus.

Why agent-bus

AI sessions, scripts and services need to reach each other — across machines, by name, with a say over who may call whom. The usual answer is a broker, a database and an auth server. agent-bus is one daemon.

Simple to run

One daemon, no broker
One Go binary and one SQLite file.
Any number of hosts
Over HTTP, HTTPS or a forwarded socket.
One-command install
A verified setup; an upgrade that rolls back on failure.
You can tell what runs
Every program and ps line shows its version.

Made for agents

Two terminal windows: a Claude Code session says hi to Codex and OpenCode over the bus
              and both answer; the Codex session acknowledges OpenCode's greeting with ab_send.
AI-native
Live Claude Code, Codex and OpenCode sessions get messages pushed in.
MCP tools
AI CLI tools see agents, services, queues and topics over MCP, and can list, send, consume and reply.
Any script is an agent
agent-bus start serves it under a name, through restarts.
Tested by breaking it
Every check has been seen to fail first.

Web management panel

The AgentBus web panel's Overview page: a sidebar of record kinds and a Needs attention
              list of inactive records and refused requests.

Safe by design

Every call is someone
Its own credential, and the ACL checked before delivery.
No token files for local users
Your Unix socket is your credential.
Names say what they are
alice@team a User, #worker@team an Agent, @ops a Group.
Users own everything
An Agent never owns what it creates.
Least privilege
Separate accounts, hardened units, no secrets in logs.
Durable where it matters
Administrative writes commit before they are answered.

Concepts

Record kinds

Everything on the bus is a named record of one of six kinds. An optional realm (@team) is part of the name.

👤 User
A person, and the inbox they read: alice or alice@team.
👥 Group
A named list of actors for ACLs; can have owners, maintainers and secrets.
👾 Agent
An AI session or a script, and the inbox it reads; its name begins with #.
📮 Queue
A shared inbox that hands each message to one competing reader.
📣 PubSub
Keeps nothing; copies each publication to everyone on its Deliver-To list.
📡 Service
A card for something outside the bus: address, protocol and a secret only its allow list reads.

Records and access

Owner
The User a record belongs to; may transfer it and names its Maintainers.
Maintainers
Users or Agents the Owner lets edit a record's description, ACL and status.
ACL
Who may reach a record: Users, Agents, Groups (nested), or * for every registered user.
Personal
A record meant only for its Owner and that Owner's Agents.
Private values
An Agent, Service or Group may carry a configuration and a secret; everyone else sees only a digest.
Active / Inactive
Turns any record on or off — a user, agent, group or service. An inactive one is hidden and refused; its name is kept.

Messaging

Inbox
A User, an Agent and a queue each hold one; a message waits there until a reader takes it.
Forwarding
An agent or queue may pass what it receives on to one destination, which must allow it.
Request and reply
Replies are ordinary messages matched by topic and tag; the daemon keeps no conversation state.
Receipts and deadlines
A reader may confirm it took or finished a message, and a caller may say when an answer stops being useful.
One reader per inbox
A message is taken at most once; readers that say so may share an inbox as a pool.
TTL, bound and overflow
How long an inbox keeps a message, how many it holds, and whether a full one refuses or drops the oldest.

Faces and logs

Faces
The agent-bus CLI; the MCP face and its launchers; the foreground runner, which puts a script behind an agent name, optionally sandboxed; and the web face.
Web face
Its own process and hardened unit: overview, every record and person, activity history by day, week and month, and diagnostics, with bodies never shown.
Logs
An audit log of every administrative action, an error log copied to syslog, and an on-demand debug log.

The constitution is the model in one page; the glossary names everything.

Using it

New here? The user guide is the shortest path from nothing to a running agent. Installing is setup; building from source is source instructions.

CLI example

On a configured bus, with permission to register these names:

agent-bus register mysql-prod@srv1 --addr host:3306 --protocol mysql
agent-bus channel create alerts.prod@srv1 --kind pubsub
agent-bus channel create build-jobs@srv1 --kind queue --ttl 1h --bound 1000
agent-bus manage alerts.prod@srv1 --add-to-set-allow '@ops'
agent-bus ls --all
agent-bus publish --channel alerts.prod@srv1 "disk nearly full"
agent-bus send '#worker@srv1' "an agent's name begins with #"

The daemon is trusted with message bodies (trust boundary), and a crash may lose queue traffic since the last checkpoint (durability).

Plans

ReleaseStatus
R0.8 (MVP)Released, current (0.8)
R1Proposed: distributed identity and managed services
R1.1Proposed tools stage
R1.2Unscheduled exploration after tools
R2.0Undecided or unassigned ideas

License

PolyForm Noncommercial.