English | ็น้ซไธญๆ
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, MiMo-Code, Copilot CLI, Hermes, Grok Build, Devin, Antigravity, Pi, etc.) over stdio JSON-RPC โ delivering the next-generation development experience. Telegram, LINE, Feishu/Lark, Google Chat, WeCom, and Microsoft Teams are available through gateway adapters, either compiled into the unified binary or deployed as 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 โโโโโโโโโโโโโโโบโ โโโโโโโโโโโโโโบโ agent runtime โ
โ User โ โ openab (Rust) โโโโJSON-RPCโโโ (ACP process) โ
โโโโโโโโโโโโโโโโค Socket Mode โ thin ACP broker โ โโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Slack โโโโโโโโโโโโโโโบโ โ โ kiro-cli acp โ
โ User โ โโโโโโโโโโฌโโโโโโโโโ โ claude-agent-acp โ
โโโโโโโโโโโโโโโโค โฒ โ codex-acp โ
โ Telegram โโwebhook/APIโโบโ โ โ โโ Codex app-server โ
โ User โ โ โ WebSocket โ gemini --acp โ
โโโโโโโโโโโโโโโโค โ โ (standalone) โ copilot --acp โ
โ LINE โโwebhook/APIโโบโค โ or in-process โ cursor-agent acp โ
โ User โ โ โ (unified) โ hermes-acp โ
โโโโโโโโโโโโโโโโค โ โโโโโโโโดโโโโโโโโโโโโ โ opencode acp โ
โ Feishu/Lark โโโWS/webhookโโบโผโบโ gateway adapters โ โ mimo acp โ
โ User โ โ โ standalone or โ โ grok agent stdio โ
โโโโโโโโโโโโโโโโค โ โ embedded unified โ โ devin acp โ
โ Google Chat โโwebhook/APIโโบโค โโโโโโโโโโโโโโโโโโโโ โ agy-acp โ
โ User โ โ โ pi-acp โ
โโโโโโโโโโโโโโโโค โ โ openab-agent โ
โ WeCom โโwebhook/APIโโบโค โ agentcore-acp โ
โ User โ โ โ โโ AWS AgentCore โ
โโโโโโโโโโโโโโโโค โ โ custom ACP agent โ
โ MS Teams โโwebhook/APIโโบโ โโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ User โ
โโโโโโโโโโโโโโโโ
OpenAB remains a thin broker: platform adapters converge on the same
dispatcher and session pool, then cross one ACP stdio boundary to the selected
agent runtime. Gateway adapters can run as a standalone companion or be
embedded in a unified build without changing that boundary. Platform-edge
labels distinguish inbound delivery from outbound replies: webhook/API for
webhook platforms and WS/webhook for Feishu/Lark.
- Multi-platform โ supports Discord and Slack, run one or both simultaneously
- Gateway adapters โ extend to Telegram, LINE, Feishu/Lark, Google Chat, WeCom, and Microsoft Teams through the standalone gateway or an opt-in unified build
- Pluggable agent backend โ swap between Kiro CLI, Claude Code, Codex, Gemini, OpenCode, MiMo-Code, Copilot CLI, Hermes, Grok Build, Devin, Antigravity, Pi 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)
- Lifecycle hooks โ run custom scripts at startup (
pre_boot) and shutdown (pre_shutdown) for bootstrapping, S3 sync, and state backup (docs/hooks.md) - Tailscale integration โ join a private tailnet from an unprivileged container via lifecycle hooks, no custom image needed (docs/tailscale.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.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 |
@agentclientprotocol/codex-acp | docs/codex.md |
| Gemini | gemini --acp |
Native | docs/gemini.md |
| OpenCode | opencode acp |
Native | docs/opencode.md |
| MiMo-Code | mimo acp |
Native | docs/mimocode.md |
| Copilot CLI |
copilot --acp --stdio |
Native | docs/copilot.md |
| Cursor | cursor-agent acp |
Native | docs/cursor.md |
| Hermes Agent | hermes-acp |
Native | docs/hermes.md |
| Grok Build | grok agent stdio |
Native | docs/grok.md |
| Devin | devin acp |
Native | docs/devin.md |
| Antigravity | agy-acp |
agy-acp | docs/antigravity.md |
| Pi | pi-acp |
pi-acp | docs/pi.md |
| Native Agent | openab-agent |
Built-in (Rust) | docs/native-agent.md |
๐ง Running multiple agents? See docs/multi-agent.md
Run any coding agent remotely on Amazon Bedrock AgentCore โ no CLI bundled in the OAB image.
โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Discord โ โ โ ACP โ โ AWS โ AgentCore Runtime โ
โ Slack โโโโโโโโถโ OAB โโโโโโโโโถโ agentcore-acp โโโโโโโโถ โ โโโโโโโโโโโโโโโโโโโโ โ
โTelegram โ โ โ stdio โ (adapter) โ SDK โ โ Firecracker ฮผVM โ โ
โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโโโโโโโ โ โ Kiro / Claudeโฆ โ โ
โ โ /mnt/workspace โ โ
โ โโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโ
[agentcore]
runtime_arn = "arn:aws:bedrock-agentcore:us-east-1:123456789012:runtime/my-agent"Smaller image (~50MB), persistent filesystem, isolated microVMs, pay-per-use. See docs/agentcore.md for full setup.
๐ 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, args, and working_dir default from OPENAB_AGENT_COMMAND and $HOME
# env = { OPENAI_API_KEY = "${OPENAI_API_KEY}" }
[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 |
Prefer AWS-native infrastructure over Kubernetes? oabctl is a
CLI that provisions and manages OpenAB agents on Amazon ECS Fargate โ one
command bootstraps the cluster/IAM/S3/networking, and one command deploys an
agent, including Telegram/LINE webhook ingress (API Gateway โ VPC Link โ
Cloud Map) provisioned automatically.
oabctl bootstrap # one-time infra setup
oabctl create my-bot && oabctl apply -f my-bot/manifest.yaml --waitSee docs/oabctl.md for the full guide โ installation, manifest schema, ingress/webhooks, secrets, and bootstrap.
- sample-acp-bridge โ ACP protocol + process pool architecture
- OpenClaw โ StatusReactionController emoji pattern
MIT

