Airsc is free for everyone. If it helps you, support it with $2–$20.

Support
PluginSafeAgent workflow & memorySome setup

skillreaper

thousandflowers · thousandflowers/skillreaper

This CLI tool helps AI agents reduce context bloat by identifying and safely pruning unused skills, MCP servers, and subagents.

Cut context bloat in your AI-agent stack: find and safely prune unused skills, MCP servers and subagents from real transcript evidence

59 stars7License: MITUpdated 2 months ago0 opens

See it in action

Terminal output showing skill usage analysis and keep/review judgments

From the author's READMETerminal output showing skill usage analysis and keep/review judgments

From the author's README thousandflowers ·Source

What you can do with it

  • Identify which of your installed agent skills are never actually used.
  • Safely prune unnecessary skills and MCP servers to optimize context window usage.
  • Analyze agent usage patterns to understand the effectiveness of different tools.

Safety check

Safe

No risky patterns found in the files we scanned.

Automated scan of the repo files. Always review code you run.

From the README

S           K           I          L          L
######  #######   ###   ######  ####### ###### 
##   ## ##       ## ##  ##   ## ##      ##   ##
######  #####   ####### ######  #####   ###### 
##  ##  ##      ##   ## ##      ##      ##  ## 
##   ## ####### ##   ## ##      ####### ##   ##

a generated sample stack, not a real install - run reap for your own numbers

skillreaper · last 30d · 34 sessions
7/378 items fired · 1% utilization
371 never fired · 371 marked REAP · ~22720 dead tokens/session

TOKENS  CATEGORY  NAME                 VERDICT  REASON
185     skill     import-timesheet     REAP     unused
185     skill     render-playlist      REAP     unused
177     skill     review-sitemap       REAP     unused
163     skill     deploy-dataset       REAP     unused
159     skill     validate-manifest    REAP     unused
157     skill     parse-contract       REAP     unused
149     skill     extract-receipt      REAP     unused
145     skill     sync-changelog       REAP     unused
111     skill     summarise-timesheet  REAP     unused
110     skill     export-timesheet     REAP     unused
(361 more marked REAP not shown — use --json for all)

To prune: reap prune   (interactive, reversible via reap restore --all)

1 warning — some evidence was incomplete; those items were held back from a REAP verdict.

measured by skillreaper · github.com/thousandflowers/skillreaper

Real reap --agent output, run against a generated sample stack (hero-fixture.sh) - not anyone's install. The numbers further down are measured on mine.

Most of what your AI agent loads, it never uses.

skillreaper finds the unused skills, MCP servers, subagents, hooks and always-loaded prose quietly filling your context window - proven from your own session transcripts - and prunes them reversibly. Runs locally against transcripts you already have. Nothing is ever uploaded.

npx skillreaper

On my own installation, measured 2026-08-23: 382 items loaded, 13 ever fired - 3% utilization. That's ~19,755 dead tokens re-sent in every single session, ~1087k a month of pure token waste, paid for on every request before you type anything.

Measured 2026-08-23 on my own installation; raw output in docs/measurements/. Every "on my own installation" figure on this page comes from that one run.

One command. Zero config. It reads your real session transcripts, finds every skill / MCP / agent your AI loads but never fires, and shows you exactly what it costs you.

What it does

skillreaper is a measuring instrument for your agent's context window. Pruning is one of the things you do with the measurement, not the point of it. The whole surface, in the order you use it:

StageCommandWhat it answers
MeasurereapWhat do I load, what actually fires, what does the dead part cost per session?
reap gapWhat share of each category is ever used, and which MCP tools fire but return noise?
reap by-projectWhich project is actually firing each skill?
Decidereap why <name>Why did this item get this verdict, on what evidence?
Actreap pruneQuarantine the dead items, reversibly
reap mute <name>Strip a heavy rarely-used description, keep the skill callable
Engineerreap routePropose a lazy-load routing plan for a library too big to prune flat
reap apmEmit a proposed APM apm.yml, so a team reproduces one lean set
Comparereap snapshotKeep this run, so a later one has something to be measured against
reap diffWhat appeared, left, changed verdict, and did anything come back after a prune

Everything above the Act row is read-only. You can run the entire measurement side without changing a single file.

What it reads, what it writes

Read-only, changes nothingWrites, always reversible
reap 1reap prune  ↔  reap restore --all
reap gapreap mute <name>  ↔  reap unmute <name>
reap by-projectreap keep <name>  ↔  reap keep --remove <name>
reap why <name>reap install-hook  ↔  reap uninstall-hook
reap route
reap apm
reap manifest <name>
reap share
reap snapshot 1
reap diff

Nothing is ever deleted. reap prune moves files into a reaped/ directory with a versioned manifest, reap mute keeps a backup of the description it strips, and reap uninstall-hook removes only skillreaper's own entry, leaving your other hooks alone. Every write is atomic (temp file + rename) and confined to your Claude directory, so an interrupted prune, mute, or hook edit leaves the original file intact, never a half-written mix.

1 The only files a read-only command writes are skillreaper's own: ~/.claude/reaped/nudge-state.json, which the default report touches so a hint it already showed you does not repeat, and the snapshot reap snapshot exists to write. Neither touches your stack. Pass --no-nudge (or set SKILLREAPER_NO_NUDGE=1) and not even that happens. No command in either column sends anything over the network.

First 60 seconds

Three commands, in this order. Only the third one writes anything, and it prints its own undo line.

reap                       # 1. measure: what you load, what fires, what it costs
reap why <name>            # 2. decide: the evidence behind one verdict
reap prune                 # 3. act: quarantine the dead ones, interactive

1. reap prints the report at the top of this page. Every row carries a verdict:

LabelMeaning
REAP(broken)Invoked but errored - broken, not just cold
REAPZero uses - safe to quarantine
MUTEUsed rarely + heavy - description stripped, skill stays available
KEEPUsed, tin
View source on GitHub