Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Audit and safely repair cross-runtime Skill ownership, loading, duplication, scopes, budgets, lifecycle, quarantine, and retirement. Usage statistics alone belong to skill-usage-stats. Use when explicitly governing the Skill ecosystem; ignore mentions/traces.
.claude/skills/majiayu000-skill-ecosystem-doctor/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 69% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 163% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 426% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 123% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 101% | 0% |
Treat the local Skill collection as a governed software supply chain. Audit first, plan repairs from evidence, apply only authorized changes, and finish with fresh cross-runtime verification and a durable handoff.
This workflow is at skill maturity, not unattended automation maturity. Do not schedule or silently apply repairs.
Questions such as “Did Studio load or start these Skills?” belong to Studio's own configuration, projections, and runtime inventory. Inspect that project/runtime directly. Invoke this Doctor only when the user explicitly asks for cross-runtime or cross-scope ownership, projection, exposure, lifecycle, or repair governance.
| User intent | Mode | Routing | |---|---|---| | Inspect, review, inventory, or diagnose | audit | execute_direct; read-only | | Explain what should change | plan | plan_first; no mutations | | Fix, unify, quarantine, or retire | repair | plan_first; explicit scope and rollback | | Recheck an existing governance file | verify | execute_direct; read-only | | Rotate credentials, rewrite history, push, publish, or change remotes | external action | clarify_first unless the current request grants that exact action |
If the request mixes modes, run audit before repair. Do not infer repair authorization from a request to inspect or diagnose.
and local validation.
rewriting, remote publication, or any mutation not named by the current repair request.
completion claim only with paths, state queries, tests, ownership records, or a concrete data-loss or security risk.
and manual recovery steps into checks, fixtures, references, or evals.
governance file, script, alias, or projection.
AGENTS.md or equivalent before editing a sourcerepository.
path as canonical source, managed projection, generated cache, or unknown.
worktrees, runtime versions, and unavailable external permissions.
flowguard and keep thehandoff outside parent context.
Common roots are discovery candidates, not declarations. Verify them on the current machine; no data means unknown, not a guessed source relationship.
Use an existing governance file when one exists. Otherwise read the governance schema, adapt the example from discovered facts, and show the proposed configuration before writing it.
The Doctor accepts both its portable schema and the deployed Loom-style SKILL_GOVERNANCE_POLICY.json; do not create a second policy when the latter already exists.
For a large deployed catalog, prefer default_scope: "review" with an explicit global_allowlist. Keep specialist Skills in named profiles, bind profiles to project roots only when needed, and enforce an exposure_budget. A retained profile Skill is still canonical and usable on demand; it is not globally injected until a declared profile scope projects it.
From this Skill directory, run:
bashpython3 scripts/ecosystem_doctor.py --governance ./skill-ecosystem-governance.json python3 scripts/ecosystem_doctor.py --governance ./skill-ecosystem-governance.json --json
Use --skip-loom only when Loom is intentionally outside scope. A missing Loom binary is an error when Loom validation is requested. Use --fail-on-warn for a strict release gate.
For the deployed policy, run the exposure reconciler without --apply first:
bashpython3 scripts/ecosystem_reconcile.py \ --registry ~/.loom-registry \ --policy ~/.loom-registry/SKILL_GOVERNANCE_POLICY.json
The dry-run reports trigger hardening, global/project/profile/review exposure, catalog budgets, plugin-state changes, and stale registry state. Run the same command with --apply only during an explicitly authorized repair run. Plugin configuration receives a timestamped backup before its exact boolean values are changed. Re-run the dry-run afterward and require an empty plan.
If the policy declares exact progressive-disclosure splits, inspect them with:
bashpython3 scripts/ecosystem_split.py \ --registry ~/.loom-registry \ --policy ~/.loom-registry/SKILL_GOVERNANCE_POLICY.json
Use --apply only after reviewing the extracted headings and destinations.
The audit checks:
SKILL.mdWhen the request concerns Skills that stopped triggering, aged out, or depend on possibly dead external projects, also read lifecycle drift. Treat missing maintenance metadata as unknown evidence, not proof that a Skill is unhealthy.
Treat test-fixture secret patterns as visible warnings, not silent allowlists.
Order repairs by security, logic, data integrity, source lineage, and naming. Separate facts from decisions:
correct.
is safe.
rotation occurred.
upstream source is committed or remotely backed up.
Read the remediation playbook before planning mutations.
For every proposed action, record:
Use disjoint file ownership for any parallel work. Do not let two agents edit a shared registry, lockfile, manifest, or high-context file.
Safe direct actions are read-only inspection, report generation, local tests, and drafting a plan. During an authorized repair run:
sources without creating compatibility aliases
Keep usage evidence read-only. When classification depends on local invocation history, run skill-usage-stats or its governance matrix report, then return here for exposure changes.
Never print secrets, overwrite unknown user content, use force push, rewrite history, or claim external credential rotation without direct evidence.
Run verification from the current session:
ecosystem_doctor.py and require zero errors.ecosystem_reconcile.py without --apply and require no planned changes.reach a clean count.
its declared count/description budget without truncation warnings.
gemini/cursor named in projection_runtimes or managed_global_sources[].runtimes — resolves the intended source or exact pin. Check each runtime's Skill home: Codex uses ~/.agents/skills while Codex configuration remains under ~/.codex. When projection_runtimes is explicitly empty, verify every declared managed_projection inventory root instead and require a zero-link reconciliation plan.
reinstall does not restore them.
git diff --check in every changed Git worktree.Use the eval cases when forward-testing trigger boundaries, read-only behavior, secret redaction, retirement, or dirty-worktree handling.
If commit, push, PR, merge, or landing is requested, prepare a review pack. Use review-gate when installed; otherwise present the same evidence and wait for explicit approval unless the current request grants that exact action.
contracts, tests, and ownership first.
only repeatedly stable, deterministic, read-only checks to scheduling.
Patch this Skill when the validator no longer understands an installed layout, the same false positive recurs, a runtime changes projection semantics, or users repeat the same safety correction.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-06 | fail→pass | 15,275 | 7,838 | -49% | 1 | 1 | 0% | 2,293 | 3,866 | +69% | 0 | 0 | — |
case-01 | fail→fail | 7,630 | 7,197 | -6% | 1 | 1 | 0% | 590 | 3,012 | +411% | 0 | 0 | — |
case-02 | fail→fail | 16,906 | 9,479 | -44% | 1 | 1 | 0% | 3,133 | 3,324 | +6% | 0 | 0 | — |
case-03 | fail→fail | 12,223 | 7,280 | -40% | 1 | 1 | 0% | 2,015 | 2,991 | +48% | 0 | 0 | — |
case-04 | pass→pass | 11,521 | 14,273 | +24% | 1 | 1 | 0% | 1,938 | 4,295 | +122% | 0 | 0 | — |
case-05 | fail→fail | 7,093 | 12,821 | +81% | 1 | 1 | 0% | 1,232 | 3,234 | +163% | 0 | 0 | — |
case-07 | fail→pass | 9,126 | 7,614 | -17% | 1 | 1 | 0% | 1,540 | 4,043 | +163% | 0 | 0 | — |
case-08 | pass→pass | 9,609 | 9,217 | -4% | 1 | 1 | 0% | 1,564 | 3,544 | +127% | 0 | 0 | — |
case-09 | fail→pass | 9,829 | 5,139 | -48% | 1 | 1 | 0% | 662 | 3,485 | +426% | 0 | 0 | — |
case-10 | fail→pass | 12,302 | 10,987 | -11% | 1 | 1 | 0% | 2,002 | 4,461 | +123% | 0 | 0 | — |
case-11 | fail→pass | 12,331 | 8,494 | -31% | 1 | 1 | 0% | 1,972 | 3,969 | +101% | 0 | 0 | — |
case-22 | fail→pass | 8,806 | 3,613 | -59% | 1 | 1 | 0% | 1,230 | 3,182 | +159% | 0 | 0 | — |
case-12 | pass→pass | 10,058 | 5,460 | -46% | 1 | 1 | 0% | 1,499 | 3,402 | +127% | 0 | 0 | — |
case-13 | fail→pass | 12,594 | 6,457 | -49% | 1 | 1 | 0% | 2,325 | 3,658 | +57% | 0 | 0 | — |
case-14 | fail→pass | 21,300 | 3,212 | -85% | 1 | 1 | 0% | 3,275 | 3,176 | -3% | 0 | 0 | — |
case-15 | pass→pass | 17,612 | 2,287 | -87% | 1 | 1 | 0% | 3,142 | 2,925 | -7% | 0 | 0 | — |
case-16 | fail→pass | 15,792 | 2,200 | -86% | 1 | 1 | 0% | 2,481 | 2,898 | +17% | 0 | 0 | — |
case-17 | fail→pass | 13,704 | 8,322 | -39% | 1 | 1 | 0% | 2,150 | 3,958 | +84% | 0 | 0 | — |
case-18 | pass→pass | 11,540 | 8,819 | -24% | 1 | 1 | 0% | 1,737 | 3,992 | +130% | 0 | 0 | — |
case-19 | pass→fail | 6,783 | 2,173 | -68% | 1 | 1 | 0% | 1,172 | 2,866 | +145% | 0 | 0 | — |
case-20 | fail→pass | 16,044 | 8,654 | -46% | 1 | 1 | 0% | 2,474 | 4,052 | +64% | 0 | 0 | — |
case-21 | pass→pass | 8,839 | 4,488 | -49% | 1 | 1 | 0% | 1,439 | 3,271 | +127% | 0 | 0 | — |
case-23 | fail→pass | 10,397 | 7,336 | -29% | 1 | 1 | 0% | 1,527 | 3,698 | +142% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 19 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +48 percentage points is the difference between those two pass rates over the 19 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/24/2026 | +52% |
Other measured skills in the registry, with their headline benchmark lift.