openclaw doctor adalah alat perbaikan + migrasi untuk OpenClaw. Alat ini memperbaiki konfigurasi/status lama, memeriksa kesehatan, dan menyediakan langkah perbaikan yang dapat ditindaklanjuti.
Mulai cepat
Mode headless dan otomatisasi
- --yes
- --fix
- --lint
- --fix --force
- --non-interactive
- --deep
Mode lint hanya-baca
openclaw doctor --lint adalah saudara dari
openclaw doctor --fix yang ramah otomatisasi. Keduanya menggunakan pemeriksaan kesehatan doctor, tetapi posturnya
berbeda:
| Mode | Prompt | Menulis konfigurasi/status | Output | Gunakan untuk |
|---|---|---|---|---|
openclaw doctor | ya | tidak | laporan kesehatan ramah | manusia yang memeriksa status |
openclaw doctor --fix | terkadang | ya, dengan kebijakan perbaikan | log perbaikan ramah | menerapkan perbaikan yang disetujui |
openclaw doctor --lint | tidak | tidak | temuan terstruktur | CI, preflight, dan gerbang tinjauan |
repair() opsional.
doctor --fix menerapkan perbaikan tersebut saat tersedia dan terus menggunakan
alur perbaikan doctor yang ada untuk pemeriksaan yang belum dimigrasikan.
Kontrak perbaikan terstruktur juga memisahkan pelaporan perbaikan dari deteksi:
detect() melaporkan temuan saat ini, sementara repair() dapat melaporkan perubahan,
diff konfigurasi/file, dan efek samping non-file. Ini menjaga jalur migrasi tetap terbuka
untuk output doctor --fix --dry-run dan diff di masa mendatang tanpa membuat pemeriksaan lint
merencanakan mutasi.
Contoh:
ok: apakah ada temuan terlihat yang memenuhi ambang tingkat keparahan yang dipilihchecksRun: jumlah pemeriksaan kesehatan yang dijalankanchecksSkipped: pemeriksaan yang dilewati oleh profil yang dipilih,--only, atau--skipfindings: diagnostik terstruktur dengancheckId,severity,message, danpath,line,column,ocPath, sertafixHintopsional
0: tidak ada temuan pada atau di atas ambang yang dipilih1: satu atau beberapa temuan memenuhi ambang yang dipilih2: kegagalan perintah/runtime sebelum temuan lint dapat dikeluarkan
--severity-min info|warning|error untuk mengontrol apa yang dicetak dan apa
yang menyebabkan lint keluar dengan nilai non-zero. Gunakan --all untuk menjalankan inventaris lint lengkap,
termasuk pemeriksaan opt-in yang lebih mendalam yang dikecualikan dari set otomatisasi default. Gunakan --only <id> untuk gerbang preflight sempit dan
--skip <id> untuk sementara mengecualikan pemeriksaan yang berisik sambil tetap menjaga sisa
proses lint aktif.
Opsi output lint seperti --json, --severity-min, --all, --only, dan
--skip harus dipasangkan dengan --lint; proses doctor dan perbaikan reguler menolaknya.
Apa yang dilakukannya (ringkasan)
Health, UI, and updates
Health, UI, and updates
- Pembaruan pre-flight opsional untuk instalasi git (hanya interaktif).
- Pemeriksaan kesegaran protokol UI (membangun ulang Control UI saat skema protokol lebih baru).
- Pemeriksaan kesehatan + prompt restart.
- Ringkasan status Skills (memenuhi syarat/hilang/diblokir) dan status plugin.
Config and migrations
Config and migrations
- Normalisasi konfigurasi untuk nilai lama.
- Migrasi konfigurasi Talk dari field datar lama
talk.*ketalk.provider+talk.providers.<provider>. - Pemeriksaan migrasi browser untuk konfigurasi ekstensi Chrome lama dan kesiapan MCP Chrome.
- Peringatan override penyedia OpenCode (
models.providers.opencode/models.providers.opencode-go). - Migrasi penyedia/profil OpenAI Codex lama (
openai-codex→openai) dan peringatan shadowing untukmodels.providers.openai-codexyang usang. - Pemeriksaan prasyarat TLS OAuth untuk profil OAuth OpenAI Codex.
- Peringatan allowlist plugin/alat saat
plugins.allowbersifat membatasi tetapi kebijakan alat masih meminta wildcard atau alat milik plugin. - Migrasi status lama di disk (sessions/agent dir/autentikasi WhatsApp).
- Migrasi kunci kontrak manifest plugin lama (
speechProviders,realtimeTranscriptionProviders,realtimeVoiceProviders,mediaUnderstandingProviders,imageGenerationProviders,videoGenerationProviders,webFetchProviders,webSearchProviders→contracts). - Migrasi penyimpanan cron lama (
jobId,schedule.cron, field delivery/payload tingkat atas, payloadprovider, pekerjaan fallback webhooknotify: true). - Pembersihan runtime-policy seluruh agen lama; runtime policy penyedia/model adalah pemilih rute aktif.
- Pembersihan konfigurasi plugin usang saat plugin diaktifkan; saat
plugins.enabled=false, referensi plugin usang diperlakukan sebagai konfigurasi kontainmen inert dan dipertahankan.
State and integrity
State and integrity
- Inspeksi file kunci sesi dan pembersihan kunci usang.
- Perbaikan transkrip sesi untuk cabang prompt-rewrite duplikat yang dibuat oleh build 2026.4.24 yang terdampak.
- Deteksi tombstone pemulihan-restart subagen yang macet, dengan dukungan
--fixuntuk menghapus flag pemulihan dibatalkan yang usang agar startup tidak terus memperlakukan anak sebagai restart-aborted. - Pemeriksaan integritas status dan izin (sesi, transkrip, direktori status).
- Pemeriksaan izin file konfigurasi (chmod 600) saat berjalan secara lokal.
- Kesehatan autentikasi model: memeriksa kedaluwarsa OAuth, dapat menyegarkan token yang akan kedaluwarsa, dan melaporkan status cooldown/dinonaktifkan profil autentikasi.
Gateway, services, and supervisors
Gateway, services, and supervisors
- Perbaikan image sandbox saat sandboxing diaktifkan.
- Migrasi layanan lama dan deteksi gateway tambahan.
- Migrasi status lama channel Matrix (dalam mode
--fix/--repair). - Pemeriksaan runtime Gateway (layanan terinstal tetapi tidak berjalan; label launchd yang di-cache).
- Peringatan status channel (diprobe dari gateway yang sedang berjalan).
- Pemeriksaan izin khusus channel berada di bawah
openclaw channels capabilities; misalnya, izin channel suara Discord diaudit denganopenclaw channels capabilities --channel discord --target channel:<channel-id>. - Pemeriksaan responsivitas WhatsApp untuk kesehatan event-loop Gateway yang menurun saat klien TUI lokal masih berjalan;
--fixhanya menghentikan klien TUI lokal yang terverifikasi. - Perbaikan rute Codex untuk ref model
openai-codex/*lama pada model utama, fallback, model generasi gambar/video, override heartbeat/subagen/compaction, hook, override model channel, dan pin rute sesi;--fixmenulis ulangnya menjadiopenai/*, memigrasikan profil/urutan autentikasiopenai-codex:*keopenai:*, menghapus pin runtime sesi/seluruh agen yang usang, dan membiarkan ref agen OpenAI kanonis pada harness Codex default. - Audit konfigurasi supervisor (launchd/systemd/schtasks) dengan perbaikan opsional.
- Pembersihan lingkungan proxy tertanam untuk layanan gateway yang menangkap nilai shell
HTTP_PROXY/HTTPS_PROXY/NO_PROXYselama instalasi atau pembaruan. - Pemeriksaan praktik terbaik runtime Gateway (Node vs Bun, path version-manager).
- Diagnostik benturan port Gateway (default
18789).
Auth, security, and pairing
Auth, security, and pairing
- Peringatan keamanan untuk kebijakan DM terbuka.
- Pemeriksaan autentikasi Gateway untuk mode token lokal (menawarkan pembuatan token saat tidak ada sumber token; tidak menimpa konfigurasi SecretRef token).
- Deteksi masalah pairing perangkat (permintaan pair pertama kali yang tertunda, upgrade role/scope yang tertunda, drift cache device-token lokal yang usang, dan drift autentikasi record yang sudah dipasangkan).
Workspace and shell
Workspace and shell
- Pemeriksaan systemd linger di Linux.
- Pemeriksaan ukuran file bootstrap workspace (peringatan pemotongan/hampir batas untuk file konteks).
- Pemeriksaan kesiapan Skills untuk agen default; melaporkan skill yang diizinkan dengan bin, env, konfigurasi, atau persyaratan OS yang hilang, dan
--fixdapat menonaktifkan skill yang tidak tersedia diskills.entries. - Pemeriksaan status shell completion dan instalasi/upgrade otomatis.
- Pemeriksaan kesiapan penyedia embedding pencarian memori (model lokal, kunci API jarak jauh, atau binary QMD).
- Pemeriksaan instalasi sumber (ketidakcocokan workspace pnpm, aset UI hilang, binary tsx hilang).
- Menulis konfigurasi yang diperbarui + metadata wizard.
Backfill dan reset UI Dreams
Scene Dreams Control UI mencakup tindakan Backfill, Reset, dan Clear Grounded untuk alur kerja grounded dreaming. Tindakan ini menggunakan metode RPC bergaya gateway doctor, tetapi bukan bagian dari perbaikan/migrasi CLIopenclaw doctor.
Yang dilakukan:
- Backfill memindai file historis
memory/YYYY-MM-DD.mddi workspace aktif, menjalankan pass diary REM grounded, dan menulis entri backfill yang dapat dibalik keDREAMS.md. - Reset hanya menghapus entri diary backfill yang ditandai tersebut dari
DREAMS.md. - Clear Grounded hanya menghapus entri jangka pendek staged grounded-only yang berasal dari replay historis dan belum mengakumulasi recall live atau dukungan harian.
- tindakan tersebut tidak mengedit
MEMORY.md - tindakan tersebut tidak menjalankan migrasi doctor penuh
- tindakan tersebut tidak otomatis melakukan stage kandidat grounded ke penyimpanan promosi jangka pendek live kecuali Anda secara eksplisit menjalankan jalur CLI staged terlebih dahulu
DREAMS.md sebagai permukaan tinjauan.
Perilaku dan alasan terperinci
0. Optional update (git installs)
0. Optional update (git installs)
1. Config normalization
1. Config normalization
messages.ackReaction tanpa override khusus channel), doctor menormalkannya ke skema saat ini.Itu mencakup field datar Talk lama. Konfigurasi speech Talk publik saat ini adalah talk.provider + talk.providers.<provider>, dan konfigurasi voice realtime adalah talk.realtime.*. Doctor menulis ulang bentuk talk.voiceId / talk.voiceAliases / talk.modelId / talk.outputFormat / talk.apiKey lama ke dalam map penyedia, dan menulis ulang selector realtime tingkat atas lama (talk.mode, talk.transport, talk.brain, talk.model, talk.voice) ke talk.realtime.Doctor juga memperingatkan ketika plugins.allow tidak kosong dan kebijakan alat menggunakan
entri alat wildcard atau milik plugin. tools.allow: ["*"] hanya cocok dengan alat
dari plugin yang benar-benar dimuat; itu tidak melewati allowlist plugin eksklusif.2. Migrasi kunci konfigurasi lama
2. Migrasi kunci konfigurasi lama
openclaw doctor.Doctor akan:- Menjelaskan kunci lama mana yang ditemukan.
- Menampilkan migrasi yang diterapkan.
- Menulis ulang
~/.openclaw/openclaw.jsondengan skema yang diperbarui.
openclaw doctor --fix; itu tidak menulis ulang openclaw.json saat startup. Migrasi penyimpanan tugas Cron juga ditangani oleh openclaw doctor --fix.Migrasi saat ini:routing.allowFrom→channels.whatsapp.allowFromrouting.groupChat.requireMention→channels.whatsapp/telegram/imessage.groups."*".requireMentionrouting.groupChat.historyLimit→messages.groupChat.historyLimitrouting.groupChat.mentionPatterns→messages.groupChat.mentionPatternschannels.telegram.requireMention→channels.telegram.groups."*".requireMention- hapus
channels.webchatdangateway.webchatyang sudah dihentikan routing.queue→messages.queuerouting.bindings→bindingstingkat atasrouting.agents/routing.defaultAgentId→agents.list+agents.list[].defaulttalk.voiceId/talk.voiceAliases/talk.modelId/talk.outputFormat/talk.apiKeylama →talk.provider+talk.providers.<provider>- pemilih Talk realtime tingkat atas lama (
talk.mode/talk.transport/talk.brain/talk.model/talk.voice) +talk.provider/talk.providers→talk.realtime routing.agentToAgent→tools.agentToAgentrouting.transcribeAudio→tools.media.audio.modelsmessages.tts.<provider>(openai/elevenlabs/microsoft/edge) →messages.tts.providers.<provider>messages.tts.provider: "edge"danmessages.tts.providers.edge→messages.tts.provider: "microsoft"danmessages.tts.providers.microsoft- bidang pemilihan pembicara TTS (
voice/voiceName/voiceId) →speakerVoice/speakerVoiceId channels.discord.voice.tts.<provider>(openai/elevenlabs/microsoft/edge) →channels.discord.voice.tts.providers.<provider>channels.discord.accounts.<id>.voice.tts.<provider>(openai/elevenlabs/microsoft/edge) →channels.discord.accounts.<id>.voice.tts.providers.<provider>plugins.entries.voice-call.config.tts.<provider>(openai/elevenlabs/microsoft/edge) →plugins.entries.voice-call.config.tts.providers.<provider>plugins.entries.voice-call.config.tts.provider: "edge"danplugins.entries.voice-call.config.tts.providers.edge→provider: "microsoft"danproviders.microsoftplugins.entries.voice-call.config.provider: "log"→"mock"plugins.entries.voice-call.config.twilio.from→plugins.entries.voice-call.config.fromNumberplugins.entries.voice-call.config.streaming.sttProvider→plugins.entries.voice-call.config.streaming.providerplugins.entries.voice-call.config.streaming.openaiApiKey|sttModel|silenceDurationMs|vadThreshold→plugins.entries.voice-call.config.streaming.providers.openai.*bindings[].match.accountID→bindings[].match.accountId- Untuk channel dengan
accountsbernama tetapi masih memiliki nilai channel tingkat atas akun tunggal yang tersisa, pindahkan nilai berbasis akun tersebut ke akun yang dipromosikan yang dipilih untuk channel itu (accounts.defaultuntuk sebagian besar channel; Matrix dapat mempertahankan target bernama/default yang cocok jika sudah ada) identity→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- hapus
agents.defaults.llm; gunakanmodels.providers.<id>.timeoutSecondsuntuk timeout provider/model lambat, dan pertahankan timeout agen/run di atas nilai itu ketika keseluruhan run harus berlangsung lebih lama browser.ssrfPolicy.allowPrivateNetwork→browser.ssrfPolicy.dangerouslyAllowPrivateNetworkbrowser.profiles.*.driver: "extension"→"existing-session"- hapus
browser.relayBindHost(pengaturan relay ekstensi lama) models.providers.*.api: "openai"lama →"openai-completions"(startup Gateway juga melewati provider yangapi-nya diatur ke nilai enum masa depan atau tidak dikenal, alih-alih gagal tertutup)- hapus
plugins.entries.codex.config.codexDynamicToolsProfile; server aplikasi Codex selalu mempertahankan alat workspace native Codex tetap native
- Jika dua atau lebih entri
channels.<channel>.accountsdikonfigurasi tanpachannels.<channel>.defaultAccountatauaccounts.default, doctor memperingatkan bahwa perutean fallback dapat memilih akun yang tidak terduga. - Jika
channels.<channel>.defaultAccountdiatur ke ID akun yang tidak dikenal, doctor memperingatkan dan mencantumkan ID akun yang dikonfigurasi.
2b. Override provider OpenCode
2b. Override provider OpenCode
models.providers.opencode, opencode-zen, atau opencode-go secara manual, itu menggantikan katalog OpenCode bawaan dari openclaw/plugin-sdk/llm. Hal itu dapat memaksa model ke API yang salah atau mengosongkan biaya. Doctor memperingatkan agar Anda dapat menghapus override dan memulihkan perutean API + biaya per model.2c. Migrasi browser dan kesiapan Chrome MCP
2c. Migrasi browser dan kesiapan Chrome MCP
browser.profiles.*.driver: "extension"menjadi"existing-session"browser.relayBindHostdihapus
defaultProfile: "user" atau profil existing-session yang dikonfigurasi:- memeriksa apakah Google Chrome terinstal pada host yang sama untuk profil auto-connect default
- memeriksa versi Chrome yang terdeteksi dan memperingatkan ketika versinya di bawah Chrome 144
- mengingatkan Anda untuk mengaktifkan remote debugging di halaman inspeksi browser (misalnya
chrome://inspect/#remote-debugging,brave://inspect/#remote-debugging, atauedge://inspect/#remote-debugging)
- browser berbasis Chromium 144+ pada host gateway/node
- browser berjalan secara lokal
- remote debugging diaktifkan di browser tersebut
- menyetujui prompt persetujuan attach pertama di browser
responsebody, ekspor PDF, intersepsi unduhan, dan aksi batch tetap memerlukan browser terkelola atau profil CDP mentah.Pemeriksaan ini tidak berlaku untuk Docker, sandbox, remote-browser, atau alur headless lainnya. Alur tersebut tetap menggunakan CDP mentah.2d. Prasyarat TLS OAuth
2d. Prasyarat TLS OAuth
UNABLE_TO_GET_ISSUER_CERT_LOCALLY, sertifikat kedaluwarsa, atau sertifikat self-signed), doctor mencetak panduan perbaikan khusus platform. Di macOS dengan Node Homebrew, perbaikannya biasanya brew postinstall ca-certificates. Dengan --deep, pemeriksaan berjalan meskipun gateway sehat.2e. Override provider OAuth Codex
2e. Override provider OAuth Codex
models.providers.openai-codex, pengaturan itu dapat menutupi jalur provider OAuth Codex bawaan yang digunakan secara otomatis oleh rilis yang lebih baru. Doctor memperingatkan ketika melihat pengaturan transport lama tersebut bersama OAuth Codex agar Anda dapat menghapus atau menulis ulang override transport usang dan mendapatkan kembali perilaku perutean/fallback bawaan. Proxy khusus dan override hanya-header tetap didukung dan tidak memicu peringatan ini.2f. Perbaikan rute Codex
2f. Perbaikan rute Codex
openai-codex/* lama. Perutean harness Codex native menggunakan referensi model openai/* kanonis; giliran agen OpenAI melewati harness app-server Codex alih-alih jalur provider OpenClaw OpenAI.Dalam mode --fix / --repair, doctor menulis ulang referensi agen default dan per agen yang terdampak, termasuk model primer, fallback, model pembuatan gambar/video, override heartbeat/subagent/compaction, hook, override model channel, dan state rute sesi tersimpan yang usang:openai-codex/gpt-*menjadiopenai/gpt-*.- Intent Codex dipindahkan ke entri
agentRuntime.id: "codex"berbasis cakupan provider/model untuk referensi model agen yang diperbaiki. - Konfigurasi runtime seluruh agen yang usang dan pin runtime sesi tersimpan dihapus karena pemilihan runtime berbasis cakupan provider/model.
- Kebijakan runtime provider/model yang ada dipertahankan kecuali referensi model lama yang diperbaiki memerlukan perutean Codex untuk mempertahankan jalur auth lama.
- Daftar fallback model yang ada dipertahankan dengan entri lamanya ditulis ulang; pengaturan per model yang disalin dipindahkan dari kunci lama ke kunci kanonis
openai/*. modelProvider/providerOverride,model/modelOverride, pemberitahuan fallback, dan pin profil auth sesi tersimpan diperbaiki di semua penyimpanan sesi agen yang ditemukan./codex ...berarti “mengontrol atau mengikat percakapan Codex native dari chat.”/acp ...atauruntime: "acp"berarti “menggunakan adapter ACP/acpx eksternal.”
2g. Pembersihan rute sesi
2g. Pembersihan rute sesi
openclaw doctor --fix dapat membersihkan state usang yang dibuat otomatis seperti pin model modelOverrideSource: "auto", metadata model runtime, ID harness yang dipin, binding sesi CLI, dan override profil auth otomatis ketika rute pemiliknya tidak lagi dikonfigurasi. Pilihan model sesi eksplisit pengguna atau lama dilaporkan untuk ditinjau manual dan dibiarkan tidak tersentuh; alihkan dengan /model ..., /new, atau reset sesi ketika rute itu tidak lagi dimaksudkan.3. Migrasi state lama (tata letak disk)
3. Migrasi state lama (tata letak disk)
- Penyimpanan sesi + transkrip:
- dari
~/.openclaw/sessions/ke~/.openclaw/agents/<agentId>/sessions/
- dari
- Direktori agen:
- dari
~/.openclaw/agent/ke~/.openclaw/agents/<agentId>/agent/
- dari
- State auth WhatsApp (Baileys):
- dari
~/.openclaw/credentials/*.jsonlama (kecualioauth.json) - ke
~/.openclaw/credentials/whatsapp/<accountId>/...(ID akun default:default)
- dari
doctor --fix no-op berulang.3a. Migrasi manifes plugin legacy
3a. Migrasi manifes plugin legacy
speechProviders, realtimeTranscriptionProviders, realtimeVoiceProviders, mediaUnderstandingProviders, imageGenerationProviders, videoGenerationProviders, webFetchProviders, webSearchProviders). Saat ditemukan, Doctor menawarkan untuk memindahkannya ke objek contracts dan menulis ulang file manifes di tempat. Migrasi ini idempoten; jika kunci contracts sudah memiliki nilai yang sama, kunci legacy dihapus tanpa menduplikasi data.3b. Migrasi penyimpanan cron legacy
3b. Migrasi penyimpanan cron legacy
~/.openclaw/cron/jobs.json secara default, atau cron.store saat ditimpa) untuk bentuk job lama yang masih diterima scheduler demi kompatibilitas.Pembersihan cron saat ini mencakup:jobId→idschedule.cron→schedule.expr- field payload tingkat atas (
message,model,thinking, …) →payload - field pengiriman tingkat atas (
deliver,channel,to,provider, …) →delivery - alias pengiriman
providerpayload →delivery.channeleksplisit - job fallback webhook legacy
notify: true→ pengiriman webhook eksplisit daricron.webhooksaat disetel; job pengumuman mempertahankan pengiriman chat-nya dan mendapatkandelivery.completionDestination. Saatcron.webhooktidak disetel, penanda tingkat atasnotifyyang tidak aktif dihapus untuk job tanpa target (pengiriman yang ada, termasuk pengumuman, dipertahankan) karena pengiriman runtime tidak pernah membacanya
jobs-quarantine.json di samping penyimpanan aktif sebelum dihapus dari jobs.json; Doctor melaporkan baris yang dikarantina agar Anda dapat meninjau atau memperbaikinya secara manual.Startup Gateway menormalkan proyeksi runtime dan mengabaikan penanda tingkat atas notify, tetapi membiarkan konfigurasi cron yang tersimpan untuk diperbaiki Doctor. Saat cron.webhook tidak disetel, Doctor menghapus penanda tidak aktif untuk job tanpa target migrasi (delivery.mode none/tidak ada, target webhook yang tidak dapat digunakan, atau pengiriman announce/chat yang ada), membiarkan pengiriman yang ada tidak berubah, sehingga eksekusi doctor --fix berulang tidak lagi memberi peringatan ulang tentang job yang sama. Jika cron.webhook disetel tetapi bukan URL HTTP(S) yang valid, Doctor tetap memperingatkan dan membiarkan penanda agar Anda dapat memperbaiki URL.Di Linux, Doctor juga memperingatkan saat crontab pengguna masih memanggil ~/.openclaw/bin/ensure-whatsapp.sh legacy. Skrip lokal host tersebut tidak dikelola oleh OpenClaw saat ini dan dapat menulis pesan Gateway inactive palsu ke ~/.openclaw/logs/whatsapp-health.log saat cron tidak dapat menjangkau bus pengguna systemd. Hapus entri crontab usang dengan crontab -e; gunakan openclaw channels status --probe, openclaw doctor, dan openclaw gateway status untuk pemeriksaan kesehatan saat ini.3c. Pembersihan kunci sesi
3c. Pembersihan kunci sesi
--fix / --repair, Doctor otomatis menghapus kunci dengan pemilik mati, yatim, didaur ulang, lama-salah bentuk, atau non-OpenClaw. Kunci lama yang masih dimiliki oleh proses OpenClaw hidup dilaporkan tetapi dibiarkan tetap ada agar Doctor tidak memutus penulis transkrip aktif.3d. Perbaikan cabang transkrip sesi
3d. Perbaikan cabang transkrip sesi
--fix / --repair, Doctor mencadangkan setiap file yang terdampak di samping file asli dan menulis ulang transkrip ke cabang aktif sehingga riwayat Gateway dan pembaca memori tidak lagi melihat giliran duplikat.4. Pemeriksaan integritas state (persistensi sesi, perutean, dan keamanan)
4. Pemeriksaan integritas state (persistensi sesi, perutean, dan keamanan)
- Direktori state hilang: memperingatkan tentang kehilangan state yang katastrofik, meminta untuk membuat ulang direktori, dan mengingatkan bahwa Doctor tidak dapat memulihkan data yang hilang.
- Izin direktori state: memverifikasi kemampuan tulis; menawarkan untuk memperbaiki izin (dan mengeluarkan petunjuk
chownsaat ketidakcocokan pemilik/grup terdeteksi). - Direktori state macOS yang disinkronkan cloud: memperingatkan saat state berada di bawah iCloud Drive (
~/Library/Mobile Documents/com~apple~CloudDocs/...) atau~/Library/CloudStorage/...karena path yang didukung sinkronisasi dapat menyebabkan I/O lebih lambat dan race kunci/sinkronisasi. - Direktori state Linux SD atau eMMC: memperingatkan saat state mengarah ke sumber mount
mmcblk*, karena I/O acak yang didukung SD atau eMMC dapat lebih lambat dan lebih cepat aus saat penulisan sesi dan kredensial. - Direktori state volatile Linux: memperingatkan saat state mengarah ke
tmpfsatauramfs, karena sesi, kredensial, konfigurasi, dan state SQLite dengan sidecar WAL/journal-nya akan hilang saat reboot. MountoverlayDocker sengaja tidak ditandai karena lapisan tulisnya bertahan melewati reboot host selama container tetap ada. - Direktori sesi hilang:
sessions/dan direktori penyimpanan sesi diperlukan untuk mempertahankan riwayat dan menghindari crashENOENT. - Ketidakcocokan transkrip: memperingatkan saat entri sesi terbaru memiliki file transkrip yang hilang.
- Sesi utama “JSONL 1 baris”: menandai saat transkrip utama hanya memiliki satu baris (riwayat tidak terakumulasi).
- Beberapa direktori state: memperingatkan saat beberapa folder
~/.openclawada di berbagai direktori home atau saatOPENCLAW_STATE_DIRmenunjuk ke tempat lain (riwayat dapat terpecah antarinstalasi). - Pengingat mode jarak jauh: jika
gateway.mode=remote, Doctor mengingatkan Anda untuk menjalankannya di host jarak jauh (state berada di sana). - Izin file konfigurasi: memperingatkan jika
~/.openclaw/openclaw.jsondapat dibaca oleh grup/dunia dan menawarkan untuk memperketat ke600.
5. Kesehatan auth model (kedaluwarsa OAuth)
5. Kesehatan auth model (kedaluwarsa OAuth)
--non-interactive melewati upaya penyegaran.Saat penyegaran OAuth gagal permanen (misalnya refresh_token_reused, invalid_grant, atau penyedia meminta Anda masuk lagi), Doctor melaporkan bahwa re-auth diperlukan dan mencetak perintah openclaw models auth login --provider ... persis yang harus dijalankan.Doctor juga melaporkan profil auth yang sementara tidak dapat digunakan karena:- cooldown singkat (batas laju/timeout/kegagalan auth)
- penonaktifan lebih lama (kegagalan penagihan/kredit)
openclaw doctor --fix sekali dari terminal interaktif untuk memigrasikan token legacy yang didukung Keychain secara inline ke auth-profiles.json; setelah itu, giliran tertanam (Telegram, cron, dispatch sub-agen) menyelesaikannya sebagai profil OAuth OpenAI kanonis.6. Validasi model hook
6. Validasi model hook
hooks.gmail.model disetel, Doctor memvalidasi referensi model terhadap katalog dan allowlist serta memperingatkan saat referensi tidak akan terselesaikan atau tidak diizinkan.7. Perbaikan image sandbox
7. Perbaikan image sandbox
7b. Pembersihan instalasi plugin
7b. Pembersihan instalasi plugin
openclaw doctor --fix / openclaw doctor --repair. Ini mencakup root dependensi usang yang dihasilkan, direktori tahap instal lama, sisa lokal paket dari kode perbaikan dependensi bundled-plugin sebelumnya, serta salinan npm terkelola dari plugin bundled @openclaw/* yang yatim atau dipulihkan dan dapat membayangi manifes bundled saat ini. Doctor juga menautkan ulang paket host openclaw ke plugin npm terkelola yang mendeklarasikan peerDependencies.openclaw, sehingga impor runtime lokal paket seperti openclaw/plugin-sdk/* tetap terselesaikan setelah pembaruan atau perbaikan npm.Doctor juga dapat menginstal ulang plugin yang dapat diunduh yang hilang saat konfigurasi merujuknya tetapi registry plugin lokal tidak dapat menemukannya. Contohnya mencakup plugins.entries material, pengaturan channel/provider/search yang dikonfigurasi, dan runtime agen yang dikonfigurasi. Selama pembaruan paket, Doctor menghindari menjalankan perbaikan plugin package-manager saat paket core sedang diganti; jalankan openclaw doctor --fix lagi setelah pembaruan jika plugin yang dikonfigurasi masih memerlukan pemulihan. Startup Gateway dan pemuatan ulang konfigurasi tidak menjalankan package manager; instalasi plugin tetap merupakan pekerjaan Doctor/install/update yang eksplisit.8. Migrasi layanan Gateway dan petunjuk pembersihan
8. Migrasi layanan Gateway dan petunjuk pembersihan
openclaw gateway status --deep atau openclaw doctor --deep, lalu hapus duplikat atau setel OPENCLAW_SERVICE_REPAIR_POLICY=external saat supervisor sistem memiliki siklus hidup Gateway.8b. Migrasi startup Matrix
8b. Migrasi startup Matrix
--fix / --repair) membuat snapshot pra-migrasi lalu menjalankan langkah migrasi best-effort: migrasi state Matrix legacy dan persiapan encrypted-state legacy. Kedua langkah bersifat non-fatal; kesalahan dicatat dan startup berlanjut. Dalam mode baca-saja (openclaw doctor tanpa --fix) pemeriksaan ini dilewati sepenuhnya.8c. Pairing perangkat dan drift auth
8c. Pairing perangkat dan drift auth
- permintaan pairing pertama kali yang tertunda
- upgrade peran tertunda untuk perangkat yang sudah dipasangkan
- upgrade cakupan tertunda untuk perangkat yang sudah dipasangkan
- perbaikan ketidakcocokan kunci publik saat id perangkat masih cocok tetapi identitas perangkat tidak lagi cocok dengan catatan yang disetujui
- catatan pairing yang kehilangan token aktif untuk peran yang disetujui
- token pairing yang cakupannya drift di luar baseline pairing yang disetujui
- entri token perangkat cache lokal untuk mesin saat ini yang lebih lama daripada rotasi token sisi Gateway atau membawa metadata cakupan usang
- periksa permintaan tertunda dengan
openclaw devices list - setujui permintaan persis dengan
openclaw devices approve <requestId> - rotasi token baru dengan
openclaw devices rotate --device <deviceId> --role <role> - hapus dan setujui ulang catatan usang dengan
openclaw devices remove <deviceId>
9. Peringatan keamanan
9. Peringatan keamanan
10. systemd linger (Linux)
10. systemd linger (Linux)
11. Status workspace (skills, plugin, dan TaskFlow)
11. Status workspace (skills, plugin, dan TaskFlow)
- Status Skills: menghitung skill yang memenuhi syarat, persyaratannya hilang, dan diblokir daftar izin.
- Status Plugin: menghitung plugin yang diaktifkan/dinonaktifkan/bermasalah; mencantumkan ID plugin untuk setiap error; melaporkan kapabilitas plugin bundel.
- Peringatan kompatibilitas Plugin: menandai plugin yang memiliki masalah kompatibilitas dengan runtime saat ini.
- Diagnostik Plugin: memunculkan peringatan atau error waktu muat yang dikeluarkan oleh registry plugin.
- Pemulihan TaskFlow: memunculkan TaskFlow terkelola yang mencurigakan dan perlu inspeksi manual atau pembatalan.
11b. Ukuran file bootstrap
11b. Ukuran file bootstrap
AGENTS.md, CLAUDE.md, atau file konteks terinjeksi lainnya) mendekati atau melampaui anggaran karakter yang dikonfigurasi. Ini melaporkan jumlah karakter mentah vs. terinjeksi per file, persentase pemotongan, penyebab pemotongan (max/file atau max/total), dan total karakter terinjeksi sebagai bagian dari total anggaran. Saat file dipotong atau mendekati batas, doctor mencetak kiat untuk menyetel agents.defaults.bootstrapMaxChars dan agents.defaults.bootstrapTotalMaxChars.11d. Pembersihan plugin channel usang
11d. Pembersihan plugin channel usang
openclaw doctor --fix menghapus plugin channel yang hilang, ini juga menghapus config bercakupan channel yang menggantung dan merujuk ke plugin tersebut: entri channels.<id>, target heartbeat yang menamai channel, dan override agents.*.models["<channel>/*"]. Ini mencegah loop boot Gateway ketika runtime channel sudah hilang tetapi config masih meminta gateway untuk mengikat ke sana.11c. Pelengkapan shell
11c. Pelengkapan shell
- Jika profil shell menggunakan pola pelengkapan dinamis yang lambat (
source <(openclaw completion ...)), doctor meningkatkannya ke varian file cache yang lebih cepat. - Jika pelengkapan dikonfigurasi di profil tetapi file cache hilang, doctor membuat ulang cache secara otomatis.
- Jika tidak ada pelengkapan yang dikonfigurasi sama sekali, doctor meminta untuk menginstalnya (hanya mode interaktif; dilewati dengan
--non-interactive).
openclaw completion --write-state untuk membuat ulang cache secara manual.12. Pemeriksaan autentikasi Gateway (token lokal)
12. Pemeriksaan autentikasi Gateway (token lokal)
- Jika mode token membutuhkan token dan tidak ada sumber token, doctor menawarkan untuk membuatnya.
- Jika
gateway.auth.tokendikelola SecretRef tetapi tidak tersedia, doctor memperingatkan dan tidak menimpanya dengan plaintext. openclaw doctor --generate-gateway-tokenmemaksa pembuatan hanya saat tidak ada SecretRef token yang dikonfigurasi.
12b. Perbaikan read-only yang sadar SecretRef
12b. Perbaikan read-only yang sadar SecretRef
openclaw doctor --fixkini menggunakan model ringkasan SecretRef read-only yang sama seperti perintah keluarga status untuk perbaikan config yang ditargetkan.- Contoh: perbaikan
allowFrom/groupAllowFrom@usernameTelegram mencoba menggunakan kredensial bot yang dikonfigurasi saat tersedia. - Jika token bot Telegram dikonfigurasi melalui SecretRef tetapi tidak tersedia di jalur perintah saat ini, doctor melaporkan bahwa kredensial dikonfigurasi-tetapi-tidak-tersedia dan melewati resolusi otomatis alih-alih crash atau salah melaporkan token sebagai hilang.
13. Pemeriksaan kesehatan Gateway + restart
13. Pemeriksaan kesehatan Gateway + restart
13b. Kesiapan pencarian memori
13b. Kesiapan pencarian memori
- Backend QMD: memeriksa apakah binary
qmdtersedia dan dapat dimulai. Jika tidak, mencetak panduan perbaikan termasuk paket npm dan opsi jalur binary manual. - Penyedia lokal eksplisit: memeriksa file model lokal atau URL model jarak jauh/dapat diunduh yang dikenali. Jika hilang, menyarankan beralih ke penyedia jarak jauh.
- Penyedia jarak jauh eksplisit (
openai,voyage, dll.): memverifikasi bahwa API key ada di environment atau auth store. Mencetak petunjuk perbaikan yang dapat ditindaklanjuti jika hilang. - Penyedia auto legacy: memperlakukan
memorySearch.provider: "auto"sebagai OpenAI, memeriksa kesiapan OpenAI, dandoctor --fixmenulis ulangnya menjadiprovider: "openai".
openclaw memory status --deep untuk memverifikasi kesiapan embedding saat runtime.14. Peringatan status channel
14. Peringatan status channel
15. Audit config supervisor + perbaikan
15. Audit config supervisor + perbaikan
openclaw doctormeminta konfirmasi sebelum menulis ulang config supervisor.openclaw doctor --yesmenerima prompt perbaikan default.openclaw doctor --fixmenerapkan perbaikan yang direkomendasikan tanpa prompt (--repairadalah alias).openclaw doctor --fix --forcemenimpa config supervisor kustom.OPENCLAW_SERVICE_REPAIR_POLICY=externalmenjaga doctor tetap read-only untuk lifecycle layanan gateway. Ini tetap melaporkan kesehatan layanan dan menjalankan perbaikan non-layanan, tetapi melewati install/start/restart/bootstrap layanan, penulisan ulang config supervisor, dan pembersihan layanan legacy karena supervisor eksternal memiliki lifecycle tersebut.- Di Linux, doctor tidak menulis ulang metadata command/entrypoint saat unit gateway systemd yang cocok aktif. Ini juga mengabaikan unit tambahan mirip gateway non-legacy yang tidak aktif selama pemindaian layanan duplikat sehingga file layanan pendamping tidak menimbulkan noise pembersihan.
- Jika autentikasi token membutuhkan token dan
gateway.auth.tokendikelola SecretRef, install/perbaikan layanan doctor memvalidasi SecretRef tetapi tidak menyimpan nilai token plaintext yang telah di-resolve ke metadata environment layanan supervisor. - Doctor mendeteksi nilai environment layanan terkelola berbasis
.env/SecretRef yang ditanam inline oleh install LaunchAgent, systemd, atau Windows Scheduled Task lama dan menulis ulang metadata layanan agar nilai tersebut dimuat dari sumber runtime alih-alih definisi supervisor. - Doctor mendeteksi saat command layanan masih mematok
--portlama setelahgateway.portberubah dan menulis ulang metadata layanan ke port saat ini. - Jika autentikasi token membutuhkan token dan SecretRef token yang dikonfigurasi belum ter-resolve, doctor memblokir jalur install/perbaikan dengan panduan yang dapat ditindaklanjuti.
- Jika
gateway.auth.tokendangateway.auth.passwordkeduanya dikonfigurasi dangateway.auth.modebelum disetel, doctor memblokir install/perbaikan sampai mode disetel secara eksplisit. - Untuk unit user-systemd Linux, pemeriksaan drift token doctor kini menyertakan sumber
Environment=danEnvironmentFile=saat membandingkan metadata autentikasi layanan. - Perbaikan layanan doctor menolak menulis ulang, menghentikan, atau me-restart layanan gateway dari binary OpenClaw yang lebih lama saat config terakhir ditulis oleh versi yang lebih baru. Lihat Pemecahan masalah Gateway.
- Anda selalu dapat memaksa penulisan ulang penuh melalui
openclaw gateway install --force.
16. Diagnostik runtime Gateway + port
16. Diagnostik runtime Gateway + port
18789) dan melaporkan kemungkinan penyebab (gateway sudah berjalan, tunnel SSH).17. Praktik terbaik runtime Gateway
17. Praktik terbaik runtime Gateway
nvm, fnm, volta, asdf, dll.). Channel WhatsApp + Telegram memerlukan Node, dan jalur pengelola versi dapat rusak setelah upgrade karena layanan tidak memuat init shell Anda. Doctor menawarkan untuk bermigrasi ke install Node sistem saat tersedia (Homebrew/apt/choco).LaunchAgent macOS yang baru diinstal atau diperbaiki menggunakan PATH sistem kanonis (/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin) alih-alih menyalin PATH shell interaktif, sehingga binary sistem yang dikelola Homebrew tetap tersedia sementara direktori Volta, asdf, fnm, pnpm, dan pengelola versi lainnya tidak mengubah Node mana yang di-resolve oleh proses anak. Layanan Linux tetap mempertahankan root environment eksplisit (NVM_DIR, FNM_DIR, VOLTA_HOME, ASDF_DATA_DIR, BUN_INSTALL, PNPM_HOME) dan direktori user-bin yang stabil, tetapi direktori fallback pengelola versi yang ditebak hanya ditulis ke PATH layanan saat direktori tersebut ada di disk.18. Penulisan config + metadata wizard
18. Penulisan config + metadata wizard
19. Kiat workspace (backup + sistem memori)
19. Kiat workspace (backup + sistem memori)