npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

skill-radar

v0.3.2

Published

Cross-agent skill health radar for AI coding agents. Hook-free usage scoring from real prompt history, content-hash dedup, bulk cleanup TUI.

Downloads

208

Readme

skill-radar

Cross-agent skill health radar for AI coding agents. Hook-free usage scoring from real prompt history, content-hash dedup, bulk cleanup TUI.

  Health 46/100   ~3090 tokens/turn wasted
  vs last scan: health ↑10  ·  waste ↓146631  ·  dead →  ·  skills →

  52 skills  46 dead  3 dups  0 broken

Why

Every skill's description ships in the system prompt every turn — even skills you never invoke. A folder of 50+ skills is a quiet tax on every session. Worse: when the listing overflows its budget, the agent silently drops descriptions starting with the skills you use least, so dead skills get deader (a ratchet).

skill-radar finds the waste and helps you kill it in seconds — across all your AI coding agents at once.

What's different

| | skills-janitor | skills-admin (skm) | skills-cleaner | skill-radar | |---|---|---|---|---| | Cross-agent | Claude + Codex | 53 agents | Claude only | 16+ agents | | Dedup | name + desc Jaccard | name only | AI similarity (costly) | content-hash + symlink-aware | | Usage scoring | transcript scan (Claude) | none | requires hooks | prompt_history (Devin+Claude+Codex, no hook) | | Trend / history | no | no | no | yes — compounding | | TUI bulk delete | swipe (one-by-one) | no | no | list + D nuke-all-dead |

The moat: history compounding. Each scan appends a snapshot to ~/.config/skill-radar/history.jsonl. Over time you see your hygiene trend — and that trend is the switching cost another tool can't reconstruct.

Install

npm install -g skill-radar
# or run once:
npx skill-radar scan

Usage

# default: interactive TUI (list view, bulk delete, search/filter)
skill-radar

# first-run setup wizard (check agents, verify history, explain output)
skill-radar init

# one-shot health report (persists a snapshot for trend)
skill-radar scan
skill-radar scan --json    # JSON output for scripting/CI

# full waste ranking (all skills)
skill-radar score
skill-radar score --json

# show duplicates (content clones, name collisions, symlink aliases)
skill-radar dedup
skill-radar dedup --json

# structural issues (broken symlinks, missing SKILL.md, empty dirs)
skill-radar doctor
skill-radar doctor --fix         # auto-fix: remove broken symlinks + dedup
skill-radar doctor --fix --dry-run
skill-radar doctor --json

# scan history (the compounding trend)
skill-radar history
skill-radar history --json

# auto-cleanup: remove broken symlinks + duplicate copies (keep canonical)
skill-radar clean --backup       # back up before deleting
skill-radar clean --dead --backup  # also remove skills with no manual invoke
skill-radar clean --dry-run      # preview without deleting

# generate markdown report (shareable, for teams/docs/GitHub)
skill-radar report
skill-radar report -o report.md  # write to file

# one-shot auto-fix everything: backup + clean broken + dedup + remove dead
skill-radar autofix              # safe by default (backs up before deleting)
skill-radar autofix --dry-run    # preview without changing
skill-radar autofix --no-dead    # only fix broken + duplicates, keep dead skills

TUI keybindings

| key | action | |---|---| | / k j | move cursor (vim-style) | | PgUp PgDn / u | scroll a page | | g / G | jump to top / bottom | | i | inspect full description + metadata of cursor row | | d | delete all copies of cursor skill across every agent (confirm y/n) | | D | delete ALL dead skills + all their copies (the one-keystroke win) | | space | toggle mark | | x | delete all marked | | / | search/filter by name or description (Esc to clear) | | r | re-scan (score jumps live) | | q | quit |

The list is windowed (20 rows visible) with a scroll indicator showing 1-20 of 52 ↑↓ so every skill is reachable. No swipe — browsing one-by-one is slow. Sort worst-first, nuke the top with D.

How usage scoring works (without a hook)

Other tools need you to install a PreToolUse/PostToolUse hook before they can score usage. skill-radar reads prompt history that agents already log for free:

  • Devin: ~/.local/share/devin/cli/sessions.dbprompt_history table (via sqlite3 CLI, no native dep)
  • Claude Code: ~/.claude/history.jsonldisplay field
  • Codex: ~/.codex/history.jsonltext field

It extracts /skill-name invocations and counts them + tracks last-used date. No hook, no setup, no background process.

Limitation (honest): this catches manual /skill-name invocations, not model-auto-triggered skills. A skill the model invokes on its own will show "no manual invoke" even if it's active. This is a weaker signal than transcript scanning (which skills-janitor does for Claude), but it works cross-agent and requires zero setup.

Agents scanned

Global roots: ~/.agents/skills, ~/.claude/skills, ~/.config/devin/skills, ~/.codex/skills, ~/.cursor/skills, ~/.codeium/windsurf/skills, ~/.gemini/skills, ~/.cline/skills, ~/.continue/skills, ~/.goose/skills, ~/.opencode/skills, ~/.roo/skills, ~/.crush/skills, ~/.kiro/skills, ~/.kimi-code/skills, ~/.commandcode/skills, and more. Honors CLAUDE_CONFIG_DIR, CODEX_HOME, XDG_CONFIG_HOME.

Plugin/marketplace discovery: Recursively walks ~/.claude/plugins/ and ~/.kimi-code/plugins/ (up to 4 levels deep) to find nested skills/ directories installed by plugin managers and marketplaces. No manual configuration needed.

Project-level roots: Scans .devin/skills, .agents/skills, .windsurf/skills, and .claude/skills in the current working directory, so project-scoped skills show up too.

License

MIT