Open Agent Broker — a lightweight Rust harness that bridges Discord and Slack to any ACP-compatible coding CLI (Claude Code, Codex, Gemini, Kiro) over stdio JSON-RPC. Source: https://github.com/openabdev/openab

OpenAB is a lightweight, open-source Rust harness that bridges Discord to any Agent Client Protocol-compatible coding CLI over stdio JSON-RPC.
This template deploys the Claude variant (openab-claude) which uses claude-agent-acp as the agent backend.
0.8.3-beta.4). To upgrade, change the image tag in Zeabur Dashboard → Service → Settings. Available tags: GitHub Packages./home/node is mounted as a persistent volume. Plugins, settings, config, and credentials survive restarts.node user (uid 1000) to run openab. If you encounter permission issues on the persistent volume, restart the service — permissions are auto-fixed on boot.bot → check permissions: Send Messages, Send Messages in Threads, Create Public Threads, Read Message History, Add Reactions, Manage Messages| Method | How to use |
|---|---|
| Anthropic API Key | Go to console.anthropic.com/settings/keys → Create Key → copy the sk-ant-api... key into OPENAB_AUTH_TOKEN |
| Zeabur AI Hub Token | Go to Zeabur AI Hub → API Keys → Create → copy the token into OPENAB_AUTH_TOKEN |
| Claude OAuth Token | Run claude setup-token in your terminal (requires Claude Pro/Max/Team/Enterprise subscription) → visit the URL it shows → authorize → paste the code back → copy the sk-ant-oat... token into OPENAB_AUTH_TOKEN |
| In-container login | Leave OPENAB_AUTH_TOKEN empty. After deploy, go to Zeabur Dashboard → Service → Exec and run runuser -u node -- claude auth login (or claude setup-token). Credentials are written to /home/node/.claude/ on the persistent volume and survive restarts. |
Wiring tokens to the agent: openab spawns the agent with
env_clear(), so for methods 1–3 you must edit/home/node/.config/openab/config.tomlafter first boot and add an env allowlist (or explicit env map) under[agent]:[agent] inherit_env = ["ANTHROPIC_API_KEY", "CLAUDE_CODE_OAUTH_TOKEN", "ANTHROPIC_BASE_URL", "CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS"]Method 4 needs no edit — credentials are read from
~/.claude/.credentials.json.
123456789012345678,234567890123456789Fill in the variables and click deploy. The service connects to Discord and/or Slack automatically.
OpenAB supports Slack via Socket Mode — no public URL needed.
connections:write → copy the xapp-... token (SLACK_APP_TOKEN)app_mention, message.channels, message.groupsapp_mentions:read, chat:write, channels:history, groups:history, channels:read, groups:read, reactions:write, files:read, users:readxoxb-... token (SLACK_BOT_TOKEN)/invite @YourAppNameSet SLACK_BOT_TOKEN and SLACK_APP_TOKEN in the template variables before deploying. Both Discord and Slack can run simultaneously.
To bridge Telegram, LINE, Feishu/Lark, Google Chat, or MS Teams, deploy the OpenAB Gateway template into the same Zeabur project. Then add these environment variables to this service:
GATEWAY_URL = ws://openab-gateway:8080/wsGATEWAY_PLATFORM = one of telegram, line, feishu, googlechat, teamsRestart the service. The startup script auto-injects the [gateway] block into config.toml.
| File | Description |
|---|---|
/home/node/CLAUDE.md | Agent instructions — Claude reads this on every session |
/home/node/.config/openab/config.toml | OpenAB config (sessions, reactions, STT, etc.) |
/etc/claude-code/managed-settings.json | Claude Code permission mode |
config.toml is created from a built-in template on first boot. After that, edit the file directly — environment variables are only used for initial setup. To reset to defaults, delete the file and restart: rm /home/node/.config/openab/config.toml
For config options, see the OpenAB documentation.
Leave Discord Bot Token empty. The service sleeps instead of crashing.