업스트림 서비스가 일반적인 HTTP 모델 API를 제공한다면 대신
제공자 Plugin을 작성하세요. 업스트림
런타임이 완전한 에이전트 세션, 도구 이벤트, Compaction 또는 백그라운드
작업 상태를 소유한다면 에이전트 하네스를 사용하세요.
Plugin이 소유하는 항목
CLI 백엔드 Plugin에는 세 가지 계약이 있습니다.
매니페스트는 검색 메타데이터이며 CLI를 실행하거나 런타임 동작을 등록하지
않습니다. 런타임 동작은 Plugin 진입점이
api.registerCliBackend(...)를
호출할 때 시작됩니다.
최소 백엔드 Plugin
1
패키지 메타데이터 생성
package.json
./src/index.ts라면 빌드된 JavaScript 대응 파일을 가리키는
openclaw.runtimeExtensions를 추가하세요. 진입점을
참조하세요.2
백엔드 소유권 선언
openclaw.plugin.json
cliBackends는 런타임 소유권 목록입니다. 이를 통해 구성이나 모델 선택에서
acme-cli/...가 언급될 때 OpenClaw가 Plugin을 자동으로 로드할 수 있습니다.setup.cliBackends는 설명자 우선 설정 표면입니다. Plugin 런타임을 로드하지
않고도 모델 검색, 온보딩 또는 상태에서 백엔드를 인식해야 할 때 추가하세요.
이러한 정적 설명자만으로 설정에 충분한 경우에만 requiresRuntime: false를
사용하세요.3
백엔드 등록
index.ts
cliBackends 항목과 일치해야 합니다. 등록된
config는 기본값일 뿐이며, 런타임에는
agents.defaults.cliBackends.acme-cli 아래의 사용자 구성이 그 위에
병합됩니다.구성 형태
CliBackendConfig는 OpenClaw가 CLI를 실행하고 구문 분석하는 방법을 설명합니다.
CLI에 맞는 가장 작은 정적 구성을 선호하세요. 실제로 백엔드에 속하는 동작에만
Plugin 콜백을 추가하세요.
고급 백엔드 훅
CliBackendPlugin은 다음 항목도 정의할 수 있습니다.
이러한 훅은 제공자가 소유하도록 유지하세요. 백엔드 훅으로 동작을 표현할 수 있다면
코어에 CLI별 분기를 추가하지 마세요.
runtimeArtifact는 Plugin이 소유하며 사용자가 재정의할 수 없습니다. 실시간 추론
턴이 검증된 설정 권한을 발급하거나 재검증할 때만 참조되며, 일반적인 CLI 실행에는
필요하지 않습니다. 이 선언이 없는 백엔드는 검증된 CLI 설정 권한을 발급할 수
없습니다. bundled-package-tree 선언은 정확한 package.json 소유자를 지정하며
패키지 진입점이 명령이어야 합니다. OpenClaw는 중첩된 종속성을 포함하여 범위가
지정된 설치 패키지 트리 전체를 해시하고, 리디렉션하는 심볼릭 링크, 선언된 패키지
외부의 실행기, 필수 외부 종속성 선언, 지나치게 큰 트리 및 알 수 없는 스크립트가
있으면 안전하게 실패합니다. 해당 트리에 완전한 추론 구현이 포함된 경우에만 이를
선언하세요. 선택적 도구 통합만으로는 외부 구현 그래프가 안전해지지 않습니다.
동일한 백엔드가 자체 완결형 네이티브 실행 파일도 제공하는 경우 해당 파일의 정식
기본 이름을 nativeExecutableNames에 나열하세요. 사용자가 백엔드 명령을
재정의하더라도 다른 네이티브 명령은 검증되지 않은 상태로 유지됩니다.
ctx.executionMode는 일반 턴에서는 "agent"이고 일시적인 /btw 호출에서는 "side-question"입니다. BTW에서 네이티브 도구, 세션 지속성 또는 재개 동작을 비활성화하는 경우처럼 CLI에 다른 일회성 플래그가 필요할 때 사용합니다. 백엔드가 일반적으로 nativeToolMode: "always-on"을 사용하지만 사이드 질문 argv가 해당 도구를 확실히 비활성화한다면 sideQuestionToolMode: "disabled"도 설정하세요. 그렇지 않으면 BTW에 도구 없는 CLI 실행이 필요할 때 OpenClaw가 안전을 위해 실행을 거부합니다.
resolveExecutionArgs가 개별 실행에서 모든 백엔드 네이티브 도구를 비활성화할 수 있는 경우에만 nativeToolMode: "selectable"을 설정하세요. 이러한 제한된 실행에서는 ctx.toolAvailability.native가 빈 튜플이고 ctx.toolAvailability.mcp가 호스트에서 격리된 정확한 MCP 허용 목록입니다. 훅은 충돌하는 도구 플래그를 교체하고 두 값을 모두 강제하는 argv를 반환해야 합니다. OpenClaw는 최종 신규 또는 재개 argv로 훅을 한 번 호출하며, 백엔드가 제한을 강제할 수 없으면 안전을 위해 실행을 거부합니다. 이 컨텍스트의 MCP 이름은 호스트가 생성된 MCP 구성을 이미 해당 서버와 도구로 제한했기 때문에 자동 승인해도 안전합니다.
ownsNativeCompaction: OpenClaw Compaction 사용 중지
백엔드가 자체 트랜스크립트를 Compaction하는 에이전트를 실행한다면 OpenClaw의 보호용 요약기가 해당 세션에 대해 절대 실행되지 않도록 ownsNativeCompaction: true를 설정하세요. CLI Compaction 수명 주기는 아무 작업도 하지 않고 반환되며 턴이 계속 진행됩니다. claude-cli는 Claude Code가 하네스 엔드포인트 없이 내부적으로 Compaction하므로 이를 선언합니다. 반면 Codex와 같은 네이티브 하네스 세션은 계속 해당 하네스의 Compaction 엔드포인트로 라우팅됩니다.
다음 조건이 모두 충족될 때만 선언하세요. 그렇지 않으면 지연된 예산 초과 세션이 계속 예산을 초과하거나 오래된 상태가 될 수 있습니다(OpenClaw가 더 이상 복구하지 않음).
- 백엔드가 창 한계에 가까워질 때 자체 트랜스크립트를 안정적으로 Compaction하거나 크기를 제한합니다.
- Compaction된 상태가 여러 턴에 걸쳐 유지되도록 재개 가능한 세션을 영속화합니다(예:
--resume/--session-id). - 네이티브 하네스 Compaction 세션이 아닙니다.
agentHarnessId가 일치하는 세션은 대신 하네스 엔드포인트로 라우팅됩니다.
MCP 도구 브리지
CLI 백엔드는 기본적으로 OpenClaw 도구를 받지 않습니다. CLI가 MCP 구성을 사용할 수 있다면 명시적으로 활성화하세요.
CLI가 실제로 브리지를 사용할 수 있을 때만 활성화하세요. CLI에 비활성화할 수 없는 자체 내장 도구 계층이 있다면 호출자가 네이티브 도구 없음을 요구할 때 OpenClaw가 안전을 위해 실행을 거부할 수 있도록
nativeToolMode: "always-on"을 설정하세요. 실행별로 모든 네이티브 도구를 비활성화할 수 있다면 앞에서 설명한 resolveExecutionArgs 계약과 함께 "selectable"을 사용하세요.
사용자 구성
사용자는 모든 백엔드 기본값을 재정의할 수 있습니다.PATH 외부에 있을 때 필요한 command뿐입니다.
검증
번들 Plugin의 경우 빌더와 설정 등록에 대한 집중 테스트를 추가한 다음 Plugin의 대상 테스트 레인을 실행하세요.체크리스트
게시되는 패키지의
package.json에 openclaw.extensions와 빌드된 런타임 엔트리가 있음openclaw.plugin.json에 cliBackends와 의도된 activation.onStartup이 선언되어 있음설정/모델 검색이 콜드 상태에서 백엔드를 확인해야 할 때
setup.cliBackends가 존재함api.registerCliBackend(...)가 매니페스트와 동일한 백엔드 ID를 사용함agents.defaults.cliBackends.<id> 아래의 사용자 재정의가 계속 우선함세션, 시스템 프롬프트, 이미지 및 출력 파서 설정이 실제 CLI 계약과 일치함
대상 테스트와 하나 이상의 라이브 CLI 스모크 테스트가 백엔드 경로를 입증함
관련 문서
- CLI 백엔드 - 사용자 구성 및 런타임 동작
- Plugin 빌드 - 패키지 및 매니페스트 기본 사항
- Plugin SDK 개요 - 등록 API 참조
- Plugin 매니페스트 -
cliBackends및 설정 설명자 - 에이전트 하네스 - 완전한 외부 에이전트 런타임