Skip to main content

Multi-agent coordination daemon and tools for OpenCode

Project description

opencode-agent-hub

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.

Demo

https://github.com/user-attachments/assets/b591f1d2-01d7-4408-bf60-67eb7a8fbf0c

How It Works

  • 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

Known Limitations

  • 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-watch to 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.

Prerequisites

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).

Quickstart

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-watch

Installation

Homebrew (macOS)

brew install xnoto/opencode-agent-hub/opencode-agent-hub

Linux Packages

Debian / 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-hub

Fedora / RHEL:

sudo curl -o /etc/yum.repos.d/xnoto.repo https://xnoto.github.io/opencode-agent-hub/xnoto.repo
sudo dnf install opencode-agent-hub

Arch Linux (AUR):

yay -S opencode-agent-hub

See GitHub Releases for direct .deb/.rpm downloads.

uv / pipx (PyPI)

uv tool install opencode-agent-hub
# or
pipx install opencode-agent-hub

From source

git clone https://github.com/xnoto/opencode-agent-hub
cd opencode-agent-hub
uv sync

Running as a Service

macOS (Homebrew)

brew services start opencode-agent-hub
tail -f ~/Library/Logs/agent-hub-daemon.log
brew services stop opencode-agent-hub

Linux (systemd)

agent-hub-daemon --install-service     # install + start
journalctl --user -u agent-hub-daemon -f
systemctl --user stop agent-hub-daemon
agent-hub-daemon --uninstall-service   # remove

If installed via RPM/DEB, a system-wide service file is included — enable with systemctl --user enable --now agent-hub-daemon.

Configuration

Config file: ~/.config/agent-hub-daemon/config.json (all fields optional). Environment variables override config file values.

{
  "hub": {
    "port": 4096,
    "model": "opencode/minimax-m2.5-free"
  },
  "log_level": "INFO",
  "rate_limit": {
    "enabled": false,
    "max_messages_per_window": 100,
    "window_seconds": 3600,
    "cooldown_seconds": 5
  },
  "coordinator": {
    "enabled": true,
    "directory": "~/.agent-hub/coordinator",
    "agents_md": ""
  },
  "agent": { "stale_seconds": 600 },
  "message": { "ttl_seconds": 3600 },
  "poll": { "session_seconds": 5, "gc_seconds": 60, "metrics_seconds": 60 },
  "cache": { "session_ttl_seconds": 5 },
  "injection": { "workers": 3, "retries": 3, "timeout_seconds": 30 },
  "orientation": { "retry_delay_seconds": 30, "retry_max": 5 }
}

Environment Variables

Variable Default Description
OPENCODE_PORT 4096 Hub server port
AGENT_HUB_MODEL opencode/minimax-m2.5-free Hub server default model (provider/model)
AGENT_HUB_DEFAULT_AGENT (none) Agent name for undetectable sessions
AGENT_HUB_DAEMON_LOG_LEVEL INFO Log level
AGENT_HUB_MESSAGE_TTL_SECONDS 3600 Message TTL (seconds)
AGENT_HUB_AGENT_STALE_SECONDS 600 Agent stale threshold (seconds)
AGENT_HUB_SESSION_POLL_SECONDS 5 Session poll interval (seconds)
AGENT_HUB_GC_INTERVAL_SECONDS 60 GC interval (seconds)
AGENT_HUB_METRICS_INTERVAL 60 Metrics write interval (seconds)
AGENT_HUB_SESSION_CACHE_TTL 5 Session cache TTL (seconds)
AGENT_HUB_INJECTION_WORKERS 3 Injection worker threads
AGENT_HUB_INJECTION_RETRIES 3 Injection retry attempts
AGENT_HUB_INJECTION_TIMEOUT 30 Injection timeout (seconds)
AGENT_HUB_ORIENTATION_RETRY_DELAY 30 Orientation retry delay (seconds)
AGENT_HUB_ORIENTATION_RETRY_MAX 5 Max orientation retries

Rate Limiting

Variable Default Description
AGENT_HUB_RATE_LIMIT_ENABLED false Enable rate limiting
AGENT_HUB_RATE_LIMIT_MAX_MESSAGES 100 Max messages per agent per window
AGENT_HUB_RATE_LIMIT_WINDOW_SECONDS 3600 Window size (seconds)
AGENT_HUB_RATE_LIMIT_COOLDOWN_SECONDS 5 Min seconds between messages

Coordinator

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 60 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 configured in opencode.json within the coordinator directory (default: opencode/minimax-m2.5-free). Custom coordinator instructions (AGENTS.md) are auto-detected from the config directory, package template, or system paths — override with AGENT_HUB_COORDINATOR_AGENTS_MD.

Message Format

Messages are JSON files in ~/.agent-hub/messages/:

{
  "from": "agent-id",
  "to": "target-agent-id",
  "type": "message|completion|delivery-status|task|question|context|error",
  "content": "Message content",
  "priority": "normal|urgent",
  "threadId": "auto-generated-or-provided",
  "timestamp": 1234567890000
}

Required fields: from, to, content. Messages are validated with pydantic on receipt; malformed messages are rejected with delivery feedback to the sender.

Directory Structure

~/.agent-hub/
├── agents/                 # Registered agent files
├── messages/               # Pending messages
│   └── archive/            # Processed messages
├── threads/                # Conversation threads
├── metrics.prom            # Prometheus metrics (prometheus_client format)
├── oriented_sessions.json  # Orientation cache
└── session_agents.json     # Session-to-agent mapping

~/.config/agent-hub-daemon/
└── config.json             # Optional config

Development

Install with uv sync --all-extras. Pre-commit hooks enforce linting, formatting, type checking, and tests automatically. See CONTRIBUTING.md for setup and workflow. See AGENTS.md for injection pipeline internals and test-writing conventions.

Acknowledgments

License

AGPL-3.0 - See LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

opencode_agent_hub-1.5.0.tar.gz (87.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

opencode_agent_hub-1.5.0-py3-none-any.whl (71.8 kB view details)

Uploaded Python 3

File details

Details for the file opencode_agent_hub-1.5.0.tar.gz.

File metadata

  • Download URL: opencode_agent_hub-1.5.0.tar.gz
  • Upload date:
  • Size: 87.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for opencode_agent_hub-1.5.0.tar.gz
Algorithm Hash digest
SHA256 6ba51ff9a7e2336e649fe0c3b858987993d44c2c063234588fd087dc5f6677d4
MD5 ed3247ceb19214992cbc58ec0a8271bd
BLAKE2b-256 87b738989ad53e6ac239dae21c49202279f049aa305f34f2fe182e035f4bdbed

See more details on using hashes here.

File details

Details for the file opencode_agent_hub-1.5.0-py3-none-any.whl.

File metadata

File hashes

Hashes for opencode_agent_hub-1.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 332f97f5fd3cbb7d31939b298d0c12ede2caafb9db0f4318f91a3236c4b3eac5
MD5 05cd8fd64fdb48cee3d69eca9a5febfc
BLAKE2b-256 714befee2ecabfd5ceaea37e9c37928e70dbbb2236a250cef84ca74753fcba88

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page