janitor-value — Claude Code skill: what it does, how to install
Audits installed skills against actual session history to spot context waste. Ideal when checking which prompts overload your context window.
npx skills add khendzel/skills-janitor --skill janitor-value -a claude-codeWhat janitor-value does
janitor-value pairs token footprints with recent execution data from local session history. It separates permanently loaded prompt descriptions from on-demand body text. Heaviest idle tools surface at the top of the table.
Under the hood, it executes scripts/value.sh using local bash 3.2+. It needs no API keys. The script scans ~/.claude/skills, ~/.claude/agents, and session logs directly. Calculations default to 4 weeks across a 200000-token context budget, but you can adjust both flags.
The script fails immediately if the skills-janitor parent plugin directory is absent. When idle skills consume over 20% of the token allowance, cleaning them out prevents context bloat.
What it helps with
- identify installed skills that consume context tokens without being used
- split always-loaded description tokens from on-demand skill bodies
- measure skill token overhead against your total model budget
- export skill usage metrics to machine-readable JSON
Example prompts for the agent
- /janitor-value
- /janitor-value --weeks 12 --budget 500000
- Which installed skills are wasting the most context tokens?
How to install janitor-value
1Skills CLI (Vercel)
npx skills add khendzel/skills-janitor --skill janitor-value -a claude-code2Manually: put the files in place
~/.claude/skills/janitor-value/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/janitor-value/
1Skills CLI (Vercel)
npx skills add khendzel/skills-janitor --skill janitor-value -a codex2Manually: put the files in place
.agents/skills/janitor-value/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add khendzel/skills-janitor --skill janitor-value -a cursor2Manually: put the files in place
.cursor/skills/janitor-value/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install khendzel/skills-janitor janitor-value2Manually: put the files in place
.github/skills/janitor-value/SKILL.md1Skills CLI (Vercel)
npx skills add khendzel/skills-janitor --skill janitor-value -a gemini-cli2Platform CLI
gemini skills install https://github.com/khendzel/skills-janitor --path skills/janitor-valueManually: put the files in place
.devin/skills/janitor-value/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add khendzel/skills-janitor --skill janitor-value -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about janitor-value
How to install janitor-value in Claude Code?
Run npx skills add khendzel/skills-janitor --skill janitor-value -a claude-code. The skill installs into ~/.claude/skills/janitor-value/SKILL.md.
What does janitor-value measure?
It compares always-loaded description tokens against session execution logs. The resulting table highlights dormant tools that occupy space in the system prompt.
Does janitor-value require an external API key?
No API keys or external services are needed. The underlying bash script reads only local skill folders and session history files on your machine.
Source text
SKILL.md · MIT
--- name: janitor-value description: "Show whether each skill is earning its context-window cost — combined tokens-used view sorted by waste. Use when the user asks 'are my skills worth it', 'what's my context budget', 'which skills are dead weight', or wants to audit skill value, token cost, or usage. Trigger with '/janitor-value'." allowed-tools: Read, Bash(bash:*) argument-hint: "[--weeks N] [--budget N] [--json]" version: 1.7.0 author: Krzysztof Hendzel <[email protected]> license: MIT compatibility: Designed for Claude Code. Requires bash 3.2+ (macOS default works). Reads local Claude Code data only (~/.claude/skills, ~/.claude/agents, session history). tags: - skills - context-window - token-budget - usage-tracking - maintenance --- # Skill Value Report Show whether each installed skill is earning the context-window tokens it costs. ## Overview Combine token cost and usage tracking into a single view of every installed skill, sorted with the heaviest unused skills at the top. The report splits each skill's cost into what is permanently loaded (the description) and what only loads on demand (the body), then cross-references recent invocations so the user can see which skills are dead weight. Replaces the v1.2 split between `/janitor-tokens` (cost only) and `/janitor-usage` (usage only). ## Prerequisites - Claude Code with the skills-janitor plugin installed (provides `scripts/value.sh`) - bash 3.2+ (the stock macOS bash works; no external dependencies) - Read access to `~/.claude/skills`, `~/.claude/agents`, and local Claude Code session history - No authentication or API keys required — the script reads local files only ## Instructions ### Step 1: Run the value script ```bash bash ~/.claude/skills/skills-janitor/scripts/value.sh [--weeks N] [--budget N] [--json] ``` - `--weeks N` — usage lookback window (default: 4) - `--budget N` — context window size for % calculations (default: 200000) - `--json` — emit raw JSON ### Step 2: Present the results Show the table and summary to the user. When explaining results, do NOT describe body tokens as permanent context cost — only descriptions are always loaded. Plugin-namespaced skills appear with their full invocation name (e.g., `marketing-skills:image`, `figma:figma-use`). ### Step 3: Suggest action when waste is high If "unused skill cost" exceeds 20% of the budget, recommend the user run `/janitor-report` for a full health check or (in v1.4+) `/janitor-swipe` to triage interactively. ## Output A table of every installed skill with: - **Always** — description tokens, permanently in the system prompt (the real context rent) - **Body** — the rest of SKILL.md, loaded only when the skill triggers (progressive disclosure) - **Used?** — `yes` if invoked in the lookback window, else `NO` - **Last Used** — date of most recent invocation Followed by a summary: - Total tokens loaded into context (the always-loaded TOTAL includes skills plus subagent descriptions from `~/.claude/agents`, reported as % of budget) - Active vs. unused split - Top wasters: heavy skills with zero usage ## Error Handling 1. **Error**: `value.sh: No such file or directory` **Solution**: The plugin is installed under a different root. Locate it with `ls ~/.claude/skills` or check the plugin cache, then run the script from its actual location. 2. **Error**: Every skill shows `NO` in the Used? column **Solution**: The lookback window may be too short or session history is empty. Re-run with a longer window, e.g. `--weeks 12`. 3. **Error**: A skill shows 0 tokens **Solution**: Its SKILL.md is missing or unreadable. Run `/janitor-report` to surface broken skills, then `/janitor-fix --prune` to clean them up. 4. **Error**: Percentages look wrong for a non-default model **Solution**: Pass the correct context size explicitly, e.g. `--budget 500000`. ## Examples ### Example 1: Standard value check **Input**: "Are my skills worth their token cost?" **Output**: Run `bash ~/.claude/skills/skills-janitor/scripts/value.sh`, then present the table sorted by waste and the summary line, e.g. "Always-loaded total: 8,420 tokens (4.2% of 200k budget). 6 of 31 skills unused in 4 weeks; top waster: `heavy-skill` (1,900 tokens, never used)." ### Example 2: Longer lookback, custom budget **Input**: "Check skill usage over the last quarter against a 500k window." **Output**: Run `bash ~/.claude/skills/skills-janitor/scripts/value.sh --weeks 12 --budget 500000` and present the same table with the adjusted lookback and percentages. ### Example 3: Machine-readable output **Input**: "Give me the raw skill value data." **Output**: Run the script with `--json` and return the JSON payload unmodified. ### MCP servers (v1.7) For the MCP side of context cost, run `bash {baseDir}/../../scripts/mcp.sh [--weeks N]` — inventories every configured server (user, project, plugin) with REAL call counts from session transcripts, and lists servers unused in the window. No token guesses: schemas live server-side, so the janitor reports calls, distinct tools used, and last-used instead. ## Resources - Report script (plugin-relative): `{baseDir}/../../scripts/value.sh` - `/janitor-report` — full health check including duplicates and broken skills - `/janitor-fix --prune` — remove broken symlinks and empty skill dirs - `/janitor-discover` — find new skills or check one before installing
© Krzysztof Hendzel · MIT · khendzel/skills-janitor