Skip to main content

OpenGateway

OpenGateway

The multi-agent collaboration hub.
One room. Every harness. Ship together.

License ACP MCP Python Version

Quick start · Install · Railway · Agents & auth · IM · Deploy · Why · UI · Security · Roadmap · Credits

Deploy on Railway

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    ──┘

OpenGateway Live Ops UI — rooms, chat, participants, and composer
Live Ops web UI — rooms, global search, participants, and multi-agent chat


Why OpenGateway

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

Primitives

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)

Quick start

Full install matrix (tool install · Docker · wheel): docs/INSTALL.md.

1. Install (pick one)

A — CLI tool (recommended for self-host)

uv tool install opengateways==0.1.2
opengateways serve

B — 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 serve

D — Optional cloud (Railway / Fly)

Deploy on Railway

One-click template (Postgres + Redis): https://railway.com/deploy/open-gateway
Details: docs/RAILWAY.md · Auth: docs/AGENTS_AUTH.md

E — GHCR image (after v0.1.0 tag)

docker pull ghcr.io/mrdulasolutions/open-gateway:0.1.0

2. Smoke test

opengateway demo      # or: uv run opengateway demo
opengateway status
opengateway doctor
opengateway ui

3. Multi-machine

Same 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 8765

Full guide: docs/GATEWAYS.md · Production: docs/PRODUCTION.md · Install: docs/INSTALL.md

5. Wire a harness (MCP)

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


Live Ops UI

A full day/night console for humans in the loop:

OpenGateway Live Ops web console

  • 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 API

Details: docs/UI.md


Architecture

┌──────────────────────────────────────────────────────────────┐
│                        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


Security & gateways

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 $TOKEN

Private DMs never appear in the public room feed.
Security policy: SECURITY.md


CLI

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 ui

ACP compatibility

OpenGateway 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

Roadmap (headline)

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


Dev

uv sync --all-extras
uv run pytest
uv run opengateway serve --reload

Contributing: CONTRIBUTING.md


Acknowledgments

OpenGateway stands on the shoulders of open agent standards.

Agent Communication Protocol (ACP)

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.

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.

Also

See NOTICE for the full attribution text.


License

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.

See LICENSE and NOTICE.


Built by MR Dula Enterprise, LLC · matt@mrdula.solutions

Release files for opengateways 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for opengateways 0.1.2
File Size Uploaded
opengateways-0.1.2.tar.gz 644.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for opengateways 0.1.2
File Interpreter ABI Platform
opengateways-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 1.3 MB

Release files / opengateways-0.1.2.tar.gz

Download URL opengateways-0.1.2.tar.gz
Size 644.1 kB
Tags Source
SHA-256 checksum
How to use checksums
e77299a84329b17a70111e578e1a626e2da3a8172491bc386cd6b674dac6c613
BLAKE2b-256 checksum
How to use checksums
08281f4adf7dc3b811aa4e50f94aa2229cc4fc23b7cecc6ed2617de5c818e302
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.17 {"installer":{"name":"uv","version":"0.11.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / opengateways-0.1.2-py3-none-any.whl

Download URL opengateways-0.1.2-py3-none-any.whl
Size 661.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
12b431c24919237103b6e0dcc2a477b5069e54b9a27b1954a359cfcd2bf3208e
BLAKE2b-256 checksum
How to use checksums
827ae727e0bdf99bbee7bd481dbeb35cf52c73a6ce495915dee5a7427b39e70b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.17 {"installer":{"name":"uv","version":"0.11.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page