ACP Agents
Agent Client Protocol (ACP) 세션을 사용하면 OpenClaw가 외부 코딩 하니스(Pi, Claude Code, Codex, OpenCode, Gemini CLI 등)를 ACP 백엔드 플러그인을 통해 실행할 수 있습니다. 사용자가 자연어로 “Codex로 이거 돌려” 또는 “스레드에서 Claude Code 시작해”라고 하면, OpenClaw는 이를 네이티브 sub-agent 런타임이 아니라 ACP 런타임으로 라우팅해야 합니다.빠른 운영 흐름
- 세션 시작:
/acp spawn codex --mode persistent --thread auto
- 바인딩된 스레드에서 작업하거나 해당 세션 키를 명시적으로 지정
- 런타임 상태 확인:
/acp status
- 필요 시 옵션 조정:
/acp model <provider/model>/acp permissions <profile>/acp timeout <seconds>
- 컨텍스트를 버리지 않고 방향만 수정:
/acp steer tighten logging and continue
- 작업 중지:
/acp cancel또는/acp close
ACP와 sub-agents의 차이
ACP는 외부 하니스 런타임이 필요할 때 사용하고, sub-agent는 OpenClaw 네이티브 위임 실행에 사용합니다.| 항목 | ACP 세션 | Sub-agent 실행 |
|---|---|---|
| 런타임 | ACP backend plugin (예: acpx) | OpenClaw 네이티브 sub-agent runtime |
| 세션 키 | agent:<agentId>:acp:<uuid> | agent:<agentId>:subagent:<uuid> |
| 주요 명령 | /acp ... | /subagents ... |
| spawn 도구 | sessions_spawn + runtime:"acp" | 기본 sessions_spawn |
Thread-bound ACP
채널 어댑터에서 thread binding이 활성화돼 있으면 ACP 세션을 스레드에 바인딩할 수 있습니다.- OpenClaw가 스레드를 대상 ACP 세션에 바인딩
- 후속 메시지는 같은 ACP 세션으로 라우팅
- 출력도 같은 스레드로 전달
- unfocus/close/archive/idle-timeout/max-age 만료 시 바인딩 제거
acp.enabled=trueacp.dispatch.enabled=true(기본값)- 채널별 ACP thread spawn 플래그
- Discord:
channels.discord.threadBindings.spawnAcpSessions=true - Telegram:
channels.telegram.threadBindings.spawnAcpSessions=true
- Discord:
채널별 지속형 ACP 바인딩
비일회성 워크플로에는 최상위bindings[]의 type: "acp" 항목을 사용합니다.
바인딩 모델
bindings[].type="acp": 지속형 ACP 대화 바인딩bindings[].match: 대상 대화 식별- Discord 채널/스레드:
match.channel="discord"+match.peer.id="<channelOrThreadId>" - Telegram 포럼 토픽:
match.channel="telegram"+match.peer.id="<chatId>:topic:<topicId>"
- Discord 채널/스레드:
bindings[].agentId: 소유 OpenClaw agent ID- 선택적 ACP override:
bindings[].acpmodelabelcwdbackend
에이전트별 런타임 기본값
agents.list[].runtime에 ACP 기본값을 둘 수 있습니다.
agents.list[].runtime.type="acp"agents.list[].runtime.acp.agentagents.list[].runtime.acp.backendagents.list[].runtime.acp.modeagents.list[].runtime.acp.cwd
bindings[].acp.*agents.list[].runtime.acp.*- 전역
acp.*
/acp spawn
명시적 운영 제어가 필요할 때는 채팅에서 /acp spawn을 사용합니다.
--mode persistent|oneshot--thread auto|here|off--cwd <absolute-path>--label <name>
세션 대상 해석
대부분의/acp 동작은 선택적 세션 대상(session-key, session-id, session-label)을 받습니다.
해석 순서:
- 명시적 대상 인수 (
/acp steer는--session) - 현재 thread binding
- 현재 requester session fallback
Unable to resolve session target: ... 오류를 반환합니다.
/acp 명령 모음
/acp spawn/acp cancel/acp steer/acp close/acp status/acp set-mode/acp set/acp cwd/acp permissions/acp timeout/acp model/acp reset-options/acp sessions/acp doctor/acp install
/acp status는 런타임 옵션과 가능한 경우 runtime/backend 양쪽 세션 식별자를 보여줍니다.
런타임 옵션 매핑
/acp model <id>→model/acp permissions <profile>→approval_policy/acp timeout <seconds>→timeout/acp cwd <path>→ cwd override/acp set <key> <value>→ 일반 setter/acp reset-options→ 대상 세션의 모든 runtime override 제거
acpx 지원
현재 acpx 내장 alias:piclaudecodexopencodegeminikimi
agentId에는 위 값을 우선 사용하십시오.
기본 설정
플러그인 설정
/acp doctor로 상태를 확인합니다.
권한 설정
ACP 세션은 비대화형으로 실행되므로 TTY 승인이 없습니다.permissionMode
approve-allapprove-readsdeny-all
nonInteractivePermissions
fail(기본값)deny
샌드박스 호환성
ACP 세션은 현재 OpenClaw sandbox 안이 아니라 호스트 런타임에서 실행됩니다.- sandboxed requester session에서는
runtime:"acp"spawn이 차단됩니다. sessions_spawn에서runtime:"acp"와sandbox:"require"조합은 지원되지 않습니다.
runtime:"subagent"를 사용하십시오.
관련 문서
최근 업데이트 메모
resumeSessionId로 기존 ACP 세션을 이어받을 수 있으며, 이력은session/load로 재생됩니다./acp sessions는 현재 바인딩되었거나 요청자 세션 기준 session store를 읽습니다.