CLI commands
Gateway
Gateway는 OpenClaw의 WebSocket 서버입니다(채널, Node, 세션, 훅). 이 페이지의 하위 명령은 openclaw gateway … 아래에 있습니다.
Gateway 실행
로컬 Gateway 프로세스를 실행합니다.
openclaw gateway
포그라운드 별칭:
openclaw gateway run
시작 동작
- 기본적으로 Gateway는
~/.openclaw/openclaw.json에gateway.mode=local이 설정되어 있지 않으면 시작을 거부합니다. 임시/개발 실행에는--allow-unconfigured를 사용하세요. openclaw onboard --mode local및openclaw setup은gateway.mode=local을 작성해야 합니다. 파일은 있지만gateway.mode가 없으면 이를 암묵적으로 로컬 모드로 가정하지 말고, 손상되었거나 덮어써진 구성으로 보고 복구하세요.- 파일은 있지만
gateway.mode가 없으면 Gateway는 이를 의심스러운 구성 손상으로 간주하고 사용자를 대신해 "guess local"하지 않습니다. - 인증 없이 loopback을 넘어 바인딩하는 것은 차단됩니다(안전 가드레일).
SIGUSR1은 승인된 경우 프로세스 내부 재시작을 트리거합니다(commands.restart는 기본적으로 활성화되어 있습니다. 수동 재시작을 차단하려면commands.restart: false로 설정하세요. Gateway 도구/구성 적용/업데이트는 계속 허용됩니다).SIGINT/SIGTERM핸들러는 Gateway 프로세스를 중지하지만, 사용자 지정 터미널 상태를 복원하지는 않습니다. CLI를 TUI 또는 raw-mode 입력으로 감싸는 경우 종료 전에 터미널을 복원하세요.
옵션
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tcG9ydCA8cG9ydA
" type="number">
WebSocket 포트(기본값은 구성/env에서 가져오며, 일반적으로 18789).
"--bind"--authOPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tdG9rZW4gPHRva2Vu
" type="string">
토큰 재정의(프로세스에 대해 OPENCLAW_GATEWAY_TOKEN도 설정).
"--password"--tailscale--tailscale-reset-on-exitboolean종료 시 Tailscale serve/funnel 구성을 초기화합니다.
--allow-unconfiguredboolean구성에 gateway.mode=local이 없어도 Gateway 시작을 허용합니다. 임시/개발 부트스트랩에만 시작 가드를 우회하며, 구성 파일을 작성하거나 복구하지는 않습니다.
--devboolean누락된 경우 개발 구성 + 워크스페이스를 생성합니다(BOOTSTRAP.md 건너뜀).
--resetboolean개발 구성 + 자격 증명 + 세션 + 워크스페이스를 초기화합니다(--dev 필요).
--forceboolean시작하기 전에 선택한 포트의 기존 리스너를 모두 종료합니다.
--verboseboolean자세한 로그.
--cli-backend-logsboolean콘솔에 CLI 백엔드 로그만 표시합니다(stdout/stderr도 활성화).
"--ws-log--compactboolean--ws-log compact의 별칭.
--raw-streamboolean원시 모델 스트림 이벤트를 jsonl에 기록합니다.
Gateway 재시작
openclaw gateway restart
openclaw gateway restart --safe
openclaw gateway restart --force
openclaw gateway restart --safe는 실행 중인 Gateway에 재시작 전에 활성 OpenClaw 작업을 사전 점검하도록 요청합니다. 대기 중인 작업, 답장 전달, 임베디드 실행 또는 작업 실행이 활성 상태이면 Gateway는 차단 요인을 보고하고, 중복된 안전 재시작 요청을 병합하며, 활성 작업이 모두 빠진 뒤 재시작합니다. 일반 restart는 호환성을 위해 기존 서비스 관리자 동작을 유지합니다. 즉시 재정의 경로를 명시적으로 원할 때만 --force를 사용하세요.
시작 프로파일링
- Gateway 시작 중 단계별 타이밍을 기록하려면
OPENCLAW_GATEWAY_STARTUP_TRACE=1을 설정하세요. 여기에는 단계별eventLoopMax지연 및 설치된 인덱스, 매니페스트 레지스트리, 시작 계획, 소유자 맵 작업에 대한 Plugin 조회 테이블 타이밍이 포함됩니다. - 외부 QA 하네스를 위한 최선형 JSONL 시작 진단 타임라인을 작성하려면
OPENCLAW_DIAGNOSTICS_TIMELINE_PATH=<path>와 함께OPENCLAW_DIAGNOSTICS=timeline을 설정하세요. 구성에서diagnostics.flags: ["timeline"]로 플래그를 활성화할 수도 있습니다. 경로는 여전히 env로 제공됩니다. 이벤트 루프 샘플을 포함하려면OPENCLAW_DIAGNOSTICS_EVENT_LOOP=1을 추가하세요. - Gateway 시작을 벤치마크하려면
pnpm test:startup:gateway -- --runs 5 --warmup 1을 실행하세요. 벤치마크는 첫 프로세스 출력,/healthz,/readyz, 시작 추적 타이밍, 이벤트 루프 지연, Plugin 조회 테이블 타이밍 세부 정보를 기록합니다.
실행 중인 Gateway 쿼리
모든 쿼리 명령은 WebSocket RPC를 사용합니다.
출력 모드
- 기본값: 사람이 읽을 수 있는 형식(TTY에서 색상 표시).
--json: 기계가 읽을 수 있는 JSON(스타일/스피너 없음).--no-color(또는NO_COLOR=1): 사람용 레이아웃은 유지하면서 ANSI를 비활성화합니다.
공유 옵션
--url <url>: Gateway WebSocket URL.--token <token>: Gateway 토큰.--password <password>: Gateway 비밀번호.--timeout <ms>: 타임아웃/예산(명령마다 다름).--expect-final: "final" 응답을 기다립니다(에이전트 호출).
gateway health
openclaw gateway health --url ws://127.0.0.1:18789
HTTP /healthz 엔드포인트는 라이브니스 프로브입니다. 서버가 HTTP에 응답할 수 있으면 반환됩니다. HTTP /readyz 엔드포인트는 더 엄격하며, 시작 Plugin 사이드카, 채널 또는 구성된 훅이 아직 안정화 중이면 빨간 상태를 유지합니다. 로컬 또는 인증된 상세 준비 상태 응답에는 이벤트 루프 지연, 이벤트 루프 사용률, CPU 코어 비율, degraded 플래그가 포함된 eventLoop 진단 블록이 포함됩니다.
gateway usage-cost
세션 로그에서 사용 비용 요약을 가져옵니다.
openclaw gateway usage-cost
openclaw gateway usage-cost --days 7
openclaw gateway usage-cost --json
"--days gateway stability
실행 중인 Gateway에서 최근 진단 안정성 레코더를 가져옵니다.
openclaw gateway stability
openclaw gateway stability --type payload.large
openclaw gateway stability --bundle latest
openclaw gateway stability --bundle latest --export
openclaw gateway stability --json
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tbGltaXQgPGxpbWl0
" type="number" default="25">
포함할 최근 이벤트의 최대 수(최대 1000).
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tdHlwZSA8dHlwZQ
" type="string">
payload.large 또는 diagnostic.memory.pressure 같은 진단 이벤트 유형으로 필터링합니다.
"--since-seq--bundle [path]string실행 중인 Gateway를 호출하는 대신 유지된 안정성 번들을 읽습니다. 상태 디렉터리 아래의 최신 번들에는 --bundle latest(또는 단순히 --bundle)를 사용하거나, 번들 JSON 경로를 직접 전달하세요.
--exportboolean안정성 세부 정보를 출력하는 대신 공유 가능한 지원 진단 zip을 작성합니다.
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tb3V0cHV0IDxwYXRo
" type="string">
--export의 출력 경로.
개인정보 보호 및 번들 동작
- 기록은 운영 메타데이터를 유지합니다. 이벤트 이름, 수, 바이트 크기, 메모리 측정값, 큐/세션 상태, 채널/Plugin 이름, 수정 처리된 세션 요약이 포함됩니다. 채팅 텍스트, Webhook 본문, 도구 출력, 원시 요청 또는 응답 본문, 토큰, 쿠키, 비밀 값, 호스트 이름 또는 원시 세션 ID는 유지하지 않습니다. 레코더를 완전히 비활성화하려면
diagnostics.enabled: false를 설정하세요. - 치명적인 Gateway 종료, 종료 타임아웃, 재시작 시작 실패 시 레코더에 이벤트가 있으면 OpenClaw는 동일한 진단 스냅샷을
~/.openclaw/logs/stability/openclaw-stability-*.json에 작성합니다. 최신 번들은openclaw gateway stability --bundle latest로 검사하세요.--limit,--type,--since-seq도 번들 출력에 적용됩니다.
gateway diagnostics export
버그 보고서에 첨부하도록 설계된 로컬 진단 zip을 작성합니다. 개인정보 보호 모델 및 번들 내용은 진단 내보내기를 참조하세요.
openclaw gateway diagnostics export
openclaw gateway diagnostics export --output openclaw-diagnostics.zip
openclaw gateway diagnostics export --json
"--log-lines"--log-bytes"--url"--token"--password"--timeout--no-stability-bundleboolean유지된 안정성 번들 조회를 건너뜁니다.
--jsonboolean작성된 경로, 크기, 매니페스트를 JSON으로 출력합니다.
내보내기에는 매니페스트, Markdown 요약, 구성 형태, 정리된 구성 세부 정보, 정리된 로그 요약, 정리된 Gateway 상태/상태 점검 스냅샷, 그리고 존재하는 경우 최신 안정성 번들이 포함됩니다.
이는 공유를 목적으로 합니다. 디버깅에 도움이 되는 운영 세부 정보를 유지합니다. 예를 들어 안전한 OpenClaw 로그 필드, 하위 시스템 이름, 상태 코드, 기간, 구성된 모드, 포트, Plugin ID, 제공자 ID, 비밀이 아닌 기능 설정, 수정 처리된 운영 로그 메시지가 포함됩니다. 채팅 텍스트, Webhook 본문, 도구 출력, 자격 증명, 쿠키, 계정/메시지 식별자, 프롬프트/지침 텍스트, 호스트 이름, 비밀 값은 생략하거나 수정 처리합니다. LogTape 스타일 메시지가 사용자/채팅/도구 페이로드 텍스트처럼 보이면, 내보내기는 메시지가 생략되었다는 사실과 해당 바이트 수만 유지합니다.
gateway status
gateway status는 Gateway 서비스(launchd/systemd/schtasks)와 연결성/인증 기능의 선택적 프로브를 표시합니다.
openclaw gateway status
openclaw gateway status --json
openclaw gateway status --require-rpc
"--url"--token"--password"--timeout--no-probeboolean연결성 프로브를 건너뜁니다(서비스 전용 보기).
--deepboolean시스템 수준 서비스도 스캔합니다.
--require-rpcboolean기본 연결성 프로브를 읽기 프로브로 업그레이드하고 해당 읽기 프로브가 실패하면 0이 아닌 코드로 종료합니다. --no-probe와 함께 사용할 수 없습니다.
상태 의미
gateway status는 로컬 CLI 구성이 없거나 유효하지 않아도 진단용으로 계속 사용할 수 있습니다.- 기본
gateway status는 서비스 상태, WebSocket 연결, 그리고 핸드셰이크 시점에 보이는 인증 기능을 증명합니다. 읽기/쓰기/관리 작업은 증명하지 않습니다. - 진단 프로브는 최초 장치 인증에 대해 비변경 작업입니다. 기존 캐시된 장치 토큰이 있으면 재사용하지만, 상태를 확인하기 위해 새 CLI 장치 ID나 읽기 전용 장치 페어링 레코드를 만들지는 않습니다.
gateway status는 가능하면 프로브 인증을 위해 구성된 인증 SecretRefs를 해석합니다.- 이 명령 경로에서 필수 인증 SecretRef가 해석되지 않으면, 프로브 연결성/인증이 실패할 때
gateway status --json이rpc.authWarning을 보고합니다.--token/--password를 명시적으로 전달하거나 먼저 시크릿 소스를 해석하세요. - 프로브가 성공하면 거짓 양성을 피하기 위해 해석되지 않은 auth-ref 경고가 억제됩니다.
- 수신 대기 중인 서비스만으로는 충분하지 않고 읽기 범위 RPC 호출도 정상이어야 하는 스크립트와 자동화에서는
--require-rpc를 사용하세요. --deep은 추가 launchd/systemd/schtasks 설치에 대한 최선의 스캔을 추가합니다. 여러 Gateway 유사 서비스가 감지되면 사람이 읽는 출력에 정리 힌트를 표시하고 대부분의 설정은 머신당 하나의 Gateway를 실행해야 한다고 경고합니다.--deep은 서비스 프로세스가 외부 슈퍼바이저 재시작을 위해 정상 종료된 경우 최근 Gateway 슈퍼바이저 재시작 인계도 보고합니다.- 사람이 읽는 출력에는 프로필 또는 state-dir 드리프트 진단을 돕기 위해 해석된 파일 로그 경로와 CLI 대비 서비스 구성 경로/유효성 스냅샷이 포함됩니다.
Linux systemd 인증 드리프트 검사
- Linux systemd 설치에서는 서비스 인증 드리프트 검사가 유닛의
Environment=및EnvironmentFile=값을 모두 읽습니다(%h, 따옴표로 감싼 경로, 여러 파일, 선택적-파일 포함). - 드리프트 검사는 병합된 런타임 env를 사용해
gateway.auth.tokenSecretRefs를 해석합니다(먼저 서비스 명령 env, 그다음 프로세스 env 폴백). - 토큰 인증이 실질적으로 활성화되어 있지 않으면(
password/none/trusted-proxy의 명시적gateway.auth.mode, 또는 비밀번호가 우선될 수 있고 토큰 후보가 우선될 수 없는 모드 미설정 상태), 토큰 드리프트 검사는 구성 토큰 해석을 건너뜁니다.
gateway probe
gateway probe는 "모든 것을 디버그"하는 명령입니다. 항상 다음을 프로브합니다.
- 구성된 원격 Gateway(설정된 경우), 그리고
- 원격이 구성되어 있어도 localhost(loopback)를 프로브합니다.
--url을 전달하면 해당 명시적 대상이 둘보다 앞에 추가됩니다. 사람이 읽는 출력은 대상을 다음과 같이 표시합니다.
URL (explicit)Remote (configured)또는Remote (configured, inactive)Local loopback
openclaw gateway probe
openclaw gateway probe --json
해석
Reachable: yes는 적어도 하나의 대상이 WebSocket 연결을 수락했다는 뜻입니다.Capability: read-only|write-capable|admin-capable|pairing-pending|connect-only는 프로브가 인증에 대해 증명할 수 있었던 내용을 보고합니다. 이는 연결 가능성과 별개입니다.Read probe: ok는 읽기 범위 세부 RPC 호출(health/status/system-presence/config.get)도 성공했다는 뜻입니다.Read probe: limited - missing scope: operator.read는 연결은 성공했지만 읽기 범위 RPC가 제한되었다는 뜻입니다. 이는 전체 실패가 아니라 저하된 연결 가능성으로 보고됩니다.Connect: ok뒤의Read probe: failed는 Gateway가 WebSocket 연결을 수락했지만 후속 읽기 진단이 시간 초과되었거나 실패했다는 뜻입니다. 이 또한 도달 불가능한 Gateway가 아니라 저하된 연결 가능성입니다.gateway status와 마찬가지로 프로브는 기존 캐시된 장치 인증을 재사용하지만 최초 장치 ID나 페어링 상태를 생성하지는 않습니다.- 종료 코드는 프로브된 대상 중 도달 가능한 대상이 없을 때만 0이 아닙니다.
JSON 출력
최상위:
ok: 적어도 하나의 대상에 도달할 수 있습니다.degraded: 적어도 하나의 대상이 연결을 수락했지만 전체 세부 RPC 진단을 완료하지 못했습니다.capability: 도달 가능한 대상 전체에서 확인된 최상의 기능(read_only,write_capable,admin_capable,pairing_pending,connected_no_operator_scope, 또는unknown).primaryTargetId: 다음 순서로 활성 승자로 취급할 최상의 대상: 명시적 URL, SSH 터널, 구성된 원격, 그다음 local loopback.warnings[]:code,message, 선택적targetIds가 있는 최선의 경고 레코드입니다.network: 현재 구성과 호스트 네트워킹에서 파생된 local loopback/tailnet URL 힌트입니다.discovery.timeoutMs및discovery.count: 이 프로브 패스에 사용된 실제 발견 예산/결과 수입니다.
대상별(targets[].connect):
ok: 연결 + 저하 분류 이후의 도달 가능성입니다.rpcOk: 전체 세부 RPC 성공입니다.scopeLimited: 필요한 operator 범위가 없어 세부 RPC가 실패했습니다.
대상별(targets[].auth):
role: 사용 가능한 경우hello-ok에서 보고된 인증 역할입니다.scopes: 사용 가능한 경우hello-ok에서 보고된 부여된 범위입니다.capability: 해당 대상에 표시된 인증 기능 분류입니다.
일반적인 경고 코드
ssh_tunnel_failed: SSH 터널 설정에 실패했습니다. 명령은 직접 프로브로 폴백했습니다.multiple_gateways: 둘 이상의 대상에 도달할 수 있었습니다. 복구 봇처럼 격리된 프로필을 의도적으로 실행하는 경우가 아니라면 이는 흔하지 않습니다.auth_secretref_unresolved: 구성된 인증 SecretRef를 실패한 대상에 대해 해석할 수 없었습니다.probe_scope_limited: WebSocket 연결은 성공했지만 읽기 프로브가 누락된operator.read로 인해 제한되었습니다.
SSH를 통한 원격(Mac 앱 동등성)
macOS 앱의 "Remote over SSH" 모드는 로컬 포트 포워드를 사용하여 원격 Gateway(loopback에만 바인딩되어 있을 수 있음)가 ws://127.0.0.1:<port>에서 도달 가능하게 만듭니다.
CLI에 해당하는 명령:
openclaw gateway probe --ssh user@gateway-host
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tc3NoIDx0YXJnZXQ
" type="string">
user@host 또는 user@host:port(포트 기본값은 22).
--ssh-autoboolean해석된 발견 엔드포인트(local.과 구성된 광역 도메인, 있는 경우)에서 처음 발견된 Gateway 호스트를 SSH 대상으로 선택합니다. TXT 전용 힌트는 무시됩니다.
구성(선택 사항, 기본값으로 사용):
gateway.remote.sshTargetgateway.remote.sshIdentity
gateway call <method>
저수준 RPC 헬퍼입니다.
openclaw gateway call status
openclaw gateway call logs.tail --params '{"sinceMs": 60000}'
"--params"--url"--token"--password"--timeout--expect-finalboolean주로 최종 페이로드 전에 중간 이벤트를 스트리밍하는 에이전트 스타일 RPC용입니다.
--jsonboolean기계가 읽을 수 있는 JSON 출력입니다.
Gateway 서비스 관리
openclaw gateway install
openclaw gateway start
openclaw gateway stop
openclaw gateway restart
openclaw gateway uninstall
래퍼로 설치
관리형 서비스가 다른 실행 파일을 통해 시작되어야 할 때 --wrapper를 사용하세요. 예를 들어
시크릿 관리자 shim 또는 run-as 헬퍼가 있습니다. 래퍼는 일반 Gateway 인자를 받고
최종적으로 해당 인자로 openclaw 또는 Node를 exec할 책임이 있습니다.
cat > ~/.local/bin/openclaw-doppler <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
exec doppler run --project my-project --config production -- openclaw "$@"
EOF
chmod +x ~/.local/bin/openclaw-doppler
openclaw gateway install --wrapper ~/.local/bin/openclaw-doppler --force
openclaw gateway restart
환경을 통해 래퍼를 설정할 수도 있습니다. gateway install은 경로가
실행 가능한 파일인지 검증하고, 래퍼를 서비스 ProgramArguments에 쓰며, 이후 강제 재설치, 업데이트, doctor
복구를 위해 서비스 환경에 OPENCLAW_WRAPPER를 유지합니다.
OPENCLAW_WRAPPER="$HOME/.local/bin/openclaw-doppler" openclaw gateway install --force
openclaw doctor
유지된 래퍼를 제거하려면 재설치하는 동안 OPENCLAW_WRAPPER를 비우세요.
OPENCLAW_WRAPPER= openclaw gateway install --force
openclaw gateway restart
명령 옵션
gateway status:--url,--token,--password,--timeout,--no-probe,--require-rpc,--deep,--jsongateway install:--port,--runtime <node|bun>,--token,--wrapper <path>,--force,--jsongateway restart:--safe,--force,--wait <duration>,--jsongateway uninstall|start|stop:--json
수명 주기 동작
- 관리형 서비스를 재시작하려면
gateway restart를 사용하세요. 재시작 대체 수단으로gateway stop과gateway start를 연결하지 마세요. macOS에서gateway stop은 중지하기 전에 의도적으로 LaunchAgent를 비활성화합니다. gateway restart --safe는 실행 중인 Gateway에 활성 OpenClaw 작업을 사전 점검하고 답장 전달, 임베디드 실행, 작업 실행이 모두 비워질 때까지 재시작을 지연하도록 요청합니다.--safe는--force또는--wait와 함께 사용할 수 없습니다.gateway restart --wait 30s는 해당 재시작에 대해 구성된 재시작 드레인 예산을 재정의합니다. 단위가 없는 숫자는 밀리초이며,s,m,h같은 단위가 허용됩니다.--wait 0은 무기한 대기합니다.gateway restart --force는 활성 작업 드레인을 건너뛰고 즉시 재시작합니다. 운영자가 나열된 작업 차단 항목을 이미 검사했고 지금 Gateway를 되돌리고자 할 때 사용하세요.- 수명 주기 명령은 스크립팅을 위해
--json을 허용합니다.
Auth and SecretRefs at install time
- 토큰 인증에 토큰이 필요하고
gateway.auth.token이 SecretRef로 관리되는 경우,gateway install은 SecretRef를 해석할 수 있는지 검증하지만 해석된 토큰을 서비스 환경 메타데이터에 저장하지 않습니다. - 토큰 인증에 토큰이 필요하지만 구성된 토큰 SecretRef를 해석할 수 없는 경우, 설치는 대체 일반 텍스트를 저장하는 대신 안전하게 실패합니다.
gateway run에서 비밀번호 인증을 사용할 때는 인라인--password보다OPENCLAW_GATEWAY_PASSWORD,--password-file또는 SecretRef 기반gateway.auth.password를 선호하세요.- 추론된 인증 모드에서는 셸 전용
OPENCLAW_GATEWAY_PASSWORD가 설치 토큰 요구 사항을 완화하지 않습니다. 관리형 서비스를 설치할 때는 지속 구성(gateway.auth.password또는 configenv)을 사용하세요. gateway.auth.token과gateway.auth.password가 모두 구성되어 있고gateway.auth.mode가 설정되지 않은 경우, 모드가 명시적으로 설정될 때까지 설치가 차단됩니다.
Gateway 발견(Bonjour)
gateway discover는 Gateway 비컨(_openclaw-gw._tcp)을 스캔합니다.
- 멀티캐스트 DNS-SD:
local. - 유니캐스트 DNS-SD(Wide-Area Bonjour): 도메인(예:
openclaw.internal.)을 선택하고 split DNS + DNS 서버를 설정하세요. Bonjour를 참조하세요.
Bonjour 발견이 활성화된 Gateway(기본값)만 비컨을 광고합니다.
Wide-Area 발견 레코드에는 다음이 포함됩니다(TXT).
role(Gateway 역할 힌트)transport(전송 힌트, 예:gateway)gatewayPort(WebSocket 포트, 일반적으로18789)sshPort(선택 사항; 없으면 클라이언트는 기본 SSH 대상을22로 설정)tailnetDns(사용 가능한 경우 MagicDNS 호스트 이름)gatewayTls/gatewayTlsSha256(TLS 활성화 + 인증서 지문)cliPath(wide-area 영역에 기록되는 원격 설치 힌트)
gateway discover
openclaw gateway discover
"--timeout--jsonboolean기계가 읽을 수 있는 출력(스타일/스피너도 비활성화).
예:
openclaw gateway discover --timeout 4000
openclaw gateway discover --json | jq '.beacons[].wsUrl'