


























@@ -15,13 +15,34 @@ Related:
1515- Troubleshooting: [Troubleshooting](/gateway/troubleshooting)
1616- Security audit: [Security](/gateway/security)
171718+## Why Use It
19+20+`openclaw doctor` is the OpenClaw health surface. Use it when the gateway,
21+channels, plugins, skills, model routing, local state, or config migrations are
22+not behaving as expected and you want one command that can explain what is
23+wrong.
24+25+Doctor has three postures:
26+27+| Posture | Command | Behavior |
28+| ------- | ------------------------ | ------------------------------------------------------------------------------- |
29+| Inspect | `openclaw doctor` | Human-oriented checks and guided prompts. |
30+| Repair | `openclaw doctor --fix` | Applies supported repairs, using prompts unless non-interactive repair is safe. |
31+| Lint | `openclaw doctor --lint` | Read-only structured findings for CI, preflight, and review gates. |
32+33+Prefer `--lint` when automation needs a stable result. Prefer `--fix` when a
34+human operator intentionally wants doctor to edit config or state.
35+1836## Examples
19372038```bash
2139openclaw doctor
22-openclaw doctor --repair
40+openclaw doctor --lint
41+openclaw doctor --lint --json
42+openclaw doctor --lint --severity-min warning
2343openclaw doctor --deep
24-openclaw doctor --repair --non-interactive
44+openclaw doctor --fix
45+openclaw doctor --fix --non-interactive
2546openclaw doctor --generate-gateway-token
2647```
2748@@ -44,13 +65,134 @@ The targeted Discord capabilities probe reports the bot's effective channel perm
4465- `--non-interactive`: run without prompts; safe migrations and non-service repairs only
4566- `--generate-gateway-token`: generate and configure a gateway token
4667- `--deep`: scan system services for extra gateway installs and report recent Gateway supervisor restart handoffs
68+- `--lint`: run modernized health checks in read-only mode and emit diagnostic findings
69+- `--json`: with `--lint`, emit JSON findings instead of human output
70+- `--severity-min <level>`: with `--lint`, drop findings below `info`, `warning`, or `error`
71+- `--skip <id>`: with `--lint`, skip a check id; repeat to skip more than one
72+- `--only <id>`: with `--lint`, run only a check id; repeat to run a small selected set
73+74+## Lint mode
75+76+`openclaw doctor --lint` is the read-only automation posture for doctor checks.
77+It uses the structured health-check path, does not prompt, and does not repair
78+or rewrite config/state. Use it in CI, preflight scripts, and review workflows
79+when you want machine-readable findings instead of guided repair prompts.
80+Lint-output options such as `--json`, `--severity-min`, `--only`, and `--skip`
81+are only accepted with `--lint`.
82+83+```bash
84+openclaw doctor --lint
85+openclaw doctor --lint --severity-min warning
86+openclaw doctor --lint --json
87+openclaw doctor --lint --only core/doctor/gateway-config --json
88+```
89+90+Human output is compact:
91+92+```text
93+doctor --lint: ran 5 check(s), 1 finding(s)
94+ [warning] core/doctor/gateway-config gateway.mode - gateway.mode is unset; gateway start will be blocked.
95+ fix: Run `openclaw configure` and set Gateway mode (local/remote), or `openclaw config set gateway.mode local`.
96+```
97+98+JSON output is the scripting surface for lint runs:
99+100+```json
101+{
102+"ok": false,
103+"checksRun": 5,
104+"checksSkipped": 0,
105+"findings": [
106+ {
107+"checkId": "core/doctor/gateway-config",
108+"severity": "warning",
109+"message": "gateway.mode is unset; gateway start will be blocked.",
110+"path": "gateway.mode",
111+"fixHint": "Run `openclaw configure` and set Gateway mode (local/remote), or `openclaw config set gateway.mode local`."
112+ }
113+ ]
114+}
115+```
116+117+Exit behavior:
118+119+- `0`: no findings at or above the selected severity threshold
120+- `1`: at least one finding meets the selected threshold
121+- `2`: command/runtime failure before lint findings can be produced
122+123+`--severity-min` controls both visible findings and the exit threshold. For
124+example, `openclaw doctor --lint --severity-min error` can print no findings and
125+exit `0` even when lower-severity `info` or `warning` findings exist.
126+127+## Structured Health Checks
128+129+Modern doctor checks use a small structured contract:
130+131+```ts
132+detect(ctx, scope?) -> HealthFinding[]
133+repair?(ctx, findings) -> HealthRepairResult
134+```
135+136+`detect()` powers `doctor --lint`. `repair()` is optional and is only considered
137+by `doctor --fix` / `doctor --repair`. Checks that have not migrated to this
138+shape continue to use the legacy doctor contribution flow.
139+140+The split is intentional: `detect()` owns diagnosis, while `repair()` owns
141+reporting what it changed or would change. Repair contexts can carry
142+`dryRun`/`diff` requests, and repair results can return structured `diffs` for
143+config/file edits plus `effects` for service, process, package, state, or other
144+side effects. That lets converted checks grow toward `doctor --fix --dry-run`
145+and diff reporting without moving mutation planning into `detect()`.
146+147+`repair()` reports whether it attempted the requested repair with `status:
148+"repaired" | "skipped" | "failed"`. Omitted status means `repaired`, so simple
149+repair checks only need to return changes. When repair returns `skipped` or
150+`failed`, doctor reports the reason and does not run validation for that check.
151+152+After a successful structured repair, doctor re-runs `detect()` with the
153+repaired findings as scope. Checks can use selected findings, paths, or `ocPath`
154+values for focused validation. If the finding is still present, doctor reports a
155+repair warning instead of treating the change as silently complete.
156+157+A finding includes:
158+159+| Field | Purpose |
160+| ----------------- | ------------------------------------------------------ |
161+| `checkId` | Stable id for skip/only filters and CI allowlists. |
162+| `severity` | `info`, `warning`, or `error`. |
163+| `message` | Human-readable problem statement. |
164+| `path` | Config, file, or logical path when available. |
165+| `line` / `column` | Source location when available. |
166+| `ocPath` | Precise `oc://` address when a check can point to one. |
167+| `fixHint` | Suggested operator action or repair summary. |
168+169+This release registers the modernized core doctor checks on the structured
170+health path. The `openclaw/plugin-sdk/health` subpath exposes the same
171+contract for bundled follow-up consumers, but plugin-backed checks only run
172+after their owning package registers them in the active command path.
173+174+## Check Selection
175+176+Use `--only` and `--skip` when a workflow wants a focused gate:
177+178+```bash
179+openclaw doctor --lint --only core/doctor/gateway-config --json
180+openclaw doctor --lint --skip core/doctor/skills-readiness
181+```
182+183+`--only` and `--skip` accept full check ids and may be repeated. If an `--only`
184+id is not registered, no check runs for that id; use the command's `checksRun`
185+and `checksSkipped` fields to verify a focused gate is selecting the checks you
186+expect.
4718748188Notes:
4918950190- In Nix mode (`OPENCLAW_NIX_MODE=1`), read-only doctor checks still work, but `doctor --fix`, `doctor --repair`, `doctor --yes`, and `doctor --generate-gateway-token` are disabled because `openclaw.json` is immutable. Edit the Nix source for this install instead; for nix-openclaw, use the agent-first [Quick Start](https://github.com/openclaw/nix-openclaw#quick-start).
51191- Interactive prompts (like keychain/OAuth fixes) only run when stdin is a TTY and `--non-interactive` is **not** set. Headless runs (cron, Telegram, no terminal) will skip prompts.
52-- Performance: non-interactive `doctor` runs skip eager plugin loading so headless health checks stay fast. Interactive sessions still fully load plugins when a check needs their contribution.
192+- Performance: non-interactive `doctor` runs skip eager plugin loading so headless health checks stay fast. Interactive doctor sessions still load the plugin surfaces needed by the legacy health and repair flow.
193+- `--lint` is stricter than `--non-interactive`: it is always read-only, never prompts, and never applies safe migrations. Run `doctor --fix` or `doctor --repair` when you want doctor to make changes.
53194- `--fix` (alias for `--repair`) writes a backup to `~/.openclaw/openclaw.json.bak` and drops unknown config keys, listing each removal.
195+- Modernized health checks can expose a `repair()` path for `doctor --fix`; checks that do not expose one continue through the existing doctor repair flow.
54196- `doctor --fix --non-interactive` reports missing or stale gateway service definitions but does not install or rewrite them outside update repair mode. Run `openclaw gateway install` for a missing service, or `openclaw gateway install --force` when you intentionally want to replace the launcher.
55197- State integrity checks now detect orphan transcript files in the sessions directory. Archiving them as `.deleted.<timestamp>` requires an interactive confirmation; `--fix`, `--yes`, and headless runs leave them in place.
56198- Doctor also scans `~/.openclaw/cron/jobs.json` (or `cron.store`) for legacy cron job shapes and can rewrite them in place before the scheduler has to auto-normalize them at runtime.
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。