|
| 1 | +--- |
| 2 | +slug: acp-runners |
| 3 | +title: "ACP Runners: From Text Pipes to Agent Protocols" |
| 4 | +authors: [stephanj] |
| 5 | +tags: [ACP runners, agent communication protocol, JSON-RPC, Claude, Kimi, Gemini, Kilocode, GitHub Copilot, spec-driven development, agent mode, IntelliJ IDEA, LLM, open source] |
| 6 | +date: 2026-02-14 |
| 7 | +description: "DevoxxGenie ACP Runners bring structured, bidirectional agent communication to your IDE — using JSON-RPC 2.0 to connect with Claude, Copilot, Kimi, Gemini, and Kilocode." |
| 8 | +keywords: [devoxxgenie, acp runners, agent communication protocol, json-rpc, claude code acp, github copilot, kimi, gemini, kilocode, jetbrains, intellij idea, spec-driven development] |
| 9 | +image: /img/devoxxgenie-social-card.jpg |
| 10 | +--- |
| 11 | + |
| 12 | +# ACP Runners: From Text Pipes to Agent Protocols |
| 13 | + |
| 14 | +In the [previous blog post](/blog/cli-runners), we introduced CLI Runners — a way to use your existing AI subscriptions (Claude Pro, Copilot, Gemini, etc.) directly inside IntelliJ by piping prompts to external CLI tools. CLI Runners solved the "double-paying" problem, but they communicate through plain text over stdin/stdout. That works, but it's a bit like having a conversation by passing notes under a door. |
| 15 | + |
| 16 | +**ACP Runners** open that door. Instead of unstructured text, they use the **Agent Communication Protocol** — a structured, bidirectional communication layer built on **JSON-RPC 2.0** — to turn your IDE into a proper agent hub. |
| 17 | + |
| 18 | +<!-- truncate --> |
| 19 | + |
| 20 | +## Why ACP? |
| 21 | + |
| 22 | +CLI Runners are effective for one-shot tasks: send a prompt, get a response, done. But modern AI coding assistants are becoming _agents_ — they don't just answer questions, they plan, execute, report progress, and coordinate. Plain text pipes weren't designed for that. |
| 23 | + |
| 24 | +ACP addresses this with a proper protocol: |
| 25 | + |
| 26 | +- **Typed messages** instead of raw text — the IDE knows whether it's receiving a code edit, a terminal command, or a status update |
| 27 | +- **Capability negotiation** — at startup, the IDE and the tool agree on what each side supports |
| 28 | +- **Persistent processes** — the tool stays alive between tasks, eliminating cold-start overhead |
| 29 | +- **Structured streaming** — response chunks are typed and ordered, not just lines of stdout |
| 30 | + |
| 31 | +Think of CLI Runners as walkie-talkies. ACP Runners are a phone call — two-way, structured, and always connected. |
| 32 | + |
| 33 | +## How It Works |
| 34 | + |
| 35 | +DevoxxGenie spawns the ACP tool as a child process and communicates over stdin/stdout using JSON-RPC 2.0: |
| 36 | + |
| 37 | +``` |
| 38 | +┌──────────────────┐ JSON-RPC 2.0 ┌──────────────────────┐ |
| 39 | +│ DevoxxGenie │◀═══════════════▶│ ACP Tool │ |
| 40 | +│ (ACP Client) │ stdin/stdout │ (Claude/Kimi/...) │ |
| 41 | +└──────────────────┘ └──────────────────────┘ |
| 42 | + │ │ |
| 43 | + 1. Spawns process 2. Handshake (initialize) |
| 44 | + 3. Sends prompt via 4. Streams structured |
| 45 | + ACP message response chunks back |
| 46 | + 5. Receives completion 6. Process stays alive |
| 47 | + with metadata for next message |
| 48 | +``` |
| 49 | + |
| 50 | +The protocol flow is straightforward: |
| 51 | + |
| 52 | +1. **Initialize** — DevoxxGenie sends an `initialize` request with its supported capabilities; the tool responds with its own |
| 53 | +2. **Send Prompt** — The task prompt is sent as a structured ACP message |
| 54 | +3. **Receive Response** — The tool streams typed response chunks back — text, file operations, terminal commands |
| 55 | +4. **Completion** — The tool signals it's done; DevoxxGenie processes the final result and the process stays alive for the next task |
| 56 | + |
| 57 | +No MCP config file generation needed. No stdout parsing heuristics. The protocol handles context natively. |
| 58 | + |
| 59 | +## Supported ACP Tools |
| 60 | + |
| 61 | +DevoxxGenie ships with presets for five ACP-compatible tools, plus a custom option: |
| 62 | + |
| 63 | +| ACP Tool | Executable | Description | |
| 64 | +|----------|-----------|-------------| |
| 65 | +| **Claude** | `claude-code-acp` | Claude Code via the [claude-code-acp](https://github.com/zed-industries/claude-code-acp) bridge by Zed Industries | |
| 66 | +| **Copilot** | `copilot --acp` | GitHub Copilot CLI in ACP mode | |
| 67 | +| **Kimi** | `kimi` | Moonshot AI's coding assistant with native ACP support | |
| 68 | +| **Gemini CLI** | `gemini` | Google's Gemini CLI with ACP protocol mode | |
| 69 | +| **Kilocode** | `kilocode` | Kilocode's AI coding agent | |
| 70 | +| **Custom** | *(user-defined)* | Any ACP-compatible tool | |
| 71 | + |
| 72 | +Claude Code doesn't natively speak ACP yet, but Zed Industries maintains the [claude-code-acp](https://github.com/zed-industries/claude-code-acp) bridge that wraps it in an ACP-compatible interface. Install it with `npm install -g @anthropic-ai/claude-code-acp` and you're good to go. |
| 73 | + |
| 74 | +## Setting It Up |
| 75 | + |
| 76 | +Setup is similar to CLI Runners — about a minute of configuration: |
| 77 | + |
| 78 | +1. Go to **Settings > Tools > DevoxxGenie > CLI/ACP Runners** |
| 79 | +2. Scroll to the **ACP Runners** section and click **+** |
| 80 | +3. Select a **Type** from the dropdown — the executable path fills in automatically |
| 81 | +4. Adjust the path if your tool is installed elsewhere |
| 82 | +5. Click **Test Connection** to verify the ACP handshake succeeds |
| 83 | +6. **Apply** and you're done |
| 84 | + |
| 85 | + |
| 86 | + |
| 87 | +## Selecting Your Runner |
| 88 | + |
| 89 | +The DevoxxGenie Specs toolbar includes an execution mode dropdown where ACP runners appear alongside CLI runners and the built-in LLM provider: |
| 90 | + |
| 91 | + |
| 92 | + |
| 93 | +ACP runners show up prefixed with **ACP:** — so you'll see entries like *ACP: Claude*, *ACP: Kimi*, and *ACP: Gemini* next to the existing CLI runner options. The selection persists across IDE restarts. |
| 94 | + |
| 95 | +## ACP vs CLI Runners: When to Use Which |
| 96 | + |
| 97 | +Both runner types leverage your existing AI subscriptions. The difference is how they communicate: |
| 98 | + |
| 99 | +| Feature | CLI Runners | ACP Runners | |
| 100 | +|---------|-------------|-------------| |
| 101 | +| **Communication** | Plain text over stdin/stdout | JSON-RPC 2.0 over stdin/stdout | |
| 102 | +| **Protocol** | One-shot process per task | Persistent process with structured messages | |
| 103 | +| **Streaming** | Raw stdout stream | Typed response chunks | |
| 104 | +| **Capability negotiation** | None | Handshake with capability exchange | |
| 105 | +| **MCP integration** | Auto-generated MCP config file | Not required (protocol handles context) | |
| 106 | +| **Process lifecycle** | Spawned and terminated per task | Stays alive for multiple interactions | |
| 107 | + |
| 108 | +**Use CLI Runners** when you want the simplest setup, when a tool doesn't support ACP yet, or when you're running one-off tasks where the overhead of a persistent process isn't worth it. |
| 109 | + |
| 110 | +**Use ACP Runners** when you want richer agent interactions, structured streaming, and the efficiency of a persistent connection — especially for multi-task workflows like the [Agent Loop](/docs/features/sdd-agent-loop) where the tool handles multiple tasks in sequence without restarting. |
| 111 | + |
| 112 | +Note that Claude Code is available in **both** modes: as a CLI Runner (direct stdin/stdout) and as an ACP Runner (via the claude-code-acp bridge). Try both and see which fits your workflow better. |
| 113 | + |
| 114 | +## The Bigger Picture |
| 115 | + |
| 116 | +DevoxxGenie's evolution follows a clear arc: |
| 117 | + |
| 118 | +1. **Chat** — talk to an LLM inside your IDE |
| 119 | +2. **Agent Mode** — let the LLM take actions on your codebase |
| 120 | +3. **Spec-driven Development** — define structured tasks instead of ad-hoc prompts |
| 121 | +4. **CLI Runners** — bring your own AI tools and subscriptions |
| 122 | +5. **ACP Runners** — structured agent-to-agent communication |
| 123 | + |
| 124 | +Each step builds on the previous. ACP Runners don't replace CLI Runners — they extend them for tools that support the richer protocol. And as more CLI tools adopt ACP, the integration will only get deeper: proper progress callbacks, multi-turn coordination, and true agent-to-agent collaboration. |
| 125 | + |
| 126 | +The AI coding landscape is converging on protocols and standards. ACP is one of the emerging ones, and DevoxxGenie is ready for it. |
| 127 | + |
| 128 | +## Getting Started |
| 129 | + |
| 130 | +1. Update DevoxxGenie to the latest version |
| 131 | +2. Go to **Settings > DevoxxGenie > CLI/ACP Runners** |
| 132 | +3. Add an ACP tool (try Claude via `claude-code-acp` or Kimi) |
| 133 | +4. Select it from the toolbar dropdown (look for the **ACP:** prefix) |
| 134 | +5. Run a spec task or start a chat session |
| 135 | + |
| 136 | +Same subscriptions. Smarter protocol. Better results. |
| 137 | + |
| 138 | +**Links:** |
| 139 | +- [Install from JetBrains Marketplace](https://plugins.jetbrains.com/plugin/24169-devoxxgenie) |
| 140 | +- [ACP Runners Documentation](https://genie.devoxx.com/docs/features/acp-runners) |
| 141 | +- [CLI Runners Documentation](https://genie.devoxx.com/docs/features/cli-runners) |
| 142 | +- [Spec-driven Development Docs](https://genie.devoxx.com/docs/features/spec-driven-development) |
| 143 | +- [GitHub Repository](https://github.com/devoxx/DevoxxGenieIDEAPlugin) |
0 commit comments