A lightweight, secure, cloud-native ACP harness that bridges Discord, Slack, and any Agent Client Protocol-compatible coding CLI (Kiro CLI, Claude Code, Codex, Gemini, OpenCode, Copilot CLI, etc.) over stdio JSON-RPC โ delivering the next-generation development experience. Telegram, LINE, Feishu/Lark, Google Chat, and other webhook-based platforms are supported via the standalone Custom Gateway.
๐ชผ Join our community! Come say hi on Discord โ we'd love to have you: ๐ชผ OpenAB โ Official ๐
โโโโโโโโโโโโโโโโ Gateway WS โโโโโโโโโโโโโโโโ ACP stdio โโโโโโโโโโโโโโโโ
โ Discord โโโโโโโโโโโโโโโโบโ โโโโโโโโโโโโโโโโบโ coding CLI โ
โ User โ โ openab โโโโ JSON-RPC โโโ (acp mode) โ
โโโโโโโโโโโโโโโโค Socket Mode โ (Rust) โ โโโโโโโโโโโโโโโโ
โ Slack โโโโโโโโโโโโโโโโบโ โ
โ User โ โโโโโโโโฌโโโโโโโโ
โโโโโโโโโโโโโโโโค โ WebSocket (outbound)
โ Telegram โโโโwebhookโโโ โ
โ User โ โ โ
โโโโโโโโโโโโโโโโค โผ โผ
โ LINE โโโโwebhookโโโโโโโโโโโโโโโโโโโโโโ
โ User โ โ Custom Gateway โ
โโโโโโโโโโโโโโโโค โ (standalone) โ
โ Feishu/Lark โโโโโWSโโโโโโโ โ
โ User โ โ โ
โโโโโโโโโโโโโโโโค โ โ
โ Google Chat โโโโwebhookโโโ โ
โ User โ โโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโ
- Multi-platform โ supports Discord and Slack, run one or both simultaneously
- Custom Gateway โ extend to Telegram, LINE, Feishu/Lark, Google Chat, MS Teams via standalone gateway
- Pluggable agent backend โ swap between Kiro CLI, Claude Code, Codex, Gemini, OpenCode, Copilot CLI via config
- @mention trigger โ mention the bot in an allowed channel to start a conversation
- Thread-based multi-turn โ auto-creates threads; no @mention needed for follow-ups
- Multi-agent collaboration โ bot-to-bot messaging for coordinated workflows (docs/multi-agent.md)
- Agent-controlled reply-to โ agents choose which message to reply to via
[[reply_to:id]]directive, enabling clear conversation threads in multi-bot channels (docs/output-directives.md) - Edit-streaming โ live-updates the Discord message every 1.5s as tokens arrive
- Emoji status reactions โ ๐โ๐คโ๐ฅ/๐จโ๐ป/โกโ๐+random mood face
- Image & file support โ send images and files through chat (docs/sendimages.md, docs/sendfiles.md)
- Scheduled messages โ config-driven cron jobs for automated agent prompts (docs/cronjob.md)
- Slash commands โ built-in slash command support (docs/slash-commands.md)
- Session pool โ one CLI process per thread, auto-managed lifecycle
- ACP protocol โ JSON-RPC over stdio with tool call, thinking, and permission auto-reply support
- Kubernetes-ready โ Dockerfile + k8s manifests with PVC for auth persistence
- Voice message STT โ auto-transcribes Discord voice messages via Groq, OpenAI, or local Whisper server (docs/stt.md)
Before running openab, enable these in the Discord Developer Portal:
- Bot โ Privileged Gateway Intents:
- โ Message Content Intent
- โ Server Members Intent
- OAuth2 โ URL Generator โ Bot Permissions:
- Send Messages, Embed Links, Attach Files
- Read Message History, Add Reactions
See docs/discord.md for a detailed step-by-step guide.
Discord
See docs/discord.md for a detailed step-by-step guide.
Slack
See docs/slack-bot-howto.md for a detailed step-by-step guide.
Telegram (via Custom Gateway)
See docs/telegram.md for the full setup guide. Requires the standalone Custom Gateway service.
LINE (via Custom Gateway)
See docs/line.md for the full setup guide. Requires the standalone Custom Gateway service.
Feishu/Lark (via Custom Gateway)
See docs/feishu.md for the full setup guide. Requires the standalone Custom Gateway service. Supports WebSocket long-connection (default, no public URL needed) and HTTP webhook fallback.
Google Chat (via Custom Gateway)
See docs/google-chat.md for the full setup guide. Requires the standalone Custom Gateway service.
WeCom (ไผไธๅพฎไฟก) (via Custom Gateway)
See docs/wecom.md for the full setup guide. Requires the standalone Custom Gateway service.
helm repo add openab https://openabdev.github.io/openab
helm repo update
helm install openab openab/openab \
--set agents.kiro.discord.botToken="$DISCORD_BOT_TOKEN" \
--set-string 'agents.kiro.discord.allowedChannels[0]=YOUR_CHANNEL_ID'
# Slack
helm install openab openab/openab \
--set agents.kiro.slack.enabled=true \
--set agents.kiro.slack.botToken="$SLACK_BOT_TOKEN" \
--set agents.kiro.slack.appToken="$SLACK_APP_TOKEN" \
--set-string 'agents.kiro.slack.allowedChannels[0]=C0123456789'For additional Helm values such as fullnameOverride, nameOverride, envFrom, and agentsMd, see charts/openab/README.md.
kubectl exec -it deployment/openab-kiro -- kiro-cli login --use-device-flow
kubectl rollout restart deployment/openab-kiroIn your Discord channel:
@YourBot explain this code
The bot creates a thread. After that, just type in the thread โ no @mention needed.
Slack: @YourBot explain this code in a channel โ same thread-based workflow as Discord.
| Agent | CLI | ACP Adapter | Guide |
|---|---|---|---|
| Kiro (default) | kiro-cli acp |
Native | docs/kiro.md |
| Claude Code | claude-agent-acp |
@agentclientprotocol/claude-agent-acp | docs/claude-code.md |
| Codex | codex-acp |
@zed-industries/codex-acp | docs/codex.md |
| Gemini | gemini --acp |
Native | docs/gemini.md |
| OpenCode | opencode acp |
Native | docs/opencode.md |
| Copilot CLI |
copilot --acp --stdio |
Native | docs/copilot.md |
| Cursor | cursor-agent acp |
Native | docs/cursor.md |
๐ง Running multiple agents? See docs/multi-agent.md
๐ Full reference with all options, defaults, and Helm mapping: docs/config-reference.md
[discord]
bot_token = "${DISCORD_BOT_TOKEN}" # supports env var expansion
allowed_channels = ["123456789"] # channel ID allowlist
# allowed_users = ["987654321"] # user ID allowlist (empty = all users)
[slack]
bot_token = "${SLACK_BOT_TOKEN}" # Bot User OAuth Token (xoxb-...)
app_token = "${SLACK_APP_TOKEN}" # App-Level Token (xapp-...) for Socket Mode
allowed_channels = ["C0123456789"] # channel ID allowlist (empty = allow all)
# allowed_users = ["U0123456789"] # user ID allowlist (empty = allow all)
[agent]
command = "kiro-cli" # CLI command
args = ["acp", "--trust-all-tools"] # ACP mode args
working_dir = "/tmp" # agent working directory
env = {} # extra env vars passed to the agent
[pool]
max_sessions = 10 # max concurrent sessions
session_ttl_hours = 24 # idle session TTL
[reactions]
enabled = true # enable emoji status reactions
remove_after_reply = false # remove reactions after replyThe Docker image bundles both openab and kiro-cli in a single container.
โโ Kubernetes Pod โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ openab (PID 1) โ
โ โโ kiro-cli acp --trust-all-tools (child process) โ
โ โโ stdin โโโ JSON-RPC requests โ
โ โโ stdout โโโบ JSON-RPC responses โ
โ โ
โ PVC (/data) โ
โ โโ ~/.kiro/ (settings, sessions) โ
โ โโ ~/.local/share/kiro-cli/ (OAuth tokens) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
kubectl create secret generic openab-secret \
--from-literal=discord-bot-token="your-token"
kubectl apply -f k8s/configmap.yaml
kubectl apply -f k8s/pvc.yaml
kubectl apply -f k8s/deployment.yaml| Manifest | Purpose |
|---|---|
k8s/deployment.yaml |
Single-container pod with config + data volume mounts |
k8s/configmap.yaml |
config.toml mounted at /etc/openab/ |
k8s/secret.yaml |
DISCORD_BOT_TOKEN injected as env var |
k8s/pvc.yaml |
Persistent storage for auth + settings |
- sample-acp-bridge โ ACP protocol + process pool architecture
- OpenClaw โ StatusReactionController emoji pattern
MIT

