Three coordinated things:
1. Resolve the committed upstream/main merge conflicts. 94 files were
sitting with raw <<<<<<< HEAD ... >>>>>>> upstream/main blocks. Every
conflict had HanzoBot/Bot on HEAD and OpenClaw on upstream. Resolved
by keeping HEAD everywhere — 540 conflict blocks.
2. Rewrite remaining OpenClaw text refs.
OPENCLAW → HANZO_BOT
OpenClaw → HanzoBot (PascalCase type identifiers)
openclaw → bot (codebase convention — botToken,
botUsername etc.; avoids invalid
hyphenated JS identifiers)
openclaw[_]/openclaw[A-Z] → bot[_]/bot[A-Z] (compound)
ai.openclaw.x → ai.hanzo.bot.x (JVM package path)
3. Delete or rename openclaw-named file paths (116 of them). Dead
duplicates with a Bot-named canonical from the partial migration:
deleted. Otherwise renamed.
ai/openclaw/** → deleted (ai/hanzo/bot/** canonical)
Sources/OpenClaw*/ → deleted (Sources/Bot* canonical)
Tests/OpenClawIPCTests/ → deleted (Tests/BotIPCTests canonical)
OpenClawKit/ → deleted (BotKit canonical)
openclaw-tools.*.ts → deleted (bot-tools.*.ts canonical)
openclaw-root.ts etc. → deleted (bot-root.ts canonical)
types.openclaw.ts → deleted (types.bot.ts canonical)
extensions/*/openclaw.plugin.json → renamed hanzo-bot.plugin.json
docs/start/openclaw.md → renamed hanzo-bot.md (+ zh-CN)
docs/assets/openclaw-*.png, whatsapp-openclaw*.jpg → deleted
scripts/.../openclaw-* → deleted (bot/hanzo-bot parallels)
openclaw.mjs → deleted (hanzo-bot.mjs is package.bin)
Then patched 65 broken JS/TS import strings where hanzo-bot had ended
up inside an import path ('./types.hanzo-bot.js' → './types.bot.js'
etc., since the on-disk filename uses the brand-neutral bot- prefix).
Pre-existing lint debt cleaned up to get oxlint --type-aware to 0/0:
removed the dead i18n test that referenced a path no longer existing;
defined the missing DIDConfig and WalletConfig types in types.base.ts
(they were imported but never declared); dropped unused imports;
collapsed redundant type assertion and a tautological meta.bot lookup
that the openclaw→bot rename made redundant.
The a2ui.bundle.js generated artifact is kept at its pre-rebrand
contents — it gets regenerated by 'pnpm canvas:a2ui:bundle' from
sources I cannot rebuild in this commit; the source side is clean.
Verified: 0 occurrences of openclaw (case-insensitive) in tree source
content, 0 file or directory paths with openclaw in the name; oxlint
--type-aware src test reports 0/0.
3.1 KiB
summary, read_when, title
| summary | read_when | title | ||
|---|---|---|---|---|
| CLI reference for `hanzo-bot node` (headless node host) |
|
node |
hanzo-bot node
Run a headless node host that connects to the Gateway WebSocket and exposes
system.run / system.which on this machine.
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:
- 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.
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:
{
nodeHost: {
browserProxy: {
enabled: false,
},
},
}
Run (foreground)
hanzo-bot node run --host <gateway-host> --port 18789
Options:
--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)--node-id <id>: Override node id (clears pairing token)--display-name <name>: Override the node display name
Service (background)
Install a headless node host as a user service.
hanzo-bot node install --host <gateway-host> --port 18789
Options:
--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)--node-id <id>: Override node id (clears pairing token)--display-name <name>: Override the node display name--runtime <runtime>: Service runtime (nodeorbun)--force: Reinstall/overwrite if already installed
Manage the service:
hanzo-bot node status
hanzo-bot node stop
hanzo-bot node restart
hanzo-bot node uninstall
Use hanzo-bot node run for a foreground node host (no service).
Service commands accept --json for machine-readable output.
Pairing
The first connection creates a pending device pairing request (role: node) on the Gateway.
Approve it via:
hanzo-bot devices list
hanzo-bot devices approve <requestId>
The node host stores its node id, token, display name, and gateway connection info in
~/.hanzo-bot/node.json.
Exec approvals
system.run is gated by local exec approvals:
~/.hanzo-bot/exec-approvals.json- Exec approvals
hanzo-bot approvals --node <id|name|ip>(edit from the Gateway)