From tool-usage-tracker
Report on Skill, Agent, and slash-command usage tracked by the tool-usage-tracker plugin. Use when the user asks for a usage report, "top skills", activity over a period (any duration — 1h, 1d, 7d, 30d, 2w, 3m, all), or wants to see which available tools they haven't used. Supports filtering by type (skill/agent/slash-cmd) and showing only the unused list.
How this skill is triggered — by the user, by Claude, or both
Slash command
/tool-usage-tracker:skill-usage-trackerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Aggregates the JSONL files written by the `tool-usage-tracker` plugin's hooks and prints a markdown report. By default, only the **used tools** table is shown. Pass `--unused` to add the unused-tools list, `--only-unused` to drop the used-tools table entirely, and `--type=<kind>` to filter both tables to a single kind.
Aggregates the JSONL files written by the tool-usage-tracker plugin's hooks and prints a markdown report. By default, only the used tools table is shown. Pass --unused to add the unused-tools list, --only-unused to drop the used-tools table entirely, and --type=<kind> to filter both tables to a single kind.
Run the bundled report script:
python3 "${CLAUDE_PLUGIN_ROOT}/bin/report.py" [period] [--unused | --only-unused] [--type=skill|agent|slash-cmd]
period| User says... | Pass... |
|---|---|
| "all-time", "everything", "ever" | all |
| "last 1 hour", "past hour" | 1h |
| "today", "last day", "last 24 hours" | 1d |
| "this week", "last 7 days" | 7d |
| "last 30 days", "this month" (default) | 30d |
| "last 2 weeks" | 2w |
| "last 3 months" | 3m |
| any other duration | `[h |
The script accepts any value matching all or ^\d+[hdwm]$. Default if no period is given: 30d.
--unused and --only-unused (opt-in)--unused — keeps the used-tools table, appends the unused-tools table.--only-unused — suppresses the used-tools table; prints only the unused list. Implies --unused.Pass these ONLY when the user explicitly asks about unused/untouched/never-invoked tools. Default reports do NOT include the unused list because it's long.
Trigger phrases that should add --unused (keep the used table):
Trigger phrases that should add --only-unused (drop the used table):
If the user just says "show me a usage report" or asks for top skills, leave both OFF.
--type=<kind> (filter)Apply this filter when the user mentions one specific kind: skill, agent, or slash-cmd. Filters BOTH tables (used + unused) to that kind only.
Trigger phrases:
--type=skill--type=agent--type=slash-cmdIf the user says "tools" or doesn't specify a kind, do NOT pass --type.
Pass the script's stdout through to the user as-is — it's already formatted markdown.
| User asks | Command |
|---|---|
| "show me a usage report" | report.py 30d |
| "what skills did I use this week?" | report.py 7d --type=skill |
| "what agents have I used this month?" | report.py 30d --type=agent |
| "skill usage in the last hour" | report.py 1h --type=skill |
| "top skills all-time" | report.py all --type=skill |
| "what skills haven't I tried in the last month?" | report.py 30d --unused --type=skill |
| "show unused skills" | report.py 30d --only-unused --type=skill |
| "show unused tools" | report.py 30d --only-unused |
| "list every skill I've never invoked" | report.py all --only-unused --type=skill |
| "full usage report for the week, including unused" | report.py 7d --unused |
Used tools — Type | Name | Count, grouped by Type in this order: agent, skill, slash-cmd. Within each Type, sorted by Count descending. Shown unless --only-unused is passed.
Unused tools — available but not invoked in — Type | Name | Description. Same Type grouping; alphabetical within each group. Descriptions truncated to a one-liner (first sentence, max 100 chars). Only shown when --unused or --only-unused is passed.
When --type=<kind> is passed, both tables are filtered to that kind only and the title gets a (<kind> only) suffix.
"Available" = present on disk in any of:
~/.claude/{skills,agents,commands}/~/.claude/plugins/cache/*/*/*/{skills,agents,commands}/<cwd>/.claude/{skills,agents,commands}/ (current project)Discovery uses the directory name (not the name: frontmatter), because some skills use a bare name (browse) while the harness exposes the directory-prefixed form (gstack-browse). Plugin-namespaced aliases (<plugin>:<name>) are also matched against the logs.
~/.claude/local-telemetry/tools/YYYY-MM.jsonl and are local to the user's machine.skill — Skill tool calls captured by PreToolUse (Claude invokes a skill mid-conversation).agent — subagent runs captured by SubagentStop after each subagent finishes. Covers both built-in subagent types (Explore, general-purpose, Plan...) and custom project-defined ones (.claude/agents/*.md). SubagentStop is more reliable than the PreToolUse hook on the Agent tool, which empirically misses custom subagents.slash-cmd — slash commands typed by the user (/lnb-review-pr, /plugin...) captured by UserPromptSubmit. Slash commands expand inline and don't go through the Skill tool.cwd, switching projects changes which project-local skills/agents/commands appear.Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub bcoulombel/claude-tool-usage-tracker --plugin tool-usage-tracker