메인 콘텐츠로 건너뛰기

Documentation Index

Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt

Use this file to discover all available pages before exploring further.

Agent Client Protocol (ACP) 세션은 OpenClaw가 ACP 백엔드 Plugin을 통해 외부 코딩 하네스(예: Pi, Claude Code, Cursor, Copilot, Droid, OpenClaw ACP, OpenCode, Gemini CLI 및 기타 지원되는 ACPX 하네스)를 실행할 수 있게 합니다. 각 ACP 세션 생성은 백그라운드 작업으로 추적됩니다.
ACP는 기본 Codex 경로가 아니라 외부 하네스 경로입니다. 네이티브 Codex 앱 서버 Plugin은 /codex ... 제어와 에이전트 턴의 기본 openai/gpt-* 내장 런타임을 소유합니다. ACP는 /acp ... 제어와 sessions_spawn({ runtime: "acp" }) 세션을 소유합니다.Codex 또는 Claude Code를 외부 MCP 클라이언트로 기존 OpenClaw 채널 대화에 직접 연결하려면 ACP 대신 openclaw mcp serve를 사용하세요.

어떤 페이지가 필요하나요?

원하는 작업사용할 것참고
현재 대화에서 Codex 바인딩 또는 제어/codex bind, /codex threadscodex Plugin이 활성화되어 있을 때의 네이티브 Codex 앱 서버 경로입니다. 바인딩된 채팅 응답, 이미지 전달, 모델/빠른 모드/권한, 중지, 조정 제어가 포함됩니다. ACP는 명시적 대체 경로입니다
Claude Code, Gemini CLI, 명시적 Codex ACP 또는 다른 외부 하네스를 OpenClaw를 통해 실행이 페이지채팅 바인딩 세션, /acp spawn, sessions_spawn({ runtime: "acp" }), 백그라운드 작업, 런타임 제어
편집기 또는 클라이언트용 ACP 서버로 OpenClaw Gateway 세션 노출openclaw acp브리지 모드입니다. IDE/클라이언트가 stdio/WebSocket을 통해 OpenClaw에 ACP로 통신합니다
로컬 AI CLI를 텍스트 전용 대체 모델로 재사용CLI 백엔드ACP가 아닙니다. OpenClaw 도구도, ACP 제어도, 하네스 런타임도 없습니다

별도 설정 없이 작동하나요?

예, 공식 ACP 런타임 Plugin을 설치한 후 작동합니다.
openclaw plugins install @openclaw/acpx
openclaw config set plugins.entries.acpx.enabled true
소스 체크아웃은 pnpm install 후 로컬 extensions/acpx 워크스페이스 Plugin을 사용할 수 있습니다. 준비 상태 확인은 /acp doctor를 실행하세요. OpenClaw는 ACP가 실제로 사용 가능할 때만 에이전트에게 ACP 생성을 알려줍니다. ACP가 활성화되어 있어야 하고, 디스패치가 비활성화되어 있지 않아야 하며, 현재 세션이 샌드박스에 의해 차단되지 않아야 하고, 런타임 백엔드가 로드되어 있어야 합니다. 이러한 조건이 충족되지 않으면 에이전트가 사용할 수 없는 백엔드를 제안하지 않도록 ACP Plugin Skills와 sessions_spawn ACP 안내가 숨겨진 상태로 유지됩니다.
  • plugins.allow가 설정되어 있으면 제한적 Plugin 인벤터리이므로 반드시 acpx를 포함해야 합니다. 그렇지 않으면 설치된 ACP 백엔드가 의도적으로 차단되고 /acp doctor가 누락된 허용 목록 항목을 보고합니다.
  • Codex ACP 어댑터는 acpx Plugin과 함께 준비되며 가능하면 로컬에서 실행됩니다.
  • Codex ACP는 격리된 CODEX_HOME으로 실행됩니다. OpenClaw는 호스트 Codex 설정에서 신뢰할 수 있는 프로젝트 항목만 복사하고 활성 워크스페이스를 신뢰하며, 인증, 알림, 훅은 호스트 설정에 남겨 둡니다.
  • 다른 대상 하네스 어댑터는 처음 사용할 때 여전히 npx로 필요 시 가져올 수 있습니다.
  • 해당 하네스의 공급업체 인증은 여전히 호스트에 존재해야 합니다.
  • 호스트에 npm 또는 네트워크 액세스가 없으면 캐시를 미리 준비하거나 어댑터를 다른 방식으로 설치할 때까지 첫 실행 어댑터 가져오기가 실패합니다.
ACP는 실제 외부 하네스 프로세스를 실행합니다. OpenClaw는 라우팅, 백그라운드 작업 상태, 전달, 바인딩, 정책을 소유하고, 하네스는 공급자 로그인, 모델 카탈로그, 파일시스템 동작, 네이티브 도구를 소유합니다.OpenClaw를 의심하기 전에 다음을 확인하세요.
  • /acp doctor가 활성화되고 정상인 백엔드를 보고합니다.
  • 해당 허용 목록이 설정되어 있을 때 대상 id가 acp.allowedAgents에서 허용됩니다.
  • 하네스 명령이 Gateway 호스트에서 시작될 수 있습니다.
  • 해당 하네스(claude, codex, gemini, opencode, droid 등)에 공급자 인증이 존재합니다.
  • 선택한 모델이 해당 하네스에 존재합니다. 모델 id는 하네스 간에 이식되지 않습니다.
  • 요청한 cwd가 존재하고 접근 가능하거나, cwd를 생략하여 백엔드가 기본값을 사용하게 합니다.
  • 권한 모드가 작업과 일치합니다. 비대화형 세션은 네이티브 권한 프롬프트를 클릭할 수 없으므로 쓰기/실행이 많은 코딩 실행에는 일반적으로 헤드리스로 진행할 수 있는 ACPX 권한 프로필이 필요합니다.
OpenClaw Plugin 도구와 내장 OpenClaw 도구는 기본적으로 ACP 하네스에 노출되지 않습니다. 하네스가 해당 도구를 직접 호출해야 할 때만 ACP 에이전트 - 설정에서 명시적 MCP 브리지를 활성화하세요.

지원되는 하네스 대상

