openclaw doctor は、OpenClaw の修復および移行ツールです。古い設定や状態を修正し、健全性をチェックして、実行可能な修復手順を提示します。
クイックスタート
ヘッドレスモードと自動化モード
- --yes
- --fix
- --lint
- --fix --force
- --non-interactive
- --deep
読み取り専用 lint モード
openclaw doctor --lint は、openclaw doctor --fix と対になる自動化向けの機能です。
両者は同じ Doctor ルールレジストリを共有しますが、ルールの選択方法と
ルールに基づく処理方法は同じではありません。
doctor --lint は、広範かつ安全な自動化プロファイルを実行します。これは、
静的かつローカルで、CI や事前確認の出力に有用なチェックを行います。助言のみのチェック、
環境に依存するチェック、稼働中のサービスに依存するチェック、アカウント/ワークスペースの
インベントリ、履歴のクリーンアップなど、オプトインのチェックはスキップします。これらの
オプトインチェックを含む登録済み lint 監査をすべて実行する場合は doctor --lint --all を、
特定のチェックを実行する場合は --only <id> を使用します。
doctor --fix は lint のデフォルトプロファイルを使用せず、
--all を受け付けません。Doctor の順序付き修復パスを実行します。最新の健全性チェックでは、
任意の repair() 実装を提供でき、古い領域では引き続きレガシーな
Doctor 修復フローを使用します。一部の lint 検出結果は意図的に診断専用であるため、
--lint --all にチェックが表示されても、--fix がその領域を変更するとは限りません。
この契約では、detect()(検出結果を報告)と repair()(変更、差分、副作用を報告)を
分離しています。これにより、lint チェックを変更プランナーにすることなく、将来の
doctor --fix --dry-run に向けた拡張余地を維持しています。
一部の組み込みチェックは内部的にデフォルトで無効になっています。これにより、デフォルトの
doctor --lint 自動化プロファイルに含めずに、--all、
--only、Doctor の修復フローで利用できます。検出結果の重大度は、引き続き
各検出結果ごとに(info、warning、error のいずれかとして)出力されます。
デフォルトで選択されるかどうかは重大度レベルではありません。
ok:選択した重大度のしきい値を満たす検出結果があったかどうかchecksRun/checksSkipped:件数(プロファイル、--only、または--skipによってスキップ)findings:checkId、severity、message、および任意のpath、line、column、ocPath、source、target、requirement、fixHintを含む構造化された診断
--severity-min info|warning|error(デフォルトwarning):出力内容と、ゼロ以外の終了コードになる条件の両方を制御します。--all:デフォルトの自動化セットから除外されたオプトインチェックを含め、登録済みのすべての lint チェックを実行します。--only <id>(繰り返し指定可能):指定したチェック ID のみを実行します。不明な ID はエラーの検出結果として報告されます。--skip <id>(繰り返し指定可能):残りの実行を継続しながら、特定のチェックを除外します。--json、--severity-min、--all、--only、--skipには--lintが必要です。通常のopenclaw doctorおよび--fixの実行では拒否されます。
実行内容(概要)
健全性、UI、更新
健全性、UI、更新
- git インストール向けの任意の事前更新(対話モードのみ)。
- UI プロトコルの鮮度チェック(プロトコルスキーマの方が新しい場合は Control UI を再ビルド)。
- 健全性チェックと再起動の確認。
- 問題がある場合のみ Skills と Plugin に関する注記を表示。正常なインベントリは
openclaw skills checkとopenclaw plugins listに引き続き表示されます。
設定と移行
設定と移行
- レガシーな値の形式に対する設定の正規化。
- レガシーなフラット形式の
talk.*フィールドからtalk.providerとtalk.providers.<provider>への Talk 設定の移行。 - レガシー Chrome 拡張機能の設定と Chrome MCP の準備状況に対するブラウザー移行チェック。
- OpenCode プロバイダーのオーバーライドに関する警告(
models.providers.opencode/opencode-zen/opencode-go)。 - レガシー OpenAI Codex プロバイダー/プロファイルの移行(
openai-codex→openai)と、古いmodels.providers.openai-codexによるシャドーイングの警告。 - OpenAI Codex OAuth プロファイルに対する OAuth TLS 前提条件のチェック。
plugins.allowが制限的である一方、ツールポリシーがワイルドカードまたは Plugin 所有のツールを引き続き要求している場合の、Plugin/ツール許可リストに関する警告。- レガシーなディスク上の状態の移行(セッション/エージェントディレクトリ/WhatsApp 認証)。
- レガシー Plugin マニフェスト契約キーの移行(
speechProviders、realtimeTranscriptionProviders、realtimeVoiceProviders、mediaUnderstandingProviders、imageGenerationProviders、videoGenerationProviders、webFetchProviders、webSearchProviders→contracts)。 - レガシー Cron ストアの移行(
jobId、schedule.cron、トップレベルの配信/ペイロードフィールド、ペイロードのprovider、notify: trueWebhook フォールバックジョブ)。 agents.defaults、agents.entries.*、models.providers.*(モデルごとのエントリを含む)にわたる Codex CLI ランタイム固定値の修復(agentRuntime.id: "codex-cli"→"codex")。- Plugin が有効な場合に古い Plugin 設定をクリーンアップ。
plugins.enabled=falseの場合は、古い Plugin 参照を無効な隔離設定として保持します。
状態と整合性
状態と整合性
- セッションロックファイルの検査と古いロックのクリーンアップ。
- 影響を受ける 2026.4.24 ビルドで作成された、重複するプロンプト書き換え分岐に対するセッショントランスクリプトの修復。
- 停止したメインセッションとサブエージェントの再起動復旧トゥームストーンを検出。Doctor はブロックされたセッションを報告し、既存のトゥームストーンと競合する古い中断フラグのみを修復します。自動復旧を再度有効にはしません。
- 状態の整合性と権限のチェック(セッション、トランスクリプト、状態ディレクトリ)。
- ローカルで実行している場合の設定ファイル権限チェック(chmod 600)。
- モデル認証の健全性:OAuth の有効期限をチェックし、期限切れが近いトークンを更新でき、認証プロファイルのクールダウン/無効状態を報告します。
Gateway、サービス、スーパーバイザー
Gateway、サービス、スーパーバイザー
- サンドボックスが有効な場合のサンドボックスイメージの修復。
- レガシーサービスの移行と追加 Gateway の検出。
- Matrix チャネルのレガシー状態の移行(
--fix/--repairモード)。 - Gateway ランタイムチェック(サービスはインストール済みだが未実行、キャッシュされた launchd ラベル)。
- チャネル状態の警告(稼働中の Gateway からプローブ)。
- チャネル固有の権限チェックは
openclaw channels capabilities配下にあります。たとえば、Discord ボイスチャネルの権限はopenclaw channels capabilities --channel discord --target channel:<channel-id>で監査されます。 - ローカル TUI クライアントがまだ実行中で、Gateway のイベントループの健全性が低下している場合の WhatsApp 応答性チェック。
--fixは、確認済みのローカル TUI クライアントのみを停止します。 - プライマリモデル、フォールバック、画像/動画生成モデル、Heartbeat/サブエージェント/Compaction のオーバーライド、フック、チャネルモデルのオーバーライド、セッションルートの固定値にある、レガシーな
openai-codex/*モデル参照に対する Codex ルート修復。--fixはそれらをopenai/*に書き換え、openai-codex:*の認証プロファイル/順序をopenai:*に移行し、古いセッション/エージェント全体のランタイム固定値を削除して、修復後の有効なルートに基づいて Codex の互換性を判断します。 - スーパーバイザー設定の監査(launchd/systemd/schtasks)と任意の修復。
- インストールまたは更新時にシェルの
HTTP_PROXY/HTTPS_PROXY/NO_PROXYの値を取り込んだ Gateway サービスに対する、埋め込みプロキシ環境のクリーンアップ。 - Gateway ランタイムチェック(サポートされていないレガシー Bun サービス、バージョンマネージャーのパス)。
- Gateway ポート競合の診断(デフォルト
18789)。
認証、セキュリティ、ペアリング
認証、セキュリティ、ペアリング
- オープンな DM ポリシーに対するセキュリティ警告。
- ローカルトークンモードの Gateway 認証チェック(トークンソースが存在しない場合はトークン生成を提案し、トークンの SecretRef 設定は上書きしません)。
- デバイスのペアリング問題を検出(初回ペアリング要求の保留、ロール/スコープのアップグレードの保留、古いローカルデバイストークンキャッシュのずれ、ペアリング済みレコードの認証のずれ)。
ワークスペースとシェル
ワークスペースとシェル
- Linux での systemd linger チェック。
- ワークスペースのブートストラップファイルサイズチェック(コンテキストファイルの切り詰め/上限間近の警告)。
- デフォルトエージェントの Skills 準備状況チェック。必要なバイナリ、環境、設定、または OS 要件が不足している許可済み Skills を報告し、
--fixはskills.entriesで利用できない Skills を無効にできます。 - シェル補完の状態チェックと自動インストール/アップグレード。
- メモリ検索の埋め込みプロバイダー準備状況チェック(ローカルモデル、リモート API キー、または QMD バイナリ)。
- ソースインストールのチェック(pnpm ワークスペースの不一致、UI アセットの欠落、tsx バイナリの欠落)。
- 更新された設定とウィザードのメタデータを書き込みます。
Dreams UI のバックフィルとリセット
Control UI の Dreams シーンには、grounded dreaming ワークフロー用の バックフィル、リセット、Grounded をクリア アクションがあります。これらは Gateway の doctor 形式の RPC メソッドを使用しますが、openclaw doctor CLI の修復/移行には含まれません。
MEMORY.md を編集せず、doctor の完全な移行を実行せず、grounded 候補を単独でライブ短期昇格ストアにステージングすることもありません。grounded の過去のリプレイを通常のディープ昇格レーンに投入するには、代わりに次の CLI フローを使用します。
DREAMS.md はレビュー用サーフェスとして維持されます。
詳細な動作と根拠
0. 任意の更新(git インストール)
0. 任意の更新(git インストール)
1. 設定の正規化
1. 設定の正規化
talk.provider + talk.providers.<provider> で、リアルタイム音声設定は talk.realtime.* の下にあります。Doctor は古い talk.voiceId / talk.voiceAliases / talk.modelId / talk.outputFormat / talk.apiKey の形式をプロバイダーマップに書き換え、従来のトップレベルのリアルタイムセレクター(talk.mode、talk.transport、talk.brain、talk.model、talk.voice)を talk.realtime に書き換えます。また、plugins.allow が空ではなく、ツールポリシーでワイルドカードまたは Plugin 所有のツールエントリが使用されている場合、Doctor は警告を表示します。tools.allow: ["*"] は、実際に読み込まれた Plugin のツールだけに一致します。排他的な Plugin 許可リストを回避するものではありません。2. 従来の設定キーの移行
2. 従来の設定キーの移行
openclaw doctor の実行を求めます。Doctor は、検出された従来のキーを説明し、適用した移行を示して、更新されたスキーマで ~/.openclaw/openclaw.json を書き換えます。Gateway の起動処理は従来の設定形式を拒否し、openclaw doctor --fix の実行を求めます。起動時に openclaw.json を書き換えることはありません。Cron ジョブストアの移行も openclaw doctor --fix によって処理されます。routing.queue、routing.bindings、routing.agents/defaultAgentId、
routing.transcribeAudio、トップレベルの agent.*、またはトップレベルの identity)
には移行パスがなくなっています。これらを使用する設定は、書き換えられる代わりに
検証に失敗するようになりました。Doctor が処理を続行できるようにするには、
現在の設定リファレンスに従って、それらのキーを手動で修正してください。plugins.entries.voice-call.config.* 行は、設定が読み込まれるたびに
openclaw doctor ではなく Voice Call Plugin 自体によって正規化されます。この Plugin は、openclaw doctor --fix を示す起動時の警告もログに記録しますが、doctor は現在、これらのキーについて
openclaw.json を書き換えません。実行時に変更を適用するのは
Plugin 自体の正規化です。- 2 つ以上の
channels.<channel>.accountsエントリがchannels.<channel>.defaultAccountまたはaccounts.defaultなしで設定されている場合、フォールバックルーティングによって意図しないアカウントが選択される可能性があることを doctor が警告します。 channels.<channel>.defaultAccountに不明なアカウント ID が設定されている場合、doctor が警告し、設定済みのアカウント ID を一覧表示します。
2b. OpenCode プロバイダーのオーバーライド
2b. OpenCode プロバイダーのオーバーライド
models.providers.opencode、opencode-zen、または opencode-go を手動で追加した場合、openclaw/plugin-sdk/llm の組み込み OpenCode カタログがオーバーライドされます。これにより、モデルが誤った API を使用するよう強制されたり、コストがゼロに設定されたりする可能性があります。オーバーライドを削除してモデルごとの API ルーティングとコストを復元できるよう、doctor が警告します。2c. ブラウザーの移行と Chrome MCP の準備状況
2c. ブラウザーの移行と Chrome MCP の準備状況
browser.profiles.*.driver: "extension" → "existing-session"、browser.relayBindHost は削除)。defaultProfile: "user" または設定済みの existing-session プロファイルを使用している場合、doctor はホストローカル Chrome MCP パスも監査します:- デフォルトの自動接続プロファイルについて、Google Chrome が同じホストにインストールされているか確認します
- 検出された Chrome のバージョンを確認し、Chrome 144 未満の場合に警告します
- ブラウザーの検査ページ(例:
chrome://inspect/#remote-debugging、brave://inspect/#remote-debugging、またはedge://inspect/#remote-debugging)でリモートデバッグを有効にするよう通知します
responsebody、PDF エクスポート、ダウンロードのインターセプト、バッチアクションなどの高度なルートには、引き続き管理対象ブラウザーまたは raw CDP プロファイルが必要です。このチェックは Docker、サンドボックス、リモートブラウザー、その他のヘッドレスフローには適用されず、これらでは引き続き raw CDP が使用されます。2d. OAuth TLS の前提条件
2d. OAuth TLS の前提条件
UNABLE_TO_GET_ISSUER_CERT_LOCALLY、期限切れ証明書、自己署名証明書)でプローブが失敗した場合、doctor はプラットフォーム固有の修正ガイダンスを表示します。Homebrew Node を使用する macOS では、通常 brew postinstall ca-certificates で修正できます。--deep を使用すると、Gateway が正常でもプローブが実行されます。2e. Codex OAuth プロバイダーのオーバーライド
2e. Codex OAuth プロバイダーのオーバーライド
models.providers.openai-codex の下へ従来の OpenAI トランスポート設定を追加していた場合、その設定によって組み込みの Codex OAuth プロバイダーパスが隠される可能性があります。Codex OAuth とともに古いトランスポート設定が検出されると、古いトランスポートオーバーライドを削除または書き換えて現在のルーティング動作を復元できるよう、doctor が警告します。カスタムプロキシとヘッダーのみのオーバーライドは引き続きサポートされ、この警告は発生しませんが、それらの明示的に定義されたリクエストルートは Codex の暗黙的な選択の対象にはなりません。2f. Codex ルートの修復
2f. Codex ルートの修復
openai-codex/* モデル参照を確認します。ネイティブ Codex ハーネスのルーティングでは正規の openai/* モデル参照を使用しますが、プレフィックスだけで Codex が選択されることはありません。実行時ポリシーが未設定または auto の場合、明示的なリクエストオーバーライドがない、公式の HTTPS Platform Responses または ChatGPT Responses ルートとの完全一致のみが対象です。OpenAI の暗黙的なエージェントランタイムを参照してください。--fix / --repair モードでは、doctor は影響を受けるデフォルトエージェントおよびエージェントごとの参照を書き換えます。対象には、プライマリモデル、フォールバック、画像・動画生成モデル、Heartbeat/サブエージェント/Compaction のオーバーライド、フック、チャネルモデルのオーバーライド、古い永続化済みセッションルート状態が含まれます:openai-codex/gpt-*はopenai/gpt-*になります。- Codex の使用意図は、修復されたエージェントモデル参照のプロバイダー/モデル単位の
agentRuntime.id: "codex"エントリに移動されます。 - 実行時の選択はプロバイダー/モデル単位で行われるため、古いエージェント全体のランタイム設定と永続化済みセッションのランタイム固定は削除されます。
- 修復された従来のモデル参照で以前の認証パスを維持するために Codex ルーティングが必要な場合を除き、既存のプロバイダー/モデルのランタイムポリシーは保持されます。
- 既存のモデルフォールバックリストは、従来のエントリを書き換えたうえで保持されます。コピーされたモデルごとの設定は、従来のキーから正規の
openai/*キーに移動されます。 - 永続化済みセッションの
modelProvider/providerOverride、model/modelOverride、フォールバック通知、認証プロファイルの固定が、検出されたすべてのエージェントセッションストアで修復されます。 - doctor は、古い
agentRuntime.id: "codex-cli"の固定(別の従来ランタイム ID)を、agents.defaults、agents.entries.*、models.providers.*の各モデルエントリにわたって"codex"に修復します。 /codex ...は「チャットからネイティブ Codex 会話を制御またはバインドする」ことを意味します。/acp ...またはruntime: "acp"は「外部 ACP/acpx アダプターを使用する」ことを意味します。
2g. セッションルートのクリーンアップ
2g. セッションルートのクリーンアップ
openclaw doctor --fix は、その所有ルートが設定されなくなった場合、modelOverrideSource: "auto" モデルの固定、ランタイムモデルのメタデータ、固定されたハーネス ID、CLI セッションのバインディング、自動認証プロファイルのオーバーライドなど、自動作成された古い状態を消去できます。ユーザーが明示的に選択したセッションモデルまたは従来のセッションモデルは手動確認用として報告され、変更されません。そのルートを使用する意図がなくなった場合は、/model ...、/new で切り替えるか、セッションをリセットしてください。3. 従来の状態の移行(ディスクレイアウト)
3. 従来の状態の移行(ディスクレイアウト)
- セッションストアとトランスクリプト:
~/.openclaw/sessions/から~/.openclaw/agents/<agentId>/sessions/へ - エージェントディレクトリ:
~/.openclaw/agent/から~/.openclaw/agents/<agentId>/agent/へ - WhatsApp 認証状態(Baileys):従来の
~/.openclaw/credentials/*.json(oauth.jsonを除く)から~/.openclaw/credentials/whatsapp/<accountId>/...へ(デフォルトのアカウント ID:default) - 署名済みデバイス ID:
~/.openclaw/identity/device.jsonからstate/openclaw.sqlite内のprimarydevice_identities行へ。個別のデバイス認証ファイルは変更されません
openclaw doctor でのみ移行されます。Talk のプロバイダー/プロバイダーマップの正規化では構造的等価性で比較するため、キー順序のみの差異によって、変更を伴わない doctor --fix が繰り返し発生することはなくなりました。3a. 従来の Plugin マニフェストの移行
3a. 従来の Plugin マニフェストの移行
speechProviders、realtimeTranscriptionProviders、realtimeVoiceProviders、mediaUnderstandingProviders、imageGenerationProviders、videoGenerationProviders、webFetchProviders、webSearchProviders)を検出します。検出すると、それらを contracts オブジェクトへ移動し、マニフェストファイルをその場で書き換えることを提案します。この移行は冪等です。contracts に同じ値がすでに存在する場合、データを重複させずに従来のキーが削除されます。3b. 従来の Cron ストアの移行
3b. 従来の Cron ストアの移行
~/.openclaw/cron/jobs.json)に古いジョブ形式がないかも確認します。現在の Cron クリーンアップには次が含まれます:jobId→idschedule.cron→schedule.expr- トップレベルのペイロードフィールド(
message、model、thinking、…)→payload - トップレベルの配信フィールド(
deliver、channel、to、provider、…)→delivery - ペイロードの
provider配信エイリアス → 明示的なdelivery.channel - 従来の
notify: trueWebhook フォールバックジョブ → 廃止された rawcron.webhook値が有効な場合、その値を使用する明示的な Webhook 配信。通知ジョブではチャット配信が維持され、delivery.completionDestinationが設定されます。その後、doctor は古い設定キーを削除します。使用可能な従来の Webhook がない場合、ランタイム配信では読み取られないため、配信先のないジョブから機能しないトップレベルのnotifyマーカーが削除されます(通知を含む既存の配信は保持されます)。
jobs.json から削除される前に、アクティブなストアの隣にある jobs-quarantine.json にコピーされます。doctor は隔離された行を報告するため、手動で確認または修復できます。Gateway の起動時にはランタイムプロジェクションが正規化され、トップレベルの notify マーカーは無視されますが、永続化された Cron 状態は doctor による修復のために残されます。doctor は、移行先のないジョブ(delivery.mode が none/未指定、使用できない従来の Webhook 配信先、または既存の通知/チャット配信)から機能しないマーカーを削除し、既存の配信は変更しません。そのため、doctor --fix を繰り返し実行しても、同じジョブについて再度警告されることはなくなります。Linux では、ユーザーの crontab がまだ従来の ~/.openclaw/bin/ensure-whatsapp.sh を呼び出している場合にも doctor が警告します。このホストローカルスクリプトは現在の OpenClaw では保守されておらず、Cron が systemd ユーザーバスに接続できない場合、誤った Gateway inactive メッセージを ~/.openclaw/logs/whatsapp-health.log に書き込む可能性があります。crontab -e で古い crontab エントリを削除し、現在のヘルスチェックには openclaw channels status --probe、openclaw doctor、openclaw gateway status を使用してください。3c. セッションロックのクリーンアップ
3c. セッションロックのクリーンアップ
--fix / --repair モードでは、停止済み、孤立、再利用済み、不正かつ古い、または OpenClaw 以外の所有者を持つロックを自動的に削除します。稼働中の OpenClaw プロセスが引き続き所有する古いロックは報告されますが、Doctor がアクティブなトランスクリプトライターを遮断しないよう、そのまま残されます。3d. セッショントランスクリプトのブランチ修復
3d. セッショントランスクリプトのブランチ修復
--fix / --repair モードでは、Doctor は影響を受けた各ファイルを元のファイルの隣にバックアップし、トランスクリプトをアクティブなブランチへ書き換えることで、Gateway の履歴リーダーとメモリリーダーに重複ターンが表示されないようにします。4. 状態の整合性チェック(セッションの永続化、ルーティング、安全性)
4. 状態の整合性チェック(セッションの永続化、ルーティング、安全性)
- 状態ディレクトリがない:壊滅的な状態損失について警告し、ディレクトリの再作成を促し、失われたデータは復旧できないことを通知します。
- 状態ディレクトリの権限:書き込み可能かを検証し、権限の修復を提案します(所有者またはグループの不一致が検出された場合は
chownのヒントも表示します)。 - macOS のクラウド同期された状態ディレクトリ:状態の実体が iCloud Drive(
~/Library/Mobile Documents/com~apple~CloudDocs/...)または~/Library/CloudStorage/...の配下にある場合、同期対象のパスでは I/O が遅くなり、ロックと同期の競合が発生する可能性があるため警告します。 - Linux の SD または eMMC 上の状態ディレクトリ:状態の実体が
mmcblk*マウントソース上にある場合、SD/eMMC 上のランダム I/O は遅くなる可能性があり、セッションや認証情報の書き込みによって劣化が早まるため警告します。 - Linux の揮発性状態ディレクトリ:状態の実体が
tmpfsまたはramfsにある場合、セッション、認証情報、設定、SQLite の状態(WAL/ジャーナルのサイドカーファイルを含む)が再起動時に消失するため警告します。Docker のoverlayマウントは、コンテナが存続する間はホストの再起動後も書き込み可能レイヤーが維持されるため、意図的に警告対象外としています。 - セッションディレクトリがない:履歴を永続化し、
ENOENTのクラッシュを回避するには、sessions/とセッションストアディレクトリが必要です。 - トランスクリプトの不一致:最近のセッションエントリに対応するトランスクリプトファイルがない場合に警告します。
- メインセッションの「1 行 JSONL」:メインのトランスクリプトが 1 行しかない場合にフラグを立てます(履歴が蓄積されていません)。
- 複数の状態ディレクトリ:複数のホームディレクトリに
~/.openclawフォルダーが存在する場合、またはOPENCLAW_STATE_DIRが別の場所を指している場合に警告します(履歴がインストール間で分割される可能性があります)。 - リモートモードの注意事項:
gateway.mode=remoteの場合、Doctor はリモートホスト上で実行するよう通知します(状態はそこにあります)。 - 設定ファイルの権限:
~/.openclaw/openclaw.jsonがグループまたは全ユーザーから読み取り可能な場合に警告し、600への制限強化を提案します。
5. モデル認証の健全性(OAuth の有効期限)
5. モデル認証の健全性(OAuth の有効期限)
--non-interactive では更新の試行をスキップします。OAuth の更新が恒久的に失敗した場合(たとえば refresh_token_reused、invalid_grant、またはプロバイダーから再度サインインするよう求められた場合)、Doctor は再認証が必要であることを報告し、実行すべき正確な openclaw models auth login --provider ... コマンドを表示します。Doctor は、短時間のクールダウン(レート制限、タイムアウト、認証失敗)または長期間の無効化(請求またはクレジットの失敗)により、一時的に使用できない認証プロファイルも報告します。トークンが macOS Keychain に保存されている従来の Codex OAuth プロファイル(ファイルベースのサイドカーレイアウトより前の古いオンボーディング)は、Doctor でのみ修復されます。対話型ターミナルから openclaw doctor --fix を一度実行すると、Keychain に保存された従来のトークンが auth-profiles.json にインラインで移行されます。その後は、埋め込みターン(Telegram、cron、サブエージェントのディスパッチ)で標準の OpenAI OAuth プロファイルとして解決されます。6. フックのモデル検証
6. フックのモデル検証
hooks.gmail.model が設定されている場合、Doctor はモデル参照をカタログおよび許可リストと照合し、解決できない場合や許可されていない場合に警告します。7. サンドボックスイメージの修復
7. サンドボックスイメージの修復
7b. Plugin インストールのクリーンアップ
7b. Plugin インストールのクリーンアップ
openclaw doctor --fix / openclaw doctor --repair モードで、OpenClaw が生成した従来の Plugin 依存関係ステージング状態を削除します。対象には、古い生成済み依存関係ルート、旧インストールステージディレクトリ、以前のバンドル Plugin 依存関係修復コードによるパッケージローカルの残骸、および現在のバンドルマニフェストを覆い隠す可能性がある、孤立または復旧されたバンドル @openclaw/* Plugin の管理対象 npm コピーが含まれます。また Doctor は、peerDependencies.openclaw を宣言する管理対象 npm Plugin にホストの openclaw パッケージを再リンクし、openclaw/plugin-sdk/* などのパッケージローカルなランタイムインポートが更新または npm 修復後も引き続き解決されるようにします。設定から参照されているもののローカル Plugin レジストリで見つからない、ダウンロード可能な Plugin を再インストールすることもできます(実体のある plugins.entries、設定済みのチャンネル、プロバイダー、検索設定、設定済みのエージェントランタイム)。パッケージの更新中は、コアパッケージの入れ替え中に Plugin パッケージを再インストールしないようにします。設定済みの Plugin に引き続き復旧が必要な場合は、更新後に openclaw doctor --fix をもう一度実行してください。以下のコンテナイメージ起動時の例外を除き、Gateway の起動および設定の再読み込みではパッケージ修復を実行しません。Plugin のインストールは、明示的な Doctor、インストール、更新の作業として扱われます。コンテナ化された Gateway の起動には限定的なアップグレード例外があります。openclaw gateway run が新しい OpenClaw バージョンで起動すると、準備完了になる前に安全な状態移行と既存のコア更新後の Plugin 収束処理を実行し、その後バージョンごとのチェックポイントを記録します。この起動処理では、古いバンドル Plugin レコードのクリーンアップ、ローカル Plugin リンクの修復、収束処理で必要な場合の設定済み Plugin パッケージの再インストール、アクティブな Plugin ペイロードの確認を実行できます。起動時に安全に修復できない場合は、コンテナを通常どおり再起動する前に、同じマウント済みの状態および設定に対して、同じイメージを openclaw doctor --fix で一度実行してください。8. Gateway サービスの移行とクリーンアップのヒント
8. Gateway サービスの移行とクリーンアップのヒント
openclaw gateway status --deep または openclaw doctor --deep で確認した後、重複を削除するか、システムスーパーバイザーが Gateway のライフサイクルを管理している場合は OPENCLAW_SERVICE_REPAIR_POLICY=external を設定してください。8b. 起動時の Matrix 移行
8b. 起動時の Matrix 移行
--fix / --repair モードで)移行前のスナップショットを作成し、ベストエフォートの移行手順を実行します。対象は、従来の Matrix 状態の移行と、従来の暗号化状態の準備です。どちらの手順も致命的ではなく、エラーはログに記録され、起動は続行されます。読み取り専用モード(--fix なしの openclaw doctor)では、このチェック全体がスキップされます。8c. デバイスのペアリングと認証のドリフト
8c. デバイスのペアリングと認証のドリフト
- 保留中の初回ペアリングリクエスト
- ペアリング済みデバイスに対する保留中のロールまたはスコープのアップグレード
- デバイス ID は一致しているものの、デバイス ID 情報が承認済みレコードと一致しなくなった場合の公開鍵不一致の修復
- 承認済みロールのアクティブなトークンがないペアリング済みレコード
- 承認済みペアリング基準外にスコープがドリフトしたペアリング済みトークン
- Gateway 側のトークンローテーションより前に作成された、または古いスコープメタデータを持つ、現在のマシン用のローカルキャッシュ済みデバイストークンエントリ
openclaw devices listで保留中のリクエストを確認するopenclaw devices approve <requestId>で対象のリクエストを承認するopenclaw devices rotate --device <deviceId> --role <role>で新しいトークンをローテーションするopenclaw devices remove <deviceId>で古いレコードを削除して再承認する
9. セキュリティ警告
9. セキュリティ警告
openclaw security audit を使用してください。10. systemd linger(Linux)
10. systemd linger(Linux)
11. ワークスペースの状態(Skills、Plugin、TaskFlow)
11. ワークスペースの状態(Skills、Plugin、TaskFlow)
- Skills:許可されているものの使用できないスキル名を一覧表示します。要件の詳細と全件数には
openclaw skills checkを使用してください。 - Plugin:エラーが発生した Plugin ID のみを報告します。読み込み済み、インポート済み、無効化済み、およびバンドル Plugin の一覧には
openclaw plugins listを使用してください。 - Plugin の互換性警告:現在のランタイムとの互換性に問題がある Plugin にフラグを立てます。
- Plugin の診断:Plugin レジストリが読み込み時に出力した警告またはエラーを表示します。
- TaskFlow の復旧:手動での確認またはキャンセルが必要な、不審な管理対象 TaskFlow を表示します。
- Claude CLI:バイナリ、認証、プロファイル、ワークスペース、またはプロジェクトディレクトリの問題のみを報告します。正常なプローブの詳細は省略されます。
11b. ブートストラップファイルのサイズ
11b. ブートストラップファイルのサイズ
AGENTS.md、CLAUDE.md、またはその他の注入されたコンテキストファイル)が、設定された文字数の上限に近いか、超えているかを確認します。ファイルごとの元の文字数と注入後の文字数、切り詰め率、切り詰めの原因(max/file または max/total)、および全体の上限に対する注入済み文字数の合計割合を報告します。ファイルが切り詰められている場合や上限に近い場合、Doctor は agents.defaults.bootstrapMaxChars と agents.defaults.bootstrapTotalMaxChars を調整するためのヒントを表示します。11c. シェル補完
11c. シェル補完
- シェルプロファイルで低速な動的補完パターン(
source <(openclaw completion ...))が使用されている場合、doctor はそれをより高速なキャッシュファイル形式にアップグレードします。 - プロファイルで補完が設定されているもののキャッシュファイルがない場合、doctor はキャッシュを自動的に再生成します。
- 補完がまったく設定されていない場合、doctor はインストールするか確認します(対話モードのみ。
--non-interactiveの場合はスキップされます)。
openclaw completion --write-state を実行します。11d. 古いチャンネル Plugin のクリーンアップ
11d. 古いチャンネル Plugin のクリーンアップ
openclaw doctor --fix が存在しないチャンネル Plugin を削除すると、その Plugin を参照していた未解決のチャンネルスコープ設定も削除されます。対象は、channels.<id> エントリ、該当チャンネルを指定した Heartbeat ターゲット、agents.*.models["<channel>/*"] オーバーライドです。これにより、チャンネルランタイムがなくなっているにもかかわらず、設定が引き続き Gateway にそのチャンネルへのバインドを要求することで発生する Gateway の起動ループを防ぎます。12. Gateway 認証チェック(ローカルトークン)
12. Gateway 認証チェック(ローカルトークン)
- トークンモードでトークンが必要にもかかわらず、トークンソースが存在しない場合、doctor はトークンの生成を提案します。
gateway.auth.tokenが SecretRef で管理されているものの利用できない場合、doctor は警告を表示し、平文で上書きしません。openclaw doctor --generate-gateway-tokenは、トークンの SecretRef が設定されていない場合に限り、生成を強制します。
12b. SecretRef 対応の読み取り専用修復
12b. SecretRef 対応の読み取り専用修復
openclaw doctor --fixは、対象を限定した設定修復に、ステータス系コマンドと同じ読み取り専用の SecretRef サマリーモデルを使用します。- 例:Telegram の
allowFrom/groupAllowFrom@username修復では、利用可能な場合に設定済みのボット認証情報を使用しようとします。 - Telegram ボットトークンが SecretRef 経由で設定されているものの、現在のコマンドパスでは利用できない場合、doctor は認証情報が「設定済みだが利用不可」であることを報告し、クラッシュしたりトークンがないと誤って報告したりせず、自動解決をスキップします。
13. Gateway のヘルスチェックと再起動
13. Gateway のヘルスチェックと再起動
13b. メモリ検索の準備状態
13b. メモリ検索の準備状態
- QMD バックエンド:
qmdバイナリが利用可能で起動できるかを検査します。利用できない場合は、npm install -g @tobilu/qmd(または Bun の同等コマンド)や手動でのバイナリパス指定など、修正方法を表示します。 - 明示的なローカルプロバイダー:ローカルモデルファイル、または認識可能なリモート/ダウンロード可能なモデル URL があるかを確認します。ない場合は、リモートプロバイダーへの切り替えを提案します。
- 明示的なリモートプロバイダー(
openai、voyageなど):API キーが環境または認証ストアに存在することを確認します。ない場合は、実行可能な修正ヒントを表示します。 - 従来の自動プロバイダー:
memorySearch.provider: "auto"を OpenAI として扱い、OpenAI の準備状態を確認し、doctor --fixによってprovider: "openai"へ書き換えます。
openclaw memory status --deep を使用します。14. チャンネルステータスの警告
14. チャンネルステータスの警告
15. スーパーバイザー設定の監査と修復
15. スーパーバイザー設定の監査と修復
openclaw doctorは、スーパーバイザー設定を書き換える前に確認を求めます。openclaw doctor --yesは、デフォルトの修復確認を受け入れます。openclaw doctor --fixは、確認なしで推奨される修正を適用します(--repairはエイリアスです)。openclaw doctor --fix --forceは、カスタムのスーパーバイザー設定を上書きします。OPENCLAW_SERVICE_REPAIR_POLICY=externalは、Gateway サービスのライフサイクルに関して doctor を読み取り専用に保ちます。サービスの正常性の報告とサービス以外の修復は引き続き実行しますが、外部スーパーバイザーがそのライフサイクルを管理するため、サービスのインストール/起動/再起動/ブートストラップ、スーパーバイザー設定の書き換え、従来のサービスのクリーンアップはスキップします。- Linux では、対応する systemd Gateway ユニットがアクティブな間、doctor はコマンド/エントリポイントのメタデータを書き換えません。また、重複サービスのスキャン時には、非アクティブかつレガシーではない追加の Gateway 類似ユニットを無視するため、補助サービスファイルによって不要なクリーンアップ通知が発生することはありません。
- トークン認証でトークンが必要であり、
gateway.auth.tokenが SecretRef で管理されている場合、doctor によるサービスのインストール/修復では SecretRef を検証しますが、解決された平文のトークン値をスーパーバイザーサービスの環境メタデータには保存しません。 - Doctor は、古い LaunchAgent、systemd、または Windows Scheduled Task のインストールでインラインに埋め込まれた、管理対象の
.env/SecretRef ベースのサービス環境値を検出し、それらの値がスーパーバイザー定義ではなくランタイムソースから読み込まれるようにサービスメタデータを書き換えます。 - Doctor は、
gateway.portの変更後もサービスコマンドが古い--portに固定されている場合にそれを検出し、サービスメタデータを現在のポートに書き換えます。 - トークン認証でトークンが必要であり、設定されたトークンの SecretRef を解決できない場合、doctor は実行可能な対処方法を提示して、インストール/修復処理をブロックします。
gateway.auth.tokenとgateway.auth.passwordの両方が設定され、gateway.auth.modeが未設定の場合、doctor はモードが明示的に設定されるまでインストール/修復をブロックします。- Linux のユーザー systemd ユニットでは、doctor がサービス認証メタデータを比較するとき、トークンの差異チェックに
Environment=とEnvironmentFile=の両方のソースが含まれます。 - 設定が最後に新しいバージョンによって書き込まれている場合、doctor のサービス修復は、古い OpenClaw バイナリから Gateway サービスを書き換え、停止、または再起動することを拒否します。Gateway のトラブルシューティングを参照してください。
openclaw gateway install --forceを使用すれば、いつでも完全な書き換えを強制できます。
16. Gateway ランタイムとポートの診断
16. Gateway ランタイムとポートの診断
18789)でポートの競合がないかを確認し、考えられる原因(Gateway がすでに実行中、SSH トンネル)を報告します。17. Gateway ランタイムのベストプラクティス
17. Gateway ランタイムのベストプラクティス
nvm、fnm、volta、asdf など)で実行されている場合、doctor は警告します。Bun は OpenClaw の node:sqlite 状態ストアを開けないため、修復時に従来の Bun サービスを Node に移行します。バージョンマネージャーのパスは、サービスがシェル初期化設定を読み込まないため、アップグレード後に動作しなくなる可能性があります。Doctor は、利用可能な場合はシステムの Node インストール(Homebrew/apt/choco)への移行を提案します。新しくインストールまたは修復された macOS LaunchAgent は、対話型シェルの PATH をコピーする代わりに、標準化されたシステム PATH(/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin)を使用します。これにより、Homebrew で管理されるシステムバイナリを引き続き利用できる一方で、Volta、asdf、fnm、pnpm、その他のバージョンマネージャーのディレクトリによって Node 子プロセスが解決する対象が変わることはありません。Linux サービスでは引き続き、明示的な環境ルート(NVM_DIR、FNM_DIR、VOLTA_HOME、ASDF_DATA_DIR、BUN_INSTALL、PNPM_HOME)と安定したユーザーバイナリディレクトリを保持しますが、推測されたバージョンマネージャーのフォールバックディレクトリがサービスの PATH に書き込まれるのは、そのディレクトリがディスク上に存在する場合だけです。18. 設定の書き込みとウィザードメタデータ
18. 設定の書き込みとウィザードメタデータ
19. ワークスペースのヒント(バックアップとメモリシステム)
19. ワークスペースのヒント(バックアップとメモリシステム)