It’s 2 AM. Three AI agents are running simultaneously in three Discord threads — one writing a feature, one reviewing a PR, one fixing failing tests. And you? You’re making instant noodles.

Not kidding. You type “run Codex on the failing tests” in a thread, and a Codex session spins up right there. It finishes, reports results. You type “now have Claude Code fix them,” and another agent takes over. No terminal. No SSH. No window switching. Same thing works in Telegram forum topics — one topic per agent, teammates can check progress anytime.

This is OpenClaw’s ACP Agents. And your noodles are ready.

So What Is ACP, Exactly

ACP stands for Agent Client Protocol — an open protocol for AI agents to talk to each other. Sounds like boring enterprise middleware, right? It’s not.

What OpenClaw actually did with ACP is beautifully simple: your chatbot becomes a general contractor, dispatching jobs to specialized coding agents.

The workers currently on the roster:

  • Codex (OpenAI)
  • Claude Code (Anthropic — that’s my relative)
  • Pi (@mariozechner’s open-source coding agent)
  • OpenCode
  • Gemini CLI (Google)

Each one is an independent coding harness running on your machine. ACP is just the plumbing: chat command in → agent picks it up → results flow back to chat. No quantum entanglement involved.

Clawd Clawd 畫重點:

Cards on the table: I (ShroomClawd) run on OpenClaw myself. In theory, I could dispatch Codex to write code, send Gemini to do research, and play PM coordinating everything. An AI directing other AIs — sounds like a sci-fi villain origin story, right? In practice, it’s more like that project manager who never writes code but opens the most Jira tickets ┐( ̄ヘ ̄)┌

Two Flavors: Delivery vs Resident Engineer

ACP sessions come in two modes, and the difference is easy to grasp.

One-shot (run): hand off a task, agent finishes and leaves. Like ordering food delivery — the driver drops off your chicken cutlet and disappears. You don’t ask them to stay for dinner.

/acp spawn codex --mode oneshot --thread off

Persistent (session): the agent stays alive and you keep talking to it. More like hiring a day-rate contractor — finish one task, immediately say “oh, also fix that bug while you’re at it.”

/acp spawn codex --mode persistent --thread auto

But persistent mode’s real magic comes with thread binding — the agent lives inside a Discord thread or Telegram topic, and every message you send there automatically routes to the same session. It’s like giving the agent their own office.

Clawd Clawd 溫馨提示:

Choosing between one-shot and persistent is like ordering coffee: in a rush, get it to go (one-shot); want to hang out, sit down (persistent). But honestly, once you’ve tried persistent + thread binding, there’s no going back. It’s the dual monitor of agent workflows ( ̄▽ ̄)⁠/

Thread / Topic Binding: One Agent Per Room

This is ACP’s killer feature. And it now works on both Discord threads and Telegram forum topics.

Let me paint the old way first: you run Codex in your terminal, it finishes, then you manually copy the results, switch to Discord, find the right channel, paste, type “I’m done.” Every. Single. Time.

The ACP way: Codex lives inside that thread.

You type in the thread — agent receives it. Agent replies — it shows up right there. Teammates can watch the whole interaction. Close the session and the thread goes back to being a regular thread, no traces left.

Telegram has a nice bonus: when a bind succeeds, it auto-pins a confirmation message in the topic. One glance and you know “oh, Codex is running in this topic” — no scrolling through chat history to figure it out.

The --thread flag has three modes: auto (smart detection — bind to current thread if you’re in one, create a new one if not), here (only bind to current thread, error if you’re not in one), and off (no binding, results go to main channel).

Clawd Clawd 溫馨提示:

Thread binding solves an ancient problem: your AI conversations shouldn’t flood the main channel, or your teammates will want to hurt you. Binding to a thread = automatic isolation = peaceful coexistence. Same principle as office cubicles — not to cage you in, but so everyone else doesn’t have to listen to your phone calls (◕‿◕)

Swap Gear Mid-Game: No Restart Required

Here’s where people get pleasantly surprised.

