On this page

On this page

CLI commands

CLI reference

openclaw is the main CLI entry point. Each core command has a dedicated reference page or is documented with the command it aliases. This index lists the commands, global flags, and output styling rules that apply across the CLI.

Setup commands by intent:

  • openclaw setup and openclaw onboard verify inference first, then start OpenClaw for Gateway, workspace, channels, skills, and health setup.
  • openclaw setup --baseline creates the baseline config and workspace without walking the guided onboarding flow.
  • openclaw configure changes targeted parts of an existing setup: model auth, gateway, channels, plugins, or skills.
  • openclaw channels add configures channel accounts after the baseline exists. A channel selection alone uses guided setup. Account, credential, or channel-config flags use the direct path for scripts.

Command pages

Area Commands
Setup and onboarding openclaw · setup · onboard · configure · config · completion · doctor · dashboard
Reset, backup, and migration backup · database · migrate · reset · uninstall · update
Messaging and agents message · agent · agents · templates · attach · acp · mcp
Health and sessions status · health · triage · sessions · resume · audit
Gateway and logs gateway · logs · system
Models and inference models · promos · infer · capability (alias for infer) · memory · wiki
Network and nodes connect · directory · nodes · node · worker
Runtime and sandbox approvals · exec-policy (see approvals) · sandbox · tui · chat/terminal (aliases for tui --local) · browser
Worktrees worktrees
Automation cron (alias automations) · hooks · webhooks · transcripts
Discovery and docs dns · docs
Pairing and channels pairing · qr · devices · channels · users
Security and plugins security · secrets · skills · plugins · proxy
Legacy aliases daemon (gateway service) · clawbot (namespace)
Plugins (optional) file-transfer · path · policy · voicecall · workboard (if installed)

Global flags

Flag Purpose
--dev Isolate state under ~/.openclaw-dev, default gateway port 19001, and shift derived ports
--profile <name> Isolate state under ~/.openclaw-<name> (OPENCLAW_STATE_DIR/OPENCLAW_CONFIG_PATH)
--container <name> Run the CLI inside a running Podman/Docker container named <name> (default: env OPENCLAW_CONTAINER)
--log-level <level> Override the global log level for file + console output
--no-color Disable ANSI colors (NO_COLOR=1 is also respected)
--update Shorthand for openclaw update; works for both source checkouts and package installs
-V, --version, -v Print version and exit

Place command-specific options after their command name, for example openclaw status --json. Global options such as --profile can precede the command.

Unknown root options fail with an option error and a help hint instead of starting onboarding or the TUI.

A named --profile replaces standard state and config paths inherited from another profile, including a running Gateway service. Explicitly customized state directories and config paths remain unchanged.

Use -- to stop option parsing. Command words still dispatch after it: for example, openclaw -- config get gateway.port reads the configured port. A token such as --help after -- is a positional argument.

Output modes

  • ANSI colors and progress indicators render only in TTY sessions.
  • OSC-8 hyperlinks render as clickable links where supported. Otherwise the CLI prints plain URLs.
  • Human-readable report values neutralize terminal escape sequences before styling. Embedded newlines, carriage returns, and tabs appear as \n, \r, and \t instead of changing the report layout. This display formatting does not change the underlying paths, configuration values, or JSON fields. Bidirectional formatting controls are removed from displayed values; ordinary right-to-left letters and emoji are preserved.
  • On bounded reporting commands, --json reserves stdout for one JSON document. The CLI suppresses styling and progress output. Warnings and diagnostics stay on stderr.
  • Interactive UIs and wizards, long-running servers and streams, shell integration, and pure side-effect commands may omit --json when they have no meaningful report to return.
  • Long-running commands show a progress indicator (OSC 9;4 when supported).
  • Connection failures give a short explanation and a status-check command. If a request may have completed, check its result before retrying. Unexpected failures point to a recovery command; use OPENCLAW_DEBUG=1 when rerunning to include diagnostics. JSON failures keep their diagnostic fields.
  • Update failures keep their reason on stderr, including in JSON mode.
  • Resource cleanup failures are reported on stderr without replacing the command's result. Cleanup that exceeds its reporting deadline remains tracked and reports any later failure.

JSON failures

Successful JSON payloads remain command-specific. When a command in JSON output mode fails, it exits nonzero and writes one JSON document to stdout with this envelope:

json
{  "ok": false,  "error": {    "type": "cli_error",    "message": "Description of the failure"  }}

A command may add domain-specific fields, such as per-item results, beside this envelope. Gateway-backed agent turns that fail after the Gateway accepted the run also record the accepted runId and origin: "gateway" beside the envelope, so scripts can report the in-flight run. Failure messages are sanitized. Human-readable diagnostics may also be written to stderr, so scripts should parse stdout and still check the exit status.

Onboarding and setup failures retain phase and the top-level message beside the envelope. Use error.message for the shared failure description and phase for onboarding-specific recovery.

Color palette

