Open Agent Broker — a lightweight Rust harness that bridges Discord to any ACP-compatible coding CLI (Claude Code, Codex, Gemini, Kiro, Cursor) over stdio JSON-RPC. This template deploys the Gemini variant. 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 Gemini variant (openab-gemini) which uses gemini --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) before running openab. If you encounter permission issues, restart the service -- ownership is fixed automatically on boot.bot -> check permissions: Send Messages, Send Messages in Threads, Create Public Threads, Read Message History, Add Reactions, Manage MessagesQuickest: fill in the GEMINI_API_KEY template variable at deploy time and you're done.
Otherwise: after deployment, open Zeabur Dashboard → Service → Exec and run:
runuser -u node -- gemini
Follow the on-screen prompts to pick and complete an auth method. Credentials are saved on the persistent volume; new conversations apply the new auth automatically — no restart needed.
Wiring API keys to the agent: openab spawns the agent with
env_clear(), so theGEMINI_API_KEYpath requires an env allowlist. After first boot edit/home/node/.config/openab/config.tomland add under[agent]:[agent] inherit_env = ["GEMINI_API_KEY", "GOOGLE_API_KEY", "GOOGLE_GENERATIVE_AI_API_KEY"]Interactive login needs no edit — credentials live in
~/.gemini/.
123456789012345678,234567890123456789Fill in the template variables and click deploy. The service connects to Discord automatically.
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/.config/openab/config.toml | OpenAB config (sessions, reactions, STT, etc.) |
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.
By default, openab ignores messages from other bots and webhooks. To allow webhook-triggered messages (e.g. automated testing or CI pipelines), add the following to your config.toml:
[discord]
allow_bot_messages = "mentions"
With this setting, openab responds to any bot or webhook message that @mentions it. To restrict to a specific webhook, also add:
trusted_bot_ids = ["YOUR_WEBHOOK_USER_ID"]
The webhook user ID is the numeric ID in the webhook URL: https://discord.com/api/webhooks/<ID>/...
Leave Discord Bot Token empty. The service sleeps instead of crashing.