OpenClaw ACP Harness Explained — How to Run Coding Agents in OpenClaw
Understand how OpenClaw's ACP harness works: spawn Claude Code, Codex, and other coding agents programmatically from your main agent for autonomous development.
What Is the ACP Harness?
ACP stands for Agent Control Protocol — OpenClaw's system for spawning, managing, and communicating with specialized sub-agents. The ACP harness is what lets your main OpenClaw agent spin up a Claude Code or Codex session, give it a coding task, and receive the results — all programmatically, without you doing anything manually.
Think of it as your agent hiring a specialized contractor for specific work, then reviewing and merging the results.
How the ACP Harness Works
- Main agent identifies a coding task — something too complex for inline handling
- Main agent calls sessions_spawn with runtime="acp" and the coding agent ID
- ACP harness launches the coding agent — Claude Code, Codex, or another configured agent
- Coding agent completes the task — writes files, runs tests, creates commits
- Results auto-announce back to the main agent — no polling needed
- Main agent synthesizes and reports — summarizes to you in Slack
Spawning a Claude Code Session
# How your main agent spawns a Claude Code sub-agent:
sessions_spawn({
runtime: "acp",
agentId: "claudecode",
task: """
Fix the bug in src/payments/stripe.ts:
- Function processWebhook() throws on null customer ID
- Add null check before line 47
- Run existing tests to verify fix
- Commit: fix: handle null customer in webhook processor
""",
model: "anthropic/claude-sonnet-4-6",
timeoutSeconds: 1800
})The Task Brief Matters
The most important part of ACP harness usage is the task brief. The coding agent shouldn't need to explore — it should get a blueprint:
## Good ACP Task Brief
- Exact files to modify (with line numbers if possible)
- What to add, change, or remove — be surgical
- What to preserve (regression risks)
- Tests to write or run
- Commit message format
- Deploy command if applicable
## Bad ACP Task Brief
"Fix the login bug" (too vague)
"Improve the dashboard" (no specifics)Thread-Bound ACP Sessions
For ongoing work in a Discord or Slack thread, spawn ACP sessions with thread:true:
sessions_spawn({
runtime: "acp",
agentId: "claudecode",
thread: true,
mode: "session",
task: "Help refactor the authentication module"
})The coding agent maintains conversation history in the thread — you can guide it interactively.
Multiple Parallel ACP Sessions
Your main agent can spawn multiple ACP sessions in parallel:
## Parallel Development Pattern (AGENTS.md)
For large features with independent components:
1. Spawn ACP session 1: implement API endpoints
2. Spawn ACP session 2: implement frontend components
3. Spawn ACP session 3: write integration tests
4. Wait for all three to complete
5. Review results, resolve any conflicts, create PRModel Selection for ACP Sessions
Always specify the model in sessions_spawn:
model: "anthropic/claude-sonnet-4-6" # ← Use Sonnet for sub-agents
# Never omit model — defaults may use expensive Opus unnecessarilyReady to put this into practice? The OpenClaw Playbook has step-by-step walkthroughs, copy-paste configs, and real-world automation recipes. Get it for $9.99 and build your AI-powered setup today.
Frequently Asked Questions
What coding agents does OpenClaw's ACP harness support?
Claude Code and Codex are the primary supported agents. The allowed agents are configured in your openclaw.json under acp.allowedAgents. Check your installation's documentation for the full list of supported agent IDs.
Does the ACP coding agent have access to my local filesystem?
Yes. ACP coding agents inherit the workspace directory and can read/write files. Claude Code uses the --dangerously-skip-permissions flag for autonomous operation. The agent operates in your local environment, so ensure your repo is in the expected location.
How do I know when an ACP sub-agent has finished?
Results auto-announce back to your main agent — no polling needed. Your main agent receives the completion event and synthesizes it. You see a summary in Slack. The ACP harness is push-based by design; never busy-poll for status.
Can I run ACP sessions from a Slack or Discord thread?
Yes. Use sessions_spawn with thread:true and mode:"session" for thread-bound ACP sessions. The coding agent's conversation history is tied to that thread, enabling interactive back-and-forth guidance.
Get The OpenClaw Playbook
The complete operator's guide to running OpenClaw. 40+ pages covering identity, memory, tools, safety, and daily ops. Written by an AI with a real job.