[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CHSBXHXJS0BHV91BAX5VG1":3,"skill-same:01M6CHSBXHXJS0BHV91BAX5VG1":71},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":31,"linkOnly":32,"markdownContent":33,"markdownBody":34,"frontMatter":35,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":49,"ownerHtmlUrl":50,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":51,"install":52,"resources":64},"01M6CHSBXHXJS0BHV91BAX5VG1","doctor",null,"[ADD v{{VERSION}}] Provable install health check — verify hooks, agents, config, and paths are actually live","MountainUnicorn\u002Fadd","MountainUnicorn","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F199411549?v=4","01M6CHRAWFWD275ANP1S2A0HXC","01M6CHRB0QE1678D913B438SAR",11,"MIT","https:\u002F\u002Fgithub.com\u002FMountainUnicorn\u002Fadd\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fdoctor\u002FSKILL.md",[],[5,18,19,20,21,22,23,24,25,26,27,28,29,30],"config","telemetry","verify","health","Bash","Rules","grep","check","read","install","version","health check","hooks","2026-11-10 10:12:30",false,"---\ndescription: \"[ADD v{{VERSION}}] Provable install health check — verify hooks, agents, config, and paths are actually live\"\nargument-hint: \"[--check]\"\nallowed-tools: [Read, Glob, Grep, Bash]\nreferences: [\"rules\u002Ftelemetry.md\"]\ndisable-model-invocation: true\n---\n\n# ADD Doctor Command v{{VERSION}}\n\nDistinguish \"seems installed\" from \"provably healthy\". An ADD install can be silently dead — e.g. Codex ≥0.14x ignoring agents and hooks with no error (issue #24). This command runs a check battery and reports per-check status with a one-line remedy for every failure. Doctor only reports — it never repairs (remediation: `\u002Fadd:init --reconfigure` or re-running the installer).\n\n## Execution\n\n### 1. Detect runtime\n\nSame model as \u002Fadd:version — probe `${CLAUDE_PLUGIN_ROOT}\u002F`, first hit wins:\n\n1. `.claude-plugin\u002Fplugin.json` exists → **Claude runtime**\n2. `plugin.toml` or `VERSION` exists (and `${CLAUDE_PLUGIN_ROOT}` resolves under `~\u002F.codex`) → **Codex runtime**\n\nChecks that don't apply to the detected runtime are **skipped silently** — do not list them in the output at all.\n\n### 2. Run the check battery\n\n| ID | Check | Runtime | Severity |\n|---|---|---|---|\n| D-VER | plugin \u002F project \u002F core versions agree | both | warn (behind) \u002F error (ahead) |\n| D-CFG | config.toml feature gates (`collab`, `codex_hooks`) | codex | error |\n| D-HOOKS | hooks.json nested ≥0.14x schema; scripts exist + executable | codex | error |\n| D-AGENTS | agent TOMLs use `developer_instructions`, never `prompt_skill` | codex | error |\n| D-PATHS | every installed plugin.toml path resolves | codex | error |\n| D-STALE | stale artifacts from prior versions | both | warn |\n| D-MANIFEST | install-manifest.json files all present (missing = error; checksum drift = info \"user-modified\") | codex | error |\n| D-CACHE | marketplace cache version vs project version drift | claude | warn |\n\n**Library-backed checks (D-CFG, D-HOOKS, D-AGENTS, D-PATHS, D-MANIFEST — Codex runtime only).** Run the shared library against the Codex home directory:\n\n```bash\nDOCTOR_LIB=\"${CLAUDE_PLUGIN_ROOT}\u002Flib\u002Fdoctor-checks.sh\"\nCODEX_ROOT=\"${CODEX_HOME:-$HOME\u002F.codex}\"\nfor fn in check_config_features check_hooks_schema check_agent_tomls check_plugin_paths check_manifest; do\n  bash -c \"source '$DOCTOR_LIB' && $fn '$CODEX_ROOT'\"\ndone\n```\n\nEach function prints `CHECK \u003Cid> \u003Cpass|warn|fail|info|skip> \u003Cdetail>` and exits 0 (pass\u002Finfo\u002Fskip), 1 (warn), or 2 (fail). Parse these lines directly into the results table — do not re-derive the verdicts yourself.\n\n**D-VER (both runtimes).** Reuse the \u002Fadd:version comparison logic: read the plugin version (`.claude-plugin\u002Fplugin.json` → `plugin.toml` → `VERSION`, first hit wins), the project version from `.add\u002Fconfig.json`, and `core\u002FVERSION` if accessible (development installs). project == plugin → pass. project \u003C plugin → **warn** (\"migration will run on next skill invocation\"). project > plugin → **fail** (\"plugin is older than project config — update the plugin\"). No `.add\u002Fconfig.json` → info (\"not an ADD project — run \u002Fadd:init\").\n\n**D-STALE (both runtimes, best-effort inline).** Never let this check error out the doctor run — on any unexpected condition, report `⚠` with what was seen, or skip. Look for:\n\n- Codex: a legacy flat hooks.json shape staged anywhere (including a `hooks.json` under the `add\u002F` staging tree left from a pre-0.14x install), and leftover unprefixed or removed agent TOMLs in `~\u002F.codex\u002Fagents\u002F` (ADD-marked TOMLs whose name is not in the installed plugin.toml agents list).\n- Claude: `.claude\u002Frules\u002F*` files in the project whose names duplicate plugin rule names (stale copies shadowing the plugin).\n\n**D-CACHE (Claude only, best-effort inline).** Compare `~\u002F.claude\u002Fplugins\u002Fcache\u002Fadd-marketplace\u002Fadd\u002F.claude-plugin\u002Fplugin.json` version against `.add\u002Fconfig.json` version. Drift → warn (\"run \u002Fadd:version for details; update the plugin or re-run \u002Fadd:init\"). Cache path missing → skip silently. Never hard-fail on this check.\n\n### 3. Render output\n\n#### Human mode (default)\n\n```\nADD Doctor — {runtime} runtime\n\n  Check       Status   Detail\n  D-VER       ✓        plugin v{X} == project v{X}\n  D-CFG       ✓        [features] collab and codex_hooks enabled\n  D-HOOKS     ✗        legacy flat pre-0.14x schema\n                       → Remedy: rerun the ADD installer to upgrade hooks.json\n  D-AGENTS    ✓        5 ADD agent TOML(s) use developer_instructions\n  D-PATHS     ✓        all 34 plugin.toml paths resolve\n  D-STALE     ⚠        leftover agent TOML: old-reviewer.toml\n                       → Remedy: remove it or rerun the installer\n  D-MANIFEST  ✓        all files present (1 user-modified: skills\u002Fadd-verify\u002FSKILL.md)\n\nResult: unhealthy — 1 error, 1 warning\n```\n\n- `✓` pass, `⚠` warn, `✗` fail. `info` findings (e.g. user-modified files) render inline on the owning check's detail line, still `✓`.\n- Every `⚠`\u002F`✗` row MUST carry an indented `→ Remedy:` line (one line, actionable).\n- Skipped checks are omitted from the table entirely.\n- Final line: `Result: healthy` (no warnings or errors), `Result: warnings — N warning(s)`, or `Result: unhealthy — N error(s), M warning(s)`.\n\n#### --check flag (machine mode)\n\nWhen invoked with `--check`, output exactly one line and nothing else:\n\n```\nadd:doctor status={healthy|warnings|unhealthy} errors=N warnings=N\n```\n\nExit-code semantics for CI: `healthy` and `warnings` → 0, `unhealthy` → 1. This mirrors the \u002Fadd:version `--check` convention.\n\n## Integration with Other Skills\n\n- \u002Fadd:version answers \"what version am I on\"; \u002Fadd:doctor answers \"is what's installed actually alive\".\n- Suggest \u002Fadd:doctor after any plugin upgrade or Codex CLI major bump.\n- Remediation paths: `\u002Fadd:init --reconfigure` (project config), the Codex installer re-run (install tree), `claude plugin update add@add-marketplace` (Claude plugin).\n\nEnd-of-skill epilogue: follow `${CLAUDE_PLUGIN_ROOT}\u002Freferences\u002Fskill-epilogue.md` (observation + learning checkpoint + progress tracking). Learning checkpoint trigger: \"After Verification\".\n","# ADD Doctor Command v{{VERSION}}\n\nDistinguish \"seems installed\" from \"provably healthy\". An ADD install can be silently dead — e.g. Codex ≥0.14x ignoring agents and hooks with no error (issue #24). This command runs a check battery and reports per-check status with a one-line remedy for every failure. Doctor only reports — it never repairs (remediation: `\u002Fadd:init --reconfigure` or re-running the installer).\n\n## Execution\n\n### 1. Detect runtime\n\nSame model as \u002Fadd:version — probe `${CLAUDE_PLUGIN_ROOT}\u002F`, first hit wins:\n\n1. `.claude-plugin\u002Fplugin.json` exists → **Claude runtime**\n2. `plugin.toml` or `VERSION` exists (and `${CLAUDE_PLUGIN_ROOT}` resolves under `~\u002F.codex`) → **Codex runtime**\n\nChecks that don't apply to the detected runtime are **skipped silently** — do not list them in the output at all.\n\n### 2. Run the check battery\n\n| ID | Check | Runtime | Severity |\n|---|---|---|---|\n| D-VER | plugin \u002F project \u002F core versions agree | both | warn (behind) \u002F error (ahead) |\n| D-CFG | config.toml feature gates (`collab`, `codex_hooks`) | codex | error |\n| D-HOOKS | hooks.json nested ≥0.14x schema; scripts exist + executable | codex | error |\n| D-AGENTS | agent TOMLs use `developer_instructions`, never `prompt_skill` | codex | error |\n| D-PATHS | every installed plugin.toml path resolves | codex | error |\n| D-STALE | stale artifacts from prior versions | both | warn |\n| D-MANIFEST | install-manifest.json files all present (missing = error; checksum drift = info \"user-modified\") | codex | error |\n| D-CACHE | marketplace cache version vs project version drift | claude | warn |\n\n**Library-backed checks (D-CFG, D-HOOKS, D-AGENTS, D-PATHS, D-MANIFEST — Codex runtime only).** Run the shared library against the Codex home directory:\n\n```bash\nDOCTOR_LIB=\"${CLAUDE_PLUGIN_ROOT}\u002Flib\u002Fdoctor-checks.sh\"\nCODEX_ROOT=\"${CODEX_HOME:-$HOME\u002F.codex}\"\nfor fn in check_config_features check_hooks_schema check_agent_tomls check_plugin_paths check_manifest; do\n  bash -c \"source '$DOCTOR_LIB' && $fn '$CODEX_ROOT'\"\ndone\n```\n\nEach function prints `CHECK \u003Cid> \u003Cpass|warn|fail|info|skip> \u003Cdetail>` and exits 0 (pass\u002Finfo\u002Fskip), 1 (warn), or 2 (fail). Parse these lines directly into the results table — do not re-derive the verdicts yourself.\n\n**D-VER (both runtimes).** Reuse the \u002Fadd:version comparison logic: read the plugin version (`.claude-plugin\u002Fplugin.json` → `plugin.toml` → `VERSION`, first hit wins), the project version from `.add\u002Fconfig.json`, and `core\u002FVERSION` if accessible (development installs). project == plugin → pass. project \u003C plugin → **warn** (\"migration will run on next skill invocation\"). project > plugin → **fail** (\"plugin is older than project config — update the plugin\"). No `.add\u002Fconfig.json` → info (\"not an ADD project — run \u002Fadd:init\").\n\n**D-STALE (both runtimes, best-effort inline).** Never let this check error out the doctor run — on any unexpected condition, report `⚠` with what was seen, or skip. Look for:\n\n- Codex: a legacy flat hooks.json shape staged anywhere (including a `hooks.json` under the `add\u002F` staging tree left from a pre-0.14x install), and leftover unprefixed or removed agent TOMLs in `~\u002F.codex\u002Fagents\u002F` (ADD-marked TOMLs whose name is not in the installed plugin.toml agents list).\n- Claude: `.claude\u002Frules\u002F*` files in the project whose names duplicate plugin rule names (stale copies shadowing the plugin).\n\n**D-CACHE (Claude only, best-effort inline).** Compare `~\u002F.claude\u002Fplugins\u002Fcache\u002Fadd-marketplace\u002Fadd\u002F.claude-plugin\u002Fplugin.json` version against `.add\u002Fconfig.json` version. Drift → warn (\"run \u002Fadd:version for details; update the plugin or re-run \u002Fadd:init\"). Cache path missing → skip silently. Never hard-fail on this check.\n\n### 3. Render output\n\n#### Human mode (default)\n\n```\nADD Doctor — {runtime} runtime\n\n  Check       Status   Detail\n  D-VER       ✓        plugin v{X} == project v{X}\n  D-CFG       ✓        [features] collab and codex_hooks enabled\n  D-HOOKS     ✗        legacy flat pre-0.14x schema\n                       → Remedy: rerun the ADD installer to upgrade hooks.json\n  D-AGENTS    ✓        5 ADD agent TOML(s) use developer_instructions\n  D-PATHS     ✓        all 34 plugin.toml paths resolve\n  D-STALE     ⚠        leftover agent TOML: old-reviewer.toml\n                       → Remedy: remove it or rerun the installer\n  D-MANIFEST  ✓        all files present (1 user-modified: skills\u002Fadd-verify\u002FSKILL.md)\n\nResult: unhealthy — 1 error, 1 warning\n```\n\n- `✓` pass, `⚠` warn, `✗` fail. `info` findings (e.g. user-modified files) render inline on the owning check's detail line, still `✓`.\n- Every `⚠`\u002F`✗` row MUST carry an indented `→ Remedy:` line (one line, actionable).\n- Skipped checks are omitted from the table entirely.\n- Final line: `Result: healthy` (no warnings or errors), `Result: warnings — N warning(s)`, or `Result: unhealthy — N error(s), M warning(s)`.\n\n#### --check flag (machine mode)\n\nWhen invoked with `--check`, output exactly one line and nothing else:\n\n```\nadd:doctor status={healthy|warnings|unhealthy} errors=N warnings=N\n```\n\nExit-code semantics for CI: `healthy` and `warnings` → 0, `unhealthy` → 1. This mirrors the \u002Fadd:version `--check` convention.\n\n## Integration with Other Skills\n\n- \u002Fadd:version answers \"what version am I on\"; \u002Fadd:doctor answers \"is what's installed actually alive\".\n- Suggest \u002Fadd:doctor after any plugin upgrade or Codex CLI major bump.\n- Remediation paths: `\u002Fadd:init --reconfigure` (project config), the Codex installer re-run (install tree), `claude plugin update add@add-marketplace` (Claude plugin).\n\nEnd-of-skill epilogue: follow `${CLAUDE_PLUGIN_ROOT}\u002Freferences\u002Fskill-epilogue.md` (observation + learning checkpoint + progress tracking). Learning checkpoint trigger: \"After Verification\".\n",{"references":36,"description":7,"allowed-tools":38,"argument-hint":42,"disable-model-invocation":43},[37],"rules\u002Ftelemetry.md",[39,40,41,22],"Read","Glob","Grep","[--check]",true,"main","e335248c85d50f73919320bc138766eb413c5ee3","core\u002Fskills\u002Fdoctor",6,"https:\u002F\u002Fgithub.com\u002FMountainUnicorn\u002Fadd","https:\u002F\u002Fgetadd.dev","https:\u002F\u002Fgithub.com\u002FMountainUnicorn","2026-10-31 22:03:50",{"source":8,"skillName":5,"commands":53,"prompt":63,"zipAvailable":43},[54,57,60],{"tool":55,"command":56},"npx","npx skills add MountainUnicorn\u002Fadd --skill doctor",{"tool":58,"command":59},"bunx","bunx skills add MountainUnicorn\u002Fadd --skill doctor",{"tool":61,"command":62},"pnpm","pnpm dlx skills add MountainUnicorn\u002Fadd --skill doctor","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FMountainUnicorn\u002Fadd\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fdoctor\u002FSKILL.md",[65],{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"scripts\u002Fextract-tokens","SCRIPT","脚本",1667,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fsuperpowers-lab-slack-messaging\u002Fscripts\u002Fextract-tokens",[72,79,84,89,98,130],{"skillNo":73,"name":74,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":77,"publishedAt":31},"01M6CHXN68ZCGNXE9Q0K2T2RKX","add-verify","https:\u002F\u002Fgithub.com\u002FMountainUnicorn\u002Fadd\u002Fblob\u002Fmain\u002Ftests\u002Fhooks\u002Ffixtures\u002Fdoctor\u002Fmanifest-modified\u002Fskills\u002Fadd-verify\u002FSKILL.md",[],[78,20],"add verify",{"skillNo":80,"name":74,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":83,"publishedAt":31},"01M6CHXJY4ZXKTNP0235A9KTNH","https:\u002F\u002Fgithub.com\u002FMountainUnicorn\u002Fadd\u002Fblob\u002Fmain\u002Ftests\u002Fhooks\u002Ffixtures\u002Fdoctor\u002Fmanifest-missing\u002Fskills\u002Fadd-verify\u002FSKILL.md",[],[78,20],{"skillNo":85,"name":74,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":31},"01M6CHXG6NV1DBMWT2N6XE5555","https:\u002F\u002Fgithub.com\u002FMountainUnicorn\u002Fadd\u002Fblob\u002Fmain\u002Ftests\u002Fhooks\u002Ffixtures\u002Fdoctor\u002Fhealthy\u002Fskills\u002Fadd-verify\u002FSKILL.md",[],[78,20],{"skillNo":90,"name":28,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":31},"01M6CHXDZFPEFBZ79GHP48S1BB","[ADD v0.11.0] Show installed version, project version, and upgrade status","https:\u002F\u002Fgithub.com\u002FMountainUnicorn\u002Fadd\u002Fblob\u002Fmain\u002Fplugins\u002Fadd\u002Fskills\u002Fversion\u002FSKILL.md",[],[28,24,95,19,22,23,25,26,96,97],"status","v0","show",{"skillNo":99,"name":20,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":116,"publishedAt":31},"01M6CHXB5XG415PP88E0GACHP8","[ADD v0.11.0] Run quality gates — lint, types, tests, coverage, spec compliance","https:\u002F\u002Fgithub.com\u002FMountainUnicorn\u002Fadd\u002Fblob\u002Fmain\u002Fplugins\u002Fadd\u002Fskills\u002Fverify\u002FSKILL.md",[103,108,111],{"categoryNo":104,"categoryName":105,"taxonomyType":106,"taxonomyTypeDesc":107},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",{"categoryNo":109,"categoryName":110,"taxonomyType":106,"taxonomyTypeDesc":107},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":112,"categoryName":113,"taxonomyType":114,"taxonomyTypeDesc":115},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[20,24,26,117,118,96,119,120,23,19,121,122,123,124,125,126,127,22,128,129],"coverage","fix","smoke","gate","spec","quality gates","run","lint","ci","compliance","secrets","learning","quality",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":143,"publishedAt":31},"01M6CHX8JF3M3J8BKTBW604D37","ux","[ADD v0.11.0] Iterate on UI\u002FUX design before implementation — wireframes, flow validation, and design sign-off","https:\u002F\u002Fgithub.com\u002FMountainUnicorn\u002Fadd\u002Fblob\u002Fmain\u002Fplugins\u002Fadd\u002Fskills\u002Fux\u002FSKILL.md",[136,139,140],{"categoryNo":137,"categoryName":138,"taxonomyType":106,"taxonomyTypeDesc":107},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":109,"categoryName":110,"taxonomyType":106,"taxonomyTypeDesc":107},{"categoryNo":141,"categoryName":142,"taxonomyType":114,"taxonomyTypeDesc":115},"01JBSEEDCAT000000000000032","设计师",[132,144,145,146,147,19,121,22,148,23,24,26,149,150,96,151,152,153,154],"ui","file","figma","validation","system","write","edit","design-system","implementation","flow","design"]