CLI commands
診断
openclaw doctor
Gateway とチャネルのヘルスチェックとクイック修復。
関連:
- トラブルシューティング: トラブルシューティング
- セキュリティ監査: セキュリティ
使用する理由
openclaw doctor は OpenClaw のヘルス確認サーフェスです。Gateway、
チャネル、プラグイン、Skills、モデルルーティング、ローカル状態、または設定移行が
期待どおりに動作せず、何が問題かを 1 つのコマンドで説明したい場合に使用します。
Doctor には 3 つの姿勢があります:
| 姿勢 | コマンド | 動作 |
|---|---|---|
| 検査 | openclaw doctor |
人間向けのチェックとガイド付きプロンプト。 |
| 修復 | openclaw doctor --fix |
サポートされている修復を適用します。非対話修復が安全な場合を除き、プロンプトを使用します。 |
| Lint | openclaw doctor --lint |
CI、事前確認、レビューゲート向けの読み取り専用の構造化された検出結果。 |
自動化で安定した結果が必要な場合は --lint を優先してください。人間のオペレーターが
意図的に doctor に設定または状態を編集させたい場合は --fix を優先してください。
例
openclaw doctoropenclaw doctor --lintopenclaw doctor --lint --jsonopenclaw doctor --lint --severity-min warningopenclaw doctor --lint --allopenclaw doctor --lint --allow-execopenclaw doctor --deepopenclaw doctor --fixopenclaw doctor --fix --non-interactiveopenclaw doctor --generate-gateway-tokenopenclaw doctor --post-upgradeopenclaw doctor --post-upgrade --jsonチャネル固有の権限には、doctor ではなくチャネルプローブを使用します:
openclaw channels capabilities --channel discord --target channel:<channel-id>openclaw channels status --probe対象を絞った Discord 機能プローブはボットの有効なチャネル権限を報告します。ステータスプローブは設定済みの Discord チャネルと音声自動参加ターゲットを監査します。
オプション
--no-workspace-suggestions: ワークスペースのメモリ/検索候補を無効にする--yes: プロンプトなしでデフォルトを受け入れる--repair: 推奨される非サービス修復をプロンプトなしで適用する。Gateway サービスのインストールと書き換えには、引き続き対話的な確認または明示的な Gateway コマンドが必要--fix:--repairのエイリアス--force: 必要に応じてカスタムサービス設定を上書きするなど、積極的な修復を適用する--non-interactive: プロンプトなしで実行する。安全な移行と非サービス修復のみ--generate-gateway-token: Gateway トークンを生成して設定する--allow-exec: シークレット検証中に、設定済みの exec SecretRefs を doctor が実行できるようにする--deep: 追加の Gateway インストールについてシステムサービスをスキャンし、最近の Gateway スーパーバイザー再起動ハンドオフを報告する--lint: 読み取り専用モードで近代化されたヘルスチェックを実行し、診断検出結果を出力する--post-upgrade: アップグレード後のプラグイン互換性プローブを実行する。検出結果を stdout に出力する。error レベルの検出結果が 1 件でも存在する場合はコード 1 で終了する--json:--lintと併用すると、人間向け出力の代わりに JSON 検出結果を出力する。--post-upgradeと併用すると、機械可読の JSON エンベロープ({ probesRun, findings })を出力する--severity-min <level>:--lintと併用すると、info、warning、またはerror未満の検出結果を除外する--all:--lintと併用すると、デフォルトの自動化セットから除外されるオプトインチェックを含め、登録済みのすべてのチェックを実行する--skip <id>:--lintと併用すると、チェック ID をスキップする。複数スキップするには繰り返す--only <id>:--lintと併用すると、チェック ID のみを実行する。小さな選択セットを実行するには繰り返す
Lint モード
openclaw doctor --lint は doctor チェックの読み取り専用の自動化姿勢です。
構造化ヘルスチェック経路を使用し、プロンプトを表示せず、設定/状態を修復または
書き換えません。ガイド付き修復プロンプトではなく機械可読の検出結果が必要な場合に、
CI、事前確認スクリプト、レビュー ワークフローで使用します。
--json、--severity-min、--all、--only、--skip などの Lint 出力オプションは
--lint と併用した場合にのみ受け付けられます。
openclaw doctor --lintopenclaw doctor --lint --severity-min warningopenclaw doctor --lint --jsonopenclaw doctor --lint --allopenclaw doctor --lint --allow-execopenclaw doctor --lint --only core/doctor/gateway-config --json人間向け出力はコンパクトです:
doctor --lint: ran 6 check(s), 1 finding(s) [warning] core/doctor/gateway-config gateway.mode - gateway.mode is unset; gateway start will be blocked. fix: Run `openclaw configure` and set Gateway mode (local/remote), or `openclaw config set gateway.mode local`.JSON 出力は Lint 実行用のスクリプト用サーフェスです:
{ "ok": false, "checksRun": 5, "checksSkipped": 0, "findings": [ { "checkId": "core/doctor/gateway-config", "severity": "warning", "message": "gateway.mode is unset; gateway start will be blocked.", "path": "gateway.mode", "fixHint": "Run `openclaw configure` and set Gateway mode (local/remote), or `openclaw config set gateway.mode local`." } ]}終了動作:
0: 選択された重大度しきい値以上の検出結果がない1: 選択されたしきい値を満たす検出結果が少なくとも 1 件ある2: Lint 検出結果を生成する前のコマンド/ランタイム失敗
--severity-min は、表示される検出結果と終了しきい値の両方を制御します。たとえば、
openclaw doctor --lint --severity-min error は、重大度が低い info または warning の
検出結果が存在する場合でも、検出結果を何も表示せずに 0 で終了できます。
--all は、重大度フィルタリングの前にどのチェックを選択するかを制御します。
デフォルトの Lint 実行は安定した自動化ゲートであり、深い、履歴的、または
修復可能なレガシー残留物を表面化させる可能性が高いために意図的にオプトインとされている
チェックを除外します。各チェック ID を列挙せずに完全な Lint インベントリが必要な場合は
--all を使用します。--only <id> は引き続き最も正確なセレクターであり、登録済みの任意のチェックを ID で実行できます。
構造化ヘルスチェック
近代的な doctor チェックは小さな構造化コントラクトを使用します:
detect(ctx, scope?) -> HealthFinding[]repair?(ctx, findings) -> HealthRepairResultdetect() は doctor --lint を動かします。repair() は任意であり、
doctor --fix / doctor --repair によってのみ考慮されます。この形に移行していない
チェックは、従来の doctor コントリビューション フローを引き続き使用します。
この分割は意図的です。detect() は診断を所有し、repair() は何を変更したか、
または何を変更する予定かの報告を所有します。修復コンテキストは dryRun/diff
リクエストを保持でき、修復結果は設定/ファイル編集用の構造化された diffs と、
サービス、プロセス、パッケージ、状態、またはその他の副作用用の effects を返せます。
これにより、変換済みチェックはミューテーション計画を detect() に移さずに、
doctor --fix --dry-run と差分報告へ発展できます。
repair() は、要求された修復を試行したかどうかを status: "repaired" | "skipped" | "failed" で報告します。ステータスが省略された場合は
repaired を意味するため、単純な修復チェックは変更だけを返せば十分です。
修復が skipped または failed を返した場合、doctor は理由を報告し、そのチェックの検証は実行しません。
構造化修復が成功した後、doctor は修復済みの検出結果をスコープとして detect() を
再実行します。チェックは、選択された検出結果、パス、または ocPath 値を使用して
焦点を絞った検証を行えます。検出結果がまだ存在する場合、doctor は変更を暗黙に完了したものとして扱わず、修復警告を報告します。
検出結果には以下が含まれます:
| フィールド | 目的 |
|---|---|
checkId |
skip/only フィルターと CI 許可リスト用の安定した ID。 |
severity |
info、warning、または error。 |
message |
人間が読める問題文。 |
path |
利用可能な場合の設定、ファイル、または論理パス。 |
line / column |
利用可能な場合のソース位置。 |
ocPath |
チェックが指し示せる場合の正確な oc:// アドレス。 |
fixHint |
推奨されるオペレーター操作または修復概要。 |
近代化されたコア doctor チェックは、それらの人間向け doctor / doctor --fix 動作を
所有する順序付き doctor コントリビューションに紐付いたままです。共有の構造化ヘルス
レジストリが拡張ポイントです。バンドル済みおよびプラグイン backed のチェックは、
所有パッケージがアクティブなコマンド経路で登録した後、コア doctor チェックの後に実行されます。
openclaw/plugin-sdk/health サブパスは、これらの拡張コンシューマー向けに同じ
コントラクトを公開します。
チェックの選択
ワークフローで焦点を絞ったゲートが必要な場合は、--only と --skip を使用します:
openclaw doctor --lint --only core/doctor/gateway-config --jsonopenclaw doctor --lint --skip core/doctor/skills-readinessopenclaw doctor --lint --all --skip core/doctor/session-locks--only と --skip は完全なチェック ID を受け付け、繰り返し指定できます。--only
ID が登録されていない場合、その ID に対してチェックは実行されません。コマンドの
checksRun と checksSkipped フィールドを使用して、焦点を絞ったゲートが期待するチェックを
選択していることを確認してください。
アップグレード後モード
openclaw doctor --post-upgrade は、ビルドまたはアップグレード後に連鎖して実行することを
意図したプラグイン互換性プローブを実行します。検出結果は stdout に出力されます。
level: "error" の検出結果が 1 件でもある場合、コマンドはコード 1 で終了します。
CI、コミュニティの fork-upgrade skill、およびその他のアップグレード後スモークツールに適した
機械可読のエンベロープ({ probesRun, findings })を受け取るには --json を追加します。
インストール済みプラグイン インデックスが欠落しているか不正な形式の場合でも、JSON モードは
plugin.index_unavailable エラー検出結果を含むそのエンベロープを出力します。
注:
- Nix モード (
OPENCLAW_NIX_MODE=1) では、読み取り専用の doctor チェックは引き続き動作しますが、openclaw.jsonが不変のため、doctor --fix、doctor --repair、doctor --yes、doctor --generate-gateway-tokenは無効化されます。代わりに、このインストールの Nix ソースを編集してください。nix-openclaw では、エージェント優先の クイックスタート を使用します。 - インタラクティブなプロンプト (keychain/OAuth 修正など) は、stdin が TTY で、かつ
--non-interactiveが設定されていない場合にのみ実行されます。ヘッドレス実行 (cron、Telegram、端末なし) ではプロンプトがスキップされます。 - パフォーマンス: 非インタラクティブな
doctor実行では、ヘッドレスのヘルスチェックを高速に保つため、積極的な Plugin 読み込みをスキップします。インタラクティブな doctor セッションでは、従来のヘルスおよび修復フローに必要な Plugin サーフェスを引き続き読み込みます。 --lintは--non-interactiveより厳格です。常に読み取り専用で、プロンプトを表示せず、安全なマイグレーションも適用しません。doctor に変更を加えさせたい場合は、doctor --fixまたはdoctor --repairを実行してください。- デフォルトでは、doctor はシークレットのチェック中に
execSecretRefs を実行しません。設定済みのシークレットリゾルバーを doctor に意図的に実行させたい場合にのみ、openclaw doctor --allow-execまたはopenclaw doctor --lint --allow-execを使用してください。 --fix(--repairのエイリアス) はバックアップを~/.openclaw/openclaw.json.bakに書き込み、不明な設定キーを削除して、各削除を一覧表示します。- 最新化されたヘルスチェックは、
doctor --fix用のrepair()パスを公開できます。公開していないチェックは、既存の doctor 修復フローを引き続き使用します。 doctor --fix --non-interactiveは、欠落または古い Gateway サービス定義を報告しますが、更新修復モード外ではそれらをインストールまたは書き換えません。サービスが欠落している場合はopenclaw gateway installを実行し、ランチャーを意図的に置き換えたい場合はopenclaw gateway install --forceを実行してください。- 状態整合性チェックは、sessions ディレクトリ内の孤立したトランスクリプトファイルを検出するようになりました。それらを
.deleted.<timestamp>としてアーカイブするにはインタラクティブな確認が必要です。--fix、--yes、ヘッドレス実行ではそのまま残されます。 - doctor は
~/.openclaw/cron/jobs.json(またはcron.store) もスキャンし、従来の cron ジョブ形状を検出して、正規の行を SQLite にインポートする前に書き換えます。 - doctor は、明示的な
payload.modelオーバーライドを持つ cron ジョブを報告します。これには、プロバイダーナamespace の数とagents.defaults.modelとの不一致が含まれるため、デフォルトモデルを継承しないスケジュール済みジョブが、認証または請求の調査中に可視化されます。 - Linux では、ユーザーの crontab が従来の
~/.openclaw/bin/ensure-whatsapp.shをまだ実行している場合、doctor が警告します。このスクリプトは現在メンテナンスされておらず、cron に systemd ユーザーバス環境がない場合に WhatsApp Gateway の停止を誤ってログに記録する可能性があります。 - WhatsApp が有効な場合、doctor はローカルの
openclaw-tuiクライアントがまだ実行中で、劣化した Gateway イベントループがないか確認します。doctor --fixは検証済みのローカル TUI クライアントのみを停止するため、WhatsApp の返信が古い TUI 更新ループの後ろにキューされることはありません。 - doctor は、プライマリモデル、フォールバック、画像/動画生成モデル、Heartbeat/サブエージェント/Compaction オーバーライド、フック、チャンネルモデルオーバーライド、古いセッションルートピン全体で、従来の
openai-codex/*モデル参照を正規のopenai/*参照に書き換えます。--fixは、従来のopenai-codex:*認証プロファイルとauth.order.openai-codexエントリもopenai:*に移行し、Codex intent をプロバイダー/モデルスコープのagentRuntime.id: "codex"エントリに移動し、古いエージェント全体/セッションランタイムピンを削除し、修復された OpenAI エージェント参照を直接の OpenAI API キー認証ではなく Codex 認証ルーティングに保持します。 - doctor は、古い OpenClaw バージョンで作成された従来の Plugin 依存関係ステージング状態をクリーンアップし、ホスト
openclawパッケージを peer dependency として宣言している managed npm Plugin 向けに再リンクします。また、plugins.entries、設定済みチャンネル、設定済みプロバイダー/検索設定、設定済みエージェントランタイムなど、設定から参照されている欠落したダウンロード可能 Plugin も修復します。パッケージ更新中、doctor はパッケージの入れ替えが完了するまでパッケージマネージャー Plugin 修復をスキップします。設定済み Plugin にまだ復旧が必要な場合は、その後openclaw doctor --fixを再実行してください。ダウンロードに失敗した場合、doctor はインストールエラーを報告し、次回の修復試行のために設定済み Plugin エントリを保持します。 - doctor は、Plugin 検出が正常な場合、
plugins.allow/plugins.deny/plugins.entriesから欠落した Plugin ID を削除し、一致する宙ぶらりんのチャンネル設定、Heartbeat ターゲット、チャンネルモデルオーバーライドも削除することで、古い Plugin 設定を修復します。 - doctor は、影響を受ける
plugins.entries.<id>エントリを無効化し、その無効なconfigペイロードを削除することで、無効な Plugin 設定を隔離します。Gateway 起動時には、その不正な Plugin だけがすでにスキップされるため、他の Plugin とチャンネルは実行を継続できます。 - 別のスーパーバイザーが Gateway ライフサイクルを所有している場合は、
OPENCLAW_SERVICE_REPAIR_POLICY=externalを設定します。doctor は Gateway/サービスのヘルスを引き続き報告し、サービス以外の修復を適用しますが、サービスのインストール/起動/再起動/ブートストラップおよび従来のサービスクリーンアップはスキップします。 - Linux では、doctor は非アクティブな追加の Gateway 風 systemd ユニットを無視し、修復中に実行中の systemd Gateway サービスのコマンド/エントリポイントメタデータを書き換えません。アクティブなランチャーを意図的に置き換えたい場合は、先にサービスを停止するか、
openclaw gateway install --forceを使用してください。 - doctor は、従来のフラットな Talk 設定 (
talk.voiceId、talk.modelIdなど) をtalk.provider+talk.providers.<provider>に自動移行します。 doctor --fixの繰り返し実行では、唯一の違いがオブジェクトキーの順序だけである場合、Talk 正規化を報告/適用しなくなりました。- doctor にはメモリ検索の準備状況チェックが含まれ、埋め込み認証情報が欠落している場合に
openclaw configure --section modelを推奨できます。 - doctor は、コマンド所有者が設定されていない場合に警告します。コマンド所有者とは、所有者専用コマンドの実行と危険な操作の承認を許可された人間のオペレーターアカウントです。DM ペアリングは、誰かがボットと会話できるようにするだけです。最初の所有者ブートストラップが存在する前に送信者を承認した場合は、
commands.ownerAllowFromを明示的に設定してください。 - Codex モードのエージェントが設定され、個人用 Codex CLI アセットがオペレーターの Codex ホームに存在する場合、doctor は情報メモを報告します。ローカル Codex app-server の起動では、エージェントごとに分離されたホームを使用するため、必要に応じて先に Codex Plugin をインストールし、その後
openclaw migrate plan codexを使用して、意図的に昇格すべきアセットのインベントリを作成してください。 - doctor は、廃止された
plugins.entries.codex.config.codexDynamicToolsProfileを削除します。Codex app-server は常に Codex ネイティブのワークスペースツールをネイティブのまま保持します。 - doctor は、デフォルトエージェントに許可された Skills が、bin、環境変数、設定、または OS 要件の欠落により、現在のランタイム環境で利用できない場合に警告します。
doctor --fixは、skills.entries.<skill>.enabled=falseでそれらの利用不能な Skills を無効化できます。Skills を有効なままにしたい場合は、代わりに欠落している要件をインストール/設定してください。 - サンドボックスモードが有効で Docker が利用できない場合、doctor は修復方法 (
install Dockerまたはopenclaw config set agents.defaults.sandbox.mode off) を含む高シグナルな警告を報告します。 - 従来のサンドボックスレジストリファイルまたはシャードディレクトリが存在する場合 (
~/.openclaw/sandbox/containers.json、~/.openclaw/sandbox/browsers.json、~/.openclaw/sandbox/containers/、または~/.openclaw/sandbox/browsers/)、doctor はそれらを報告します。openclaw doctor --fixは有効なエントリを SQLite に移行し、無効な従来ファイルを隔離します。 gateway.auth.token/gateway.auth.passwordが SecretRef 管理で、現在のコマンドパスで利用できない場合、doctor は読み取り専用の警告を報告し、平文のフォールバック認証情報を書き込みません。exec ベースの SecretRefs については、--allow-execが指定されていない限り、doctor は実行をスキップします。- 修正パスでチャンネル SecretRef の検査に失敗した場合、doctor は早期終了せず、処理を継続して警告を報告します。
- 状態ディレクトリのマイグレーション後、doctor プロセスで
TELEGRAM_BOT_TOKENまたはDISCORD_BOT_TOKENが利用できず、有効なデフォルト Telegram または Discord アカウントが環境変数フォールバックに依存している場合、doctor は警告します。 - Telegram
allowFromユーザー名の自動解決 (doctor --fix) には、現在のコマンドパスで解決可能な Telegram トークンが必要です。トークン検査が利用できない場合、doctor は警告を報告し、そのパスでは自動解決をスキップします。
macOS: launchctl 環境変数オーバーライド
以前に launchctl setenv OPENCLAW_GATEWAY_TOKEN ... (または ...PASSWORD) を実行していた場合、その値は設定ファイルを上書きし、永続的な「unauthorized」エラーを引き起こす可能性があります。
launchctl getenv OPENCLAW_GATEWAY_TOKENlaunchctl getenv OPENCLAW_GATEWAY_PASSWORD launchctl unsetenv OPENCLAW_GATEWAY_TOKENlaunchctl unsetenv OPENCLAW_GATEWAY_PASSWORD