Skip to main content

Moving to a standardized CLI interface with clawctl

· 6 min read

If you've been using Clawrium with clm, the next install replaces it with clawctl. Same hosts, same agents, same ~/.config/clawrium/ state — a single, consistent, kubectl-style command surface across the entire fleet.

clm (before)clawctl (after)clm psclm host listclm agent installclm agent removeclm agent show NAMEclawctl agent getclawctl host getclawctl agent createclawctl agent deleteclawctl agent describe NAME

Why this matters to you

  • One grammar, six resources. get, describe, create, delete, apply-style verbs work the same way across host, agent, provider, channel, integration, skill. Learn it once.
  • Pipe-friendly output. Every get supports -o yaml, -o json, -o name, and --no-headers. Scripts compose; output is no longer a moving target.
  • Tab completion that works. clawctl completion bash (or zsh/fish) gives you completion across every group, verb, and flag.
  • One place to see everything about an agent. clawctl agent describe <name> shows attached providers, channels, skills, secrets, onboarding state, and host details in one block.
  • agent get reads like kubectl get pods. STATUS / AGE columns, predictable sort, scriptable.
  • Channels are a real resource. Register a Discord or Slack channel once with clawctl channel registry create, attach it to as many agents as you want with clawctl agent channel attach. No more per-agent re-entry.

What it looks like

Three real outputs from the live fleet (no synthetic data — these are verbatim from the validation transcript).

List your fleet

$ clawctl agent get
NAME TYPE HOST PROVIDER STATUS AGE
wolf-i openclaw wolf-i - ready 42d
espresso hermes wolf-i - ready 13d
maurice hermes wolf-i - ready 2d
clawrium-d01 zeroclaw wolf-i - ready 5d
nemotron-beta zeroclaw wolf-i - ready 4d
nemotron-alpha zeroclaw wolf-i - ready 2d

Look at one agent

$ clawctl agent describe maurice
Name: maurice
Kind: agent
Type: hermes
Version: 2026.5.7
Host: wolf-i (wolf.<redacted>.ts.net)
Provider: -
Status: ready
Age: 2d
Installed: 2026-05-22T20:39:02Z

Channels (1):
discord

Skills (0):
Integrations (0):

Machine-readable

$ clawctl host get -o yaml
- kind: host
name: wolf-i
hostname: wolf.<redacted>.ts.net
user: xclm
status: ready
age_seconds: 3774446
aliases: [wolf-i]
addresses:
- address: 192.168.1.Y
is_primary: false
- address: wolf.<redacted>.ts.net
is_primary: true
label: tailscale

Migration

Install clawctl (it ships as the new binary in the same clawrium package). Existing agents on existing hosts keep running — clawctl agent get will list them immediately. The first clawctl agent sync <agent> you run picks up the new template names.

uv tool uninstall clm 2>/dev/null || true
uv tool install clawrium
clawctl agent get # confirm your fleet is intact

The full command-by-command mapping lives in the CLI reference docs — one page per resource (agent, host, provider, channel, integration, skill).

Breaking changes

  • No clm alias. The old binary is gone; the verb grammar is different enough that an alias would mislead more than help.
  • Channels moved out of agent configure. Use clawctl channel registry create then clawctl agent channel attach. The old --stage channels flag prints a deprecation pointer.
  • Some templates renamed on disk (e.g. clm-env.conf.j2zeroclaw-env.conf.j2). The first clawctl agent sync per agent cleans up the legacy dropin automatically.

Full migration recipe in CHANGELOG.md under [Unreleased] BREAKING.

Where to go from here