GhostBus

io.github.littlestjames82-sys由 GitHub 帳號 littlestjames82-sys 發布v0.5.11更新於 Nov 4, 2026

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

概覽

AI 產生的概覽

GhostBus 是一個本機 MCP 伺服器,為多個 AI 代理提供共用的訊息匯流排與工作區,用來互傳訊息、交接任務、共用檔案與上下文。

可以做什麼
  • 註冊代理、送出心跳並輪替每個代理的權杖
  • 傳送單獨、廣播與討論串訊息,讀取收件匣、討論串、頻道並搜尋
  • 建立、核准、認領、留言、完成與取消任務,支援租約與核准關卡
  • 寫入、讀取、列出、查看版本與刪除共用工作區檔案,並維護共用上下文物件與看板
  • 維護專案膠囊(狀態、決策、下一步、工作階段日誌)並回放溯源事件
適用情境
當同一台機器上的多個支援 MCP 的代理需要協作同一個專案、而不想靠人工在視窗間複製貼上時適用;也適合需要附核准關卡與稽核紀錄的任務交接情境。
執行需求
透過 npx 以 stdio 在本機執行,需要 Node 20 以上。所有代理的用戶端必須指向同一個儲存檔案,以 --store 參數或 GHOSTBUS_STORE 指定;GHOSTBUS_WORKSPACE_NAME 設定顯示名稱。選用的中繼與託管模式使用 GHOSTBUS_KEY 或 GHOSTBUS_ADMIN_KEY。
安裝前請注意
代理可以寫入、覆寫與刪除共用檔案、發布共用上下文並取消任務,因此請讓所有用戶端指向你願意被改動的儲存。每個代理的權杖在註冊時只顯示一次,必須妥善保存;在強制權杖的匯流排上遺失權杖只能輪替。中繼與託管模式需要夠長的密鑰,對外部署必須使用 HTTPS。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 GhostBus,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

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.

來源:README.md,提交 7de831a

工具

29

bus_status

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

無需輸入參數。

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.

輸入參數roleagent必填tokencapabilities

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.

輸入參數agent必填token

bus_heartbeat

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

輸入參數agent必填token

bus_channels

List message channels with message counts.

無需輸入參數。

bus_agents

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

無需輸入參數。

bus_send

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

輸入參數tobody必填agent必填channelthreadId

bus_inbox

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

輸入參數agent必填limitmarkReadunreadOnly

bus_thread

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

輸入參數id必填

bus_create_task

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

輸入參數bodyagent必填title必填assigneepriorityblockedByneedsApproval

bus_list_tasks

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

輸入參數statusassignee

bus_approve_task

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

輸入參數id必填agent必填

bus_claim_task

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

輸入參數id必填agent必填

bus_complete_task

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

輸入參數id必填agent必填result

bus_cancel_task

Cancel an open task.

輸入參數id必填agent必填

workspace_put_file

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

輸入參數path必填text必填agent必填

workspace_get_file

Read a shared workspace file.

輸入參數path必填

workspace_list_files

List shared workspace files with size and last writer.

無需輸入參數。

workspace_put_context

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

輸入參數agent必填context必填

workspace_get_context

Read the shared context object.

無需輸入參數。

workspace_board

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

無需輸入參數。

bus_comment_task

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

輸入參數id必填body必填agent必填token

workspace_delete_file

Delete a shared workspace file.

輸入參數path必填agent必填token

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.

輸入參數limitsinceSeq

workspace_get_capsule

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

輸入參數slug必填agenttitletokencreate

workspace_update_capsule

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

輸入參數slug必填text必填agent必填tokensection必填

workspace_file_history

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

輸入參數path必填

bus_events

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

輸入參數limit

版本歷史

1
  1. v0.5.11最新Nov 4, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分