OpenClaw uses a lobster palette for CLI output:

Token Hex Used for
accent #FF5A2D Headings, labels, primary highlights
accentBright #FF7A3D Command names, emphasis
accentDim #D14A22 Secondary highlight text
info #FF8A5B Informational values
success #2FBF71 Success states
warn #FFB020 Warnings, option flags, fallbacks
error #E23D2D Errors, failures
muted #8B7F77 De-emphasis, metadata

Palette source of truth: packages/terminal-core/src/palette.ts.

Command tree

Full command tree

This map covers core commands and their primary subcommands. Plugin-added subcommands (for example under skills, plugins, and wiki) evolve independently. Run <command> --help for the authoritative, current list.

Code
openclaw [--dev] [--profile <name>] <command>  openclaw  setup  onboard  configure  config    get    set    patch    unset    file    schema    validate  database    prepare-state    port    preflight    preflight-agent    verify-preservation    ownership      status      claim  completion  doctor  triage  dashboard  backup    create    verify    restore    sqlite      create      list      verify      restore    git      init      create      log      verify      restore    enable    disable  migrate    list    plan <provider>    apply <provider>  security    audit  secrets    reload    store    audit    configure    apply  reset  uninstall  update    wizard    status    repair  channels    list    status    capabilities    resolve    logs    dead-letters list|resubmit    add    remove    login    logout  directory    self    peers list    groups list|members  skills    search    install    update    verify    workshop list|changes|show|archive|restore    list    info    check  plugins    list    search    inspect    install    uninstall    update    enable    disable    doctor    build    validate    pack    init    registry    marketplace list|entries|refresh  workboard    list    create    show    dispatch  memory    status    index    search  transcripts    list    show    path  path    resolve    find    set    validate    emit  wiki    status    doctor    init    compile    lint    ingest    okf import    search    get    apply synthesis|metadata    bridge import    unsafe-local import    chatgpt import|rollback    obsidian status|search|open|command|daily  message    send    broadcast    poll    react    reactions    read    edit    delete    pin    unpin    pins    permissions    search    thread create|list|reply    emoji list|upload    sticker send|upload    role info|add|remove    channel info|list    member info    voice status    event list|create    timeout    kick    ban  agent  agents    list    add    delete    bindings    bind    unbind    set-identity  attach  acp  mcp    serve    list    show    set    unset  status  health  sessions    cleanup  audit  tasks    list    audit    maintenance    show    notify    cancel    flow list|show|cancel  gateway    call    usage-cost    health    stability    diagnostics export    status    probe    discover    install    uninstall    start    stop    restart    run  worktrees    list    create    remove    restore    gc  daemon    status    install    uninstall    start    stop    restart  logs  system    event    heartbeat last|enable|disable    presence  models    list    status    set    set-image    aliases list|add|remove    fallbacks list|add|remove|clear    image-fallbacks list|add|remove|clear    scan    auth list|add|login|setup-token|paste-token|paste-api-key|login-github-copilot    auth order get|set|clear  promos    list    claim <slug>  infer (alias: capability)    list    inspect    model run|list|inspect|providers|auth login|logout|status    image generate|edit|describe|describe-many|providers    audio transcribe|providers    tts convert|voices|personas|providers|status|enable|disable|set-provider|set-persona    video generate|describe|providers    web search|fetch|providers    embedding create|providers  sandbox    list    recreate    explain  cron    status    list    get    show    add    edit    rm    enable    disable    runs    run    scratch  nodes    status    describe    list    pending    approve    reject    rename    invoke    notify    push    canvas present|hide|navigate    camera list|snap|clip    screen record    location get  devices    list    remove    clear    approve    reject    rotate    revoke  users    list    link-email <email> --to <profileId>    merge <sourceProfileId> --into <targetProfileId>  node    run    status    install    uninstall    stop    restart  connect  worker  approvals    get    set    allowlist add|remove  exec-policy    show    preset    set  browser    status    start    stop    reset-profile    tabs    open    focus    close    profiles    create-profile    delete-profile    screenshot    snapshot    navigate    resize    click    type    press    hover    drag    select    upload    fill    dialog    wait    evaluate    console    pdf  hooks    list    info    check    enable    disable    install    update  webhooks    gmail setup|run  proxy    start    run    coverage    sessions    query    blob    purge  pairing    list    approve  qr  clawbot    qr  docs  dns    setup  resume  tui  chat (alias: tui --local)  terminal (alias: tui --local)

Plugins can add additional top-level commands, such as openclaw workboard or openclaw voicecall.

Database

openclaw database provides shared-state preparation, schema preflight, preservation verification, shared-state ownership, and offline database-family engine porting. See database schemas for compatibility contracts.

bash
openclaw database port --to <postgres|sqlite> [--dry-run] [--json]openclaw database port --family <state|agent|workboard|logbook|team-reports> --to <postgres|sqlite> [--dry-run] [--json]openclaw database port --resume <manifest> [--json]openclaw database port --rollback <manifest> [--json]

