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.
7.2 KiB
summary, read_when, title
| summary | read_when | title | ||
|---|---|---|---|---|
| Use Anthropic Claude via API keys or setup-token in HanzoBot |
|
Anthropic |
Anthropic (Claude)
Anthropic builds the Claude model family and provides access via an API. In HanzoBot you can authenticate with an API key or a setup-token.
Option A: Anthropic API key
Best for: standard API access and usage-based billing. Create your API key in the Anthropic Console.
CLI setup
hanzo-bot onboard
# choose: Anthropic API key
# or non-interactive
hanzo-bot onboard --anthropic-api-key "$ANTHROPIC_API_KEY"
Config snippet
{
env: { ANTHROPIC_API_KEY: "sk-ant-..." },
agents: { defaults: { model: { primary: "anthropic/claude-opus-4-6" } } },
}
Thinking defaults (Claude 4.6)
- Anthropic Claude 4.6 models default to
adaptivethinking in HanzoBot when no explicit thinking level is set. - You can override per-message (
/think:<level>) or in model params:agents.defaults.models["anthropic/<model>"].params.thinking. - Related Anthropic docs:
Prompt caching (Anthropic API)
HanzoBot supports Anthropic's prompt caching feature. This is API-only; subscription auth does not honor cache settings.
Configuration
Use the cacheRetention parameter in your model config:
| Value | Cache Duration | Description |
|---|---|---|
none |
No caching | Disable prompt caching |
short |
5 minutes | Default for API Key auth |
long |
1 hour | Extended cache (requires beta flag) |
{
agents: {
defaults: {
models: {
"anthropic/claude-opus-4-6": {
params: { cacheRetention: "long" },
},
},
},
},
}
Defaults
When using Anthropic API Key authentication, HanzoBot automatically applies cacheRetention: "short" (5-minute cache) for all Anthropic models. You can override this by explicitly setting cacheRetention in your config.
Per-agent cacheRetention overrides
Use model-level params as your baseline, then override specific agents via agents.list[].params.
{
agents: {
defaults: {
model: { primary: "anthropic/claude-opus-4-6" },
models: {
"anthropic/claude-opus-4-6": {
params: { cacheRetention: "long" }, // baseline for most agents
},
},
},
list: [
{ id: "research", default: true },
{ id: "alerts", params: { cacheRetention: "none" } }, // override for this agent only
],
},
}
Config merge order for cache-related params:
agents.defaults.models["provider/model"].paramsagents.list[].params(matchingid, overrides by key)
This lets one agent keep a long-lived cache while another agent on the same model disables caching to avoid write costs on bursty/low-reuse traffic.
Bedrock Claude notes
- Anthropic Claude models on Bedrock (
amazon-bedrock/*anthropic.claude*) acceptcacheRetentionpass-through when configured. - Non-Anthropic Bedrock models are forced to
cacheRetention: "none"at runtime. - Anthropic API-key smart defaults also seed
cacheRetention: "short"for Claude-on-Bedrock model refs when no explicit value is set.
Legacy parameter
The older cacheControlTtl parameter is still supported for backwards compatibility:
"5m"maps toshort"1h"maps tolong
We recommend migrating to the new cacheRetention parameter.
HanzoBot includes the extended-cache-ttl-2025-04-11 beta flag for Anthropic API
requests; keep it if you override provider headers (see /gateway/configuration).
1M context window (Anthropic beta)
Anthropic's 1M context window is beta-gated. In HanzoBot, enable it per model
with params.context1m: true for supported Opus/Sonnet models.
{
agents: {
defaults: {
models: {
"anthropic/claude-opus-4-6": {
params: { context1m: true },
},
},
},
},
}
HanzoBot maps this to anthropic-beta: context-1m-2025-08-07 on Anthropic
requests.
This only activates when params.context1m is explicitly set to true for
that model.
Requirement: Anthropic must allow long-context usage on that credential
(typically API key billing, or a subscription account with Extra Usage
enabled). Otherwise Anthropic returns:
HTTP 429: rate_limit_error: Extra usage is required for long context requests.
Note: Anthropic currently rejects context-1m-* beta requests when using
OAuth/subscription tokens (sk-ant-oat-*). HanzoBot automatically skips the
context1m beta header for OAuth auth and keeps the required OAuth betas.
Option B: Claude setup-token
Best for: using your Claude subscription.
Where to get a setup-token
Setup-tokens are created by the Claude Code CLI, not the Anthropic Console. You can run this on any machine:
claude setup-token
Paste the token into HanzoBot (wizard: Anthropic token (paste setup-token)), or run it on the gateway host:
hanzo-bot models auth setup-token --provider anthropic
If you generated the token on a different machine, paste it:
hanzo-bot models auth paste-token --provider anthropic
CLI setup (setup-token)
# Paste a setup-token during onboarding
hanzo-bot onboard --auth-choice setup-token
Config snippet (setup-token)
{
agents: { defaults: { model: { primary: "anthropic/claude-opus-4-6" } } },
}
Notes
- Generate the setup-token with
claude setup-tokenand paste it, or runhanzo-bot models auth setup-tokenon the gateway host. - If you see “OAuth token refresh failed …” on a Claude subscription, re-auth with a setup-token. See /gateway/troubleshooting#oauth-token-refresh-failed-anthropic-claude-subscription.
- Auth details + reuse rules are in /concepts/oauth.
Troubleshooting
401 errors / token suddenly invalid
- Claude subscription auth can expire or be revoked. Re-run
claude setup-tokenand paste it into the gateway host. - If the Claude CLI login lives on a different machine, use
hanzo-bot models auth paste-token --provider anthropicon the gateway host.
No API key found for provider "anthropic"
- Auth is per agent. New agents don’t inherit the main agent’s keys.
- Re-run onboarding for that agent, or paste a setup-token / API key on the
gateway host, then verify with
hanzo-bot models status.
No credentials found for profile anthropic:default
- Run
hanzo-bot models statusto see which auth profile is active. - Re-run onboarding, or paste a setup-token / API key for that profile.
No available auth profile (all in cooldown/unavailable)
- Check
hanzo-bot models status --jsonforauth.unusableProfiles. - Add another Anthropic profile or wait for cooldown.
More: /gateway/troubleshooting and /help/faq.