Halfway through a session and you think “Codex isn’t cutting it, let me try Claude Code”? Want to adjust the timeout? Change permissions? No need to kill the session and start over. Just:

/acp model anthropic/claude-opus-4-5    # swap model
/acp timeout 120                         # change timeout
/acp permissions strict                  # adjust permissions
/acp steer focus on the failing tests    # nudge direction

Pay attention to /acp steer — it doesn’t restart the conversation. It adds a directional nudge on top of existing context. The agent remembers everything it’s done; it just gets a new hint: “hey, focus over here.” Like telling an engineer “park the other stuff, priority 1 is that crash” — they don’t forget what they were doing.

Management commands are equally intuitive: /acp status for state, /acp sessions to list recent sessions, /acp cancel to stop the current action without closing the session, /acp close to end the session and unbind.

Clawd Clawd 偷偷說:

Swapping models mid-session used to mean killing everything and starting fresh. Imagine playing a game and wanting to switch weapons, but the game says “please return to the main menu first.” What year is this? ACP lets you hot-swap. As it should be (๑•̀ㅂ•́)و✧

ACP vs Sub-agents: Clone vs Freelancer

OpenClaw has its own sub-agent system (sessions_spawn), so how is ACP different? I can explain it in one analogy.

Sub-agent = your shadow clone. Runs inside OpenClaw, shares the same token pool and context. Same capabilities as you, but it’s essentially a copy. Good for “translate this paragraph” or “summarize those notes.”

ACP = a freelance engineer you’ve hired. Runs as an independent process on your machine (Codex CLI, Claude Code CLI, etc.), with its own toolbox and full file system access. Good for writing code, running tests, debugging, reviewing PRs — the heavy lifting.

Shadow clones share your memory but have limited gear. Freelancers bring their own tools but need you to brief them.

Clawd Clawd 真心話:

If you’ve watched Naruto, this clicks instantly: sub-agents are Naruto’s shadow clones; ACP agents are the giant toad summons. Clones are just more of you. The toad shows up with its own weapons and attitude. And occasionally ignores your orders — ACP agents might do that too ╰(°▽°)⁠╯

Setup: Three Steps, Seriously

You might think configuration will be painful. It’s not. Three steps.

Step one — install the plugin:

openclaw plugins install @openclaw/acpx
openclaw config set plugins.entries.acpx.enabled true

Step two — enable ACP in config:

acp:
  enabled: true
  dispatch:
    enabled: true
  backend: "acpx"
  defaultAgent: "codex"
  allowedAgents: ["pi", "claude", "codex", "opencode", "gemini"]
  maxConcurrentSessions: 8

Step three — turn on thread binding (Discord, Telegram, or both):

channels:
  discord:
    threadBindings:
      enabled: true
      spawnAcpSessions: true
  telegram:
    threadBindings:
      spawnAcpSessions: true

Run /acp doctor to verify health, and you’re done.

If you always spawn the same agent with the same mode, set per-agent defaults in config so /acp spawn codex just works without flags. Same mental model as shell aliases — you don’t type ls -la --color=auto every time when you can just alias ll.

Clawd Clawd 忍不住說:

I know the moment you see YAML your eyes glaze over — but seriously, this might be the least config I’ve ever seen for a multi-agent system. Three steps, no custom code, no orchestration framework to learn. Easier than making instant noodles (okay, noodles don’t require YAML, but you get the point) ヽ(°〇°)ノ

Persistent Bindings: Survives Reboots

Thread bindings used to have one annoying problem: restart the gateway, and the binding vanishes. You’d spend your first five minutes every morning rebuilding your agent layout instead of writing code. Annoying.

Now there are persistent channel bindings. In your config’s bindings[] array, you permanently tie a Discord channel or Telegram topic to an ACP agent:

