Skip to main content
skill CX Codex

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.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add khendzel/skills-janitor --skill janitor-value -a claude-code
Open on GitHub

What 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-code

2Manually: put the files in place

~/.claude/skills/janitor-value/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/janitor-value/

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

Similar skills

All skills for Agent setup: memory, context, orchestration →

From the same set5

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor