惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog
T
The Blog of Author Tim Ferriss
J
Java Code Geeks
腾讯CDC
D
Docker
G
Google Developers Blog
D
DataBreaches.Net
雷峰网
雷峰网
Blog — PlanetScale
Blog — PlanetScale
S
SegmentFault 最新的问题
The Cloudflare Blog
有赞技术团队
有赞技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Stack Overflow Blog
Stack Overflow Blog
大猫的无限游戏
大猫的无限游戏
量子位
美团技术团队
aimingoo的专栏
aimingoo的专栏
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Engineering at Meta
Engineering at Meta
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4
Doctor: add health-check contract and --lint validation (...
giodl73-repo · 2026-05-18 · via Recent Commits to openclaw:main

@@ -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

2139

openclaw doctor

22-

openclaw doctor --repair

40+

openclaw doctor --lint

41+

openclaw doctor --lint --json

42+

openclaw doctor --lint --severity-min warning

2343

openclaw doctor --deep

24-

openclaw doctor --repair --non-interactive

44+

openclaw doctor --fix

45+

openclaw doctor --fix --non-interactive

2546

openclaw 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.

4718748188

Notes:

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.