From skills-janitor
Repairs broken skill frontmatter (missing delimiters, empty descriptions, missing version) and prunes broken symlinks, empty directories, and orphaned skill copies. Dry-run preview by default; apply with --apply or --prune.
How this skill is triggered — by the user, by Claude, or both
Slash command
/skills-janitor:janitor-fix [--apply] [--prune][--apply] [--prune]This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Automatically fix common skill issues. Dry-run by default — shows what would change without modifying files.
Automatically fix common skill issues. Dry-run by default — shows what would change without modifying files.
Repairs frontmatter problems (missing delimiters, empty descriptions, missing version fields) across user, project, and codex-scope skills, and — in --prune mode — removes broken symlinks and empty skill directories. Plugin/marketplace skills are never modified (changes would be overwritten on update).
scripts/fix.sh)~/.claude/skills, ./.claude/skills, ~/.agents/skills)bash ~/.claude/skills/skills-janitor/scripts/fix.sh # preview fixes
bash ~/.claude/skills/skills-janitor/scripts/fix.sh --prune # preview broken/orphaned removals
Never jump straight to --apply. Present the [DRY RUN] lines and ask before writing.
bash ~/.claude/skills/skills-janitor/scripts/fix.sh --apply # apply fixes
bash ~/.claude/skills/skills-janitor/scripts/fix.sh --prune --apply # remove broken skills
What it fixes:
---)description fields with a templateversion field (defaults to "1.0.0")Prune mode finds and removes:
Safety model: dry-run by default (must pass --apply to write), skips plugin/marketplace skills, logs ALL changes with timestamps to data/changelog.log, always asks for confirmation before removing.
Per-skill action lines ([DRY RUN] / [FIXED] / [PRUNED] / [SKIP]) followed by a summary of fixable issues, skipped items, and prunable entries. In dry-run mode the summary ends with "Run with --apply to make these changes."
Error: A fix produced an unexpected result in a SKILL.md
Solution: Every applied change is logged in data/changelog.log with a timestamp — show the log entry and restore the affected field manually; template descriptions are meant to be replaced by the author.
Error: [SKIP] Plugin/marketplace skill - don't modify
Solution: Expected behavior, not an error. Plugin content is fixed upstream — suggest the user report the issue to the plugin author instead.
Error: Prune lists a skill the user wants to keep
Solution: Do not run --apply. A "broken symlink" that should be kept means its target moved — recreate the link (ln -sfn <new-target> <link>) instead of pruning.
Input: "Fix my skills."
Output: Run the dry-run, present the [DRY RUN] list ("3 fixable: 2 missing descriptions, 1 missing version"), ask for confirmation, then run --apply and report the [FIXED] lines.
Input: "Remove broken skills."
Output: Run --prune (dry-run), show what would be removed and why (broken symlink targets, empty dirs), confirm, then --prune --apply and report the [PRUNED] lines.
{baseDir}/../../scripts/fix.shdata/changelog.log in the plugin directory/janitor-report/janitor-valuenpx claudepluginhub khendzel/skills-janitor --plugin skills-janitorCreates, repairs, maintains, and consolidates Claude Code skills. Diagnoses loading issues, fixes metadata/structure problems, detects duplicates, and handles merges/archiving.
Renames, reorganizes, and fixes agent skills within a skills repository. Handles folder/SKILL.md/cross-reference sync, fixes CLI 'No matching skills found' errors, and manages nested skill manifests.
Scans and reports health of all Claude Code skills across scopes, detecting duplicates, broken symlinks, missing frontmatter, and stale plugins. Use for skill inventory and maintenance.