Use Contenox from JetBrains
Contenox speaks the Agent Client Protocol (ACP) over stdio. JetBrains IDEs can launch it as a custom agent server and drive your chain from inside the editor — tool calls render as cards, HITL prompts route through the IDE's permission UI, and session history replays when you reopen the project.
Verified with GoLand 2026.1.2. The config file is JetBrains-wide, so the same setup applies to other JetBrains IDEs (IntelliJ IDEA, PyCharm, WebStorm, …) with the ACP agent integration.
This page assumes you already have contenox on PATH. If not, do the Quickstart first.
Setup
JetBrains reads agent servers from ~/.jetbrains/acp.json. Note this is not the Zed schema — there is no "type": "custom" field:
{
"default_mcp_settings": {
"use_custom_mcp": true,
"use_idea_mcp": false
},
"agent_servers": {
"Contenox": {
"command": "contenox",
"args": ["acp"]
}
}
}
Restart the IDE. Open the agent panel — Contenox now appears in the agent picker. Start a new session and prompt as usual.
What you get
Tool cards with real context. When the chain runs a shell command, the card shows local_shell.local_shell: sed -i 's/old/new/g' README.md — the actual command, not just the tool name. Same for local_fs.read_file, local_fs.write_file, grep, sed, and other built-in tools. This is the card you approve from, so it shows what will actually run.
Native filesystem. local_fs.read_file / local_fs.write_file route through the IDE's own filesystem capability — sandboxed, with a read-before-write contract.
Shell commands. local_shell runs the command and returns its output in the tool card. GoLand does not advertise the ACP terminal capability, so the command is executed and reported rather than embedded as an interactive terminal session (this differs from Zed, which does embed a live terminal).
HITL through the editor. If your chain uses local_fs/local_shell/webtools, Contenox's HITL policy applies — and the approval dialog is routed to the IDE's permission UI instead of a terminal prompt. The default policy gates local_fs.write_file, local_fs.sed, local_shell.*, and mutating webtools calls.
Session history that replays. Close the IDE mid-conversation and reopen the project — your prompts, the agent's responses, and every tool call (with its output) come back. State lives in ~/.contenox/local.db.
Choosing the chain
ACP sessions use a dedicated chain file separate from the CLI's default chain:
- Default location:
~/.contenox/default-acp-chain.json - Override path with the
CONTENOX_ACP_CHAIN_PATHenvironment variable (set it in the shell that launches the IDE).
The default chain uses "tools": ["*"], which exposes everything the engine has registered — local_fs, local_shell, webtools, plus any MCP servers you've added via contenox mcp add.
Choosing the model
ACP reads from your global model/provider config — the same one the CLI uses:
contenox config set default-model qwen2.5:7b
contenox config set default-provider ollama
Models are global; chains are local. Switching the model for ACP also switches it for contenox chat.
Troubleshooting
Nothing happens when I select Contenox. Make sure contenox is on the IDE's PATH. JetBrains inherits the environment of the process that launched it — if you start the IDE from a desktop launcher, that may not be your login shell's PATH. Launching the IDE from a terminal (or using an absolute path in command) is the reliable test.
The default-model error. ACP needs a configured default model. Run contenox config set default-model <name> and contenox config set default-provider <type> before launching from the IDE.
I want to see what's happening. Enable file logging:
contenox config set telemetry-enabled true
Subsequent ACP sessions write structured operation traces to ~/.contenox/telemetry.log (chain steps, tool calls, model requests, session updates sent to the IDE).
Limitations
- Assistant text is not streamed incrementally with tool-using chains — it appears at the end of each generation step. The synchronous chain shape works fine in the meantime.
- No interactive embedded terminal. GoLand does not advertise the ACP terminal capability;
local_shellcommands run and report output rather than opening a live terminal in the IDE.
Where to next
- Author your first chain — the chain file is what defines the agent's behavior, regardless of which client drives it.
- HITL policies — choose what requires approval and what doesn't.
- MCP — register MCP servers once globally; ACP sessions pick them up automatically.
- Use from Zed — the same agent, driven from Zed (with a live embedded terminal).