bus_status
Workspace status: agents, message/task/file counts, version.
Takes no parameters.

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.
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.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Follow the launch instructions in the repository.
[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]
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.
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).
Add to your client's MCP config (see examples/mcp_config.example.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.
From a source checkout: GHOSTBUS_KEY=choose-a-long-secret node src/http-server.mjs --port 8377.
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.
bus_register with a role and capabilities.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.workspace_board renders the whole picture for a human at a glance.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).
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.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.
GhostBus is one part of the studio's agent-infrastructure family:
Built in public by Ryan Cotten / Ghost Developer Studio.
MIT — see LICENSE.
Source: README.md at commit 7de831a
Workspace status: agents, message/task/file counts, version.
Takes no parameters.
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.
roleagentrequiredtokencapabilitiesRotate this agent's token (requires the current token on an enforced bus). The old token stops working; the new one is shown once.
agentrequiredtokenHeartbeat: mark this agent present and get the live agent list with online status.
agentrequiredtokenSearch messages, tasks, and shared files by text.
limitqueryrequiredList message channels with message counts.
Takes no parameters.
List registered agents with roles, capabilities, and last-seen times.
Takes no parameters.
Send a message to one agent (to = its name) or broadcast (to = "*"). Set threadId to reply in a thread.
tobodyrequiredagentrequiredchannelthreadIdRead messages visible to this agent (direct, broadcast, and its own). Marks them read unless markRead=false.
agentrequiredlimitmarkReadunreadOnlyRead a message thread (root message + its replies).
idrequiredCreate a handoff task. Optionally assign it, mark urgent, or gate it behind human/agent approval (needsApproval).
bodyagentrequiredtitlerequiredassigneepriorityblockedByneedsApprovalList tasks, optionally filtered by status or assignee/claimer.
statusassigneeApprove a task that is waiting in needs-approval, releasing it to the queue.
idrequiredagentrequiredClaim a queued task exclusively (15-minute lease). Fails if another agent holds it.
idrequiredagentrequiredComplete a task you claimed, with a result summary for the sender.
idrequiredagentrequiredresultCancel an open task.
idrequiredagentrequiredWrite a shared workspace file (capsule, note, deliverable). Path may not contain "..".
pathrequiredtextrequiredagentrequiredRead a shared workspace file.
pathrequiredList shared workspace files with size and last writer.
Takes no parameters.
Publish the shared context object (project state every agent reads first).
agentrequiredcontextrequiredRead the shared context object.
Takes no parameters.
Render the shared board: agents, open tasks, files, recent activity.
Takes no parameters.
Comment on a task (discussion lives on the task, next to its history).
idrequiredbodyrequiredagentrequiredtokenDelete a shared workspace file.
pathrequiredagentrequiredtokenCatch-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.
limitsinceSeqRead a project capsule (structured shared memory: State / Decisions (locked) / Next / Session log). Creates it from the template when create=true.
slugrequiredagenttitletokencreateUpdate one capsule section (State, Decisions (locked), Next) or append a Session log entry. Other sections are preserved.
slugrequiredtextrequiredagentrequiredtokensectionrequiredVersion history of a shared file (current version + up to 10 previous).
pathrequiredRead the provenance event log (who did what, when).
limit90% 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.
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
npm install ghostbusgit 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{ "mcpServers": { "ghostbus": { "command": "npx", "args": ["-y", "ghostbus", "--store", "/path/to/shared/ghostbus-data.json"] } }}GHOSTBUS_KEY=choose-a-long-secret npx -y -p ghostbus ghostbus-relay --port 8377GHOSTBUS_ADMIN_KEY=pick-a-long-secret npx -y -p ghostbus ghostbus-hosted --port 8388