Stop the Gateway and embedded agents first. --family selects all existing physical stores of one family and changes only that family's override. Omit it to port all eligible families when their engines are homogeneous; mixed selections require a family. Agent and shared-state families can use different engines. --dry-run checks read-only prerequisites without creating migration artifacts. Recovery requires the active manifest at <stateDir>/recovery/database-port/manifest.json; --resume and --rollback are mutually exclusive and cannot be combined with --family, --to, or --dry-run.

Completed ports retain exact original captures and an archived manifest under <stateDir>/recovery/database-port/<operation-id>/. To keep later writes when returning to SQLite, run a new --to sqlite port; completed manifests are not an undo mechanism. Reverse-port before a raw package-manager downgrade. See the port runbook for backup contents, interruption recovery, and restart guidance.

Prepare exact PostgreSQL shared state

Use prepare-state to initialize an absent PostgreSQL shared-state namespace or validate an existing one for the installed OpenClaw version. It requires valid PostgreSQL configuration for the state family and an existing matching local anchor in the selected profile/state directory; it does not create or replace an anchor, port SQLite data, or select a new store identity.

Stop the Gateway and embedded agents first. The command acquires exclusive shared-state schema custody without waiting for another owner and closes its native resources before releasing custody. It does not stop a running owner or bypass an unfinished database port.

bash
openclaw database prepare-state --expected-store-id <uuid> --expected-namespace <namespace> --json

Both identity options are required:

  • --expected-store-id <uuid> must exactly match the store UUID in the existing PostgreSQL anchor. Do not generate a replacement UUID.
  • --expected-namespace <namespace> must exactly match both the anchor's namespace and <schemaPrefix>_state_<uuid-prefix> for the configured database.postgres.schemaPrefix. Here, uuid-prefix is the first 16 characters of the store UUID with hyphens removed. The namespace accepts lowercase letters, digits, and underscores, starting with a letter or underscore.

Only a namespace that is entirely absent is bootstrapped with the installed schema. An existing namespace, even an empty or incomplete one, is never treated as new: it must pass existing-only identity, metadata, catalog, and current schema-version validation. This command does not migrate or repair existing state. See anchors and catalog admission.

Success reports prepared after bootstrap or ready for an already valid store. With --json, the result includes ok, status, path (the local anchor), storeId, namespace, and schemaVersion. Without it, the command prints Shared state: <status> (<namespace>). Failures exit nonzero; --json uses the JSON failure envelope.

If identity validation fails, check the selected profile, configuration, and matched anchor before retrying. For incompatible or incomplete existing storage, use a compatible OpenClaw version or restore a matched backup; do not delete the namespace or edit its metadata to force preparation.

Exact SQLite migration capture

An external controller can capture a running local Gateway only while it holds a ready, non-drain suspension with terminal sessions preserved and zero write custody. Use the controller's existing request and suspension IDs; this command neither creates the initial suspension nor resumes or stops the Gateway.

bash
openclaw database migration-capture create --externally-quiesced --request-id <request> --suspension-id <suspension> --output <private-directory> --jsonopenclaw database migration-capture restore <capture> --target <empty-staging-directory> --manifest-sha256 <producer-digest> --json

Quiesced capture authenticates to the selected local backend with its shared token or password. It creates its own verified filesystem archive and exact SQLite images under the same bounded suspension without writing to the source database or journal files. The Gateway keeps its live ownership heartbeat: its own lease timestamps can advance during suspension. Capture does not stop those renewals or treat a captured lease as authority to activate restored state. Filesystem archive creation and verification run in a joined subprocess so blocking SQLite or filesystem work does not prevent suspension renewal. The archive step has a 30-minute deadline; cancellation waits for the child to stop before capture returns. It renews only the supplied controller request and refuses changed owners, expired suspensions, pending writes, and PostgreSQL sources. The controller must retain the suspension until capture finishes, then decide whether to resume or stop its Gateway.

The output must be outside the source state and configuration roots. Restore only extracts into new private staging; it never activates that state. Preserve the producer's manifest digest and the same logical source paths. Exact captures contain private credentials and retained operational state, unlike sanitized ordinary backups. For a stopped source, the existing offline mode instead requires --base-archive from that same stopped state and does not accept suspension IDs.

Chat slash commands

Chat messages support /... commands. See slash commands.

Highlights:

  • /status - quick diagnostics.
  • /trace - session-scoped plugin trace/debug lines.
  • /config - persisted config changes.
  • /debug - runtime-only config overrides in memory, not on disk. Requires commands.debug: true.

Usage tracking

openclaw status --usage and the Control UI surface provider usage/quota when OAuth/API credentials are available. Data comes directly from provider usage endpoints and is normalized to X% left. Providers with current usage windows: Anthropic, Gemini CLI, GitHub Copilot, MiniMax, OpenAI Codex, Xiaomi, and z.ai.

See Usage tracking for details.

Was this useful?