노드
노드(node) 는 Gateway WebSocket(오퍼레이터와 동일한 포트)에role: "node" 로 연결되는 컴패니언 디바이스(macOS/iOS/Android/헤드리스)이며, node.invoke 를 통해 canvas.*, camera.*, system.* 와 같은 명령 표면을 노출합니다. 프로토콜 세부 정보: Gateway protocol.
레거시 전송: Bridge protocol (TCP JSONL; 사용 중단/현재 노드에서는 제거됨).
macOS 는 노드 모드로도 실행할 수 있습니다. 메뉴바 앱이 Gateway의 WS 서버에 연결되어 로컬 캔버스/카메라 명령을 노드로 노출합니다(따라서 openclaw nodes … 가 이 Mac에 대해 동작합니다).
참고:
- 노드는 주변기기이며, 게이트웨이가 아닙니다. 게이트웨이 서비스를 실행하지 않습니다.
- Telegram/WhatsApp 등의 메시지는 노드가 아니라 게이트웨이에 도착합니다.
- 문제 해결 런북: /nodes/troubleshooting
페어링 + 상태
WS 노드는 디바이스 페어링을 사용합니다. 노드는connect 동안 디바이스 식별자를 제시하며, Gateway는 role: node 를 위한 디바이스 페어링 요청을 생성합니다. 디바이스의 CLI(또는 UI)에서 승인합니다.
빠른 CLI:
nodes status는 디바이스 페어링 역할에node가 포함되면 노드를 페어링됨 으로 표시합니다.node.pair.*(CLI:openclaw nodes pending/approve/reject) 는 별도의 게이트웨이 소유 노드 페어링 저장소이며, WSconnect핸드셰이크를 차단하지 않습니다.
원격 노드 호스트 (system.run)
Gateway가 한 머신에서 실행되고 명령을 다른 머신에서 실행하려는 경우 노드 호스트 를 사용합니다. 모델은 여전히 게이트웨이 와 통신하며,host=node 이 선택되면 게이트웨이가 exec 호출을 노드 호스트 로 전달합니다.
어디서 무엇이 실행되나요
- Gateway 호스트: 메시지를 수신하고, 모델을 실행하며, 도구 호출을 라우팅합니다.
- 노드 호스트: 노드 머신에서
system.run/system.which를 실행합니다. - 승인:
~/.openclaw/exec-approvals.json를 통해 노드 호스트에서 강제됩니다.
노드 호스트 시작 (포그라운드)
노드 머신에서:SSH 터널을 통한 원격 게이트웨이 (loopback 바인드)
Gateway가 loopback(gateway.bind=loopback, 로컬 모드 기본값)에 바인드되면 원격 노드 호스트는 직접 연결할 수 없습니다. SSH 터널을 생성하고 노드 호스트가 터널의 로컬 끝을 가리키도록 설정하십시오.
예시 (노드 호스트 -> 게이트웨이 호스트):
- 토큰은 게이트웨이 설정의
gateway.auth.token입니다(게이트웨이 호스트의~/.openclaw/openclaw.json). openclaw node run는 인증을 위해OPENCLAW_GATEWAY_TOKEN를 읽습니다.
노드 호스트 시작 (서비스)
페어링 + 이름 지정
게이트웨이 호스트에서:openclaw node run/openclaw node install의--display-name(노드의~/.openclaw/node.json에 영구 저장).openclaw nodes rename --node <id|name|ip> --name "Build Node"(게이트웨이 오버라이드).
명령 허용 목록 추가
Exec 승인은 노드 호스트별 입니다. 게이트웨이에서 허용 목록 항목을 추가하십시오:~/.openclaw/exec-approvals.json 에 저장됩니다.
exec 를 노드로 지정
기본값 구성 (게이트웨이 설정):host=node 를 포함한 모든 exec 호출은 노드 호스트에서 실행됩니다(노드 허용 목록/승인에 따름).
관련 항목:
명령 호출
저수준(원시 RPC):스크린샷 (캔버스 스냅샷)
노드가 Canvas(WebView)를 표시 중이면canvas.snapshot 가 { format, base64 } 를 반환합니다.
CLI 헬퍼(임시 파일에 쓰고 MEDIA:<path> 를 출력):
캔버스 제어
canvas present는 URL 또는 로컬 파일 경로(--target)를 허용하며, 위치 지정을 위한 선택적--x/--y/--width/--height를 지원합니다.canvas eval는 인라인 JS(--js) 또는 위치 인수를 허용합니다.
A2UI (Canvas)
- A2UI v0.8 JSONL 만 지원됩니다(v0.9/createSurface 는 거부됨).
사진 + 비디오 (노드 카메라)
사진(jpg):
mp4):
canvas.*및camera.*를 위해 노드는 포그라운드 여야 합니다(백그라운드 호출은NODE_BACKGROUND_UNAVAILABLE를 반환).- 클립 길이는 과도한 base64 페이로드를 방지하기 위해 제한됩니다(현재
<= 60s). - Android 는 가능한 경우
CAMERA/RECORD_AUDIO권한을 요청하며, 거부된 권한은*_PERMISSION_REQUIRED로 실패합니다.
화면 녹화 (노드)
노드는screen.record (mp4)를 노출합니다. 예시:
screen.record는 노드 앱이 포그라운드여야 합니다.- Android 는 녹화 전에 시스템 화면 캡처 프롬프트를 표시합니다.
- 화면 녹화는
<= 60s로 제한됩니다. --no-audio는 마이크 캡처를 비활성화합니다(iOS/Android 지원; macOS 는 시스템 캡처 오디오 사용).- 여러 화면이 있는 경우
--screen <index>를 사용해 디스플레이를 선택하십시오.
위치 (노드)
설정에서 위치가 활성화되면 노드는location.get 를 노출합니다.
CLI 헬퍼:
- 위치는 기본적으로 꺼져 있음 입니다.
- “항상” 은 시스템 권한이 필요하며, 백그라운드 가져오기는 최선 노력 방식입니다.
- 응답에는 위도/경도, 정확도(미터), 타임스탬프가 포함됩니다.
SMS (Android 노드)
Android 노드는 사용자가 SMS 권한을 부여하고 디바이스가 전화 기능을 지원할 때sms.send 를 노출할 수 있습니다.
저수준 호출:
- 기능이 광고되기 전에 Android 디바이스에서 권한 프롬프트를 수락해야 합니다.
- 전화 기능이 없는 Wi‑Fi 전용 디바이스는
sms.send를 광고하지 않습니다.
시스템 명령 (노드 호스트 / Mac 노드)
macOS 노드는system.run, system.notify, system.execApprovals.get/set 를 노출합니다.
헤드리스 노드 호스트는 system.run, system.which, system.execApprovals.get/set 를 노출합니다.
예시:
system.run는 페이로드에 stdout/stderr/종료 코드를 반환합니다.system.notify는 macOS 앱의 알림 권한 상태를 준수합니다.system.run는--cwd,--env KEY=VAL,--command-timeout,--needs-screen-recording를 지원합니다.system.notify는--priority <passive|active|timeSensitive>및--delivery <system|overlay|auto>를 지원합니다.- Node 호스트는
PATH재정의를 무시합니다. 추가 PATH 항목이 필요한 경우,--env를 통해PATH를 전달하는 대신 노드 호스트 서비스 환경을 구성하거나(또는 도구를 표준 위치에 설치) 설정하세요. - macOS 노드 모드에서
system.run는 macOS 앱의 exec 승인(Settings → Exec approvals)에 의해 제어됩니다. Ask/allowlist/full 은 헤드리스 노드 호스트와 동일하게 동작하며, 거부된 프롬프트는SYSTEM_RUN_DENIED를 반환합니다. - 헤드리스 노드 호스트에서
system.run는 exec 승인(~/.openclaw/exec-approvals.json)에 의해 제어됩니다.
Exec 노드 바인딩
여러 노드를 사용할 수 있는 경우 exec 를 특정 노드에 바인딩할 수 있습니다. 이는exec host=node 의 기본 노드를 설정합니다(에이전트별로 재정의 가능).
전역 기본값:
권한 맵
노드는node.list / node.describe 에서 권한 이름(예: screenRecording, accessibility)을 키로 하고 불리언 값(true = 허용됨)을 갖는 permissions 맵을 포함할 수 있습니다.
헤드리스 노드 호스트 (크로스 플랫폼)
OpenClaw 는 UI 없이 Gateway WebSocket 에 연결되어system.run / system.which 를 노출하는 헤드리스 노드 호스트 를 실행할 수 있습니다. 이는 Linux/Windows 에서 유용하거나 서버 옆에 최소한의 노드를 실행할 때 유용합니다.
시작:
- 페어링은 여전히 필요합니다(Gateway 에서 노드 승인 프롬프트가 표시됨).
- 노드 호스트는 노드 id, 토큰, 표시 이름, 게이트웨이 연결 정보를
~/.openclaw/node.json에 저장합니다. - Exec 승인은
~/.openclaw/exec-approvals.json를 통해 로컬에서 강제됩니다 (Exec approvals 참조). - macOS 에서 헤드리스 노드 호스트는 연결 가능할 때 컴패니언 앱 exec 호스트를 선호하며,
앱을 사용할 수 없으면 로컬 실행으로 폴백합니다. 앱을 필수로 하려면
OPENCLAW_NODE_EXEC_HOST=app를 설정하고, 폴백을 비활성화하려면OPENCLAW_NODE_EXEC_FALLBACK=0를 설정하십시오. - Gateway WS 가 TLS 를 사용하는 경우
--tls/--tls-fingerprint를 추가하십시오.
Mac 노드 모드
- macOS 메뉴바 앱은 Gateway WS 서버에 노드로 연결됩니다(따라서
openclaw nodes …가 이 Mac에 대해 동작). - 원격 모드에서 앱은 Gateway 포트를 위한 SSH 터널을 열고
localhost에 연결합니다.