eval-audit
**Locale**: All templates in this spec are written in English. Detect the user's language from the session and translate user-facing text at display time per…
Generate a comprehensive report of all installed skills: quick health scan, context budget, portfolio overview, and quality summary.
$ npx -y skills add Evol-ai/SkillCompass --agent claude-codeHow it fires
How this command gets triggered: by you, by Claude, or both.
/skill-reportContext preview
What this command does when you run it.
Generate a comprehensive report of all installed skills: quick health scan, context budget, portfolio overview, and quality summary.
Generate a comprehensive report of all installed skills: quick health scan, context budget, portfolio overview, and quality summary.
Use the **Read** tool to load `.skill-compass/setup-state.json`. If the file does not exist, run `/setup` first and then continue from Step 2.
Extract the skill list from the `inventory` array. Each entry provides: `name`, `path`, `version`, `purpose` (category), `modified_at`. Keep the full list in memory.
If `inventory` is empty or missing, output:
No skills found in inventory. Run /setup to discover installed skills.
Then stop.
Skip this step entirely if `--skip-scan` was passed.
Build a `skillEntries` array from the inventory: `[{ name, path, modified_at }, ...]`.
Run the QuickScanner using the **Bash** tool:
const { QuickScanner } = require('./lib/quick-scan');
const scanner = new QuickScanner('cc');
const skillEntries = /* array from inventory */;
const { results, summary } = scanner.scanAll(skillEntries);Execute with `node -e` passing the constructed skillEntries inline, for example:
node -e "
const { QuickScanner } = require('./lib/quick-scan');
const scanner = new QuickScanner('cc');
const entries = {ENTRIES_JSON};
const out = scanner.scanAll(entries);
console.log(JSON.stringify(out));
"Replace `{ENTRIES_JSON}` with the actual JSON array. Run this from the SkillCompass base directory (`{baseDir}`).
Sort results: `high_risk` first, then `medium`, then `clean`. Within each group, sort alphabetically by `skill_name`.
For skills that are disabled (check `InboxStore.getSkillCache(name)?.disabled`) or have `ever_used === false` from `UsageReader.getSignals(name)`, mark them with verdict `never_used` for display purposes (use the `○` symbol).
Display the scan table:
Quick Health Scan — {total} skills
✓ {name} D1={d1} D2={d2} D3={d3}
⚠ {name} D1={d1} D2={d2} D3={d3} ← {first finding message}
✗ {name} D1={d1} D2={d2} D3={d3} ← {first finding message}
○ {name} D1={d1} D2={d2} D3={d3} (disabled / never used)
✓ Clean: {n} ⚠ Medium: {n} ✗ High risk: {n} ○ Skipped: {n}Verdict symbol mapping:
For `⚠` and `✗` rows, append `← {first finding message}` where the message is the `message` field of the first entry in `findings`, trimmed to 60 characters.
If any skill has `high_risk` verdict in the scan results, add a guidance line after the scan summary for the **first** such skill only (max 1 guidance):
{name} has security or structural risks; a full 6-dimension evaluation is recommended.
[Evaluate {name} (recommended) / Skip]If `--scan-only` was passed, stop here after displaying this table.
List all directories in the skill scan roots, distinguishing top-level skills from packages:
Installed
Skills (loaded by Claude Code):
frontend-design standalone skill · {activity status}
Packages (working via hooks/Skill tools):
superpowers collection · SessionStart hook · 14 sub-skills
everything-claude-code hooks + agents · non-skill collection
SkillCompass (this tool)Determine package type by checking the directory:
For packages with sub-skills (SessionStart hook), count sub-skills by scanning `{dir}/skills/*/SKILL.md`.
Sub-skill usage data comes from `usage.jsonl` (passively tracked via PostToolUse Skill hook). If usage data exists, show top sub-skills:
superpowers collection · 14 sub-skills
Recently used: writing-plans (12×), subagent-driven (6×), executing-plans (3×)**Skill count health check:**
Count the total number of top-level skills (type = standalone, with SKILL.md loaded by Claude Code). Then:
⚠ {N} skills installed. Users on non-Opus models (200K context) may experience description truncation, reducing Claude's accuracy in selecting the right skill. ⚠ {N} skills installed. Consider cleaning up idle skills — Claude's accuracy in matching the right skill may decrease.
[View idle skills / View usage ranking]Read version count from `.skill-compass/{name}/manifest.json` for each skill (count entries in `versions` array, or use field `version_count` if present). Also check `.skill-compass/cc/{name}/manifest.json` first (new path takes priority). If manifest is missing, treat version count as 1.
Determine activity tier from usage signals only (`last_used_at` from `UsageReader.getSignals()`). Do NOT fall back to manifest `versions[].timestamp` — those reflect eval/edit history, not actual invocation, and would inflate active counts for never-invoked skills.
Group skills by `purpose` field (from setup-state.json inventory). Use existing category labels: `Code/Dev`, `Deploy/Ops`, `Data/API`, `Productivity`, `Other`.
Classify iteration depth:
For activity bars (each 10 chars wide): filled = `round((count /
Evaluate agent skill quality. Find the weakest link. Fix it. Prove it worked.
Repo: Evol-ai/SkillCompass
**Locale**: All templates in this spec are written in English. Detect the user's language from the session and translate user-facing text at display time per…
**Locale**: All templates in this spec are written in English. Detect the user's language from the session and translate user-facing text at display time per…
**Locale**: All templates in this spec are written in English. Detect the user's language from the session and translate user-facing text at display time per…
- **Recommended model: Claude Opus 4.6** (`claude-opus-4-6`). Directed improvement requires understanding complex rubric feedback and generating precise,…
**Locale**: All templates in this spec are written in English. Detect the user's language from the session and translate user-facing text at display time per…
**Locale**: All templates in this spec are written in English. Detect the user's language from the session and translate user-facing text at display time per…