How to run OpenAB with Devin CLI as the agent backend.
- A Devin subscription (Enterprise or individual plan) from Cognition AI
- Devin CLI with native ACP support (
devin acp)
┌──────────────┐ Gateway WS ┌──────────────┐ ACP stdio ┌──────────────┐
│ Discord │◄─────────────►│ openab │──────────────►│ devin acp │
│ User │ │ (Rust) │◄── JSON-RPC ──│ (Devin CLI) │
└──────────────┘ └──────────────┘ └──────────────┘
OpenAB spawns devin acp as a child process and communicates via stdio JSON-RPC. No intermediate adapter needed — Devin CLI natively implements the Agent Client Protocol.
[agent]
command = "devin"
args = ["acp"]
working_dir = "/home/agent"
[pool]
max_sessions = 3
session_ttl_hours = 1
default_config_options = { mode = "bypass", model = "swe-1-6" }Note:
devin acpdoes not honor~/.config/devin/config.jsonsettings for permission mode or model, nor does it readDEVIN_PERMISSION_MODEorDEVIN_MODELenv vars. The only way to set defaults at session start in ACP mode is via[pool] default_config_options, which sendssession/set_config_optionafter each session creation. Withoutmode = "bypass", Devin defaults toaccept-editsmode which prompts forexectool calls, causing the agent to get stuck in headless environments.
Devin CLI requires authentication via a Devin account. In a headless container:
# 1. Exec into the running pod/container
kubectl exec -it deployment/openab-devin -- bash
# 2. Authenticate via manual token flow (headless-friendly)
devin auth login --force-manual-token-flow
# 3. Follow the instructions to paste your token
# 4. Restart the pod (credentials persist via PVC)
kubectl rollout restart deployment/openab-devinCredentials are stored under ~/.local/share/devin/ and persist across pod restarts via PVC.
helm install openab openab/openab \
--set agents.kiro.enabled=false \
--set agents.devin.discord.botToken="$DISCORD_BOT_TOKEN" \
--set-string 'agents.devin.discord.allowedChannels[0]=YOUR_CHANNEL_ID' \
--set agents.devin.command=devin \
--set 'agents.devin.args={acp}' \
--set agents.devin.persistence.enabled=true \
--set agents.devin.workingDir=/home/agent \
--set image.tag=betaUse --set image.tag=<version> to set the image version globally.
The chart auto-appends -<agent> to produce the final tag (see image-tags.md for full details).
| Tag | Resolves to | Description |
|---|---|---|
beta |
beta-devin |
Floating beta channel (latest pre-release) |
stable |
stable-devin |
Floating stable channel |
Devin CLI provides:
- Native ACP:
devin acpspeaks JSON-RPC over stdio directly - AGENTS.md support: Reads
AGENTS.mdat project root automatically - MCP servers: Full MCP support (stdio + HTTP transports)
- Subagents: Can spawn foreground/background subagents for parallel work
- Session persistence: Conversation history saved and resumable
- Models: SWE-1.6 series with adaptive routing
Devin CLI uses Adaptive routing by default. To specify a model, use default_config_options:
[pool]
default_config_options = { model = "swe-1-6" }Available model values include: adaptive, swe-1-6, swe-1-6-fast, claude-opus-4-8-medium,
glm-5-2, gpt-5-5-medium, kimi-k2-7, and many more. The full list is reported by the
agent at session creation and visible via the Discord /model slash command.
Note: The
--modelflag andDEVIN_MODELenv var are ignored in ACP mode. Usedefault_config_optionsinstead.
Devin CLI reads AGENTS.md from the project root — the same file OpenAB already uses. It also reads CLAUDE.md (for Claude Code compatibility) and rules from .cursor/rules/ and .windsurf/rules/.
In headless/container deployments, Devin CLI defaults to accept-edits mode in ACP
which prompts for exec tool calls. Since devin acp does not honor
~/.config/devin/config.json, env vars, or CLI flags for mode/model, the only
mechanism is OAB's default_config_options:
[pool]
default_config_options = { mode = "bypass", model = "swe-1-6" }This sends session/set_config_option after each session creation, switching the
agent to bypass mode (auto-approve all tool calls) and selecting the model.
What doesn't work in ACP mode:
| Method | Result |
|---|---|
DEVIN_PERMISSION_MODE=dangerous env var |
Ignored in ACP mode |
DEVIN_MODEL=swe-1.6 env var |
Ignored in ACP mode |
--permission-mode dangerous CLI flag |
Not supported by devin acp |
--model opus CLI flag |
Not supported by devin acp |
~/.config/devin/config.json permission_mode |
Not honored in ACP mode |
~/.config/devin/config.json agent.model |
Not honored in ACP mode |
[agent]
command = "devin"
args = ["acp"]
working_dir = "/home/agent"
env = { GHPOOL_URL = "http://ghpool.openab.local:8080", PATH = "/home/agent/bin:/usr/local/bin:/usr/bin:/bin" }
[pool]
max_sessions = 3
session_ttl_hours = 1
default_config_options = { mode = "bypass", model = "swe-1-6" }- Requires a paid Devin subscription (Cognition AI); no free tier for CLI access
devin auth loginrequires interactive terminal for browser flow; use--force-manual-token-flowin headless environments- Enterprise features (team settings, controls) require Devin Enterprise plan
- Config file must be mounted at
/etc/openab/config.tomlat runtime (not baked into image)