Multi-agent coordination for OpenCode. Lets multiple AI agents in separate OpenCode sessions talk to each other.
Warning: This enables autonomous agent-to-agent communication which triggers LLM API calls. Use at your own risk. Consider enabling rate limiting to control costs.
841BD6D3-4257-4FFA-9194-0814974B5630-preview2.mp4
- The daemon starts an OpenCode hub server (
opencode serve --port 4096) and discovers sessions by polling OpenCode's shared SQLite database - A coordinator session facilitates introductions between new agents, then steps back
- Agents communicate by writing JSON files to
~/.agent-hub/messages/via the agent-hub-mcp tools - The daemon watches for new message files, looks up the target agent's session, and injects the message via
prompt_async— agents don't poll, they get woken up
- Injected messages not visible in TUI — agent-to-agent messages work but users can't see them in the conversation. Upstream issue: opencode#8564. Use
agent-hub-watchto monitor. - TUI spinner after response — the TUI may briefly show "thinking" after an agent finishes responding to an injection. Visual only, no extra token consumption.
- Orientation may trigger security heuristics — some models (particularly Claude) may flag orientation messages as prompt injections. The agent still has MCP tools and can collaborate, just without orientation context.
agent-hub-mcp must be configured in OpenCode. The daemon will refuse to start without it.
Find your OpenCode config location with opencode debug paths, then add to opencode.json:
{
"mcp": {
"agent-hub": {
"type": "local",
"command": ["npx", "-y", "agent-hub-mcp@latest"],
"enabled": true
}
}
}Verify with opencode mcp list (should show agent-hub connected).
git clone https://github.com/xnoto/opencode-agent-hub
cd opencode-agent-hub
# Terminal 1: start the daemon
uv run agent-hub-daemon
# Terminal 2: monitor activity
uv run agent-hub-watchbrew install xnoto/opencode-agent-hub/opencode-agent-hubDebian / Ubuntu:
curl -fsSL https://xnoto.github.io/opencode-agent-hub/KEY.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/xnoto.gpg
echo "deb [signed-by=/etc/apt/keyrings/xnoto.gpg] https://xnoto.github.io/opencode-agent-hub/apt ./" | sudo tee /etc/apt/sources.list.d/xnoto.list
sudo apt update && sudo apt install opencode-agent-hubFedora / RHEL:
sudo curl -o /etc/yum.repos.d/xnoto.repo https://xnoto.github.io/opencode-agent-hub/xnoto.repo
sudo dnf install opencode-agent-hubArch Linux (AUR):
yay -S opencode-agent-hubSee GitHub Releases for direct .deb/.rpm downloads.
uv tool install opencode-agent-hub
# or
pipx install opencode-agent-hubgit clone https://github.com/xnoto/opencode-agent-hub
cd opencode-agent-hub
uv syncbrew services start opencode-agent-hub
tail -f ~/Library/Logs/agent-hub-daemon.log
brew services stop opencode-agent-hubagent-hub-daemon --install-service # install + start
journalctl --user -u agent-hub-daemon -f
systemctl --user stop agent-hub-daemon
agent-hub-daemon --uninstall-service # removeIf installed via RPM/DEB, a system-wide service file is included — enable with systemctl --user enable --now agent-hub-daemon.
Config file: ~/.config/agent-hub-daemon/config.json (all fields optional). Environment variables override config file values.
{
"opencode_port": 4096,
"log_level": "INFO",
"rate_limit": {
"enabled": false,
"max_messages": 10,
"window_seconds": 300,
"cooldown_seconds": 0
},
"coordinator": {
"enabled": true,
"directory": "~/.agent-hub/coordinator",
"agents_md": ""
},
"gc": { "message_ttl_seconds": 3600, "agent_stale_seconds": 3600, "interval_seconds": 60 },
"session": { "poll_seconds": 5, "cache_ttl": 10 },
"injection": { "workers": 4, "retries": 3, "timeout": 5 },
"metrics_interval": 30
}| Variable | Default | Description |
|---|---|---|
OPENCODE_PORT |
4096 |
Hub server port |
AGENT_HUB_DAEMON_LOG_LEVEL |
INFO |
Log level |
AGENT_HUB_MESSAGE_TTL |
3600 |
Message TTL (seconds) |
AGENT_HUB_AGENT_STALE |
3600 |
Agent stale threshold (seconds) |
AGENT_HUB_GC_INTERVAL |
60 |
GC interval (seconds) |
AGENT_HUB_SESSION_POLL |
5 |
Session poll interval (seconds) |
AGENT_HUB_SESSION_CACHE_TTL |
10 |
Session cache TTL (seconds) |
AGENT_HUB_INJECTION_WORKERS |
4 |
Injection worker threads |
AGENT_HUB_INJECTION_RETRIES |
3 |
Injection retry attempts |
AGENT_HUB_INJECTION_TIMEOUT |
5 |
Injection timeout (seconds) |
AGENT_HUB_METRICS_INTERVAL |
30 |
Metrics write interval (seconds) |
| Variable | Default | Description |
|---|---|---|
AGENT_HUB_RATE_LIMIT |
false |
Enable rate limiting |
AGENT_HUB_RATE_LIMIT_MAX |
10 |
Max messages per agent per window |
AGENT_HUB_RATE_LIMIT_WINDOW |
300 |
Window size (seconds) |
AGENT_HUB_RATE_LIMIT_COOLDOWN |
0 |
Min seconds between messages |
The coordinator is a dedicated OpenCode session that introduces agents to each other. It starts non-blocking and uses the same message pipeline as any other agent.
| Variable | Default | Description |
|---|---|---|
AGENT_HUB_COORDINATOR |
true |
Enable coordinator |
AGENT_HUB_COORDINATOR_DIR |
~/.agent-hub/coordinator |
Coordinator working directory |
AGENT_HUB_COORDINATOR_PRESERVE_LOCAL_AGENTS_MD |
false |
Keep existing AGENTS.md on restart |
AGENT_HUB_COORDINATOR_READY_TIMEOUT |
20 |
Bootstrap ready timeout (seconds) |
AGENT_HUB_COORDINATOR_STRICT_READY |
false |
Require exact READY acknowledgment |
AGENT_HUB_COORDINATOR_BOOTSTRAP_REQUIRED |
false |
Fail startup if bootstrap times out |
AGENT_HUB_COORDINATOR_AGENTS_MD |
(auto-detect) | Custom AGENTS.md path |
The coordinator model is set in ~/.agent-hub/coordinator/opencode.json (default: opencode/minimax-m2.5-free).
Custom coordinator instructions are searched in order:
AGENT_HUB_COORDINATOR_AGENTS_MDenv var~/.config/agent-hub-daemon/AGENTS.md(orCOORDINATOR.md)- Package template (
contrib/coordinator/AGENTS.md) /usr/local/share/opencode-agent-hub/coordinator/AGENTS.md- Auto-generated minimal default
Messages are JSON files in ~/.agent-hub/messages/:
{
"from": "agent-id",
"to": "target-agent-id",
"type": "task|question|context|completion|error",
"content": "Message content",
"priority": "normal|urgent|high|low",
"threadId": "auto-generated-or-provided",
"timestamp": 1234567890000
}~/.agent-hub/
├── agents/ # Registered agent files
├── messages/ # Pending messages
│ └── archive/ # Processed messages
├── threads/ # Conversation threads
├── metrics.prom # Prometheus metrics
├── oriented_sessions.json # Orientation cache
└── session_agents.json # Session-to-agent mapping
~/.config/agent-hub-daemon/
└── config.json # Optional config
uv sync --all-extras
uv run ruff check .
uv run ruff format .
uv run mypy src/
uv run pytestSee CONTRIBUTING.md for integration testing and architecture details.
MIT - See LICENSE for details.