A lightweight, cloud-native ACP bridge connecting chat platforms like Discord and Slack to AI coding CLIs such as Kiro CLI, Claude Code, and Codex, enabling chat-based coding for team collaboration.
OpenAB (Open Agent Broker) is a lightweight, secure, cloud-native ACP (Agent Client Protocol) bridge written in Rust (99.1%). It connects chat platforms like Discord and Slack to any ACP-compatible coding CLI (such as Kiro CLI, Claude Code, Codex, Gemini, OpenCode, Copilot CLI, Cursor, etc.), enabling team members to interact with AI coding assistants directly via @bot mentions in IM channels.
Core Architecture#
The core communication is built on the ACP protocol (stdio-based JSON-RPC), where OpenAB serves as a middleware layer connecting upstream chat platform adapters to downstream CLI processes managed through a Session Pool. The adapter pattern (ChatAdapter trait + AdapterRouter) enables platform-agnostic message routing.
┌──────────────┐ Gateway WS ┌──────────────┐ ACP stdio ┌──────────────┐
│ Discord │◄─────────────►│ │──────────────►│ coding CLI │
│ User │ │ openab │◄── JSON-RPC ──│ (acp mode) │
├──────────────┤ Socket Mode │ (Rust) │ └──────────────┘
│ Slack │◄─────────────►│ │
│ User │ └──────┬───────┘
├──────────────┤ │ WebSocket (outbound)
│ Telegram │◄──webhook──┐ │
│ LINE │◄──webhook──┤ ┌──────▼───────┐
│ Feishu/Lark │◄───WS──────┤ │Custom Gateway│
│ Google Chat │◄──webhook──┘ │(standalone) │
└──────────────┘ └──────────────┘
Chat Platform Adapters#
- Discord native adapter: Based on serenity, supports @mention trigger, threaded conversations, Edit-streaming (updates every 1.5s showing token streaming), Emoji status reactions (👀→🤔→🔥/👨💻/⚡→👍 + random emojis with debounce and stall detection), voice message STT (Groq/OpenAI/local Whisper)
- Slack native adapter: Socket Mode connection, supports @mention trigger and threaded conversations
- Custom Gateway extension: Standalone component connecting to Telegram, LINE, Feishu/Lark, Google Chat via Webhook/WebSocket
- Multi-platform: Single instance can run Discord + Slack adapters simultaneously
Agent Backend Management#
Supports 7 Agent backends switchable via config: Kiro CLI (default), Claude Code, Codex, Gemini, OpenCode, Copilot CLI (⚠️ stability uncertain), Cursor. Multi-agent mode allows running different backends simultaneously.
Each chat thread maps to an independent CLI process session. The Session Pool manages connections by thread key with automatic lifecycle management (configurable max_sessions and session_ttl_hours).
Configuration & Deployment#
Configuration supports TOML format with ${ENV_VAR} expansion and remote URL loading (--config https://...). Channel and user-level access control via whitelist mechanism.
Deployment provides Dockerfile, Kubernetes manifests, and Helm chart (helm repo add openab https://openabdev.github.io/openab) with PVC for credential persistence, suitable for team-level long-running infrastructure. Local development via cargo run.
Core Source Structure#
| Path | Responsibility |
|---|---|
src/main.rs | Multi-adapter startup, cleanup, shutdown |
src/adapter.rs | ChatAdapter trait, AdapterRouter |
src/config.rs | TOML config parsing + ${ENV_VAR} expansion |
src/discord.rs | Discord adapter (serenity-based) |
src/slack.rs | Slack adapter (Socket Mode) |
src/media.rs | Image compression + STT download |
src/acp/protocol.rs | JSON-RPC types + ACP event classification |
src/acp/connection.rs | CLI process spawning + stdio JSON-RPC communication |
src/acp/pool.rs | Session pool management |
Unconfirmed Information#
- Current version is v0.8.3-beta.2, still in beta; breaking changes risk for API/config format is uncertain
- Custom Gateway deployment details not fully documented in README
- Voice message STT configuration details reference docs/stt.md but are not expanded in README
- No benchmark data available for Session Pool concurrency limits, memory usage, or latency