Agent Client Protocol (ACP) 세션은 OpenClaw가 ACP 백엔드 Plugin을 통해 외부 코딩 하네스(예: Pi, Claude Code, Cursor, Copilot, Droid, OpenClaw ACP, OpenCode, Gemini CLI 및 기타 지원되는 ACPX 하네스)를 실행할 수 있게 합니다. 각 ACP 세션 생성은 백그라운드 작업으로 추적됩니다.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.
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 threads | codex 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을 설치한 후 작동합니다.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 어댑터는
acpxPlugin과 함께 준비되며 가능하면 로컬에서 실행됩니다. - 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 권한 프로필이 필요합니다.
지원되는 하네스 대상
acpx 백엔드에서는 다음 하네스 id를 /acp spawn <id> 또는
sessions_spawn({ runtime: "acp", agentId: "<id>" }) 대상으로 사용하세요.
| 하네스 id | 일반적인 백엔드 | 참고 |
|---|---|---|
claude | Claude Code ACP 어댑터 | 호스트에 Claude Code 인증이 필요합니다. |
codex | Codex ACP 어댑터 | 네이티브 /codex를 사용할 수 없거나 ACP가 요청된 경우에만 명시적 ACP 대체 경로입니다. |
copilot | GitHub Copilot ACP 어댑터 | Copilot CLI/런타임 인증이 필요합니다. |
cursor | Cursor CLI ACP (cursor-agent acp) | 로컬 설치가 다른 ACP 진입점을 노출하는 경우 acpx 명령을 재정의하세요. |
droid | Factory Droid CLI | 하네스 환경에 Factory/Droid 인증 또는 FACTORY_API_KEY가 필요합니다. |
gemini | Gemini CLI ACP 어댑터 | Gemini CLI 인증 또는 API 키 설정이 필요합니다. |
iflow | iFlow CLI | 어댑터 사용 가능 여부와 모델 제어는 설치된 CLI에 따라 달라집니다. |
kilocode | Kilo Code CLI | 어댑터 사용 가능 여부와 모델 제어는 설치된 CLI에 따라 달라집니다. |
kimi | Kimi/Moonshot CLI | 호스트에 Kimi/Moonshot 인증이 필요합니다. |
kiro | Kiro CLI | 어댑터 사용 가능 여부와 모델 제어는 설치된 CLI에 따라 달라집니다. |
opencode | OpenCode ACP 어댑터 | OpenCode CLI/공급자 인증이 필요합니다. |
openclaw | openclaw acp를 통한 OpenClaw Gateway 브리지 | ACP를 인식하는 하네스가 OpenClaw Gateway 세션으로 다시 통신할 수 있게 합니다. |
pi | Pi/내장 OpenClaw 런타임 | OpenClaw 네이티브 하네스 실험에 사용됩니다. |
qwen | Qwen Code / Qwen CLI | 호스트에 Qwen 호환 인증이 필요합니다. |
acp.allowedAgents와 모든
agents.list[].runtime.acp.agent 매핑을 확인합니다.
운영자 런북
채팅에서 빠른/acp 흐름:
생성
/acp spawn claude --bind here,
/acp spawn gemini --mode persistent --thread auto 또는 명시적
/acp spawn codex --bind here.수명 주기 세부 정보
수명 주기 세부 정보
- 생성은 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 라우팅 규칙
네이티브 Codex 라우팅 규칙
활성화되어 있을 때 네이티브 Codex Plugin으로 라우팅되어야 하는
자연어 트리거:
- “이 Discord 채널을 Codex에 바인딩하세요.”
- “이 채팅을 Codex 스레드
<id>에 연결하세요.” - “Codex 스레드를 표시한 다음 이 스레드를 바인딩하세요.”
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 라우팅 자연어 트리거
ACP 라우팅 자연어 트리거
ACP 런타임으로 라우팅해야 하는 트리거:
- “이것을 일회성 Claude Code ACP 세션으로 실행하고 결과를 요약하세요.”
- “이 작업에 Gemini CLI를 스레드에서 사용한 다음, 후속 작업을 같은 스레드에 유지하세요.”
- “백그라운드 스레드에서 ACP를 통해 Codex를 실행하세요.”
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_spawn | sessions_spawn(기본 런타임) |
ACP가 Claude Code를 실행하는 방식
ACP를 통한 Claude Code의 스택은 다음과 같습니다.- OpenClaw ACP 세션 제어 플레인.
- 공식
@openclaw/acpx런타임 Plugin. - Claude ACP 어댑터.
- Claude 측 런타임/세션 메커니즘.
/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는 바인딩을 제거합니다.
예:
바인딩 규칙 및 배타성
바인딩 규칙 및 배타성
--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.enabled=trueacp.dispatch.enabled는 기본적으로 켜져 있습니다(자동 ACP 스레드 디스패치를 일시 중지하려면false로 설정하세요. 명시적sessions_spawn({ runtime: "acp" })호출은 계속 작동합니다).- 채널 어댑터 스레드 세션 생성 활성화(기본값:
true):- Discord:
channels.discord.threadBindings.spawnSessions=true - Telegram:
channels.telegram.threadBindings.spawnSessions=true
- Discord:
스레드를 지원하는 채널
스레드를 지원하는 채널
- 세션/스레드 바인딩 기능을 노출하는 모든 채널 어댑터.
- 현재 기본 제공 지원: Discord 스레드/채널, Telegram 토픽(그룹/슈퍼그룹의 포럼 토픽 및 DM 토픽).
- Plugin 채널은 같은 바인딩 인터페이스를 통해 지원을 추가할 수 있습니다.
지속성 채널 바인딩
비일시적 워크플로의 경우 최상위bindings[] 항목에서
지속성 ACP 바인딩을 구성하세요.
바인딩 모델
지속성 ACP 대화 바인딩으로 표시합니다.
대상 대화를 식별합니다. 채널별 형태:
- 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:*를 선호하세요.
소유 OpenClaw 에이전트 ID입니다.
선택적 ACP 재정의입니다.
선택적 운영자 표시 레이블입니다.
선택적 런타임 작업 디렉터리입니다.
선택적 백엔드 재정의입니다.
에이전트별 런타임 기본값
에이전트마다 ACP 기본값을 한 번 정의하려면agents.list[].runtime을 사용하세요.
agents.list[].runtime.type="acp"agents.list[].runtime.acp.agent(하니스 ID, 예:codex또는claude)agents.list[].runtime.acp.backendagents.list[].runtime.acp.modeagents.list[].runtime.acp.cwd
bindings[].acp.*agents.list[].runtime.acp.*- 전역 ACP 기본값(예:
acp.backend)
예
동작
- OpenClaw는 사용 전에 구성된 ACP 세션이 존재하는지 확인합니다.
- 해당 채널 또는 토픽의 메시지는 구성된 ACP 세션으로 라우팅됩니다.
- 바인딩된 대화에서
/new와/reset은 동일한 ACP 세션 키를 제자리에서 재설정합니다. - 임시 런타임 바인딩(예: 스레드 포커스 흐름에서 생성된 바인딩)은 존재하는 경우 계속 적용됩니다.
- 명시적
cwd없이 에이전트 간 ACP 생성을 수행하면 OpenClaw는 에이전트 구성에서 대상 에이전트 워크스페이스를 상속합니다. - 상속된 워크스페이스 경로가 없으면 백엔드 기본 cwd로 폴백합니다. 누락이 아닌 접근 실패는 생성 오류로 표시됩니다.
ACP 세션 시작
ACP 세션을 시작하는 두 가지 방법:- From sessions_spawn
- From /acp command
에이전트 턴 또는 도구 호출에서 ACP 세션을 시작하려면
runtime: "acp"를 사용합니다.runtime의 기본값은 subagent이므로 ACP 세션에는 runtime: "acp"를 명시적으로 설정하세요. agentId가 생략되면 OpenClaw는 구성된 경우 acp.defaultAgent를 사용합니다. mode: "session"은 지속적인 바인딩 대화를 유지하기 위해 thread: true가 필요합니다.sessions_spawn 매개변수
ACP 세션으로 전송되는 초기 프롬프트입니다.
ACP 세션에는 반드시
"acp"여야 합니다.ACP 대상 하네스 ID입니다. 설정된 경우
acp.defaultAgent로 폴백합니다.지원되는 경우 스레드 바인딩 흐름을 요청합니다.
"run"은 일회성이고, "session"은 지속적입니다. thread: true이고 mode가 생략되면 OpenClaw는 런타임 경로별로 지속 동작을 기본값으로 사용할 수 있습니다. mode: "session"은 thread: true가 필요합니다.요청된 런타임 작업 디렉터리입니다(백엔드/런타임 정책으로 검증됨). 생략하면 ACP 생성은 구성된 경우 대상 에이전트 워크스페이스를 상속합니다. 상속된 경로가 없으면 백엔드 기본값으로 폴백하고, 실제 접근 오류는 반환됩니다.
세션/배너 텍스트에 사용되는 운영자 대상 레이블입니다.
새 ACP 세션을 만드는 대신 기존 ACP 세션을 재개합니다. 에이전트는
session/load를 통해 대화 기록을 재생합니다. runtime: "acp"가 필요합니다."parent"는 초기 ACP 실행 진행 요약을 시스템 이벤트로 요청자 세션에 다시 스트리밍합니다. 수락된 응답에는 전체 릴레이 기록을 tail할 수 있는 세션 범위 JSONL 로그(<sessionId>.acp-stream.jsonl)를 가리키는 streamLogPath가 포함됩니다.N초 후 ACP 자식 턴을 중단합니다.
0은 턴을 Gateway의 시간 제한 없는 경로에 유지합니다. 동일한 값이 Gateway 실행과 ACP 런타임에 적용되므로 멈췄거나 할당량이 소진된 하네스가 부모 에이전트 레인을 무기한 점유하지 않습니다.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는 대상 에이전트 기본값으로 조용히 폴백하지 않고 명확히 실패합니다.명시적 사고/추론 노력입니다. Codex ACP의 경우
minimal은 낮은 노력으로 매핑되고, low/medium/high/xhigh는 그대로 매핑되며, off는 추론 노력 시작 재정의를 생략합니다.생성 바인딩 및 스레드 모드
- --bind here|off
- --thread auto|here|off
| 모드 | 동작 |
|---|---|
here | 현재 활성 대화를 제자리에서 바인딩합니다. 활성 대화가 없으면 실패합니다. |
off | 현재 대화 바인딩을 만들지 않습니다. |
--bind here는 “이 채널 또는 채팅을 Codex 기반으로 만들기” 위한 가장 단순한 운영자 경로입니다.--bind here는 자식 스레드를 만들지 않습니다.--bind here는 현재 대화 바인딩 지원을 노출하는 채널에서만 사용할 수 있습니다.--bind와--thread는 같은/acp spawn호출에서 함께 사용할 수 없습니다.
전달 모델
ACP 세션은 대화형 워크스페이스일 수도 있고 부모가 소유한 백그라운드 작업일 수도 있습니다. 전달 경로는 그 형태에 따라 달라집니다.Interactive ACP sessions
Interactive ACP sessions
대화형 세션은 보이는 채팅 표면에서 계속 대화하도록 설계되었습니다.
/acp spawn ... --bind here는 현재 대화를 ACP 세션에 바인딩합니다./acp spawn ... --thread ...는 채널 스레드/토픽을 ACP 세션에 바인딩합니다.- 지속 구성된
bindings[].type="acp"는 일치하는 대화를 동일한 ACP 세션으로 라우팅합니다.
- 일반 바인딩 후속 메시지는 프롬프트 텍스트로 전송되며, 첨부 파일은 하네스/백엔드가 지원할 때만 포함됩니다.
/acp관리 명령과 로컬 Gateway 명령은 ACP 디스패치 전에 가로챕니다.- 런타임에서 생성된 완료 이벤트는 대상별로 구체화됩니다. OpenClaw 에이전트는 OpenClaw의 내부 런타임 컨텍스트 봉투를 받고, 외부 ACP 하네스는 자식 결과와 지침이 포함된 일반 프롬프트를 받습니다. 원시
<<<BEGIN_OPENCLAW_INTERNAL_CONTEXT>>>봉투는 외부 하네스로 전송되거나 ACP 사용자 기록 텍스트로 유지되어서는 안 됩니다. - ACP 기록 항목은 사용자에게 보이는 트리거 텍스트 또는 일반 완료 프롬프트를 사용합니다. 내부 이벤트 메타데이터는 가능한 경우 OpenClaw 안에서 구조화된 상태로 유지되며, 사용자가 작성한 채팅 콘텐츠로 취급되지 않습니다.
Parent-owned one-shot ACP sessions
Parent-owned one-shot ACP sessions
다른 에이전트 실행에서 생성된 일회성 ACP 세션은 하위 에이전트와 유사한 백그라운드 자식입니다.
- 부모는
sessions_spawn({ runtime: "acp", mode: "run" })로 작업을 요청합니다. - 자식은 자체 ACP 하네스 세션에서 실행됩니다.
- 자식 턴은 네이티브 하위 에이전트 생성에 사용되는 동일한 백그라운드 레인에서 실행되므로, 느린 ACP 하네스가 관련 없는 메인 세션 작업을 차단하지 않습니다.
- 완료는 작업 완료 알림 경로를 통해 보고됩니다. OpenClaw는 외부 하네스로 보내기 전에 내부 완료 메타데이터를 일반 ACP 프롬프트로 변환하므로, 하네스는 OpenClaw 전용 런타임 컨텍스트 마커를 보지 않습니다.
- 사용자 대상 응답이 유용한 경우 부모는 자식 결과를 일반 어시스턴트 목소리로 다시 작성합니다.
sessions_send and A2A delivery
sessions_send and A2A delivery
sessions_send는 생성 후 다른 세션을 대상으로 삼을 수 있습니다. 일반 피어 세션의 경우 OpenClaw는 메시지를 주입한 뒤 에이전트 간(A2A) 후속 경로를 사용합니다.- 대상 세션의 응답을 기다립니다.
- 선택적으로 요청자와 대상이 제한된 수의 후속 턴을 교환하도록 허용합니다.
- 대상에게 알림 메시지를 생성하도록 요청합니다.
- 해당 알림을 보이는 채널 또는 스레드로 전달합니다.
tools.sessions.visibility 설정에서 관련 없는 세션이 ACP 대상을 보고 메시지를 보낼 수 있을 때도 활성 상태로 유지됩니다.OpenClaw는 요청자가 자신이 소유한 부모 소유 일회성 ACP 자식의 부모인 경우에만 A2A 후속 처리를 건너뜁니다. 이 경우 작업 완료 위에 A2A를 실행하면 자식 결과로 부모를 깨우고, 부모의 응답을 다시 자식에게 전달하며, 부모/자식 에코 루프가 만들어질 수 있습니다. 해당 소유 자식 사례에서는 완료 경로가 이미 결과를 담당하므로 sessions_send 결과가 delivery.status="skipped"를 보고합니다.Resume an existing session
Resume an existing session
새로 시작하는 대신 이전 ACP 세션을 계속하려면 일반적인 사용 사례:
resumeSessionId를 사용합니다. 에이전트는 session/load를 통해 대화 기록을 재생하므로, 이전에 있었던 모든 컨텍스트를 가지고 이어서 진행합니다.- 노트북의 Codex 세션을 휴대폰으로 넘깁니다. 에이전트에게 중단한 지점부터 이어서 진행하라고 지시하세요.
- CLI에서 대화형으로 시작한 코딩 세션을 이제 에이전트를 통해 헤드리스로 계속합니다.
- Gateway 재시작 또는 유휴 시간 제한으로 중단된 작업을 이어서 진행합니다.
resumeSessionId는runtime: "acp"일 때만 적용됩니다. 기본 하위 에이전트 런타임은 이 ACP 전용 필드를 무시합니다.streamTo는runtime: "acp"일 때만 적용됩니다. 기본 하위 에이전트 런타임은 이 ACP 전용 필드를 무시합니다.resumeSessionId는 호스트 로컬 ACP/하네스 재개 ID이며, OpenClaw 채널 세션 키가 아닙니다. OpenClaw는 디스패치 전에 여전히 ACP 생성 정책과 대상 에이전트 정책을 확인하며, 해당 업스트림 ID를 로드할 권한 부여는 ACP 백엔드 또는 하네스가 소유합니다.resumeSessionId는 업스트림 ACP 대화 기록을 복원합니다.thread와mode는 생성하는 새 OpenClaw 세션에 정상적으로 계속 적용되므로,mode: "session"은 여전히thread: true가 필요합니다.- 대상 에이전트는
session/load를 지원해야 합니다(Codex와 Claude Code는 지원함). - 세션 ID를 찾을 수 없으면 생성이 명확한 오류로 실패합니다. 새 세션으로 조용히 폴백하지 않습니다.
Post-deploy smoke test
Post-deploy smoke test
Gateway 배포 후에는 단위 테스트만 신뢰하지 말고 실시간 엔드투엔드 검사를 실행하세요.
- 대상 호스트에서 배포된 Gateway 버전과 커밋을 확인합니다.
- 라이브 에이전트에 임시 ACPX 브리지 세션을 엽니다.
- 해당 에이전트에게
runtime: "acp",agentId: "codex",mode: "run"및 작업Reply with exactly LIVE-ACP-SPAWN-OK로sessions_spawn을 호출하도록 요청합니다. accepted=yes, 실제childSessionKey, 검증기 오류가 없음을 확인합니다.- 임시 브리지 세션을 정리합니다.
mode: "run"에 유지하고 streamTo: "parent"는 건너뜁니다.
스레드에 바인딩된 mode: "session" 및 스트림 릴레이 경로는 별도의
더 풍부한 통합 패스입니다.샌드박스 호환성
ACP 세션은 현재 OpenClaw 샌드박스 내부가 아니라 호스트 런타임에서 실행됩니다. 현재 제한 사항:- 요청자 세션이 샌드박스 처리된 경우,
sessions_spawn({ runtime: "acp" })와/acp spawn모두에서 ACP 스폰이 차단됩니다. runtime: "acp"를 사용하는sessions_spawn은sandbox: "require"를 지원하지 않습니다.
세션 대상 해석
대부분의/acp 작업은 선택적 세션 대상(session-key,
session-id 또는 session-label)을 허용합니다.
해석 순서:
- 명시적 대상 인수(
/acp steer의 경우--session)- 키를 시도합니다
- 그런 다음 UUID 형태의 세션 ID를 시도합니다
- 그런 다음 레이블을 시도합니다
- 현재 스레드 바인딩(이 대화/스레드가 ACP 세션에 바인딩된 경우).
- 현재 요청자 세션 대체값.
Unable to resolve session target: ...).
ACP 제어
| 명령 | 수행 작업 | 예 |
|---|---|---|
/acp spawn | ACP 세션을 생성합니다. 현재 바인딩 또는 스레드 바인딩은 선택 사항입니다. | /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> | 런타임 설정 키 model | Codex ACP의 경우, OpenClaw는 openai-codex/<model>을 어댑터 모델 ID로 정규화하고 openai-codex/gpt-5.4/high와 같은 슬래시 추론 접미사를 reasoning_effort에 매핑합니다. |
/acp set thinking <level> | 표준 옵션 thinking | OpenClaw는 존재하는 경우 백엔드가 광고한 동등 항목을 보내며, thinking, 그다음 effort, reasoning_effort 또는 thought_level을 선호합니다. Codex ACP의 경우 어댑터는 값을 reasoning_effort에 매핑합니다. |
/acp permissions <profile> | 표준 옵션 permissionProfile | OpenClaw는 존재하는 경우 approval_policy, permission_profile, permissions 또는 permission_mode와 같은 백엔드가 광고한 동등 항목을 보냅니다. |
/acp timeout <seconds> | 표준 옵션 timeoutSeconds | OpenClaw는 존재하는 경우 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.allow에 acpx를 포함하고 /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 harness | OpenClaw는 정상이나 대상 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 session | ACP 세션 메타데이터가 오래되었거나 삭제되었습니다. | /acp spawn으로 다시 생성한 뒤 스레드를 다시 바인딩/포커스하세요. |
AcpRuntimeError: Permission prompt unavailable in non-interactive mode | permissionMode가 비대화형 ACP 세션에서 쓰기/실행을 차단합니다. | plugins.entries.acpx.config.permissionMode를 approve-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를 업데이트하고 완료 흐름을 다시 실행하세요. 외부 하네스는 일반 완료 프롬프트만 받아야 합니다. |