skillreaper
thousandflowers · thousandflowers/skillreaper
Công cụ CLI này giúp các tác nhân AI giảm gánh nặng ngữ cảnh bằng cách xác định và loại bỏ an toàn các kỹ năng, máy chủ MCP và tác nhân phụ không được sử dụng.
Cut context bloat in your AI-agent stack: find and safely prune unused skills, MCP servers and subagents from real transcript evidence
Xem kết quả thực tế
Ảnh từ README của tác giả thousandflowers ·Nguồn
Bạn có thể làm gì với nó
- Xác định những kỹ năng tác nhân đã cài đặt nào chưa bao giờ được sử dụng thực sự.
- Cắt bỏ an toàn các kỹ năng và máy chủ MCP không cần thiết để tối ưu hóa việc sử dụng cửa sổ ngữ cảnh.
- Phân tích các mẫu sử dụng tác nhân để hiểu hiệu quả của các công cụ khác nhau.
Kiểm tra an toàn
Không thấy dấu hiệu rủi ro trong các file đã quét.
Quét tự động các file trong repo. Luôn xem lại code trước khi chạy.
Trích từ 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:
| Stage | Command | What it answers |
|---|---|---|
| Measure | reap | What do I load, what actually fires, what does the dead part cost per session? |
reap gap | What share of each category is ever used, and which MCP tools fire but return noise? | |
reap by-project | Which project is actually firing each skill? | |
| Decide | reap why <name> | Why did this item get this verdict, on what evidence? |
| Act | reap prune | Quarantine the dead items, reversibly |
reap mute <name> | Strip a heavy rarely-used description, keep the skill callable | |
| Engineer | reap route | Propose a lazy-load routing plan for a library too big to prune flat |
reap apm | Emit a proposed APM apm.yml, so a team reproduces one lean set | |
| Compare | reap snapshot | Keep this run, so a later one has something to be measured against |
reap diff | What 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 nothing | Writes, always reversible |
|---|---|
reap 1 | reap prune ↔ reap restore --all |
reap gap | reap mute <name> ↔ reap unmute <name> |
reap by-project | reap 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:
| Label | Meaning |
|---|---|
REAP(broken) | Invoked but errored - broken, not just cold |
REAP | Zero uses - safe to quarantine |
MUTE | Used rarely + heavy - description stripped, skill stays available |
KEEP | Used, tin |
