clawctl is a runtime manager for claws.
It installs versioned claw implementations into a private shared root, keeps one active claw selection, renders isolated runtime config from shared credentials, and manages a local background runtime for supported claws.
The product shape is closer to mise or nvm than to a benchmark harness.
Implemented today:
- Bun + Effect CLI in
packages/cli - shared root under
~/.clawctlby default, with env overrides - backend-aware install and runtime plumbing for both
localanddocker - shared config plus isolated per-runtime state
- active shims under
~/.clawctl/bin/ - install, list, versions, use, current, doctor, cleanup, init, status, ping, chat, stop, uninstall, and config flows
Current limits:
- supported host platform:
darwin-arm64 source-buildis still modeled but not implemented
Fully supported:
- Tier 1:
nullclaw,picoclaw,zeroclawwith local and Docker backends - Tier 2:
openclaw,nanobotwith local and Docker backends
Registered with limits:
hermes- bootstrap-backed adapter with local and Docker backends
- supports managed
use,status,stop,chat, andping
packages/cli— the liveclawctlcommand-line apppackages/skill— skill package for agents usingclawctlpackages/website— Astro marketing siteSPEC.md— implementation-aligned product and architecture spec
If you want the operator guide for the CLI, start with packages/cli/README.md.
Install dependencies:
bun installRun the CLI from the repo root:
bun run cli --helpCommon examples:
export PATH="$HOME/.clawctl/bin:$PATH"
bun run cli list
bun run cli versions openclaw
bun run cli config set CLAW_API_KEY sk-...
bun run cli config set TELEGRAM_BOT_TOKEN 123456:ABCDEF...
bun run cli install openclaw
bun run cli use openclaw
bun run cli chat "Summarize the current workspace."
bun run cli stopRun the CLI:
bun run cli --helpBuild the CLI binary:
bun run cli:buildRun the website:
bun run webLint, typecheck, and verify the workspace:
bun run lintRun the CLI package tests directly:
bun run --cwd packages/cli testclawctl currently shares these keys across claws:
CLAW_API_KEYCLAW_BASE_URLCLAW_MODELTELEGRAM_BOT_TOKENTELEGRAM_BOT_USERNAMETELEGRAM_CHAT_IDTELEGRAM_ALLOWED_FROM
Current live adapters use:
CLAW_API_KEYCLAW_BASE_URLCLAW_MODEL- adapter-specific Telegram settings where supported
Shared config lives at ~/.clawctl/config/shared.env. Each runtime still gets its own isolated HOME, config files, workspace, and state directory.
When you run clawctl use ..., it also updates active shims under ~/.clawctl/bin/:
claw<active-implementation>
Add that directory to PATH if you want the active claw CLI to resolve natively.
You can also let clawctl append the PATH setup for supported shells:
bun run cli init- Project spec:
SPEC.md - CLI usage guide:
packages/cli/README.md - Agent skill:
packages/skill/clawctl/SKILL.md