Skip to main content

A doctor for your Claude Code agent skills: find the SKILL.md files Claude silently can't see (over the discovery budget), plus naming, routing and hygiene problems — deterministically, across every installed skill.

Project description

claude-skills-doctor

A doctor for your Claude Code agent skills — find the ones Claude silently can't see, before they cost you a session.

Install claude-skills-doctor, run skilldoctor.

You install a skill, it looks perfect, and Claude never uses it. No error, no warning. As of Claude Code 2.0.70 the combined skill + slash-command descriptions injected into the system prompt live under a 15,000-character budget (~4,000 tokens, set by SLASH_COMMAND_TOOL_CHAR_BUDGET). Go over and Claude Code just stops listing some skills — and Claude is told not to use skills it wasn't told about. The failure is invisible from the inside. skilldoctor makes it visible.

$ skilldoctor
Discovery budget
████████████████████████████░░░░  13,120 / 15,000 chars (87%)

 severity   check                  target            detail
 error      name-folder-mismatch   pdf-tools         `name: pdf` must match the folder name `pdf-tools`
 error      frontmatter-invalid    my-skill          invalid YAML in frontmatter: mapping values are not allowed here
 warn       description-collision  review-code       description ~72% overlaps `code-review` — they may compete to trigger
 warn       budget-near            budget            skills + commands use ~13,120/15,000 discovery chars (87%) — nearing the silent-truncation cliff.

28 skill(s) · 6 command(s) · 2 error(s) · 2 warning(s)

Install

uvx claude-skills-doctor            # run without installing
pip install claude-skills-doctor    # or install it

Then run skilldoctor (the command claude-skills-doctor works too).

Use

skilldoctor                 # health-check every skill Claude Code can see; exits non-zero on errors
skilldoctor --fix           # show a concrete suggested fix for each finding
skilldoctor --json          # machine-readable, for CI
skilldoctor --strict        # fail on warnings too
skilldoctor budget          # the shareable view: the bar + the biggest contributors to trim

It scans everywhere Claude Code loads from — your user skills (~/.claude/skills), the project's (.claude/skills), and installed plugins — plus slash-commands, which share the same budget.

What it checks

All deterministic. No model calls, no network, no guessing — it reads your files and reports.

  • Discovery budget — the headline. Total skill + command description characters vs the 15,000 limit (honours SLASH_COMMAND_TOOL_CHAR_BUDGET). Over budget → some skills are silently unlisted.
  • Won't load — invalid YAML frontmatter (which silently prevents loading), missing name/description, and name that doesn't match its folder (required, and the one Anthropic's own validator misses).
  • Won't route — descriptions too thin to trigger, and descriptions written as a step-by-step how-to (which makes Claude follow the summary and skip loading the body).
  • Collisions — two skills with the same name, or near-identical descriptions that compete to trigger.
  • Contract & hygieneallowed-tools that doesn't cover the tools the body actually uses, </> in descriptions (prompt-injection risk), oversized bodies that belong in references/, reference chains more than one level deep, absolute paths, and human-facing docs (README/CHANGELOG) left inside a skill folder.
  • Security — scans every skill (third-party plugins included) for hidden-instruction phrases (instruction-override / hide-from-user / prompt-extraction) in the SKILL.md and its references, and script-network-calls inside scripts/. Because "I installed a skill — is it safe?" is a real question, and a documentation-context filter keeps skills that teach prompt-injection safety from tripping it.

Errors make it exit non-zero, so it gates a pipeline: skilldoctor && claude .... Add --fix to see a concrete suggested fix under each finding.

How it's different from a skill linter

There are per-file SKILL.md linters and validators (and Anthropic's skill-creator model-evaluates one skill you're authoring). claude-skills-doctor is the complement: a whole-system, install-time health check across every skill you actually have — and the only one that measures the cross-skill failures a single-file linter structurally can't see: the shared discovery budget, duplicate names, and colliding descriptions. A linter checks a file; a doctor examines the whole patient.

Honest about the numbers

The budget is measured as each skill/command's name + description characters. That's an estimate — the real budget adds minor per-entry formatting — so treat it as close, and on the safe side, not byte-exact. It lints your own skills fully; third-party plugin skills count toward the budget but are checked only for load-breakers, so it never nags about skills you can't fix. Every finding points at a file and a reason; nothing is invented.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

claude_skills_doctor-0.2.0.tar.gz (59.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

claude_skills_doctor-0.2.0-py3-none-any.whl (22.2 kB view details)

Uploaded Python 3

File details

Details for the file claude_skills_doctor-0.2.0.tar.gz.

File metadata

  • Download URL: claude_skills_doctor-0.2.0.tar.gz
  • Upload date:
  • Size: 59.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for claude_skills_doctor-0.2.0.tar.gz
Algorithm Hash digest
SHA256 7d762aa2f045be8401efa65e8f902f1f3eed5f693c74c83acde379f6daa44bb0
MD5 9af904a62060ad04dcef6ea11aad5efa
BLAKE2b-256 5de9c2f18a6ec6354a0c7845213f4de735f9873f3a6d2308589be63678c1772d

See more details on using hashes here.

Provenance

The following attestation bundles were made for claude_skills_doctor-0.2.0.tar.gz:

Publisher: release.yml on gulmezeren2-byte/claude-skills-doctor

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file claude_skills_doctor-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for claude_skills_doctor-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4406e9afb81c558e458067436e0237e765f58c02b75b4e370ebff104b2142ba5
MD5 fb4861f28c9822a5a25e24d058bfed7b
BLAKE2b-256 9bce474cdd02ce8a337a95ca9250afa21fcaa9369bc5ca40b75bc4ca79765401

See more details on using hashes here.

Provenance

The following attestation bundles were made for claude_skills_doctor-0.2.0-py3-none-any.whl:

Publisher: release.yml on gulmezeren2-byte/claude-skills-doctor

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page