acpx 백엔드에서는 다음 하네스 id를 /acp spawn <id> 또는 sessions_spawn({ runtime: "acp", agentId: "<id>" }) 대상으로 사용하세요.
하네스 id일반적인 백엔드참고
claudeClaude Code ACP 어댑터호스트에 Claude Code 인증이 필요합니다.
codexCodex ACP 어댑터네이티브 /codex를 사용할 수 없거나 ACP가 요청된 경우에만 명시적 ACP 대체 경로입니다.
copilotGitHub Copilot ACP 어댑터Copilot CLI/런타임 인증이 필요합니다.
cursorCursor CLI ACP (cursor-agent acp)로컬 설치가 다른 ACP 진입점을 노출하는 경우 acpx 명령을 재정의하세요.
droidFactory Droid CLI하네스 환경에 Factory/Droid 인증 또는 FACTORY_API_KEY가 필요합니다.
geminiGemini CLI ACP 어댑터Gemini CLI 인증 또는 API 키 설정이 필요합니다.
iflowiFlow CLI어댑터 사용 가능 여부와 모델 제어는 설치된 CLI에 따라 달라집니다.
kilocodeKilo Code CLI어댑터 사용 가능 여부와 모델 제어는 설치된 CLI에 따라 달라집니다.
kimiKimi/Moonshot CLI호스트에 Kimi/Moonshot 인증이 필요합니다.
kiroKiro CLI어댑터 사용 가능 여부와 모델 제어는 설치된 CLI에 따라 달라집니다.
opencodeOpenCode ACP 어댑터OpenCode CLI/공급자 인증이 필요합니다.
openclawopenclaw acp를 통한 OpenClaw Gateway 브리지ACP를 인식하는 하네스가 OpenClaw Gateway 세션으로 다시 통신할 수 있게 합니다.
piPi/내장 OpenClaw 런타임OpenClaw 네이티브 하네스 실험에 사용됩니다.
qwenQwen Code / Qwen CLI호스트에 Qwen 호환 인증이 필요합니다.
사용자 지정 acpx 에이전트 별칭은 acpx 자체에서 구성할 수 있지만, OpenClaw 정책은 여전히 디스패치 전에 acp.allowedAgents와 모든 agents.list[].runtime.acp.agent 매핑을 확인합니다.

운영자 런북

채팅에서 빠른 /acp 흐름:
1

생성

/acp spawn claude --bind here, /acp spawn gemini --mode persistent --thread auto 또는 명시적 /acp spawn codex --bind here.
2

작업

바인딩된 대화나 스레드에서 계속 진행하거나 세션 키를 명시적으로 대상으로 지정합니다.
3

상태 확인

/acp status
4

조정

/acp model <provider/model>, /acp permissions <profile>, /acp timeout <seconds>.
5

방향 지정

컨텍스트를 교체하지 않고: /acp steer tighten logging and continue.
6

중지

/acp cancel(현재 턴) 또는 /acp close(세션 + 바인딩).
  • 생성은 ACP 런타임 세션을 만들거나 재개하고, OpenClaw 세션 저장소에 ACP 메타데이터를 기록하며, 실행이 부모 소유일 때 백그라운드 작업을 만들 수 있습니다.
  • 부모 소유 ACP 세션은 런타임 세션이 영구적이더라도 백그라운드 작업으로 취급됩니다. 완료 및 표면 간 전달은 일반적인 사용자 대상 채팅 세션처럼 동작하는 대신 부모 작업 알림자를 통해 이루어집니다.
  • 작업 유지 관리는 종료된 또는 고아가 된 부모 소유 일회성 ACP 세션을 닫습니다. 영구 ACP 세션은 활성 대화 바인딩이 남아 있는 동안 보존됩니다. 활성 바인딩이 없는 오래된 영구 세션은 소유 작업이 완료되었거나 작업 레코드가 사라진 뒤 조용히 재개될 수 없도록 닫힙니다.
  • 바인딩된 후속 메시지는 바인딩이 닫히거나, 포커스 해제되거나, 재설정되거나, 만료될 때까지 ACP 세션으로 직접 전달됩니다.
  • Gateway 명령은 로컬에 남습니다. /acp ..., /status, /unfocus는 바인딩된 ACP 하네스에 일반 프롬프트 텍스트로 전송되지 않습니다.
  • cancel은 백엔드가 취소를 지원할 때 활성 턴을 중단합니다. 바인딩이나 세션 메타데이터는 삭제하지 않습니다.
  • close는 OpenClaw 관점에서 ACP 세션을 종료하고 바인딩을 제거합니다. 하네스가 재개를 지원하는 경우 자체 업스트림 기록을 계속 유지할 수 있습니다.
  • acpx Plugin은 close 후 OpenClaw 소유 래퍼 및 어댑터 프로세스 트리를 정리하고, Gateway 시작 중 오래된 OpenClaw 소유 ACPX 고아 프로세스를 회수합니다.
  • 유휴 런타임 워커는 acp.runtime.ttlMinutes 후 정리 대상이 됩니다. 저장된 세션 메타데이터는 /acp sessions에서 계속 사용할 수 있습니다.
활성화되어 있을 때 네이티브 Codex Plugin으로 라우팅되어야 하는 자연어 트리거:
  • “이 Discord 채널을 Codex에 바인딩하세요.”
  • “이 채팅을 Codex 스레드 <id>에 연결하세요.”
  • “Codex 스레드를 표시한 다음 이 스레드를 바인딩하세요.”
