How this skill is triggered — by the user, by Claude, or both
Slash command
/tool-time:tool-timeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are analyzing tool usage data to find problems and offer to fix them — not narrate numbers.
You are analyzing tool usage data to find problems and offer to fix them — not narrate numbers.
If the user's request matches "rig", "rig audit", "what should I disable", or asks about unused servers/plugins, run this mode instead of the standard flow below.
python3 $CLAUDE_PLUGIN_ROOT/rig.py~/.claude/tool-time/rig.json (sections: servers, duplicates, zero_use, plugins, meta). The script collects data only — you decide what earns its keep.servers is keyed by source-qualified identity: plugin:<plugin>/<name> for plugin servers, the bare name for global/project servers. Same-named servers from different sources are separate entries with separate counts — never merged. Each entry carries name (the unqualified server name) and aliases (raw event prefixes like plugin_interknow_qmd, for relating events to registrations). commands are credential-redacted (secret flag values, high-entropy tokens, and URL query strings/userinfo appear as <redacted> or are stripped).
Present, in this order:
zero_use, qualified identities): for each, show its sources, last_used, and RAM cost (proc_count processes, rss_mb MB). A server with 0 calls in 30 days but nonzero rss_mb is paying rent for nothing.duplicates): registrations that MAY be the same server, with a reason field. command_match means the identical launch command is registered twice — a firm duplicate. name_match (e.g., a global qmd AND a plugin's qmd) is only a hypothesis: same name does not prove same server, and their call counts are kept separate — compare the command of each registration before recommending a removal. When it is genuinely the same server, recommend keeping one — usually the plugin registration if the plugin is otherwise used.plugins): plugins with mcp_calls_30d == 0 AND skill_calls_30d == 0. mcp_calls_30d counts only calls to that plugin's own qualified servers. Note skills_shipped — a plugin shipping skills may be used via skills even without MCP calls.For each recommendation, give the exact removal command and estimated RAM savings (rss_mb):
claude mcp remove <name>project:<path>): claude mcp remove <name> run from that project directoryenabledPlugins in ~/.claude/settings.json, setting "<plugin>@<marketplace>": falseRequire explicit user confirmation before editing any config file. Present the full list of proposed removals first, and only apply the ones the user approves.
Caveats to state:
~/.claude/plugins/cache/*/<plugin>/*/hooks/hooks.json or a hooks key in its plugin.json) before recommending removal — if you can't determine this, say so and tell the user to check.grep -l 'mcp__<server>' ~/.claude/projects/*/*.jsonl | head — if transcripts show calls that events.jsonl missed, say so and keep the server.skill_calls_30d is best-effort substring matching (historical events sometimes carry file paths in the skill field), so treat it as a signal, not a count.meta.warnings and mention any inputs that couldn't be read.Run both analysis scripts, then read the outputs:
python3 $CLAUDE_PLUGIN_ROOT/summarize.py
python3 $CLAUDE_PLUGIN_ROOT/analyze.py --timezone America/Los_Angeles
Then read both files:
~/.claude/tool-time/stats.json (7-day project-scoped stats)~/.claude/tool-time/analysis.json (90-day deep analytics)After reading, run python3 $CLAUDE_PLUGIN_ROOT/upload.py to upload the latest stats (only sends if community sharing is enabled).
If cass is available, gather cross-agent analytics for a broader perspective:
if command -v cass > /dev/null 2>&1; then
cass analytics tools --days 7 --json 2>/dev/null > ~/.claude/tool-time/cass-tools.json || true
cass analytics models --days 7 --json 2>/dev/null > ~/.claude/tool-time/cass-models.json || true
fi
If cass data files exist, read them and include in your analysis:
This is supplementary — skip if cass is not installed or data is empty.
Check analysis.json field event_count:
If the user's trigger matches "dashboard", "show charts", or "visual":
bash $CLAUDE_PLUGIN_ROOT/local-dashboard/serve.shPresent findings in this priority order. Skip any section that has no actionable findings — never pad with filler.
From analysis.json → tool_chains.retry_patterns:
From analysis.json → tool_chains.bigrams:
Read → Bash (if Bash is doing cat/grep/find → should use Read/Grep/Glob)Edit → Edit same file (repeated failures → improve context in CLAUDE.md)From analysis.json → sessions.classifications:
From analysis.json → by_source:
From analysis.json → time_patterns:
most_error_prone_hour is >2x the average → "Error rate spikes 3x at 11pm — you may be tired"From analysis.json → trends:
Also check stats.json for the standard signals (these apply in both modes):
Read the project's CLAUDE.md (if it exists):
Optionally check AGENTS.md for similar gaps.
Present findings as a short bulleted list. For each finding:
Then offer to apply fixes. Use Edit to update CLAUDE.md or AGENTS.md directly, with user approval. Don't just suggest — propose the exact text.
If the data looks healthy, say so briefly and stop. Don't invent problems.
Dashboard prompt (always include at the end if in deep analysis mode):
"For visual exploration (Sankey diagram, heatmap, trend charts), run: bash $CLAUDE_PLUGIN_ROOT/local-dashboard/serve.sh"
Check ~/.claude/tool-time/config.json — if community_sharing is true, also compare local stats to community baselines:
https://tool-time-api.mistakeknot.workers.dev/v1/api/statsAfter analysis, suggest relevant skills from the playbooks.com directory:
Detect the project's primary language by checking for:
package.json or tsconfig.json → TypeScript/JavaScriptpyproject.toml, setup.py, or requirements.txt → PythonGemfile or *.gemspec → Rubygo.mod → GoCargo.toml → Rust*.swift or Package.swift → SwiftBuild 1-2 search queries combining the language with patterns from the data:
Fetch from the API:
https://playbooks.com/api/skills?search=<query>&limit=5
Filter results to only show skills that are relevant to the project (use judgment — skip generic or unrelated results).
Present as a short list:
playbooks.com/skills/<repoOwner>/<repoName>/<skillSlug>If no relevant skills are found, skip this section entirely. Don't force recommendations.
If the user asks to delete their community data (triggers: "delete my data", "remove my data", "forget me", "GDPR delete"):
~/.claude/tool-time/config.json to get the submission_tokencurl -s -X POST "https://tool-time-api.mistakeknot.workers.dev/v1/api/user/delete" -H "Content-Type: application/json" -d '{"submission_token": "<token>"}'community_sharing to false in config.json to stop future uploadsnpx claudepluginhub mistakeknot/interagency-marketplace --plugin tool-timeCreates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.