Codex Doctor
Run a two-layer health check:
- Reuse Codex's stable built-in
codex doctor --json for installation, config, auth, runtime, Git environment, terminal, app-server, update, and thread-inventory checks. Derive one narrow provider-scope warning when the default provider represents only a small minority of indexed history.
- Run the bundled read-only scanner for workspace context governance that the built-in command does not cover.
The scanner gathers deterministic evidence. You make the semantic judgment. This separation matters because a script can prove that text repeats, but it cannot safely decide that a business fact, safety boundary, brand voice, or directory rule is disposable.
Run the check
Resolve the Skill directory from the loaded Skill path, then run:
python3 <skill-dir>/scripts/scan_workspace.py --cwd "$PWD" --compact-json
For a faster workspace-only pass when the built-in report was already run in the same task:
python3 <skill-dir>/scripts/scan_workspace.py --cwd "$PWD" --compact-json --skip-built-in
--compact-json preserves every finding and every built-in check row while omitting large Skill inventories and verbose passing-check details. Use --json only when full deterministic inventory evidence is required.
Do not save the raw built-in report inside the repository. If temporary storage is needed, use /tmp and remove it before finishing.
Interpret findings
Read checks-and-repair-policy.md before proposing any cleanup or repair. Keep severity and confidence separate:
S0: proven secret exposure or proven destructive risk
S1: broken effective configuration, truncated hard rules, missing enabled executables, or installation/update mismatch
S2: exact redundancy, duplicate active names/sources, or a clear project hygiene violation
S3: maintenance pressure, stale disabled entries, new-version notice, or oversized descriptions
S4: informational, semantic candidate, or evidence gap
Treat semantic_candidates as prompts for inspection, not findings. Read the relevant source section and classify it as one of:
- behavior rule or safety boundary: preserve
- user preference, brand voice, business fact, or directory contract: preserve
- repo fact that requires multi-file synthesis: usually preserve
- directly discoverable inventory, framework version, dependency list, or directory listing: candidate to trim
- stale or contradictory statement: verify against the repository before proposing a change
Unused Skill evidence
Static discovery cannot prove a Skill is unused. If the user explicitly asks for unused or low-frequency Skills, use the installed codex-skill-admin Skill in read-only audit mode:
python3 <codex-skill-admin-dir>/scripts/codex_skill_admin.py audit-unused --cwd "$PWD" --days 30
Report the evidence window and distinct session/source count. Do not disable anything unless the user separately asks and approves the target list.
Report structure
Lead with the overall result, then show only actionable or decision-relevant items:
# Codex 健康检查
状态:PASS / WARN / FAIL
## 需要处理
- [finding id] severity / confidence — conclusion
Evidence: source and observed state
Impact: concrete failure or context cost
Recommendation: exact next action
## 建议人工审查
- semantic candidates with why they may be inferable or stale
## 已通过
- grouped domains, not every low-level row
## Evidence gaps
- checks that cannot be proven from public/local data
Preserve built-in doctor sub-checks as separate facts. For example, an HTTP reachability failure and a WebSocket success must remain two rows; do not collapse them into “the network is broken.”
Repair protocol
Diagnosis does not authorize repair. When the user asks to fix findings:
- Show one finding ID, the exact source, why it is wrong, and a single-file unified diff.
- Ask for explicit approval of that finding ID when the change deletes or semantically rewrites instructions, changes config, enables/disables a component, or moves files.
- Recompute the source file SHA-256 immediately before applying the patch. Stop if it differs from the scan evidence.
- Apply only the approved diff with
apply_patch.
- Rerun the relevant check and report the before/after result.
Never automatically:
- delete or weaken safety rules, brand/persona rules, business facts, project facts, Git gates, or directory boundaries
- delete text merely because it is duplicated across AGENTS.md and CLAUDE.md; cross-host parity may be intentional
- execute hooks to measure performance
- trust hooks, log in to MCP, expose credentials, install dependencies, update Codex, or change providers
- modify sandbox, approval, model, network, or authentication settings
- run destructive Git commands, clean untracked files, or move protected project directories
Completion checks
Before reporting completion:
- confirm the scanner made no repository changes
- distinguish built-in Codex diagnostics from workspace-governance findings
- label inference as inference
- report skipped checks and evidence gaps
- if repairs were approved, verify each changed file and rerun its domain check
1---2name: codex-doctor3description: Audit Codex installation health and workspace context quality by combining the built-in `codex doctor` report with read-only checks for AGENTS.md scope, instruction bloat or duplication, Skills, MCP, hooks, config, thread-provider history scope, Git state, and repository-root hygiene. Use whenever the user asks for `/doctor`, `/checkup`, Codex health checks, context cleanup, AGENTS.md cleanup, unused or broken Skills/MCP/hooks, missing history after provider changes, slow or polluted context, or asks why Codex is ignoring rules. Default to diagnosis only; never edit, disable, delete, trust, install, update, authenticate, move, or clean anything without a separately approved finding-level diff.4---56# Codex Doctor78Run a two-layer health check:9101. Reuse Codex's stable built-in `codex doctor --json` for installation, config, auth, runtime, Git environment, terminal, app-server, update, and thread-inventory checks. Derive one narrow provider-scope warning when the default provider represents only a small minority of indexed history.112. Run the bundled read-only scanner for workspace context governance that the built-in command does not cover.1213The scanner gathers deterministic evidence. You make the semantic judgment. This separation matters because a script can prove that text repeats, but it cannot safely decide that a business fact, safety boundary, brand voice, or directory rule is disposable.1415## Run the check1617Resolve the Skill directory from the loaded Skill path, then run:1819```bash20python3 <skill-dir>/scripts/scan_workspace.py --cwd "$PWD" --compact-json21```2223For a faster workspace-only pass when the built-in report was already run in the same task:2425```bash26python3 <skill-dir>/scripts/scan_workspace.py --cwd "$PWD" --compact-json --skip-built-in27```2829`--compact-json` preserves every finding and every built-in check row while omitting large Skill inventories and verbose passing-check details. Use `--json` only when full deterministic inventory evidence is required.3031Do not save the raw built-in report inside the repository. If temporary storage is needed, use `/tmp` and remove it before finishing.3233## Interpret findings3435Read [checks-and-repair-policy.md](references/checks-and-repair-policy.md) before proposing any cleanup or repair. Keep severity and confidence separate:3637- `S0`: proven secret exposure or proven destructive risk38- `S1`: broken effective configuration, truncated hard rules, missing enabled executables, or installation/update mismatch39- `S2`: exact redundancy, duplicate active names/sources, or a clear project hygiene violation40- `S3`: maintenance pressure, stale disabled entries, new-version notice, or oversized descriptions41- `S4`: informational, semantic candidate, or evidence gap4243Treat `semantic_candidates` as prompts for inspection, not findings. Read the relevant source section and classify it as one of:4445- behavior rule or safety boundary: preserve46- user preference, brand voice, business fact, or directory contract: preserve47- repo fact that requires multi-file synthesis: usually preserve48- directly discoverable inventory, framework version, dependency list, or directory listing: candidate to trim49- stale or contradictory statement: verify against the repository before proposing a change5051## Unused Skill evidence5253Static discovery cannot prove a Skill is unused. If the user explicitly asks for unused or low-frequency Skills, use the installed `codex-skill-admin` Skill in read-only audit mode:5455```bash56python3 <codex-skill-admin-dir>/scripts/codex_skill_admin.py audit-unused --cwd "$PWD" --days 3057```5859Report the evidence window and distinct session/source count. Do not disable anything unless the user separately asks and approves the target list.6061## Report structure6263Lead with the overall result, then show only actionable or decision-relevant items:6465```markdown66# Codex 健康检查6768状态:PASS / WARN / FAIL6970## 需要处理71- [finding id] severity / confidence — conclusion72 Evidence: source and observed state73 Impact: concrete failure or context cost74 Recommendation: exact next action7576## 建议人工审查77- semantic candidates with why they may be inferable or stale7879## 已通过80- grouped domains, not every low-level row8182## Evidence gaps83- checks that cannot be proven from public/local data84```8586Preserve built-in doctor sub-checks as separate facts. For example, an HTTP reachability failure and a WebSocket success must remain two rows; do not collapse them into “the network is broken.”8788## Repair protocol8990Diagnosis does not authorize repair. When the user asks to fix findings:91921. Show one finding ID, the exact source, why it is wrong, and a single-file unified diff.932. Ask for explicit approval of that finding ID when the change deletes or semantically rewrites instructions, changes config, enables/disables a component, or moves files.943. Recompute the source file SHA-256 immediately before applying the patch. Stop if it differs from the scan evidence.954. Apply only the approved diff with `apply_patch`.965. Rerun the relevant check and report the before/after result.9798Never automatically:99100- delete or weaken safety rules, brand/persona rules, business facts, project facts, Git gates, or directory boundaries101- delete text merely because it is duplicated across AGENTS.md and CLAUDE.md; cross-host parity may be intentional102- execute hooks to measure performance103- trust hooks, log in to MCP, expose credentials, install dependencies, update Codex, or change providers104- modify sandbox, approval, model, network, or authentication settings105- run destructive Git commands, clean untracked files, or move protected project directories106107## Completion checks108109Before reporting completion:110111- confirm the scanner made no repository changes112- distinguish built-in Codex diagnostics from workspace-governance findings113- label inference as inference114- report skipped checks and evidence gaps115- if repairs were approved, verify each changed file and rerun its domain check