Doctor
clawdbot doctor is the repair + migration tool for Clawdbot. It fixes stale
config/state, checks health, and provides actionable repair steps.
Quick start
Headless / automation
What it does (summary)
- Optional pre-flight update for git installs (interactive only).
- Health check + restart prompt.
- Skills status summary (eligible/missing/blocked).
- Legacy config migration and normalization.
- OpenCode Zen provider override warnings (
models.providers.opencode). - Legacy on-disk state migration (sessions/agent dir/WhatsApp auth).
- State integrity and permissions checks (sessions, transcripts, state dir).
- Config file permission checks (chmod 600) when running locally.
- Model auth health: checks OAuth expiry, can refresh expiring tokens, and reports auth-profile cooldown/disabled states.
- Legacy workspace dir detection (
~/clawdis,~/clawdbot). - Sandbox image repair when sandboxing is enabled.
- Legacy service migration and extra gateway detection.
- Gateway runtime checks (service installed but not running; cached launchd label).
- Provider status warnings (probed from the running gateway).
- Supervisor config audit (launchd/systemd/schtasks) with optional repair.
- Gateway runtime best-practice checks (Node vs Bun, version-manager paths).
- Gateway port collision diagnostics (default
18789). - Security warnings for open DM policies.
- Gateway auth warnings when no
gateway.auth.tokenis set (local mode; offers token generation). - systemd linger check on Linux.
- Writes updated config + wizard metadata.
Detailed behavior and rationale
0) Optional update (git installs)
If this is a git checkout and doctor is running interactively, it offers to update (fetch/rebase/build) before running doctor.1) Legacy config file migration
If~/.clawdis/clawdis.json exists and ~/.clawdbot/clawdbot.json does not,
doctor migrates the file and normalizes old paths/image names. This prevents
new installs from silently booting with the wrong schema.
2) Legacy config key migrations
When the config contains deprecated keys, other commands refuse to run and ask you to runclawdbot doctor.
Doctor will:
- Explain which legacy keys were found.
- Show the migration it applied.
- Rewrite
~/.clawdbot/clawdbot.jsonwith the updated schema.
routing.allowFrom→whatsapp.allowFromrouting.groupChat.requireMention→whatsapp/telegram/imessage.groups."*".requireMentionrouting.groupChat.historyLimit→messages.groupChat.historyLimitrouting.groupChat.mentionPatterns→messages.groupChat.mentionPatternsrouting.queue→messages.queuerouting.bindings→ top-levelbindingsrouting.agents/routing.defaultAgentId→agents.list+agents.list[].defaultrouting.agentToAgent→tools.agentToAgentrouting.transcribeAudio→tools.audio.transcriptionidentity→agents.list[].identityagent.*→agents.defaults+tools.*(tools/elevated/exec/sandbox/subagents)agent.model/allowedModels/modelAliases/modelFallbacks/imageModelFallbacks→agents.defaults.models+agents.defaults.model.primary/fallbacks+agents.defaults.imageModel.primary/fallbacks
2b) OpenCode Zen provider overrides
If you’ve addedmodels.providers.opencode (or opencode-zen) manually, it
overrides the built-in OpenCode Zen catalog from @mariozechner/pi-ai. That can
force every model onto a single API or zero out costs. Doctor warns so you can
remove the override and restore per-model API routing + costs.
3) Legacy state migrations (disk layout)
Doctor can migrate older on-disk layouts into the current structure:- Sessions store + transcripts:
- from
~/.clawdbot/sessions/to~/.clawdbot/agents/<agentId>/sessions/
- from
- Agent dir:
- from
~/.clawdbot/agent/to~/.clawdbot/agents/<agentId>/agent/
- from
- WhatsApp auth state (Baileys):
- from legacy
~/.clawdbot/credentials/*.json(exceptoauth.json) - to
~/.clawdbot/credentials/whatsapp/<accountId>/...(default account id:default)
- from legacy
clawdbot doctor.
4) State integrity checks (session persistence, routing, and safety)
The state directory is the operational brainstem. If it vanishes, you lose sessions, credentials, logs, and config (unless you have backups elsewhere). Doctor checks:- State dir missing: warns about catastrophic state loss, prompts to recreate the directory, and reminds you that it cannot recover missing data.
- State dir permissions: verifies writability; offers to repair permissions
(and emits a
chownhint when owner/group mismatch is detected). - Session dirs missing:
sessions/and the session store directory are required to persist history and avoidENOENTcrashes. - Transcript mismatch: warns when recent session entries have missing transcript files.
- Main session “1-line JSONL”: flags when the main transcript has only one line (history is not accumulating).
- Multiple state dirs: warns when multiple
~/.clawdbotfolders exist across home directories or whenCLAWDBOT_STATE_DIRpoints elsewhere (history can split between installs). - Remote mode reminder: if
gateway.mode=remote, doctor reminds you to run it on the remote host (the state lives there). - Config file permissions: warns if
~/.clawdbot/clawdbot.jsonis group/world readable and offers to tighten to600.
5) Model auth health (OAuth expiry)
Doctor inspects OAuth profiles in the auth store, warns when tokens are expiring/expired, and can refresh them when safe. If the Anthropic Claude Code profile is stale, it suggestsclaude setup-token on the gateway host.
Refresh prompts only appear when running interactively (TTY); --non-interactive
skips refresh attempts.
Doctor also reports auth profiles that are temporarily unusable due to:
- short cooldowns (rate limits/timeouts/auth failures)
- longer disables (billing/credit failures)
6) Hooks model validation
Ifhooks.gmail.model is set, doctor validates the model reference against the
catalog and allowlist and warns when it won’t resolve or is disallowed.
7) Sandbox image repair
When sandboxing is enabled, doctor checks Docker images and offers to build or switch to legacy names if the current image is missing.8) Gateway service migrations and cleanup hints
Doctor detects legacy Clawdis gateway services (launchd/systemd/schtasks) and offers to remove them and install the Clawdbot service using the current gateway port. It can also scan for extra gateway-like services and print cleanup hints. Profile-named Clawdbot gateway services are considered first-class and are not flagged as “extra.”9) Security warnings
Doctor emits warnings when a provider is open to DMs without an allowlist, or when a policy is configured in a dangerous way.10) systemd linger (Linux)
If running as a systemd user service, doctor ensures lingering is enabled so the gateway stays alive after logout.11) Skills status
Doctor prints a quick summary of eligible/missing/blocked skills for the current workspace.12) Gateway auth checks (local token)
Doctor warns whengateway.auth is missing on a local gateway and offers to
generate a token. Use clawdbot doctor --generate-gateway-token to force token
creation in automation.
13) Gateway health check + restart
Doctor runs a health check and offers to restart the gateway when it looks unhealthy.14) Provider status warnings
If the gateway is healthy, doctor runs a provider status probe and reports warnings with suggested fixes.15) Supervisor config audit + repair
Doctor checks the installed supervisor config (launchd/systemd/schtasks) for missing or outdated defaults (e.g., systemd network-online dependencies and restart delay). When it finds a mismatch, it recommends an update and can rewrite the service file/task to the current defaults. Notes:clawdbot doctorprompts before rewriting supervisor config.clawdbot doctor --yesaccepts the default repair prompts.clawdbot doctor --repairapplies recommended fixes without prompts.clawdbot doctor --repair --forceoverwrites custom supervisor configs.- You can always force a full rewrite via
clawdbot daemon install --force.
16) Gateway runtime + port diagnostics
Doctor inspects the daemon runtime (PID, last exit status) and warns when the service is installed but not actually running. It also checks for port collisions on the gateway port (default18789) and reports likely causes (gateway already
running, SSH tunnel).
17) Gateway runtime best practices
Doctor warns when the gateway service runs on Bun or a version-managed Node path (nvm, fnm, volta, asdf, etc.). WhatsApp + Telegram providers require Node,
and version-manager paths can break after upgrades because the daemon does not
load your shell init. Doctor offers to migrate to a system Node install when
available (Homebrew/apt/choco).