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.
5.7 KiB
summary, read_when, title
| summary | read_when | title | ||
|---|---|---|---|---|
| Run the ACP bridge for IDE integrations |
|
acp |
acp
Run the Agent Client Protocol (ACP) bridge that talks to a HanzoBot Gateway.
This command speaks ACP over stdio for IDEs and forwards prompts to the Gateway over WebSocket. It keeps ACP sessions mapped to Gateway session keys.
Usage
hanzo-bot acp
# Remote Gateway
hanzo-bot acp --url wss://gateway-host:18789 --token <token>
# Remote Gateway (token from file)
hanzo-bot acp --url wss://gateway-host:18789 --token-file ~/.hanzo-bot/gateway.token
# Attach to an existing session key
hanzo-bot acp --session agent:main:main
# Attach by label (must already exist)
hanzo-bot acp --session-label "support inbox"
# Reset the session key before the first prompt
hanzo-bot acp --session agent:main:main --reset-session
ACP client (debug)
Use the built-in ACP client to sanity-check the bridge without an IDE. It spawns the ACP bridge and lets you type prompts interactively.
hanzo-bot acp client
# Point the spawned bridge at a remote Gateway
hanzo-bot acp client --server-args --url wss://gateway-host:18789 --token-file ~/.hanzo-bot/gateway.token
# Override the server command (default: hanzo-bot)
hanzo-bot acp client --server "node" --server-args hanzo-bot.mjs acp --url ws://127.0.0.1:19001
Permission model (client debug mode):
- Auto-approval is allowlist-based and only applies to trusted core tool IDs.
readauto-approval is scoped to the current working directory (--cwdwhen set).- Unknown/non-core tool names, out-of-scope reads, and dangerous tools always require explicit prompt approval.
- Server-provided
toolCall.kindis treated as untrusted metadata (not an authorization source).
How to use this
Use ACP when an IDE (or other client) speaks Agent Client Protocol and you want it to drive a HanzoBot Gateway session.
- Ensure the Gateway is running (local or remote).
- Configure the Gateway target (config or flags).
- Point your IDE to run
hanzo-bot acpover stdio.
Example config (persisted):
hanzo-bot config set gateway.remote.url wss://gateway-host:18789
hanzo-bot config set gateway.remote.token <token>
Example direct run (no config write):
hanzo-bot acp --url wss://gateway-host:18789 --token <token>
# preferred for local process safety
hanzo-bot acp --url wss://gateway-host:18789 --token-file ~/.hanzo-bot/gateway.token
Selecting agents
ACP does not pick agents directly. It routes by the Gateway session key.
Use agent-scoped session keys to target a specific agent:
hanzo-bot acp --session agent:main:main
hanzo-bot acp --session agent:design:main
hanzo-bot acp --session agent:qa:bug-123
Each ACP session maps to a single Gateway session key. One agent can have many
sessions; ACP defaults to an isolated acp:<uuid> session unless you override
the key or label.
Zed editor setup
Add a custom ACP agent in ~/.config/zed/settings.json (or use Zed’s Settings UI):
{
"agent_servers": {
"HanzoBot ACP": {
"type": "custom",
"command": "hanzo-bot",
"args": ["acp"],
"env": {}
}
}
}
To target a specific Gateway or agent:
{
"agent_servers": {
"HanzoBot ACP": {
"type": "custom",
"command": "hanzo-bot",
"args": [
"acp",
"--url",
"wss://gateway-host:18789",
"--token",
"<token>",
"--session",
"agent:design:main"
],
"env": {}
}
}
}
In Zed, open the Agent panel and select “HanzoBot ACP” to start a thread.
Session mapping
By default, ACP sessions get an isolated Gateway session key with an acp: prefix.
To reuse a known session, pass a session key or label:
--session <key>: use a specific Gateway session key.--session-label <label>: resolve an existing session by label.--reset-session: mint a fresh session id for that key (same key, new transcript).
If your ACP client supports metadata, you can override per session:
{
"_meta": {
"sessionKey": "agent:main:main",
"sessionLabel": "support inbox",
"resetSession": true
}
}
Learn more about session keys at /concepts/session.
Options
--url <url>: Gateway WebSocket URL (defaults to gateway.remote.url when configured).--token <token>: Gateway auth token.--token-file <path>: read Gateway auth token from file.--password <password>: Gateway auth password.--password-file <path>: read Gateway auth password from file.--session <key>: default session key.--session-label <label>: default session label to resolve.--require-existing: fail if the session key/label does not exist.--reset-session: reset the session key before first use.--no-prefix-cwd: do not prefix prompts with the working directory.--verbose, -v: verbose logging to stderr.
Security note:
--tokenand--passwordcan be visible in local process listings on some systems.- Prefer
--token-file/--password-fileor environment variables (BOT_GATEWAY_TOKEN,BOT_GATEWAY_PASSWORD). - ACP runtime backend child processes receive
BOT_SHELL=acp, which can be used for context-specific shell/profile rules. hanzo-bot acp clientsetsBOT_SHELL=acp-clienton the spawned bridge process.
acp client options
--cwd <dir>: working directory for the ACP session.--server <command>: ACP server command (default:hanzo-bot).--server-args <args...>: extra arguments passed to the ACP server.--server-verbose: enable verbose logging on the ACP server.--verbose, -v: verbose client logging.