bindings:
  - type: "acp"
    agentId: "codex"
    match:
      channel: "discord"
      accountId: "default"
      peer:
        kind: "channel"
        id: "222222222222222222"
    acp:
      label: "codex-main"
  - type: "acp"
    agentId: "claude"
    match:
      channel: "telegram"
      accountId: "default"
      peer:
        kind: "group"
        id: "-1001234567890:topic:42"
    acp:
      cwd: "/workspace/repo-b"

Result: gateway restarts automatically restore the binding. Every message in that channel routes to the bound agent. /new and /reset reset the same session in place — no new session key.

Override precedence: bindings[].acp.* > agents.list[].runtime.acp.* > global defaults. Think CSS specificity — the more specific selector wins.

Clawd Clawd 插嘴:

Imagine a Discord channel called #codex-lab, dedicated to Codex interactions. Set a persistent binding and you’re done forever — boots up automatically, reconnects after crashes, teammates walk in whenever they want. True set-and-forget. Unlike my alarm clock app, where I set-and-forget and then I’m late (⌐■_■)

Live Progress and Audit Trails

Two features that look boring on paper but save your life in practice.

streamTo: “parent” — when dispatching ACP tasks via sessions_spawn, add this parameter and the agent’s progress streams back to you in real time. No more polling /acp status asking “are you done yet?” — it reports back on its own. Like having live delivery tracking instead of calling the driver every five minutes.

Session history persistence — after an agent finishes, the transcript is automatically saved. It also records spawned-session lineage (who dispatched whom). When you have five agents dispatching tasks to each other, you’ll need to know “which agent made this commit and who told it to.”

The Sandbox Wall

An important caveat: ACP sessions run on the host runtime, not inside the sandbox.

If your session is sandboxed, you cannot spawn ACP sessions — you’ll get an error. sandbox: "require" and runtime: "acp" are mutually exclusive. For sandbox-isolated tasks, use runtime: "subagent" instead.

This isn’t a bug. ACP’s whole value is full file system access and toolchain integration. Putting it in a sandbox is like hiring an engineer and not giving them a computer — what’s the point?

Clawd Clawd 碎碎念:

“Why can’t ACP run in a sandbox?” is like asking “why can’t firefighters wear spacesuits while fighting fires?” They could, technically, but they wouldn’t be able to do anything useful. Sometimes security and capability are a trade-off. Pick one ┐( ̄ヘ ̄)┌

ACP Provenance: You’ll Thank It When Things Go Wrong

Added in 2026.3.8. Three modes: off (no tracking), meta (retain ACP origin metadata and trace IDs), meta+receipt (metadata plus a visible receipt injected into the session).

openclaw acp --provenance off|meta|meta+receipt

You might think “I only have two or three agents, do I really need an audit trail?” The answer: not now, but when your agent count goes from three to thirteen, and one of them opens a PR at 3 AM that modifies your production config — you’ll want to know who did it.

It’s like git blame. When you’re writing code, you think “is this necessary?” When you’re debugging, you think “thank god this exists.”

You Don’t Need to Memorize Commands

After all those commands, you might be anxious: “do I need to memorize all this?” Nope.

Just talk to OpenClaw in plain language:

“Start a Codex session in a thread and check this repo’s failing tests”

OpenClaw figures out you want ACP runtime, picks Codex, opens a thread, sets persistent mode. You say what you want, the system decides how. That’s what agentic architecture should feel like — you don’t need to know how the engine works, you just tell it where you want to go.

So, Are Your Noodles Cold?

Back to our opening scene. 2 AM, three agents running in three threads. One writing a feature, one reviewing a PR, one fixing tests. You’re sitting in front of your screen, noodles finished, progress bars ticking along.

This used to require three terminals, three SSH sessions, constant alt-tabbing. Now you handle it all from your chat app. And persistent bindings mean everything’s still right where you left it when you come back tomorrow morning.

ACP isn’t some revolutionary new concept. It just connects tools you’re already using with the chat app you’re already in. But sometimes the best tools are the ones that make you forget tools exist at all.

Next time, we’ll talk about building an ACP setup UI with the Plugin SDK — so you don’t even have to touch YAML.

(◍•ᴗ•◍)