Skill Monitor
English | 中文
An Agent Skill for tracking which local skills you actually use — call counts, unused skills, rough SKILL.md token estimates, Rules / AGENTS.md context bloat, Task / sub-agent startup cost, and frequency reports stored in the project.
Agents load many skills. Few teams know which ones matter. Without a ledger, “we have 80 skills” becomes guesswork: keep everything, trust vibes, never prune.
Skill Monitor gives the agent a small, local pipeline: record → backfill → analyze. It discovers skills on disk, counts loads (best-effort), and prints a Markdown frequency table including 0-use skills.
Compatible with the Agent Skills open standard (Cursor, Claude Code, Codex, and others).
Want more people to find it? See docs/GROWTH.md (skills.sh ranks by installs).
Preview
Frequency overview — loads, estimated skill tokens, used vs discovered, Task / sub-agent starts:

Ranked by calls with estimated token cost and share:

Pipeline depth, token-heavy loads, sub-agent starts, and inventory health:

Install
npx skills@latest add wei63w/skill-monitor
Or copy skills/skill-monitor into your tool’s skills directory:
| Tool | Path |
|---|---|
| Cursor | ~/.cursor/skills/skill-monitor/ |
| Claude Code | ~/.claude/skills/skill-monitor/ |
| Codex | ~/.agents/skills/skill-monitor/ |
git clone https://github.com/wei63w/skill-monitor.git
cp -r skill-monitor/skills/skill-monitor ~/.cursor/skills/skill-monitor
Requires Node.js 18+ on PATH for the bundled CLI.
Why use it?
Skill libraries grow quietly. This skill measures skill tax — how often skills load, and roughly how heavy each load is.
Without usage data, high-value skills and dead weight look the same. Late-install into an existing project, optionally backfill from Cursor transcripts, then enable a Cursor hook so new SKILL.md reads are counted.
It’s a shortcut to a usage report you can act on — prune, promote, or document — not another unread folder of skills.
Value & selling points
For individuals and teams
- Prune with evidence — 0-call or high-size / low-call skills are candidates to delete, merge, or split for progressive disclosure.
- Install budgets — Cap default skill packs by estimated load tokens so new projects don’t start already overweight.
- Quality signal — High usage but still failing tasks points at rewriting the skill, not adding another one.
For skill authors and maintainers
- Size KPI — Treat
File size/ avg tokens per load as an inflation alarm for bloatedSKILL.mddocs. - Adoption funnel — Contrast installs vs real load counts (retention for open-source skills).
- Before / after — Compare avg load cost and call volume across skill versions.
For engineering and platforms
- Context cost attribution — Coarse bucket: how much of “expensive chats” may come from skill bodies vs code vs tool output.
- Routing policy — Keep expensive skills on explicit match; leave cheap descriptions ambient.
- CI budget gate — Fail PRs that grow
SKILL.mdestimated tokens past a threshold (like a bundle-size budget). - Multi-agent compare — Same repo, different tools: who loads the heavy skills more?
For product and governance
- Internal skill catalog narrative — Use calls × est. tokens as a management language for Agent cost (not a invoice).
- Audit trail — Which sensitive-domain skills (security, finance, …) were read, and when.
Adjacent ideas (same ledger pattern)
Beyond skills, this package already includes Rules / AGENTS.md bloat (bloat) and Task / sub-agent startup cost (analyze-tasks). The same local event log can grow into MCP/tool call ledgers.
What it’s not
Strong for relative comparison and governance. Weak as a billing meter. The win is courage to delete skills, set budgets, and block ever-growing manuals in CI — not another vanity leaderboard.
Limits (read this)
There is no universal onSkillUsed API across tools. Capture is best-effort:
| Path | What it catches |
|---|---|
Cursor beforeReadFile hook |
Reads of **/SKILL.md |
backfill |
Mentions of skill paths in Cursor agent-transcripts |
record |
Manual / agent-invoked logging |
Skills injected without reading SKILL.md are invisible. Codex/Claude auto-capture is weaker than Cursor’s hook.
Reference
- skill-monitor — Setup, backfill, and frequency analysis via the bundled CLI.
CLI
From a project that has the skill installed (or after copying it under .cursor/skills/skill-monitor/):
node ~/.cursor/skills/skill-monitor/scripts/cli.mjs setup --project . --hooks
node ~/.cursor/skills/skill-monitor/scripts/cli.mjs backfill
node ~/.cursor/skills/skill-monitor/scripts/cli.mjs backfill-tasks
node ~/.cursor/skills/skill-monitor/scripts/cli.mjs analyze --project . --write
node ~/.cursor/skills/skill-monitor/scripts/cli.mjs bloat --project . --snapshot --write
node ~/.cursor/skills/skill-monitor/scripts/cli.mjs analyze-tasks --project . --write
| Command | Purpose |
|---|---|
setup [--hooks] |
Init data/; merge skill-read + subagent hooks |
record --path <SKILL.md> |
Record one skill use |
backfill |
Idempotent scan of Cursor transcripts (skills) |
backfill-tasks |
Idempotent scan for Task / subagent starts |
list-skills |
Enumerate project + user + builtin skills |
analyze [--write] |
Skill frequency + est. tokens |
bloat [--snapshot] [--write] |
Rules / AGENTS.md sizes, budgets, optional history |
record-task --type <name> |
Record one sub-agent start |
analyze-tasks [--write] |
Startup cost proxy: starts × avg system-prompt volume |
reestimate |
Refresh skill token estimates on existing events |
summary |
Print data/summary.json |
Data lives under the skill’s data/ directory (events.jsonl, tasks.jsonl, context-snapshots.jsonl, reports).
Skill tokens use a simple heuristic (CJK ≈ 1 token/char, other ≈ chars/4) on each recorded SKILL.md load.
Context bloat measures always-on files (AGENTS.md, .cursor/rules/**, CLAUDE.md, …) with soft budgets (per-file / total / agents / rules).
Sub-agent cost ≈ Task/subagent start count × average Rules+AGENTS volume at start — for comparing orchestration tax, not provider billing.
How it works
- Discover skills under project and common global skill roots.
- Record events when a
SKILL.mdis read (hook), backfilled, or logged manually. - Aggregate counts and unique sessions into
summary.json. - Analyze joins discovery with counts so unused skills show as
0.
Examples
> Set up skill-monitor in this project with hooks
> skill-monitor 回填历史并做频率分析
> Which skills are never used?
> Check AGENTS.md / rules bloat with skill-monitor
> skill-monitor 看子 Agent / Task 启动成本
> Analyze local skill usage with skill-monitor
License
MIT — see LICENSE
No comments yet
Be the first to share your take.