openclaw
A unified skill for managing OpenClaw (龙虾) instance configs.
Subcommands
python3 scripts/cli.py [audit|diff|copy|add-model|list|switch] [options]
Each subcommand can also be run directly, e.g. python3 scripts/audit.py ....
diff is an alias for compare.
Shared behavior
- Default config discovery: when
--config/--tois omitted, the skill searches these locations in order:~/workspace/.force/openclaw/openclaw.json~/.kimi_openclaw/openclaw.json~/.openclaw/openclaw.json
- Lobster nicknames:
--config,--from, and--tocan be either a file path or a nickname registered inlobsters.json(see below). You can also use--from-lobsterand--to-lobsterfor explicit nickname arguments. - Backups: every write operation copies the config to
config-backups/<stem>-<utc-timestamp>.jsonbefore saving. The skill keeps the 20 most recent backups. - Dry run: write subcommands (
copy,add-model,switch) support--dry-runto preview changes. - Restart: write subcommands support
--restartto restart the OpenClaw gateway after saving. - Automatic audit:
copy,add-model, andswitchrun an audit before and after the change by default. Use--no-auditto skip it.
Lobster nickname registry
Create a JSON file at one of these locations:
~/workspace/.force/openclaw/lobsters.json~/.kimi_openclaw/lobsters.json~/.openclaw/lobsters.json
Example:
{
"甲虾": "/path/to/甲虾/openclaw.json",
"乙虾": "/path/to/乙虾/openclaw.json"
}
Then use:
python3 scripts/cli.py copy gateway-provider --from 甲虾 --to 乙虾 --alias
python3 scripts/cli.py switch gateway-provider/deepseek-v4-pro --config 乙虾 --restart
audit — validate a config
python3 scripts/cli.py audit [--config PATH|NICKNAME] [--json]
Checks providers, models, default model, aliases, and plugin consistency.
Use when:
- "帮我查一下这只虾的配置"
- "audit 一下 openclaw.json"
- Before applying a patch or copying a provider
diff — semantic diff of two configs
python3 scripts/cli.py diff LEFT.json RIGHT.json [--json] [--include-cost]
Reports added/removed/changed providers, models, default model, aliases, and
plugins. Skips cost fields by default; use --include-cost to diff them.
Use when:
- "为什么甲虾能用 DeepSeek,乙虾不行?"
- "这两份龙虾配置哪里不一样?"
copy — copy a provider between configs
python3 scripts/cli.py copy \
--from SOURCE|NICKNAME [--to TARGET|NICKNAME] \
provider-name [--model ID]... [--alias] [--restart] [--dry-run] [--no-audit]
Copies an entire provider from one config to another. If the target already has
that provider, it merges models and updates baseUrl / api without deleting
target-only models. --alias also copies aliases pointing to that provider.
Use when:
- "把甲虾的 gateway provider 复制到乙虾"
- "把这个模型配置同步过去"
add-model — add a model to a provider
python3 scripts/cli.py add-model provider model-id|model-json \
[--config PATH|NICKNAME] [--from SOURCE|NICKNAME] [--alias NAME] \
[--restart] [--dry-run] [--no-audit]
Adds a model definition and alias to a provider. If the provider is missing, it
can be copied from --from first.
Ways to specify the model:
- Pass a model id and
--from SOURCEcontaining that model in the same provider. - Pass a path to a JSON file with the model definition.
Use when:
- "给这只虾加上 DeepSeek"
- "把甲虾的 DeepSeek 配置复制到乙虾"
The canonical DeepSeek model definition lives in
references/deepseek_model.json.
Critical pitfalls
- Do not create a separate
deepseekprovider. The supported path is the gateway provider with model iddeepseek-v4-pro. - Model id must not contain
[1m]. Use the suffixlessdeepseek-v4-pro; the upstream gateway maps it to the 1M context variant. - Cold restart required. New providers are not reliably picked up by hot reload.
list — list providers, models, aliases, and default
python3 scripts/cli.py list [--config PATH|NICKNAME] [--json] [--validate]
Human-readable output by default; --json for piping to jq. Add --validate
to check that the default model and aliases resolve.
Use when:
- "这只虾有哪些模型?"
- "列出甲虾可用的模型"
- "看看默认模型是什么"
switch — change the default model
python3 scripts/cli.py switch provider/model-id \
[--config PATH|NICKNAME] [--restart] [--dry-run] [--no-audit]
This is the only subcommand that changes agents.defaults.model. It verifies
that the provider and model exist, backs up the config, and updates the default.
If the target is already the default, it exits without making another backup.
Use when:
- "把默认模型切成 DeepSeek"
- "切回原来的模型"
Typical workflows
Enable DeepSeek on a lobster
python3 scripts/cli.py audit --config 乙虾
python3 scripts/cli.py add-model gateway-provider deepseek-v4-pro \
--config 乙虾 --from 甲虾 --alias "DeepSeek V4 Pro"
python3 scripts/cli.py switch gateway-provider/deepseek-v4-pro --config 乙虾 --restart
Clone a working config to a new lobster
python3 scripts/cli.py copy gateway-provider --from 甲虾 --to 乙虾 --alias --restart
python3 scripts/cli.py audit --config 乙虾
Diff two lobsters
python3 scripts/cli.py diff 甲虾 乙虾
References
references/openclaw_architecture.md— config schema and terminologyreferences/deepseek_patch_sop.md— DeepSeek patch SOP (sanitized)references/deepseek_model.json— canonical DeepSeek model definition loaded byadd-modelreferences/lobster_registry.example.json— example lobster nickname registry