2026-01-18 07:44:28 +00:00
---
2026-01-30 03:15:10 +01:00
summary: "CLI reference for `openclaw node` (headless node host)"
2026-01-18 07:44:28 +00:00
read_when:
- Running the headless node host
- Pairing a non-macOS node for system.run
2026-01-31 16:04:03 -05:00
title: "node"
2026-01-18 07:44:28 +00:00
---
2026-01-30 03:15:10 +01:00
# `openclaw node`
2026-01-18 07:44:28 +00:00
2026-01-22 23:07:58 +00:00
Run a **headless node host** that connects to the Gateway WebSocket and exposes
2026-01-18 07:44:28 +00:00
`system.run` / `system.which` on this machine.
2026-01-18 07:58:59 +00:00
## Why use a node host?
Use a node host when you want agents to **run commands on other machines** in your
network without installing a full macOS companion app there.
Common use cases:
2026-01-31 21:13:13 +09:00
2026-01-18 07:58:59 +00:00
- Run commands on remote Linux/Windows boxes (build servers, lab machines, NAS).
- Keep exec **sandboxed** on the gateway, but delegate approved runs to other hosts.
- Provide a lightweight, headless execution target for automation or CI nodes.
Execution is still guarded by **exec approvals** and per‑ agent allowlists on the
node host, so you can keep command access scoped and explicit.
2026-01-24 04:19:43 +00:00
## Browser proxy (zero-config)
Node hosts automatically advertise a browser proxy if `browser.enabled` is not
disabled on the node. This lets the agent use browser automation on that node
without extra configuration.
Disable it on the node if needed:
```json5
{
nodeHost: {
browserProxy: {
2026-01-31 21:13:13 +09:00
enabled: false,
},
},
2026-01-24 04:19:43 +00:00
}
```
2026-01-21 16:48:31 +00:00
## Run (foreground)
2026-01-18 07:44:28 +00:00
```bash
2026-01-30 03:15:10 +01:00
openclaw node run --host < gateway-host > --port 18789
2026-01-18 07:44:28 +00:00
```
Options:
2026-01-31 21:13:13 +09:00
2026-01-22 23:07:58 +00:00
- `--host <host>` : Gateway WebSocket host (default: `127.0.0.1` )
- `--port <port>` : Gateway WebSocket port (default: `18789` )
- `--tls` : Use TLS for the gateway connection
- `--tls-fingerprint <sha256>` : Expected TLS certificate fingerprint (sha256)
2026-01-18 07:44:28 +00:00
- `--node-id <id>` : Override node id (clears pairing token)
- `--display-name <name>` : Override the node display name
2026-03-07 18:28:32 -06:00
## Gateway auth for node host
`openclaw node run` and `openclaw node install` resolve gateway auth from config/env (no `--token` /`--password` flags on node commands):
- `OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD` are checked first.
- Then local config fallback: `gateway.auth.token` / `gateway.auth.password` .
2026-03-10 21:41:56 -05:00
- In local mode, node host intentionally does not inherit `gateway.remote.token` / `gateway.remote.password` .
- If `gateway.auth.token` / `gateway.auth.password` is explicitly configured via SecretRef and unresolved, node auth resolution fails closed (no remote fallback masking).
2026-03-07 18:28:32 -06:00
- In `gateway.mode=remote` , remote client fields (`gateway.remote.token` / `gateway.remote.password` ) are also eligible per remote precedence rules.
- Legacy `CLAWDBOT_GATEWAY_*` env vars are ignored for node host auth resolution.
2026-01-18 15:33:22 +00:00
## Service (background)
2026-01-18 07:44:28 +00:00
Install a headless node host as a user service.
```bash
2026-01-30 03:15:10 +01:00
openclaw node install --host < gateway-host > --port 18789
2026-01-18 07:44:28 +00:00
```
Options:
2026-01-31 21:13:13 +09:00
2026-01-22 23:07:58 +00:00
- `--host <host>` : Gateway WebSocket host (default: `127.0.0.1` )
- `--port <port>` : Gateway WebSocket port (default: `18789` )
- `--tls` : Use TLS for the gateway connection
- `--tls-fingerprint <sha256>` : Expected TLS certificate fingerprint (sha256)
2026-01-18 07:44:28 +00:00
- `--node-id <id>` : Override node id (clears pairing token)
- `--display-name <name>` : Override the node display name
- `--runtime <runtime>` : Service runtime (`node` or `bun` )
- `--force` : Reinstall/overwrite if already installed
Manage the service:
```bash
2026-01-30 03:15:10 +01:00
openclaw node status
openclaw node stop
openclaw node restart
openclaw node uninstall
2026-01-18 07:44:28 +00:00
```
2026-01-30 03:15:10 +01:00
Use `openclaw node run` for a foreground node host (no service).
2026-01-22 23:19:55 +00:00
2026-01-22 23:07:58 +00:00
Service commands accept `--json` for machine-readable output.
2026-01-18 07:44:28 +00:00
## Pairing
2026-03-02 10:53:01 +05:30
The first connection creates a pending device pairing request (`role: node` ) on the Gateway.
2026-01-18 07:44:28 +00:00
Approve it via:
```bash
2026-03-02 10:53:01 +05:30
openclaw devices list
openclaw devices approve < requestId >
2026-01-18 07:44:28 +00:00
```
2026-01-22 23:07:58 +00:00
The node host stores its node id, token, display name, and gateway connection info in
2026-01-30 03:15:10 +01:00
`~/.openclaw/node.json` .
2026-01-18 07:44:28 +00:00
## Exec approvals
`system.run` is gated by local exec approvals:
2026-01-30 03:15:10 +01:00
- `~/.openclaw/exec-approvals.json`
2026-01-18 07:44:28 +00:00
- [Exec approvals ](/tools/exec-approvals )
2026-01-30 03:15:10 +01:00
- `openclaw approvals --node <id|name|ip>` (edit from the Gateway)