Open Agent Broker — a lightweight Rust harness that bridges Discord and Slack to any ACP-compatible coding CLI over stdio JSON-RPC. This template uses Grok Build (xAI's official coding agent CLI) as the backend via `grok agent stdio`. Source: https://github.com/openabdev/openab

OpenAB is a lightweight, open-source Rust harness that bridges Discord and Slack to any Agent Client Protocol-compatible coding CLI over stdio JSON-RPC.
This template runs the Grok variant — it uses Grok Build, xAI's official coding agent CLI, as the backend via grok agent stdio.
0.8.3-beta.11). To upgrade, change the image tag in Zeabur Dashboard → Service → Settings. Available tags: GitHub Packages./home/agent is mounted as a persistent volume. Grok credentials (~/.grok/auth.json), settings, and config survive restarts.bot → check permissions: Send Messages, Send Messages in Threads, Create Public Threads, Read Message History, Add Reactions, Manage Messages123456789012345678,234567890123456789Grok Build supports three credential sources. Pick whichever fits your use case.
| Method | When to use | How |
|---|---|---|
| API Key | Pay-per-token API billing, CI / bot deployments | Get a key from console.x.ai → paste into GROK_CODE_XAI_API_KEY variable |
| Device-Auth | SuperGrok paid subscription | Leave GROK_CODE_XAI_API_KEY empty. After deploy, run runuser -u agent -- grok login --device-auth in the service Exec terminal. The CLI prints a short code + URL — open the URL on any device, enter the code, approve. Token stored at /home/agent/.grok/auth.json (persists across restarts). |
| Deployment Key | xAI enterprise customers | Add GROK_DEPLOYMENT_KEY as a custom variable in Zeabur Dashboard → Service → Variables after deploy. Takes precedence over auth.json. |
💡 Unlike OAuth flows that bind to a loopback port, Grok's device-auth works in any headless environment (no port-forward, no curl-the-callback trick).
Fill in the variables and click deploy. The service connects to Discord automatically. If you used Device-Auth, run the login command in step 3 after the service is running.
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, MS Teams, or WeCom, 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, teams, wecomRestart the service. The startup script auto-injects the [gateway] block into config.toml.
| File | Description |
|---|---|
/home/agent/.config/openab/config.toml | OpenAB config (sessions, reactions, STT, etc.) |
/home/agent/.grok/auth.json | Grok OAuth credentials (managed by grok login) |
/home/agent/.grok/config.toml | Grok runtime config |
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/agent/.config/openab/config.toml
For OpenAB config options, see the OpenAB documentation. For Grok config options, see the Grok Build docs.
Leave Discord Bot Token empty (and SLACK_BOT_TOKEN empty). The service sleeps instead of crashing.