The project's README from github.com/Hoylon/peerbridge-mcp. As one markdown file: README.md.
A local-first, auditable multi-Agent control room for coding, review, evidence, and private remote work.
Run Codex, Claude Code, Grok, Kimi, provider APIs, OpenAI-compatible endpoints, and local models as one governed engineering team across desktop and phone without flattening their native capabilities.
Download Windows Alpha · Quickstart · Features · Technical showcase · Client setup
Modern Workbench with synthetic preview data. No private conversation or credential is included.
PeerBridgeControlRoom-0.1.0a6-windows-x64-portable.zip from the
Alpha 6 release.SHA256SUMS.txt on the release page.Launch PeerBridge.cmd.The portable build does not install a service, modify an existing Python environment, or
include provider credentials. Local workspace data stays under
%LOCALAPPDATA%\PeerBridge\workspace. Prefer source installation? Continue to
Install from source.
The same local coordination core in the original dense Pixel interface.
PeerBridge is more than a collection of chat tabs. Its provider-native adapter layer keeps Codex JSON-RPC, Claude Code stream-json, Grok/Kimi ACP, provider APIs, and local runtimes as separate capability contracts. Every Agent is bound to a stable identity, selected model, permission policy, room context, task, and evidence trail.
Use it for parallel implementation and review, bounded technical debate, task ownership, approved shared memory, mutual scoring, cross-agent audits, and human-controlled release work. PeerBridge runs locally on SQLite, keeps provider credentials out of chat and project history, and preserves a SHA-linked record of messages, decisions, evidence, scores, permissions, and handoffs.
Human or Agent messages can wake the room, collaboration stops on consensus, blockers, stagnation, or explicit limits, and the operator can intervene at any time.
| What maintainers get | PeerBridge behavior |
|---|---|
| Provider-native adapter layer | Codex, Claude Code, Grok, Kimi, provider APIs, compatible endpoints, and local runtimes keep separate audited identities and capability boundaries. |
| Work instead of reply cascades | Parallel implementation, review, discussion, and release workflows stop on consensus, blockers, stagnation, or explicit limits. |
| Governed write access | Permission cards, approved isolated Git worktrees, source-state checks, diffs, and proof records stay human-controlled. |
| Durable project context | Selected history imports, room memory, task briefings, and handoffs are source-bound instead of silently merged. |
| Reviewable decisions | Agent activity, answers, evidence, mutual scores, audits, token usage, and stale-proof warnings remain visible. |
| Local ownership | SQLite data and credentials stay on the operator's machine; browser remote control remains private, while the allow-listed Tailcat companion is visible and enabled by default. |
flowchart LR
A["Provider-native adapters"] --> C["Per-Agent capability union"]
C --> P["Capability-aware approval broker"]
P --> W["Governed worktree and writer lease"]
W --> R["Parallel review and bounded collaboration"]
R --> E["SHA-linked evidence and Proof Bundle"]
H["Human operator"] --> P
H --> R
Run the provider-free maintainer showcase with one command:
python examples\demo_workflow.py --workspace demo-workspace --scope demo
Its public receipt proves that an overlapping second writer was rejected, two independent reviewers satisfied quorum, completion rehashed the synthetic artifact, and the audit chain verified with zero writes. It contains no provider credential or lease capability. See the claim-to-test evidence map.
Status: alpha. The coordination and audit core is tested, but the public API and database schema may change before 1.0.
Operational continuity and commercialization are explicit design boundaries. See memory and long-running operations and the open-core boundary. Tailscale Serve remains the private browser transport; Tailcat CLI connectivity is visible and enabled by default but remains independently allow-listed. Roadmap entries are not capability claims.
Running two coding agents against one repository creates predictable failure modes:
PeerBridge addresses those coordination failures without making either agent the boss. One task has one writer lease, peers can review each other, and a human can intervene.
flowchart LR
H["Human operator"] --> M["Local control room"]
C["Codex / Claude Code"] --> S1["PeerBridge stdio process"]
A["Grok / Kimi / DeepSeek / Gemini / local Agents"] --> S2["PeerBridge stdio process"]
M --> S3["PeerBridge stdio process"]
R["Private mobile UI"] -->|"Tailnet HTTPS"| T["Tailscale Serve"]
T -->|"loopback only"| S4["Human MCP message gateway"]
S1 --> DB[("Shared SQLite store")]
S2 --> DB
S3 --> DB
S4 --> DB
DB --> L["SHA-linked audit events"]
DB --> W["Mailbox, leases, reviews, proofs"]
Each MCP client launches its own stdio server process with a distinct --agent-id.
Those processes coordinate through one project-local .peerbridge/peerbridge.sqlite3
database. SQLite WAL mode and BEGIN IMMEDIATE transactions serialize state changes.
PeerBridge is one local desktop product, not a hosted web service. Both desktop surfaces use the same local Python, SQLite, and MCP core:
A fresh workspace shows a local two-preview chooser before the Control Room opens. The
selection is stored in .peerbridge/ui-preferences.json; later launches open that surface
directly until the operator changes Appearance and restarts.
grok sessions list, and Claude/Kimi use their documented local session records. The UI
lists bounded metadata first, selects nothing by default, and reads only conversations the
operator checks; JSON/JSONL file import remains available for every provider.solo_allowed, two_party_required, presence_aware, and N-peer quorum policies.--legacy-pixel compatibility surface.feedback extra (cryptography).2026-07-28 discovery model.Download PeerBridgeControlRoom-0.1.0a6-windows-x64-portable.zip from the GitHub
Alpha release, extract the complete ZIP to a writable folder, and double-click
Launch PeerBridge.cmd. The portable app creates its local workspace under
%LOCALAPPDATA%\PeerBridge\workspace; it does not include provider credentials or
private runtime data.
This Alpha executable is not code-signed, so Windows SmartScreen may ask you to review the publisher. Verify the release SHA-256 before opening it. PeerBridge does not provide an auto-installer or modify an existing Python environment.
Requirements: Python 3.11 or newer.
git clone https://github.com/hoylon/peerbridge-mcp.git
cd peerbridge-mcp
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -e ".[dev]"
peerbridge init --project-root . --scope demo
peerbridge doctor --project-root . --scope demo
peerbridge monitor --project-root . --scope demo
Open 01 Multi-Agent Console to view current room Agents and explicitly authorized desktop or terminal work without choosing a folder. To launch a new managed CLI, choose an installed Codex, Claude Code, Kimi Code, or Grok CLI and its working directory there. Kimi and Grok use the reviewed deny-all ACPX profile. Set every participant role on 02 Chat, where Equal participant is the default. Managed input is sent through stdin and is not persisted by the Console. The page shows only output and events PeerBridge captured; an unrelated terminal opened elsewhere is not retroactively readable. Use 09 Trust & Task Verification for templates, durable operations, schedules, permission decisions, isolated worktrees, the Trust Timeline, and Proof Bundle export or verification.
Run a server manually:
# In Workbench > Connect, authorize codex-main once and copy the decision ID.
$decision = "<permission-decision-id>"
$identity = peerbridge identity --project-root . --scope demo issue --agent-id codex-main `
--profile collaborator --permission-decision-id $decision | ConvertFrom-Json
peerbridge serve --project-root . --agent-id codex-main --scope demo `
--identity-capability $identity.identity_capability
The capability is bound to the exact project, scope, Agent ID, and fixed collaborator tool profile. Its secret contents are never printed. Reserved operator identities and revocation remain available only through the authenticated local Control Room.
When one client can select several provider models, record the exact route without exposing credentials:
$apiDecision = "<permission-decision-id-from-workbench>"
$apiIdentity = peerbridge identity --project-root . --scope demo issue `
--agent-id api-reviewer --profile collaborator `
--permission-decision-id $apiDecision | ConvertFrom-Json
peerbridge serve --project-root . --agent-id api-reviewer --scope demo `
--identity-capability $apiIdentity.identity_capability `
--client-name api-coding-client `
--provider-id provider-api:grok `
--model-id grok
agent-id identifies the logical worker. client-name identifies the MCP-capable
application or adapter. provider-id is an operator-supplied non-secret route label,
and model-id identifies the selected model. Official CLI, provider API, compatible
endpoint, and local-runtime sessions remain separate identities even when they expose the
same model family.
Direct OpenAI-compatible endpoints do not require CC Switch. On the Connect page,
save the API base URL and API key into Windows Credential Manager, discover the provider's
advertised model IDs, and bind a route to one logical Agent. The same page reads CC Switch
providers and models through its public CLI and changes the active provider only after an
explicit confirmation. The API key never enters SQLite or an MCP
message. Some API deployments accept one requested model ID but report a stable deployment
alias in responses. In that case set EXPECTED RESPONSE MODEL explicitly. For
example, a route may request grok-4.6 while requiring the response to report
grok-4.6-build. An unconfigured or changing alias fails closed rather than being
silently treated as the requested model.
The server speaks newline-delimited JSON-RPC over stdin/stdout. Usually an MCP client starts it for you, so a manually started server waiting for input is expected behavior.
Use an absolute Python executable path so each client launches the same installed environment and shared database.
codex mcp add peerbridge -- C:\path\to\peerbridge-mcp\.venv\Scripts\python.exe `
-m peerbridge_mcp serve --project-root C:\path\to\your-project `
--agent-id codex-main --scope your-project
claude mcp add --scope project --transport stdio peerbridge -- `
C:\path\to\peerbridge-mcp\.venv\Scripts\python.exe `
-m peerbridge_mcp serve --project-root C:\path\to\your-project `
--agent-id claude-code --scope your-project
Use different MCP server entry names when both clients write a shared project config,
for example peerbridge-codex and peerbridge-claude. See
client configuration for TOML, JSON, Linux, and macOS examples.
The same stdio server can be registered in Kimi Code CLI; other providers may require a
separate API-backed runner. See agent integration boundaries.
PeerBridge reports the effective capability of each bound room Seat instead of inferring it from the Agent name:
MCP NATIVE: a real MCP-capable client or terminal owns the session and can call the
PeerBridge server directly.MCP TOOL: an API-backed model is inside PeerBridge's bounded, allowlisted MCP tool
loop; this is tool-capable but is not represented as a native client session.INFERENCE: the route can return a bounded model answer but cannot call PeerBridge
tools. Web chat tabs and one-shot CLI fallbacks belong here.Any other client or terminal that implements MCP can