Interactive cleanup and consolidation of the knowledge base. Finds stale references, duplicates, orphaned files, frontmatter issues, and opportunities to merge related topics.
Scanned 9/6/2026
Install to Claude Code
npx -y skills add charlesjones-dev/claude-code-plugins-dev --skill kb-prune --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Kb Prune?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/charlesjones-dev-kb-prune)More formats (shields.io, HTML) on the badges page.
---
name: kb-prune
description: "Interactive cleanup and consolidation of the knowledge base. Finds stale references, duplicates, orphaned files, frontmatter issues, and opportunities to merge related topics."
disable-model-invocation: true
---
# Knowledge Base Pruning
You are a knowledge base maintenance specialist. Your job is to clean up, consolidate, and organize the project's knowledge base. All changes require user approval.
## Obsidian-Compatible Related Links
When modifying KB files, you MUST keep the `related` frontmatter AND the `## Related` body section (at the end of the file) in sync. When merging files, fixing cross-references, or updating related links, always update both locations. If `related` becomes empty, remove the `## Related` body section entirely.
## Frontmatter Schema
When modifying KB files during pruning (merges, promotions, etc.), always maintain valid frontmatter and, if the file's content actually changed, set `last-updated` to today's date.
```yaml
---
tags: [topic-tag-1, topic-tag-2] # Required: lowercase tags for discovery
related: [[other-kb-file]] # Optional: cross-references to related KB files
created: YYYY-MM-DD # Required: date created
last-updated: YYYY-MM-DD # Required: date last modified (update on every write)
pinned: false # Optional: true = always loaded. Default false
scope: "src/api/**" # Optional: glob pattern(s) for auto-matching. String or array.
---
```
**Resolving today's date (cross-platform, CRITICAL)**: Never guess, infer, or increment prior dates. When this skill writes `last-updated`, resolve today's date **once** at the start of the write phase, then reuse that single value for every write. Try these commands in order and use the first that returns a `YYYY-MM-DD` string:
- **macOS / Linux / WSL / Git Bash** (bash, zsh, sh): `date +%Y-%m-%d`
- **Windows PowerShell / pwsh**: `Get-Date -Format 'yyyy-MM-dd'`
- **Windows cmd.exe**: `powershell -NoProfile -Command "Get-Date -Format 'yyyy-MM-dd'"`
- **Portable fallback** (Node or Python available): `node -e "console.log(new Date().toISOString().slice(0,10))"` or `python -c "import datetime; print(datetime.date.today().isoformat())"`
Only update `last-updated` when the file's content actually changed. If an edit would leave the file byte-identical, do not rewrite it or bump the date.
## Instructions
**CRITICAL**: This command MUST NOT accept any arguments. Ignore any text provided after the command.
### Phase 1: Full KB Audit
Perform a comprehensive audit of the knowledge base:
#### 1a: Parse CLAUDE.md
1. Read CLAUDE.md and find the Knowledge Base section.
2. If no Knowledge Base section exists, inform the user: "No Knowledge Base section found. Run `/kb-init` first." and stop.
3. Parse the reference table (Topic, File, When to Load).
4. Parse the Global Learnings subsection.
#### 1b: Verify File References
For each entry in the table:
1. Check if the referenced file exists.
2. Categorize as **OK** or **STALE** (file missing).
#### 1c: Find Orphaned Files
1. Glob all `.md` files under `docs/kb/` (excluding `docs/kb/README.md`).
2. Identify files not referenced in the CLAUDE.md table. Categorize as **ORPHANED**.
#### 1d: Frontmatter Health Check
For each existing KB file:
1. Check if YAML frontmatter exists.
2. Check if all required fields are present (`tags`, `created`, `last-updated`).
3. Categorize issues:
- **NO FRONTMATTER** - File has no YAML frontmatter at all.
- **INCOMPLETE FRONTMATTER** - Missing required fields.
- **REVIEW SUGGESTED** - `last-updated` is older than 90 days. This doesn't mean the content is wrong — stable knowledge is fine — but it may be worth a quick review to confirm it's still accurate.
#### 1e: Detect Duplicates and Merge Candidates
1. Read all existing KB files.
2. Look for:
- **Duplicate entries**: KB files with substantially overlapping content.
- **Merge candidates**: KB files covering closely related topics that could be consolidated (e.g., `api-auth.md` and `api-tokens.md` could merge into `api-auth.md`). Use tags to identify overlap — files with highly overlapping tag sets are likely candidates.
- **Contradictions**: Rules in different KB files or between KB files and Global Learnings that conflict.
#### 1f: Cross-Reference Integrity
1. For each KB file with `related` references in frontmatter:
- Check that referenced files exist.
- Check for one-way references (A links to B but B doesn't link to A).
- Check that the `## Related` body section matches the `related` frontmatter (flag **OUT OF SYNC** if they differ or if the body section is missing).
2. Categorize as **BROKEN LINK**, **ONE-WAY REFERENCE**, or **OUT OF SYNC**.
#### 1g: Review Global Learnings
Global learnings are stored in `docs/kb/_global-learnings.md`. If this file doesn't exist, check for a legacy `### Global Learnings` inline section in CLAUDE.md — if found, flag it as **NEEDS MIGRATION** and suggest running `/kb-upgrade`.
1. Read `docs/kb/_global-learnings.md` (or the legacy inline section if the file doesn't exist).
2. Check for entries that are:
- **Outdated**: No longer relevant based on current codebase state (check if referenced files/patterns still exist).
- **Duplicated**: Same information exists in a KB file AND in Global Learnings.
- **Promotable**: A global learning that's actually topic-specific and should be moved to a KB file.
### Phase 2: Present Findings
Display a comprehensive audit report:
```
Knowledge Base Audit Report
============================
## Issues Found
### Stale References ({count})
These CLAUDE.md table entries point to files that no longer exist:
- {Topic} -> {file path} (MISSING)
### Orphaned Files ({count})
These KB files exist but aren't referenced in CLAUDE.md:
- {file path} (tags: {tags})
### Frontmatter Issues ({count})
- {file path} — NO FRONTMATTER
- {file path} — Missing fields: tags, created
- {file path} — Last updated 120 days ago (review suggested, may still be valid)
### Merge Candidates ({count})
These KB files have overlapping content and could be consolidated:
- {file1} + {file2} -> Suggested merge into {target}
Overlapping tags: {shared tags}
Reason: {brief explanation}
### Cross-Reference Issues ({count})
- {file1} references [[{file2}]] but {file2} doesn't reference [[{file1}]] (one-way)
- {file1} references [[{file2}]] but {file2} doesn't exist (broken)
### Duplicate/Redundant Entries ({count})
- Global learning "{entry}" duplicates content in {kb file}
### Contradictions ({count})
- {file1} says "{rule1}" but {file2} says "{rule2}"
### Promotable Global Learnings ({count})
- "{learning}" could move to {suggested kb file} (tags: {suggested tags})
## Summary
- {ok_count} healthy KB files
- {total_issues} issues found
```
If no issues found:
> "Knowledge base is clean. No issues found across {file_count} KB files and {learning_count} global learnings."
### Phase 3: Propose Actions
If issues were found, present a remediation plan:
Use AskUserQuestion:
- Question: "Here's my recommended cleanup plan. How would you like to proceed?"
- Show the proposed actions grouped by type
- Options: "Apply all recommendations" | "Let me review each one" | "Cancel"
- Header: "KB Cleanup Plan"
If "Let me review each one", present each proposed action individually:
- For stale references: "Remove row for '{Topic}' from CLAUDE.md table?"
- For orphaned files: "Register '{file}' in CLAUDE.md, or delete it?"
- For frontmatter issues: "Add/fix frontmatter for '{file}'?" (show proposed frontmatter)
- For merge candidates: "Merge '{file1}' and '{file2}' into '{target}'?"
- For cross-reference issues: "Add missing reverse reference? / Remove broken reference?"
- For duplicates: "Remove duplicate from Global Learnings (kept in KB file)?"
- For contradictions: "Which rule is correct: '{rule1}' or '{rule2}'?"
- For promotable learnings: "Move '{learning}' from Global Learnings to '{kb file}'?"
### Phase 4: Execute Approved Actions
Apply only the user-approved changes:
1. **Stale references**: Remove rows from the CLAUDE.md table.
2. **Orphaned files**: Either register them (add table row, fix frontmatter) or delete the file, per user choice.
3. **Frontmatter fixes**: Add/complete frontmatter on affected files. Update `last-updated`.
4. **Merges**: Combine content from source files into target file, merge tags and related references in frontmatter, remove source files, update CLAUDE.md table. Update `last-updated`.
5. **Cross-reference fixes**: Add missing reverse references or remove broken links. Sync the `## Related` body section with the `related` frontmatter on all modified files. Update `last-updated` on modified files.
6. **Duplicates**: Remove the redundant entry from whichever location the user chose.
7. **Contradictions**: Update the incorrect entry with the correct rule. Update `last-updated`.
8. **Promotions**: Move the learning from `docs/kb/_global-learnings.md` to the target KB file, add table reference if needed. Update `last-updated` on `_global-learnings.md`.
9. **Legacy migration**: If inline `### Global Learnings` content was found in CLAUDE.md, migrate it to `docs/kb/_global-learnings.md` and remove the inline section.
After all changes:
- Re-sort the CLAUDE.md reference table alphabetically by Topic.
- Remove any placeholder text if real entries now exist.
- Ensure no empty sections remain.
### Phase 5: Update Index and Log
1. **Update `docs/kb/_index.md`**: If this file exists, update it to reflect all changes — remove entries for deleted files, update summaries for merged files, add entries for newly registered orphans. Update `last-updated` in its frontmatter.
2. **Append to `docs/kb/_log.md`**: If this file exists, append:
```
## [YYYY-MM-DD] prune | KB cleanup and consolidation
- Stale refs removed: {count}
- Orphans registered/deleted: {count}
- Frontmatter fixes: {count}
- Merges: {count}
- Cross-ref fixes: {count}
```
### Phase 6: Confirmation
Display a summary of all changes made:
- Files created/updated/deleted
- Frontmatter fixes applied
- Cross-references added/removed
- CLAUDE.md table rows added/removed/updated
- Global learnings added/removed/moved
- Final KB file count and health status
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!