Skillreaper measures how much of an AI agent's always-loaded context is actually used. It probes the config directories of the agent platforms installed on your machine, inventories the skills, MCP servers, subagents, hooks, and always-loaded prose files they load, parses local session transcripts to count what fires, and reports the token weight of everything that never does.
The surface runs in three stages. reap prints a read-only report in which every item carries a verdict — REAP for zero uses, REAP(broken) for an item that was invoked but errored, MUTE for a heavy, rarely used description, KEEP, or REVIEW when there are too few sessions or the evidence was incomplete. reap why shows the full case behind one verdict: token weight, session count, uses, last-seen date, and whether the item is on the keep list. reap prune then quarantines confirmed items into a reaped/ directory with a versioned manifest, and prints reap restore --all as its undo line.
Other views work on the same evidence. reap gap reports loaded-versus-fired utilization per category and flags MCP tools that fire often but return mostly boilerplate as noisy; reap by-project buckets fired skills by the repository that fired them and marks single-project skills as repo-local; reap route proposes a lazy-load router plan for large skill libraries; reap apm emits a proposed APM apm.yml; and reap snapshot plus reap diff compare two runs, leading with any item that returned after being pruned. reap install-hook adds a SessionStart hook that prints a single stderr line when the flagged count has grown in the last seven days.
Everything runs on the local machine with no network calls, and writes are atomic and confined to the agent's own directory. Token weight is an estimate of ceil(chars / 3.7), so the ranking between items is firmer than the absolute counts.
Features
- Transcript-based evidence: verdicts come from counted tool_use blocks and command invocations in local session transcripts, not from heuristics
- Reversible pruning: reap prune moves files into a reaped/ directory with a manifest; nothing is deleted and reap restore --all undoes it
- Mute instead of remove: reap mute strips a heavy description and keeps a backup, leaving the skill callable
- Utilization view: reap gap breaks loaded, fired, and token counts down per category and marks noisy MCP tools
- Per-project attribution: reap by-project separates repo-local skills from globally unused ones
- Routing plan: reap route proposes a category-router organization from firing evidence for libraries too large to prune flat
- APM manifest: reap apm emits a proposed apm.yml, and --diff reconciles fired-but-undeclared against declared-but-cold entries
- Snapshots and diffs: saved runs can be compared, with items that returned after a prune reported from the prune manifest
- Weekly nudge: an optional SessionStart hook reports growth in the flagged count once every seven days
- Platform coverage: full support for Claude Code, Codex CLI, Hermes, and OpenCode; Cursor, OpenClaw, and Gemini CLI are inventory-only
- Local execution: no telemetry, no uploads, and read-only commands that touch nothing outside skillreaper's own state
- Output formats: text, --json, and --md for the report, gap, route, APM, and diff views
Integrates with
Claude Code
Terminal-based agentic coding tool that reads your codebase and runs tasks through natural-language commands
Codex
Lightweight coding agent that runs in your terminal
Hermes
Self-improving AI agent with a learning loop that creates and refines skills, recalls past sessions, and runs across chat platforms
OpenClaw
Self-hosted single-operator assistant runtime that links models, tools, and messaging channels through one local Gateway
