스트리밍 출력용 디버깅 도우미입니다. 특히 provider가 추론을 일반 텍스트에 섞어 보낼 때 유용합니다.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.
런타임 디버그 재정의
채팅에서/debug를 사용해 런타임 전용 설정 재정의(메모리, 디스크 아님)를 지정합니다.
/debug는 기본적으로 비활성화되어 있습니다. commands.debug: true로 활성화하세요.
openclaw.json을 편집하지 않고 잘 드러나지 않는 설정을 전환해야 할 때 편리합니다.
예시:
/debug reset은 모든 재정의를 지우고 디스크의 설정으로 되돌립니다.
세션 추적 출력
전체 verbose 모드를 켜지 않고도 한 세션에서 Plugin 소유의 추적/디버그 줄을 보고 싶을 때/trace를 사용하세요.
예시:
/trace를 사용하세요.
일반 verbose 상태/도구 출력에는 계속 /verbose를 사용하고, 런타임 전용 설정
재정의에는 계속 /debug를 사용하세요.
Plugin 수명 주기 추적
Plugin 수명 주기 명령이 느리게 느껴지고 Plugin 메타데이터, 검색, registry, runtime mirror, 설정 변경, 새로 고침 작업에 대한 기본 제공 단계별 분석이 필요할 때OPENCLAW_PLUGIN_LIFECYCLE_TRACE=1을 사용하세요. 추적은 옵트인 방식이며 stderr에
기록되므로 JSON 명령 출력은 계속 파싱할 수 있습니다.
예시:
pnpm build 이후 node dist/entry.js ...로
빌드된 런타임을 측정하는 것을 권장합니다. pnpm openclaw ...도 source-runner
오버헤드를 함께 측정합니다.
CLI 시작 및 명령 프로파일링
명령이 느리게 느껴질 때는 체크인된 시작 벤치마크를 사용하세요.OPENCLAW_RUN_NODE_CPU_PROF_DIR를 설정하세요.
.cpuprofile을 기록합니다. 명령 코드에 임시 instrumentation을 추가하기 전에
이 방법을 사용하세요.
시작 지연이 동기 파일 시스템 작업이나 module-loader 작업처럼 보이면 source runner를
통해 Node의 sync I/O trace 플래그를 추가하세요.
pnpm gateway:watch는 감시 중인 Gateway 자식 프로세스에 대해 이 플래그를
기본적으로 비활성화합니다. watch 모드에서 Node sync I/O trace 출력을 명시적으로
원할 때 OPENCLAW_TRACE_SYNC_IO=1을 설정하세요.
Gateway watch 모드
빠른 반복 작업을 위해 파일 감시기 아래에서 gateway를 실행하세요.openclaw-gateway-watch-main이라는 tmux 세션(또는
openclaw-gateway-watch-dev-19001 같은 profile/port별 변형)을 시작하거나
재시작하고, 대화형 터미널에서는 자동으로 attach합니다. 비대화형 셸, CI, agent
exec 호출은 detached 상태를 유지하고 대신 attach 안내를 출력합니다. 필요할 때
수동으로 attach하세요.
--benchmark를 소비하고,
Gateway 자식 프로세스가 종료될 때마다 V8 .cpuprofile 하나를
.artifacts/gateway-watch-profiles/ 아래에 기록합니다. 현재 프로파일을
flush하려면 감시 중인 gateway를 중지하거나 재시작한 다음 Chrome DevTools 또는
Speedscope로 여세요.
--benchmark-dir <path>를 사용하세요.
벤치마크 대상 자식 프로세스가 기본 --force 포트 정리를 건너뛰고 Gateway 포트가
이미 사용 중이면 빠르게 실패하게 하려면 --benchmark-no-force를 사용하세요.
benchmark 모드는 기본적으로 sync-I/O trace 스팸을 억제합니다. CPU 프로파일과
Node sync-I/O 스택 trace를 둘 다 명시적으로 원할 때는 --benchmark와 함께
OPENCLAW_TRACE_SYNC_IO=1을 설정하세요. benchmark 모드에서 해당 trace 블록은
benchmark 디렉터리 아래의 gateway-watch-output.log에 기록되고 터미널 pane에서는
필터링됩니다. 일반 Gateway 로그는 계속 표시됩니다.
tmux wrapper는 OPENCLAW_PROFILE, OPENCLAW_CONFIG_PATH, OPENCLAW_STATE_DIR,
OPENCLAW_GATEWAY_PORT, OPENCLAW_SKIP_CHANNELS 같은 일반적인 비밀이 아닌 런타임
selector를 pane으로 전달합니다. provider credential은 일반 profile/config에 두거나,
일회성 ephemeral secret에는 원시 foreground 모드를 사용하세요.
감시 중인 Gateway가 시작 중 종료되면 감시기는 openclaw doctor --fix --non-interactive를
한 번 실행한 뒤 Gateway 자식 프로세스를 재시작합니다. 개발 전용 repair pass 없이
원래 시작 실패를 보고 싶을 때는 OPENCLAW_GATEWAY_WATCH_AUTO_DOCTOR=0을 사용하세요.
관리되는 tmux pane은 가독성을 위해 기본적으로 색상이 적용된 Gateway 로그도 사용합니다.
ANSI 출력을 비활성화하려면 pnpm gateway:watch를 시작할 때 FORCE_COLOR=0을
설정하세요.
감시기는 src/ 아래의 빌드 관련 파일, extension 소스 파일, extension package.json
및 openclaw.plugin.json 메타데이터, tsconfig.json, package.json,
tsdown.config.ts 변경 시 재시작합니다. extension 메타데이터 변경은 tsdown rebuild를
강제하지 않고 gateway를 재시작합니다. 소스 및 설정 변경은 여전히 먼저 dist를
rebuild합니다.
gateway CLI 플래그를 gateway:watch 뒤에 추가하면 각 재시작 때 그대로 전달됩니다.
같은 watch 명령을 다시 실행하면 명명된 tmux pane이 다시 생성되고, 원시 감시기는
여전히 single-watcher lock을 유지하므로 중복 watcher parent가 쌓이지 않고 교체됩니다.
Dev profile + dev gateway (—dev)
디버깅을 위해 상태를 격리하고 안전하게 폐기 가능한 설정을 띄우려면 dev profile을 사용하세요.--dev 플래그는 두 가지가 있습니다.
- 전역
--dev(profile): 상태를~/.openclaw-dev아래로 격리하고 gateway 포트를 기본값19001로 설정합니다(파생 포트도 함께 이동). gateway --dev: 누락된 경우 Gateway가 기본 설정 + workspace를 자동 생성하도록 합니다 (그리고 BOOTSTRAP.md는 건너뜁니다).
pnpm openclaw ...로 CLI를 실행하세요.
이 작업이 수행하는 내용:
-
Profile 격리 (전역
--dev)OPENCLAW_PROFILE=devOPENCLAW_STATE_DIR=~/.openclaw-devOPENCLAW_CONFIG_PATH=~/.openclaw-dev/openclaw.jsonOPENCLAW_GATEWAY_PORT=19001(browser/canvas도 그에 맞게 이동)
-
Dev bootstrap (
gateway --dev)- 누락된 경우 최소 설정을 기록합니다(
gateway.mode=local, bind loopback). agent.workspace를 dev workspace로 설정합니다.agent.skipBootstrap=true를 설정합니다(BOOTSTRAP.md 없음).- 누락된 경우 workspace 파일을 시드합니다:
AGENTS.md,SOUL.md,TOOLS.md,IDENTITY.md,USER.md,HEARTBEAT.md. - 기본 identity: C3-PO (protocol droid).
- dev 모드에서는 channel provider를 건너뜁니다(
OPENCLAW_SKIP_CHANNELS=1).
- 누락된 경우 최소 설정을 기록합니다(
--dev는 전역 profile 플래그이며 일부 runner가 소비합니다. 명시적으로 써야 한다면 env var 형식을 사용하세요.--reset은 설정, credential, session, dev workspace를 지운 뒤(rm이 아니라
trash 사용) 기본 dev 설정을 다시 생성합니다.
원시 stream logging (OpenClaw)
OpenClaw는 필터링/formatting 전에 raw assistant stream을 기록할 수 있습니다. 추론이 일반 텍스트 delta로 도착하는지(또는 별도 thinking block으로 도착하는지) 확인하는 가장 좋은 방법입니다. CLI로 활성화하세요.~/.openclaw/logs/raw-stream.jsonl
원시 chunk logging (pi-mono)
Block으로 파싱되기 전의 raw OpenAI-compat chunks를 캡처하기 위해, pi-mono는 별도의 logger를 제공합니다.~/.pi-mono/logs/raw-openai-completions.jsonl
참고: 이것은 pi-mono의 openai-completions provider를 사용하는 프로세스에서만
출력됩니다.
안전 참고 사항
- Raw stream 로그에는 전체 prompt, tool output, user data가 포함될 수 있습니다.
- 로그는 local에 보관하고 디버깅 후 삭제하세요.
- 로그를 공유한다면 먼저 secret과 PII를 제거하세요.
VSCode에서 디버깅
생성된 많은 파일이 build process의 일부로 hashed name을 갖게 되므로, VSCode 기반 IDE에서 디버깅을 활성화하려면 source map이 필요합니다. 포함된launch.json 설정은 Gateway 서비스를 대상으로 하지만, 다른 용도에 맞게 빠르게 조정할 수 있습니다.
- Rebuild and Debug Gateway - 새 build를 만든 뒤 Gateway 서비스를 디버깅합니다
- Debug Gateway - 기존 build의 Gateway 서비스를 디버깅합니다
설정
기본 Rebuild and Debug Gateway 설정은 batteries-included 방식이며,/dist 폴더를 자동으로 삭제하고 디버깅이 활성화된 상태로 프로젝트를 rebuild합니다.
- Activity Bar에서 Run and Debug 패널을 열거나
Ctrl+Shift+D를 누릅니다 - IDE에서 설정 dropdown에 Rebuild and Debug Gateway가 선택되어 있는지 확인한 다음 Start Debugging 버튼을 누릅니다
- 터미널을 열고 source map을 활성화합니다.
- Linux/macOS:
export OUTPUT_SOURCE_MAPS=1 - Windows (PowerShell):
$env:OUTPUT_SOURCE_MAPS="1" - Windows (CMD):
set OUTPUT_SOURCE_MAPS=1
- Linux/macOS:
- 같은 터미널에서 프로젝트를 rebuild합니다:
pnpm clean:dist && pnpm build - IDE에서 Run and Debug 설정 dropdown의 Debug Gateway 옵션을 선택한 다음 Start Debugging 버튼을 누릅니다
src/ 디렉터리)에 breakpoint를 설정할 수 있으며, debugger가 source map을 통해 breakpoint를 컴파일된 JavaScript에 올바르게 매핑합니다. 예상대로 변수를 검사하고, 코드를 단계별로 실행하고, call stack을 확인할 수 있습니다.
참고
- “Rebuild and Debug Gateway” 옵션을 사용하는 경우 - debugger를 시작할 때마다
/dist폴더를 완전히 삭제하고 Gateway를 시작하기 전에 source map이 활성화된 전체pnpm build를 실행합니다 - “Debug Gateway” 옵션을 사용하는 경우 - debug session은
/dist폴더에 영향을 주지 않고 언제든 시작하고 중지할 수 있지만, 디버깅 활성화와 build cycle 관리를 모두 별도의 터미널 프로세스에서 수행해야 합니다 - 프로젝트의 다른 섹션을 디버깅하려면
args에 대한launch.json설정을 수정하세요 - 다른 작업에 빌드된 OpenClaw CLI를 사용해야 하는 경우(예: debug session이 새 auth token을 생성할 때
dashboard --no-open), 다른 터미널에서node ./openclaw.mjs로 실행하거나alias openclaw-build="node $(pwd)/openclaw.mjs"같은 shell alias를 만들 수 있습니다