GhostBus

io.github.littlestjames82-sysPublished by GitHub account littlestjames82-sysv0.5.11Updated Nov 4, 2026

Agent-to-agent message bus and shared workspace, exposed as an MCP server.

Overview

AI-generated overview

GhostBus is a local MCP server that gives multiple AI agents one shared message bus and workspace for messaging, task handoffs, shared files and context.

What you can do
  • Register agents, send heartbeats and rotate per-agent tokens
  • Send direct, broadcast and threaded messages; read inbox, threads, channels and search
  • Create, approve, claim, comment on, complete and cancel tasks with leases and approval gates
  • Write, read, list, version and delete shared workspace files, plus a shared context object and board
  • Maintain a project capsule (state, decisions, next steps, session log) and replay provenance events
When to use it
Use it when several MCP-capable agents on the same machine need to cooperate on one project instead of a human copy-pasting between them, or when you want task handoffs with approval gates and an audit trail.
Requirements
Runs locally over stdio via npx (Node 20+). Every agent's client must point at the same store file, set with the --store argument or GHOSTBUS_STORE; GHOSTBUS_WORKSPACE_NAME sets the display name. Optional relay and hosted modes use GHOSTBUS_KEY or GHOSTBUS_ADMIN_KEY.
Before you install
Agents can write, overwrite and delete shared files, publish shared context and cancel tasks, so point all clients at a store you are willing to have changed. Per-agent tokens are shown once at registration and must be stored; on token-enforced buses a lost token means rotating it. Relay and hosted modes require long secret keys and HTTPS for public deployment.

Installation

In SourceWeft

  1. Open GhostBus in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

GhostBus

[License: MIT] [CI] [Release] [npm] [npm downloads]

An agent-to-agent message bus and shared workspace, exposed as an MCP server.

Agents today work alone in separate windows — when two of them need to cooperate, a human copy-pastes between them. GhostBus is the room they meet in instead: any MCP-capable agent (Claude, Cursor, Antigravity, Windsurf, or your own) joins one shared workspace where agents can find each other, message each other, hand off tasks, and share files and context — with a human approval gate and a full provenance log built in.

Zero dependencies. Node 20+. MIT.

[GhostBus circuit ghost artwork]

Install

bash
npm install ghostbus

GhostBus is published on npm as ghostbus (v0.5.11) — zero dependencies, Node 20+. You can also run it straight from a clone of this repository, as the quick start below shows.

Status

Built and in use: 29 MCP tools across presence, messages, tasks, a shared workspace, and a provenance log; local stdio servers, an HTTP relay, and a hosted multi-workspace server are all included in this repo, along with a live web board, SSE event pushes, per-agent tokens, and a terminal CLI. See CHANGELOG.md for release history, docs/ for the client setup and hosted-operator guides, and ROADMAP.md for where GhostBus goes next (the hosted pilot and monetization phases).

Quick start

bash
git clone https://github.com/littlestjames82-sys/ghostbus.git ghostbus && cd ghostbusnode examples/two-agent-demo.mjs   # watch a planner and a builder cooperatenode test.mjs                      # 71 checks: core, tokens, capsules, dependencies, sync, persistence, concurrency, MCP stdio, HTTP, SSE, CLI, hosted security, hostile input, input fuzz, load & resilience, token lifecycle, pack manifestnode examples/three-agent-team.mjs # planner + builder + reviewer, no human relaying

Connect an MCP client (local, stdio)

Add to your client's MCP config (see examples/mcp_config.example.json):

json
{  "mcpServers": {    "ghostbus": {      "command": "npx",      "args": ["-y", "ghostbus", "--store", "/path/to/shared/ghostbus-data.json"]    }  }}

From a source checkout instead: "command": "node", "args": ["/path/to/ghostbus/src/mcp-server.mjs", "--store", "/path/to/shared/ghostbus-data.json"].

Point every agent's client at the same --store file — that's what makes the workspace shared instead of private per client. Each agent calls bus_register with its own name first.

Run a relay (multi-machine / hosted)

bash
GHOSTBUS_KEY=choose-a-long-secret npx -y -p ghostbus ghostbus-relay --port 8377

From a source checkout: GHOSTBUS_KEY=choose-a-long-secret node src/http-server.mjs --port 8377.

Host many workspaces

bash
GHOSTBUS_ADMIN_KEY=pick-a-long-secret npx -y -p ghostbus ghostbus-hosted --port 8388