Native Codex 대화 바인딩은 기본 채팅 제어 경로입니다. OpenClaw 동적 도구는 여전히 OpenClaw를 통해 실행되는 반면, shell/apply-patch 같은 Codex 네이티브 도구는 Codex 안에서 실행됩니다. Codex 네이티브 도구 이벤트의 경우, OpenClaw는 턴별 네이티브 훅 릴레이를 주입하여 Plugin 훅이 before_tool_call을 차단하고, after_tool_call을 관찰하며, Codex PermissionRequest 이벤트를 OpenClaw 승인으로 라우팅할 수 있게 합니다. Codex Stop 훅은 OpenClaw before_agent_finalize로 릴레이되며, 여기에서 Plugin은 Codex가 답변을 최종화하기 전에 모델 패스를 한 번 더 요청할 수 있습니다. 릴레이는 의도적으로 보수적으로 유지됩니다. Codex 네이티브 도구 인수를 변경하거나 Codex 스레드 레코드를 다시 쓰지 않습니다. ACP 런타임/세션 모델을 원할 때만 명시적 ACP를 사용하세요. 임베디드 Codex 지원 경계는 Codex 하니스 v1 지원 계약에 문서화되어 있습니다.
  • openai-codex/* - doctor가 복구한 레거시 Codex OAuth/구독 모델 경로.
  • openai/* - OpenAI 에이전트 턴을 위한 네이티브 Codex 앱 서버 임베디드 런타임.
  • /codex ... - 네이티브 Codex 대화 제어.
  • /acp ... 또는 runtime: "acp" - 명시적 ACP/acpx 제어.
ACP 런타임으로 라우팅해야 하는 트리거:
  • “이것을 일회성 Claude Code ACP 세션으로 실행하고 결과를 요약하세요.”
  • “이 작업에 Gemini CLI를 스레드에서 사용한 다음, 후속 작업을 같은 스레드에 유지하세요.”
  • “백그라운드 스레드에서 ACP를 통해 Codex를 실행하세요.”
OpenClaw는 runtime: "acp"를 선택하고, 하니스 agentId를 해석하며, 지원되는 경우 현재 대화나 스레드에 바인딩하고, 닫힘/만료 전까지 후속 메시지를 해당 세션으로 라우팅합니다. Codex는 ACP/acpx가 명시적이거나 요청된 작업에 네이티브 Codex Plugin을 사용할 수 없을 때만 이 경로를 따릅니다.sessions_spawn의 경우 ACP가 활성화되어 있고, 요청자가 샌드박스 처리되지 않았으며, ACP 런타임 백엔드가 로드된 경우에만 runtime: "acp"가 표시됩니다. acp.dispatch.enabled=false는 자동 ACP 스레드 디스패치를 일시 중지하지만 명시적 sessions_spawn({ runtime: "acp" }) 호출을 숨기거나 차단하지는 않습니다. 이는 codex, claude, droid, gemini, opencode 같은 ACP 하니스 ID를 대상으로 합니다. 해당 항목이 agents.list[].runtime.type="acp"로 명시적으로 구성되어 있지 않은 한 agents_list의 일반 OpenClaw 구성 에이전트 ID를 전달하지 마세요. 그렇지 않으면 기본 하위 에이전트 런타임을 사용하세요. OpenClaw 에이전트가 runtime.type="acp"로 구성되면 OpenClaw는 runtime.acp.agent를 기본 하니스 ID로 사용합니다.

ACP와 하위 에이전트 비교

외부 하니스 런타임을 원할 때 ACP를 사용하세요. codex Plugin이 활성화되어 있을 때 Codex 대화 바인딩/제어에는 네이티브 Codex 앱 서버를 사용하세요. OpenClaw 네이티브 위임 실행을 원할 때는 하위 에이전트를 사용하세요.
영역ACP 세션하위 에이전트 실행
런타임ACP 백엔드 Plugin(예: acpx)OpenClaw 네이티브 하위 에이전트 런타임
세션 키agent:<agentId>:acp:<uuid>agent:<agentId>:subagent:<uuid>
주요 명령/acp .../subagents ...
생성 도구runtime:"acp"가 포함된 sessions_spawnsessions_spawn(기본 런타임)
하위 에이전트도 참고하세요.

ACP가 Claude Code를 실행하는 방식

ACP를 통한 Claude Code의 스택은 다음과 같습니다.
  1. OpenClaw ACP 세션 제어 플레인.
  2. 공식 @openclaw/acpx 런타임 Plugin.
  3. Claude ACP 어댑터.
  4. Claude 측 런타임/세션 메커니즘.
ACP Claude는 ACP 제어, 세션 재개, 백그라운드 작업 추적, 선택적 대화/스레드 바인딩을 갖춘 하니스 세션입니다. CLI 백엔드는 별도의 텍스트 전용 로컬 폴백 런타임입니다. 자세한 내용은 CLI 백엔드를 참고하세요. 운영자를 위한 실제 규칙은 다음과 같습니다.
  • /acp spawn, 바인딩 가능한 세션, 런타임 제어, 또는 지속적인 하니스 작업을 원하나요? ACP를 사용하세요.
  • 원시 CLI를 통한 단순 로컬 텍스트 폴백을 원하나요? CLI 백엔드를 사용하세요.

바인딩된 세션

멘탈 모델

  • 채팅 표면 - 사람들이 계속 대화하는 위치(Discord 채널, Telegram 토픽, iMessage 채팅).
  • ACP 세션 - OpenClaw가 라우팅하는 지속성 Codex/Claude/Gemini 런타임 상태.
  • 자식 스레드/토픽 - --thread ...에 의해서만 생성되는 선택적 추가 메시징 표면.
  • 런타임 작업 공간 - 하니스가 실행되는 파일시스템 위치(cwd, 저장소 체크아웃, 백엔드 작업 공간). 채팅 표면과는 독립적입니다.

현재 대화 바인딩

/acp spawn <harness> --bind here는 현재 대화를 생성된 ACP 세션에 고정합니다. 자식 스레드는 없고 같은 채팅 표면입니다. OpenClaw는 전송, 인증, 안전, 전달을 계속 소유합니다. 해당 대화의 후속 메시지는 같은 세션으로 라우팅됩니다. /new/reset은 세션을 제자리에서 재설정하고, /acp close는 바인딩을 제거합니다. 예:
/codex bind                                              # native Codex bind, route future messages here
/codex model gpt-5.4                                     # tune the bound native Codex thread
/codex stop                                              # control the active native Codex turn
/acp spawn codex --bind here                             # explicit ACP fallback for Codex
/acp spawn codex --thread auto                           # may create a child thread/topic and bind there
/acp spawn codex --bind here --cwd /workspace/repo       # same chat binding, Codex runs in /workspace/repo
  • --bind here--thread ...는 서로 배타적입니다.
  • --bind here는 현재 대화 바인딩을 표시하는 채널에서만 작동합니다. 그렇지 않으면 OpenClaw가 명확한 미지원 메시지를 반환합니다. 바인딩은 Gateway 재시작 후에도 유지됩니다.
  • Discord에서는 spawnSessions--thread auto|here에 대한 자식 스레드 생성을 제한합니다. --bind here는 해당하지 않습니다.
  • --cwd 없이 다른 ACP 에이전트로 생성하면 OpenClaw는 기본적으로 대상 에이전트의 작업 공간을 상속합니다. 누락된 상속 경로(ENOENT/ENOTDIR)는 백엔드 기본값으로 폴백합니다. 기타 접근 오류(예: EACCES)는 생성 오류로 표시됩니다.
  • Gateway 관리 명령은 바인딩된 대화에서 로컬로 유지됩니다. 일반 후속 텍스트가 바인딩된 ACP 세션으로 라우팅되더라도 /acp ... 명령은 OpenClaw가 처리합니다. /status/unfocus도 해당 표면에 대해 명령 처리가 활성화되어 있으면 항상 로컬에 유지됩니다.
채널 어댑터에 대해 스레드 바인딩이 활성화된 경우:
  • OpenClaw는 스레드를 대상 ACP 세션에 바인딩합니다.
  • 해당 스레드의 후속 메시지는 바인딩된 ACP 세션으로 라우팅됩니다.
  • ACP 출력은 같은 스레드로 다시 전달됩니다.
  • unfocus/닫기/아카이브/유휴 시간 초과 또는 최대 수명 만료는 바인딩을 제거합니다.
  • /acp close, /acp cancel, /acp status, /status, /unfocus는 Gateway 명령이며 ACP 하니스에 대한 프롬프트가 아닙니다.
스레드 바인딩 ACP에 필요한 기능 플래그:
  • acp.enabled=true
  • acp.dispatch.enabled는 기본적으로 켜져 있습니다(자동 ACP 스레드 디스패치를 일시 중지하려면 false로 설정하세요. 명시적 sessions_spawn({ runtime: "acp" }) 호출은 계속 작동합니다).
  • 채널 어댑터 스레드 세션 생성 활성화(기본값: true):
    • Discord: channels.discord.threadBindings.spawnSessions=true
    • Telegram: channels.telegram.threadBindings.spawnSessions=true
스레드 바인딩 지원은 어댑터별로 다릅니다. 활성 채널 어댑터가 스레드 바인딩을 지원하지 않으면 OpenClaw는 명확한 미지원/사용 불가 메시지를 반환합니다.
  • 세션/스레드 바인딩 기능을 노출하는 모든 채널 어댑터.
  • 현재 기본 제공 지원: Discord 스레드/채널, Telegram 토픽(그룹/슈퍼그룹의 포럼 토픽 및 DM 토픽).
  • Plugin 채널은 같은 바인딩 인터페이스를 통해 지원을 추가할 수 있습니다.

지속성 채널 바인딩

비일시적 워크플로의 경우 최상위 bindings[] 항목에서 지속성 ACP 바인딩을 구성하세요.

바인딩 모델

bindings[].type
"acp"
지속성 ACP 대화 바인딩으로 표시합니다.
bindings[].match
object
대상 대화를 식별합니다. 채널별 형태:
  • Discord 채널/스레드: match.channel="discord" + match.peer.id="<channelOrThreadId>"
  • Slack 채널/DM: match.channel="slack" + match.peer.id="<channelId|channel:<channelId>|#<channelId>|userId|user:<userId>|slack:<userId>|<@userId>>". 안정적인 Slack ID를 선호하세요. 채널 바인딩은 해당 채널의 스레드 내부 답글에도 일치합니다.
  • Telegram 포럼 토픽: match.channel="telegram" + match.peer.id="<chatId>:topic:<topicId>"
  • iMessage DM/그룹: match.channel="imessage" + match.peer.id="<handle|chat_id:*|chat_guid:*|chat_identifier:*>". 안정적인 그룹 바인딩에는 chat_id:*를 선호하세요.
bindings[].agentId
string
소유 OpenClaw 에이전트 ID입니다.
bindings[].acp.mode
"persistent" | "oneshot"
선택적 ACP 재정의입니다.
bindings[].acp.label
string
선택적 운영자 표시 레이블입니다.
bindings[].acp.cwd
string
선택적 런타임 작업 디렉터리입니다.
bindings[].acp.backend
string
선택적 백엔드 재정의입니다.

에이전트별 런타임 기본값

에이전트마다 ACP 기본값을 한 번 정의하려면 agents.list[].runtime을 사용하세요.
  • agents.list[].runtime.type="acp"
  • agents.list[].runtime.acp.agent(하니스 ID, 예: codex 또는 claude)
  • agents.list[].runtime.acp.backend
  • agents.list[].runtime.acp.mode
  • agents.list[].runtime.acp.cwd
ACP 바인딩 세션의 재정의 우선순위:
  1. bindings[].acp.*
  2. agents.list[].runtime.acp.*
  3. 전역 ACP 기본값(예: acp.backend)

{
  agents: {
    list: [
      {
        id: "codex",
        runtime: {
          type: "acp",
          acp: {
            agent: "codex",
            backend: "acpx",
            mode: "persistent",
            cwd: "/workspace/openclaw",
          },
        },
      },
      {
        id: "claude",
        runtime: {
          type: "acp",
          acp: { agent: "claude", backend: "acpx", mode: "persistent" },
        },
      },
    ],
  },
  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" },
    },
    {
      type: "route",
      agentId: "main",
      match: { channel: "discord", accountId: "default" },
    },
    {
      type: "route",
      agentId: "main",
      match: { channel: "telegram", accountId: "default" },
    },
  ],
  channels: {
    discord: {
      guilds: {
        "111111111111111111": {
          channels: {
            "222222222222222222": { requireMention: false },
          },
        },
      },
    },
    telegram: {
      groups: {
        "-1001234567890": {
          topics: { "42": { requireMention: false } },
        },
      },
    },
  },
}

동작

  • OpenClaw는 사용 전에 구성된 ACP 세션이 존재하는지 확인합니다.
  • 해당 채널 또는 토픽의 메시지는 구성된 ACP 세션으로 라우팅됩니다.
  • 바인딩된 대화에서 /new/reset은 동일한 ACP 세션 키를 제자리에서 재설정합니다.
  • 임시 런타임 바인딩(예: 스레드 포커스 흐름에서 생성된 바인딩)은 존재하는 경우 계속 적용됩니다.
  • 명시적 cwd 없이 에이전트 간 ACP 생성을 수행하면 OpenClaw는 에이전트 구성에서 대상 에이전트 워크스페이스를 상속합니다.
  • 상속된 워크스페이스 경로가 없으면 백엔드 기본 cwd로 폴백합니다. 누락이 아닌 접근 실패는 생성 오류로 표시됩니다.

ACP 세션 시작

ACP 세션을 시작하는 두 가지 방법:
에이전트 턴 또는 도구 호출에서 ACP 세션을 시작하려면 runtime: "acp"를 사용합니다.
{
  "task": "Open the repo and summarize failing tests",
  "runtime": "acp",
  "agentId": "codex",
  "thread": true,
  "mode": "session"
}
runtime의 기본값은 subagent이므로 ACP 세션에는 runtime: "acp"를 명시적으로 설정하세요. agentId가 생략되면 OpenClaw는 구성된 경우 acp.defaultAgent를 사용합니다. mode: "session"은 지속적인 바인딩 대화를 유지하기 위해 thread: true가 필요합니다.

sessions_spawn 매개변수

task
string
필수
ACP 세션으로 전송되는 초기 프롬프트입니다.
runtime
"acp"
필수
ACP 세션에는 반드시 "acp"여야 합니다.
agentId
string
ACP 대상 하네스 ID입니다. 설정된 경우 acp.defaultAgent로 폴백합니다.
thread
boolean
기본값:"false"
지원되는 경우 스레드 바인딩 흐름을 요청합니다.
mode
"run" | "session"
기본값:"run"
"run"은 일회성이고, "session"은 지속적입니다. thread: true이고 mode가 생략되면 OpenClaw는 런타임 경로별로 지속 동작을 기본값으로 사용할 수 있습니다. mode: "session"thread: true가 필요합니다.
cwd
string
요청된 런타임 작업 디렉터리입니다(백엔드/런타임 정책으로 검증됨). 생략하면 ACP 생성은 구성된 경우 대상 에이전트 워크스페이스를 상속합니다. 상속된 경로가 없으면 백엔드 기본값으로 폴백하고, 실제 접근 오류는 반환됩니다.
label
string
세션/배너 텍스트에 사용되는 운영자 대상 레이블입니다.
resumeSessionId
string
새 ACP 세션을 만드는 대신 기존 ACP 세션을 재개합니다. 에이전트는 session/load를 통해 대화 기록을 재생합니다. runtime: "acp"가 필요합니다.
streamTo
"parent"
"parent"는 초기 ACP 실행 진행 요약을 시스템 이벤트로 요청자 세션에 다시 스트리밍합니다. 수락된 응답에는 전체 릴레이 기록을 tail할 수 있는 세션 범위 JSONL 로그(<sessionId>.acp-stream.jsonl)를 가리키는 streamLogPath가 포함됩니다.
runTimeoutSeconds
number
N초 후 ACP 자식 턴을 중단합니다. 0은 턴을 Gateway의 시간 제한 없는 경로에 유지합니다. 동일한 값이 Gateway 실행과 ACP 런타임에 적용되므로 멈췄거나 할당량이 소진된 하네스가 부모 에이전트 레인을 무기한 점유하지 않습니다.
model
string
ACP 자식 세션의 명시적 모델 재정의입니다. Codex ACP 생성은 openai-codex/gpt-5.4 같은 OpenClaw Codex 참조를 session/new 전에 Codex ACP 시작 구성으로 정규화합니다. openai-codex/gpt-5.4/high 같은 슬래시 형식은 Codex ACP 추론 노력도 설정합니다. 다른 하네스는 ACP models를 광고하고 session/set_model을 지원해야 합니다. 그렇지 않으면 OpenClaw/acpx는 대상 에이전트 기본값으로 조용히 폴백하지 않고 명확히 실패합니다.
thinking
string
명시적 사고/추론 노력입니다. Codex ACP의 경우 minimal은 낮은 노력으로 매핑되고, low/medium/high/xhigh는 그대로 매핑되며, off는 추론 노력 시작 재정의를 생략합니다.

생성 바인딩 및 스레드 모드

모드동작
here현재 활성 대화를 제자리에서 바인딩합니다. 활성 대화가 없으면 실패합니다.
off현재 대화 바인딩을 만들지 않습니다.
참고:
  • --bind here는 “이 채널 또는 채팅을 Codex 기반으로 만들기” 위한 가장 단순한 운영자 경로입니다.
  • --bind here는 자식 스레드를 만들지 않습니다.
  • --bind here는 현재 대화 바인딩 지원을 노출하는 채널에서만 사용할 수 있습니다.
  • --bind--thread는 같은 /acp spawn 호출에서 함께 사용할 수 없습니다.

전달 모델

ACP 세션은 대화형 워크스페이스일 수도 있고 부모가 소유한 백그라운드 작업일 수도 있습니다. 전달 경로는 그 형태에 따라 달라집니다.
대화형 세션은 보이는 채팅 표면에서 계속 대화하도록 설계되었습니다.
  • /acp spawn ... --bind here는 현재 대화를 ACP 세션에 바인딩합니다.
  • /acp spawn ... --thread ...는 채널 스레드/토픽을 ACP 세션에 바인딩합니다.
  • 지속 구성된 bindings[].type="acp"는 일치하는 대화를 동일한 ACP 세션으로 라우팅합니다.
바인딩된 대화의 후속 메시지는 ACP 세션으로 직접 라우팅되며, ACP 출력은 동일한 채널/스레드/토픽으로 다시 전달됩니다.OpenClaw가 하네스에 보내는 내용:
  • 일반 바인딩 후속 메시지는 프롬프트 텍스트로 전송되며, 첨부 파일은 하네스/백엔드가 지원할 때만 포함됩니다.
  • /acp 관리 명령과 로컬 Gateway 명령은 ACP 디스패치 전에 가로챕니다.
  • 런타임에서 생성된 완료 이벤트는 대상별로 구체화됩니다. OpenClaw 에이전트는 OpenClaw의 내부 런타임 컨텍스트 봉투를 받고, 외부 ACP 하네스는 자식 결과와 지침이 포함된 일반 프롬프트를 받습니다. 원시 <<<BEGIN_OPENCLAW_INTERNAL_CONTEXT>>> 봉투는 외부 하네스로 전송되거나 ACP 사용자 기록 텍스트로 유지되어서는 안 됩니다.
  • ACP 기록 항목은 사용자에게 보이는 트리거 텍스트 또는 일반 완료 프롬프트를 사용합니다. 내부 이벤트 메타데이터는 가능한 경우 OpenClaw 안에서 구조화된 상태로 유지되며, 사용자가 작성한 채팅 콘텐츠로 취급되지 않습니다.
다른 에이전트 실행에서 생성된 일회성 ACP 세션은 하위 에이전트와 유사한 백그라운드 자식입니다.
  • 부모는 sessions_spawn({ runtime: "acp", mode: "run" })로 작업을 요청합니다.
  • 자식은 자체 ACP 하네스 세션에서 실행됩니다.
  • 자식 턴은 네이티브 하위 에이전트 생성에 사용되는 동일한 백그라운드 레인에서 실행되므로, 느린 ACP 하네스가 관련 없는 메인 세션 작업을 차단하지 않습니다.
  • 완료는 작업 완료 알림 경로를 통해 보고됩니다. OpenClaw는 외부 하네스로 보내기 전에 내부 완료 메타데이터를 일반 ACP 프롬프트로 변환하므로, 하네스는 OpenClaw 전용 런타임 컨텍스트 마커를 보지 않습니다.
  • 사용자 대상 응답이 유용한 경우 부모는 자식 결과를 일반 어시스턴트 목소리로 다시 작성합니다.
이 경로를 부모와 자식 간의 P2P 채팅으로 취급하지 마세요. 자식에는 이미 부모로 돌아가는 완료 채널이 있습니다.
sessions_send는 생성 후 다른 세션을 대상으로 삼을 수 있습니다. 일반 피어 세션의 경우 OpenClaw는 메시지를 주입한 뒤 에이전트 간(A2A) 후속 경로를 사용합니다.
  • 대상 세션의 응답을 기다립니다.
  • 선택적으로 요청자와 대상이 제한된 수의 후속 턴을 교환하도록 허용합니다.
  • 대상에게 알림 메시지를 생성하도록 요청합니다.
  • 해당 알림을 보이는 채널 또는 스레드로 전달합니다.
이 A2A 경로는 발신자에게 보이는 후속 응답이 필요한 피어 전송의 폴백입니다. 예를 들어 넓은 tools.sessions.visibility 설정에서 관련 없는 세션이 ACP 대상을 보고 메시지를 보낼 수 있을 때도 활성 상태로 유지됩니다.OpenClaw는 요청자가 자신이 소유한 부모 소유 일회성 ACP 자식의 부모인 경우에만 A2A 후속 처리를 건너뜁니다. 이 경우 작업 완료 위에 A2A를 실행하면 자식 결과로 부모를 깨우고, 부모의 응답을 다시 자식에게 전달하며, 부모/자식 에코 루프가 만들어질 수 있습니다. 해당 소유 자식 사례에서는 완료 경로가 이미 결과를 담당하므로 sessions_send 결과가 delivery.status="skipped"를 보고합니다.
새로 시작하는 대신 이전 ACP 세션을 계속하려면 resumeSessionId를 사용합니다. 에이전트는 session/load를 통해 대화 기록을 재생하므로, 이전에 있었던 모든 컨텍스트를 가지고 이어서 진행합니다.
{
  "task": "Continue where we left off - fix the remaining test failures",
  "runtime": "acp",
  "agentId": "codex",
  "resumeSessionId": "<previous-session-id>"
}
일반적인 사용 사례:
  • 노트북의 Codex 세션을 휴대폰으로 넘깁니다. 에이전트에게 중단한 지점부터 이어서 진행하라고 지시하세요.
  • CLI에서 대화형으로 시작한 코딩 세션을 이제 에이전트를 통해 헤드리스로 계속합니다.
  • Gateway 재시작 또는 유휴 시간 제한으로 중단된 작업을 이어서 진행합니다.
참고:
  • resumeSessionIdruntime: "acp"일 때만 적용됩니다. 기본 하위 에이전트 런타임은 이 ACP 전용 필드를 무시합니다.
  • streamToruntime: "acp"일 때만 적용됩니다. 기본 하위 에이전트 런타임은 이 ACP 전용 필드를 무시합니다.
  • resumeSessionId는 호스트 로컬 ACP/하네스 재개 ID이며, OpenClaw 채널 세션 키가 아닙니다. OpenClaw는 디스패치 전에 여전히 ACP 생성 정책과 대상 에이전트 정책을 확인하며, 해당 업스트림 ID를 로드할 권한 부여는 ACP 백엔드 또는 하네스가 소유합니다.
  • resumeSessionId는 업스트림 ACP 대화 기록을 복원합니다. threadmode는 생성하는 새 OpenClaw 세션에 정상적으로 계속 적용되므로, mode: "session"은 여전히 thread: true가 필요합니다.
  • 대상 에이전트는 session/load를 지원해야 합니다(Codex와 Claude Code는 지원함).
  • 세션 ID를 찾을 수 없으면 생성이 명확한 오류로 실패합니다. 새 세션으로 조용히 폴백하지 않습니다.
Gateway 배포 후에는 단위 테스트만 신뢰하지 말고 실시간 엔드투엔드 검사를 실행하세요.
  1. 대상 호스트에서 배포된 Gateway 버전과 커밋을 확인합니다.
  2. 라이브 에이전트에 임시 ACPX 브리지 세션을 엽니다.
  3. 해당 에이전트에게 runtime: "acp", agentId: "codex", mode: "run" 및 작업 Reply with exactly LIVE-ACP-SPAWN-OKsessions_spawn을 호출하도록 요청합니다.
  4. accepted=yes, 실제 childSessionKey, 검증기 오류가 없음을 확인합니다.
  5. 임시 브리지 세션을 정리합니다.
게이트는 mode: "run"에 유지하고 streamTo: "parent"는 건너뜁니다. 스레드에 바인딩된 mode: "session" 및 스트림 릴레이 경로는 별도의 더 풍부한 통합 패스입니다.

샌드박스 호환성

ACP 세션은 현재 OpenClaw 샌드박스 내부가 아니라 호스트 런타임에서 실행됩니다.
보안 경계:
  • 외부 하니스는 자체 CLI 권한과 선택된 cwd에 따라 읽고 쓸 수 있습니다.
  • OpenClaw의 샌드박스 정책은 ACP 하니스 실행을 감싸지 않습니다.
  • OpenClaw는 여전히 ACP 기능 게이트, 허용된 에이전트, 세션 소유권, 채널 바인딩 및 Gateway 전달 정책을 적용합니다.
  • 샌드박스가 적용되는 OpenClaw 네이티브 작업에는 runtime: "subagent"를 사용하세요.
현재 제한 사항:
  • 요청자 세션이 샌드박스 처리된 경우, sessions_spawn({ runtime: "acp" })/acp spawn 모두에서 ACP 스폰이 차단됩니다.
  • runtime: "acp"를 사용하는 sessions_spawnsandbox: "require"를 지원하지 않습니다.

세션 대상 해석

대부분의 /acp 작업은 선택적 세션 대상(session-key, session-id 또는 session-label)을 허용합니다. 해석 순서:
  1. 명시적 대상 인수(/acp steer의 경우 --session)
    • 키를 시도합니다
    • 그런 다음 UUID 형태의 세션 ID를 시도합니다
    • 그런 다음 레이블을 시도합니다
  2. 현재 스레드 바인딩(이 대화/스레드가 ACP 세션에 바인딩된 경우).
  3. 현재 요청자 세션 대체값.
현재 대화 바인딩과 스레드 바인딩은 모두 2단계에 참여합니다. 대상을 해석할 수 없으면 OpenClaw는 명확한 오류를 반환합니다 (Unable to resolve session target: ...).

ACP 제어

명령수행 작업
/acp spawnACP 세션을 생성합니다. 현재 바인딩 또는 스레드 바인딩은 선택 사항입니다./acp spawn codex --bind here --cwd /repo
/acp cancel대상 세션의 진행 중인 턴을 취소합니다./acp cancel agent:codex:acp:<uuid>
/acp steer실행 중인 세션에 조향 지시를 보냅니다./acp steer --session support inbox prioritize failing tests
/acp close세션을 닫고 스레드 대상 바인딩을 해제합니다./acp close
/acp status백엔드, 모드, 상태, 런타임 옵션, 기능을 표시합니다./acp status
/acp set-mode대상 세션의 런타임 모드를 설정합니다./acp set-mode plan
/acp set일반 런타임 설정 옵션을 씁니다./acp set model openai/gpt-5.4
/acp cwd런타임 작업 디렉터리 재정의를 설정합니다./acp cwd /Users/user/Projects/repo
/acp permissions승인 정책 프로필을 설정합니다./acp permissions strict
/acp timeout런타임 제한 시간(초)을 설정합니다./acp timeout 120
/acp model런타임 모델 재정의를 설정합니다./acp model anthropic/claude-opus-4-6
/acp reset-options세션 런타임 옵션 재정의를 제거합니다./acp reset-options
/acp sessions저장소에서 최근 ACP 세션을 나열합니다./acp sessions
/acp doctor백엔드 상태, 기능, 실행 가능한 수정 사항을 표시합니다./acp doctor
/acp install결정적 설치 및 활성화 단계를 출력합니다./acp install
/acp status는 유효한 런타임 옵션과 런타임 수준 및 백엔드 수준 세션 식별자를 표시합니다. 백엔드에 기능이 없으면 지원되지 않는 제어 오류가 명확하게 표시됩니다. /acp sessions는 현재 바인딩된 세션 또는 요청자 세션의 저장소를 읽습니다. 대상 토큰 (session-key, session-id 또는 session-label)은 사용자 지정 에이전트별 session.store 루트를 포함하여 Gateway 세션 발견을 통해 해석됩니다.

런타임 옵션 매핑

/acp에는 편의 명령과 일반 설정기가 있습니다. 동등한 작업:
명령매핑 대상참고
/acp model <id>런타임 설정 키 modelCodex ACP의 경우, OpenClaw는 openai-codex/<model>을 어댑터 모델 ID로 정규화하고 openai-codex/gpt-5.4/high와 같은 슬래시 추론 접미사를 reasoning_effort에 매핑합니다.
/acp set thinking <level>표준 옵션 thinkingOpenClaw는 존재하는 경우 백엔드가 광고한 동등 항목을 보내며, thinking, 그다음 effort, reasoning_effort 또는 thought_level을 선호합니다. Codex ACP의 경우 어댑터는 값을 reasoning_effort에 매핑합니다.
/acp permissions <profile>표준 옵션 permissionProfileOpenClaw는 존재하는 경우 approval_policy, permission_profile, permissions 또는 permission_mode와 같은 백엔드가 광고한 동등 항목을 보냅니다.
/acp timeout <seconds>표준 옵션 timeoutSecondsOpenClaw는 존재하는 경우 timeout 또는 timeout_seconds와 같은 백엔드가 광고한 동등 항목을 보냅니다.
/acp cwd <path>런타임 cwd 재정의직접 업데이트합니다.
/acp set <key> <value>일반key=cwd는 cwd 재정의 경로를 사용합니다.
/acp reset-options모든 런타임 재정의를 지웁니다-

acpx 하니스, Plugin 설정 및 권한

acpx 하니스 설정(Claude Code / Codex / Gemini CLI 별칭), plugin-tools 및 OpenClaw-tools MCP 브리지, ACP 권한 모드는 ACP 에이전트 - 설정을 참조하세요.

문제 해결

증상가능성 높은 원인수정 방법
ACP runtime backend is not configured백엔드 Plugin이 누락되었거나, 비활성화되었거나, plugins.allow에 의해 차단되었습니다.백엔드 Plugin을 설치하고 활성화한 뒤, 해당 허용 목록이 설정된 경우 plugins.allowacpx를 포함하고 /acp doctor를 실행하세요.
ACP is disabled by policy (acp.enabled=false)ACP가 전역적으로 비활성화되었습니다.acp.enabled=true로 설정하세요.
ACP dispatch is disabled by policy (acp.dispatch.enabled=false)일반 스레드 메시지에서의 자동 디스패치가 비활성화되었습니다.자동 스레드 라우팅을 다시 시작하려면 acp.dispatch.enabled=true로 설정하세요. 명시적인 sessions_spawn({ runtime: "acp" }) 호출은 계속 작동합니다.
ACP agent "<id>" is not allowed by policy에이전트가 허용 목록에 없습니다.허용된 agentId를 사용하거나 acp.allowedAgents를 업데이트하세요.
/acp doctor reports backend not ready right after startup백엔드 Plugin이 누락되었거나, 비활성화되었거나, 허용/거부 정책에 의해 차단되었거나, 구성된 실행 파일을 사용할 수 없습니다.백엔드 Plugin을 설치/활성화하고 /acp doctor를 다시 실행한 뒤, 계속 비정상 상태이면 백엔드 설치 또는 정책 오류를 확인하세요.
Harness command not found어댑터 CLI가 설치되지 않았거나, 외부 Plugin이 누락되었거나, Codex가 아닌 어댑터의 최초 실행 npx 가져오기에 실패했습니다./acp doctor를 실행하고, Gateway 호스트에 어댑터를 설치/사전 준비하거나, acpx 에이전트 명령을 명시적으로 구성하세요.
Model-not-found from the harness모델 ID가 다른 공급자/하네스에는 유효하지만 이 ACP 대상에는 유효하지 않습니다.해당 하네스에 나열된 모델을 사용하거나, 하네스에서 모델을 구성하거나, 재정의를 생략하세요.
Vendor auth error from the harnessOpenClaw는 정상이나 대상 CLI/공급자에 로그인되어 있지 않습니다.Gateway 호스트 환경에서 로그인하거나 필요한 공급자 키를 제공하세요.
Unable to resolve session target: ...키/ID/레이블 토큰이 잘못되었습니다./acp sessions를 실행하고 정확한 키/레이블을 복사한 뒤 다시 시도하세요.
--bind here requires running /acp spawn inside an active ... conversation활성 바인딩 가능 대화 없이 --bind here가 사용되었습니다.대상 채팅/채널로 이동해 다시 시도하거나, 바인딩되지 않은 spawn을 사용하세요.
Conversation bindings are unavailable for <channel>.어댑터에 현재 대화 ACP 바인딩 기능이 없습니다.지원되는 경우 /acp spawn ... --thread ...를 사용하거나, 최상위 bindings[]를 구성하거나, 지원되는 채널로 이동하세요.
--thread here requires running /acp spawn inside an active ... thread스레드 컨텍스트 밖에서 --thread here가 사용되었습니다.대상 스레드로 이동하거나 --thread auto/off를 사용하세요.
Only <user-id> can rebind this channel/conversation/thread.다른 사용자가 활성 바인딩 대상을 소유하고 있습니다.소유자로 다시 바인딩하거나 다른 대화 또는 스레드를 사용하세요.
Thread bindings are unavailable for <channel>.어댑터에 스레드 바인딩 기능이 없습니다.--thread off를 사용하거나 지원되는 어댑터/채널로 이동하세요.
Sandboxed sessions cannot spawn ACP sessions ...ACP 런타임은 호스트 측에서 실행되며, 요청자 세션이 샌드박스 처리되어 있습니다.샌드박스 처리된 세션에서는 runtime="subagent"를 사용하거나, 샌드박스 처리되지 않은 세션에서 ACP spawn을 실행하세요.
sessions_spawn sandbox="require" is unsupported for runtime="acp" ...ACP 런타임에 sandbox="require"가 요청되었습니다.필수 샌드박싱에는 runtime="subagent"를 사용하거나, 샌드박스 처리되지 않은 세션에서 sandbox="inherit"로 ACP를 사용하세요.
Cannot apply --model ... did not advertise model support대상 하네스가 일반 ACP 모델 전환을 노출하지 않습니다.ACP models/session/set_model을 광고하는 하네스를 사용하거나, Codex ACP 모델 참조를 사용하거나, 자체 시작 플래그가 있는 경우 하네스에서 직접 모델을 구성하세요.
Missing ACP metadata for bound sessionACP 세션 메타데이터가 오래되었거나 삭제되었습니다./acp spawn으로 다시 생성한 뒤 스레드를 다시 바인딩/포커스하세요.
AcpRuntimeError: Permission prompt unavailable in non-interactive modepermissionMode가 비대화형 ACP 세션에서 쓰기/실행을 차단합니다.plugins.entries.acpx.config.permissionModeapprove-all로 설정하고 Gateway를 다시 시작하세요. 권한 구성을 참고하세요.
ACP session fails early with little output권한 프롬프트가 permissionMode/nonInteractivePermissions에 의해 차단됩니다.Gateway 로그에서 AcpRuntimeError를 확인하세요. 전체 권한은 permissionMode=approve-all로 설정하고, 정상적인 성능 저하는 nonInteractivePermissions=deny로 설정하세요.
ACP session stalls indefinitely after completing work하네스 프로세스는 완료되었지만 ACP 세션이 완료를 보고하지 않았습니다.OpenClaw를 업데이트하세요. 현재 acpx 정리는 종료 시와 Gateway 시작 시 OpenClaw 소유의 오래된 래퍼 및 어댑터 프로세스를 회수합니다.
Harness sees <<<BEGIN_OPENCLAW_INTERNAL_CONTEXT>>>내부 이벤트 엔벌로프가 ACP 경계를 넘어 유출되었습니다.OpenClaw를 업데이트하고 완료 흐름을 다시 실행하세요. 외부 하네스는 일반 완료 프롬프트만 받아야 합니다.

관련 항목