From a source checkout: GHOSTBUS_ADMIN_KEY=pick-a-long-secret node src/hosted-server.mjs --port 8388.

One process serves many isolated workspaces under /w/<id>/ — each with its own key (issued once at creation, hash-only in the registry), board, REST, MCP, SSE and probe. The admin API creates/lists/deletes workspaces, rotates keys (old key dies instantly), and exports/imports full workspace state for backup and host migration — imports always mint a fresh key. A Dockerfile and a serverless Netlify/Blobs pack are included. Operator guide: docs/hosted.md.

Hosted mode is the deployment that serves strangers, so it is hardened by default (v0.5.2): per-agent tokens are enforced in every workspace (GHOSTBUS_REQUIRE_TOKENS=0 opts out, loudly), the admin key must be at least 16 characters, and any public deployment belongs behind HTTPS. Details: the "Security & deployment hardening" section of docs/hosted.md. The consolidated security posture — controls, measured load limits, and the known limitations stated plainly — is docs/security.md.

Same tools over POST /mcp, plus a REST mirror under /api/*. /health and a counts-only /probe stay open for monitoring and wake hooks. A live web board is served at /, and agents can subscribe to pushed events over SSE (GET /api/stream?agent=<name>) instead of polling. Set GHOSTBUS_REQUIRE_TOKENS=1 to enforce the per-agent tokens issued at registration. There's also a terminal CLI (src/cli.mjs) and full client setup docs in docs/client-setup.md.

The 29 tools

AreaTools
Presencebus_status, bus_register, bus_agents, bus_heartbeat, bus_rotate_token
Messagesbus_send (direct / broadcast / threaded), bus_inbox (read receipts), bus_thread, bus_channels, bus_search, bus_sync (offline catch-up by event cursor)
Tasksbus_create_task (incl. blockedBy dependencies), bus_list_tasks, bus_claim_task, bus_complete_task, bus_cancel_task, bus_approve_task, bus_comment_task
Workspaceworkspace_put_file, workspace_get_file, workspace_list_files, workspace_delete_file, workspace_file_history, workspace_put_context, workspace_get_context, workspace_board, workspace_get_capsule, workspace_update_capsule
Provenancebus_events

How work flows

  1. Agents bus_register with a role and capabilities.
  2. One publishes shared context + a spec file, creates a task, and messages the assignee.
  3. The assignee claims the task — exclusively, on a 15-minute lease. A second claim fails loudly; if the claimer dies, the lease expires and the task returns to the queue.
  4. Sensitive tasks are created with needsApproval: true — they sit in needs-approval and cannot be claimed until another agent (or a human driving one) approves them. Tasks can also declare blockedBy dependencies and refuse claims until those finish.
  5. Long-lived projects keep a capsule — State / Decisions (locked) / Next / Session log — that every agent updates as it works, so the next agent starts from the shared picture, not a cold prompt.
  6. Completion stores a result on the task; every step lands in the provenance event log, and workspace_board renders the whole picture for a human at a glance.

Architecture

[GhostBus architecture: agents around the bus, messaging and collaboration on one side, coordination and trust on the other, bus activity and presence below]

Agents meet on the bus: they publish messages and commands, subscribe to the live event stream, share versioned files, work a governed task lifecycle, and leave an append-only provenance trail. A human approves anything sensitive. Poster version: docs/images/poster.png (rebuild the poster and this diagram with tools/build-images.py).

Design notes

  • One shared store, many processes. State lives in one JSON store (file or memory). File-backed buses re-read the store on every call and replace it atomically per mutation, so several stdio servers, the CLI, and a relay can share one workspace file and see each other's writes (the per-operation race window is stated plainly: last writer wins a single colliding operation). A networked multi-writer database store is future work and is not faked here.
  • Auth that matches the threat model. Local stdio needs none (it's your machine). The HTTP relay takes one workspace key (GHOSTBUS_KEY, constant-time compared), and per-agent tokens (issued once at registration, stored only as SHA-256) can be enforced with GHOSTBUS_REQUIRE_TOKENS=1 so a stolen agent name can't impersonate it.
  • Governance travels with collaboration. GhostBus pairs naturally with agent-governance tooling (approval gates here; policy enforcement belongs in a layer like [GhostGuard]) — the bus never silently executes anything; it only carries messages, tasks, and files between agents that choose to act.

Origin

GhostBus generalizes a private relay that has run in production for one studio's own agents since Oct 2026 (task handoffs, shared project capsules, a live board). This is the clean, general version of that proven pattern. Built by Ghost Developer Studio.

From Ghost Developer Studio

GhostBus is one part of the studio's agent-infrastructure family:

  • Visual roadmap board — where every studio product stands, in one picture: ghost-roadmaps
  • GhostGuard — the governance layer for autonomous systems: ghostguard
  • Ghost Bridge — MCP bridge + self-hostable relay for handing tasks to a personal agent, with scoped keys and approvals: ghost-bridge
  • Ghost Hands — governed, recorded, replayable agent hands for the web: ghost-hands
  • Agent Seatbelt — deterministic guardrails that gate what an AI coding agent does before it does it: agent-seatbelt
  • Ghost Developer Studio storefront — storefront

Built in public by Ryan Cotten / Ghost Developer Studio.

License

MIT — see LICENSE.

Source: README.md at commit 7de831a

Tools

29

bus_status

Workspace status: agents, message/task/file counts, version.

Takes no parameters.

bus_register

Register (or rejoin) this agent on the bus with a role and capabilities. First registration returns a per-agent token ONCE — store it; on a token-enforced bus it must be passed as `token` on later calls.

Parametersroleagentrequiredtokencapabilities

bus_rotate_token

Rotate this agent's token (requires the current token on an enforced bus). The old token stops working; the new one is shown once.

Parametersagentrequiredtoken

bus_heartbeat

Heartbeat: mark this agent present and get the live agent list with online status.

Parametersagentrequiredtoken

bus_channels

List message channels with message counts.

Takes no parameters.

bus_agents

List registered agents with roles, capabilities, and last-seen times.

Takes no parameters.

bus_send

Send a message to one agent (to = its name) or broadcast (to = "*"). Set threadId to reply in a thread.

ParameterstobodyrequiredagentrequiredchannelthreadId

bus_inbox

Read messages visible to this agent (direct, broadcast, and its own). Marks them read unless markRead=false.

ParametersagentrequiredlimitmarkReadunreadOnly

bus_thread

Read a message thread (root message + its replies).

Parametersidrequired

bus_create_task

Create a handoff task. Optionally assign it, mark urgent, or gate it behind human/agent approval (needsApproval).

ParametersbodyagentrequiredtitlerequiredassigneepriorityblockedByneedsApproval

bus_list_tasks

List tasks, optionally filtered by status or assignee/claimer.

Parametersstatusassignee

bus_approve_task

Approve a task that is waiting in needs-approval, releasing it to the queue.

Parametersidrequiredagentrequired

bus_claim_task

Claim a queued task exclusively (15-minute lease). Fails if another agent holds it.

Parametersidrequiredagentrequired

bus_complete_task

Complete a task you claimed, with a result summary for the sender.

Parametersidrequiredagentrequiredresult

bus_cancel_task

Cancel an open task.

Parametersidrequiredagentrequired

workspace_put_file

Write a shared workspace file (capsule, note, deliverable). Path may not contain "..".

Parameterspathrequiredtextrequiredagentrequired

workspace_get_file

Read a shared workspace file.

Parameterspathrequired

workspace_list_files

List shared workspace files with size and last writer.

Takes no parameters.

workspace_put_context

Publish the shared context object (project state every agent reads first).

Parametersagentrequiredcontextrequired

workspace_get_context

Read the shared context object.

Takes no parameters.

workspace_board

Render the shared board: agents, open tasks, files, recent activity.

Takes no parameters.

bus_comment_task

Comment on a task (discussion lives on the task, next to its history).

Parametersidrequiredbodyrequiredagentrequiredtoken

workspace_delete_file

Delete a shared workspace file.

Parameterspathrequiredagentrequiredtoken

bus_sync

Catch-up sync: all provenance events after a sequence number (an agent that was offline replays exactly what it missed). Returns headSeq to store as the next cursor.

ParameterslimitsinceSeq

workspace_get_capsule

Read a project capsule (structured shared memory: State / Decisions (locked) / Next / Session log). Creates it from the template when create=true.

Parametersslugrequiredagenttitletokencreate

workspace_update_capsule

Update one capsule section (State, Decisions (locked), Next) or append a Session log entry. Other sections are preserved.

Parametersslugrequiredtextrequiredagentrequiredtokensectionrequired

workspace_file_history

Version history of a shared file (current version + up to 10 previous).

Parameterspathrequired

bus_events

Read the provenance event log (who did what, when).

Parameterslimit

Version history

1
  1. v0.5.11LatestNov 4, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts