Skip to content

rikenpatel20/claude-plugin-inventory

Repository files navigation


claude-plugin-inventory logo

claude-plugin-inventory

See everything your coding agents installed — in one command.

Skills · Plugins · MCP servers · Commands · Hooks · Marketplaces across Claude Code and Codex, in one clean tree — with stale and duplicate items flagged so you can clean house.


npm version CI License: MIT Node Zero dependencies Platforms


The problem

You install a skill here, an MCP server there, a plugin you saw on Reddit, three more during a late-night session... and six months later you have no idea what's actually loaded every time Claude Code starts. There's no built-in way to list it, let alone spot what's gone stale.

"There's no easy way to see what your coding agents have actually installed — skills, subagents, commands, plugins, MCP servers, hooks."r/ClaudeAI (the thread that inspired this tool)

Someone built a macOS-only desktop app to solve this. claude-plugin-inventory does it in one command — on every platform, with zero install and zero dependencies — and it speaks JSON so your scripts and CI can use it too.


Install & run

The fastest way needs nothing installed — just run it:

npx claude-plugin-inventory
Example claude-plugin-inventory output: a colored tree of plugins, skills, hooks, and marketplaces across Claude Code and Codex, with stale items flagged and a summary line

Prefer a permanent short command? Install globally and use the cpi alias:

npm install -g claude-plugin-inventory
cpi

Want to hack on it? Clone and run straight from source (no build step):

git clone https://github.com/rikenpatel20/claude-plugin-inventory
cd claude-plugin-inventory
node bin/cli.js

Reading the output

Every line follows the same simple shape. Here's one decoded:

swift-lsp@claude-plugins-official  v1.0.0  · 5mo ago  ⚠ stale
└── name ──┘ └── marketplace ────┘ └ ver ┘  └ age ─┘  └ flag ┘
Part Means
name The extension's name
marketplace Where it came from (after the @)
version The installed version
age How long since it was last updated
⚠ stale Older than the threshold (default 90 days) — a cleanup candidate
⧉ dup Installed more than once (e.g. user and project scope)

Everyday recipes

Real things you'd actually use it for.

🧹 "What can I clean up?"

Show only the stuff gathering dust:

npx claude-plugin-inventory --stale

🔬 Be stricter about "old"

Flag anything untouched for 30 days instead of 90:

npx claude-plugin-inventory --stale --days 30

📋 List the names of stale items (to act on them)

npx claude-plugin-inventory --json \
  | jq -r '.roots[].items[] | select(.flags | index("stale")) | .name'
swift-lsp@claude-plugins-official
design-cloning
dev-fix
qa
svg-generation
ux-review

🤖 Guard your setup in CI

Warn when your agent config gets cluttered:

# .github/workflows/agent-hygiene.yml
- run: npx claude-plugin-inventory --json > inventory.json
- run: |
    stale=$(jq '.staleCount' inventory.json)
    [ "$stale" -lt 5 ] || echo "::warning::$stale stale agent extensions — time to tidy up"

🔎 Audit a teammate's setup (or a second machine)

npx claude-plugin-inventory --dir /path/to/their/.claude

What it scans

By default it reads ~/.claude and ~/.codex:

Category Read from
🧩 Plugins ~/.claude/plugins/installed_plugins.json — version, install date, scope
🛠️ Skills ~/.claude/skills/*/SKILL.md
🤖 Agents / Commands ~/.claude/agents, ~/.claude/commands
🪝 Hooks settings.jsonhooks
🔌 MCP servers settings.json, settings.local.json, Codex config.toml
🏪 Marketplaces ~/.claude/plugins/marketplaces/*

🔒 Read-only and offline. It opens those files, counts what's there, and prints. It never edits your config and never sends anything over the network.


All options

Flag Description
--stale Show only items older than the threshold
--days <n> Stale threshold in days (default 90)
--dir <path> Scan a custom agent home (repeatable)
--json Machine-readable output for scripts / CI
--no-color Disable colors (also respects the NO_COLOR env var)
-v, --version Print the version
-h, --help Show help

Use it as a library

scan() returns plain data — drop it into your own dashboard or script:

import { scan, ago } from 'claude-plugin-inventory';

const report = scan({ staleDays: 60 });

console.log(report.totals);      // { plugins: 11, skills: 5, hooks: 5, ... }
console.log(report.staleCount);  // 6

for (const root of report.roots) {
  for (const item of root.items) {
    if (item.flags.includes('stale')) {
      console.log(`${item.name} — last touched ${ago(item.updated)}`);
    }
  }
}

FAQ

Does it change or delete anything?
No. It is strictly read-only — it opens config files, counts, and prints. Removing extensions is up to you.
What does "stale" actually mean?
Simply: not updated in N days (90 by default, set with --days). It's a nudge to review, not a verdict — a stale item may still work perfectly.
Does it support Codex too?
Yes. It scans ~/.codex alongside ~/.claude, including MCP servers declared in config.toml.
Why zero dependencies?
Trust and speed. A tool that reads your local config should be small enough to audit in a sitting, and fast enough to run on every shell startup if you want.

Contributing

PRs and ideas welcome — see CONTRIBUTING.md and the good first issue label. Be kind; we follow a Code of Conduct.


If this saved you a cleanup, give it a ⭐ — it genuinely helps.

MIT © Riken Patel

About

List every skill, plugin, MCP server, command and hook your Claude Code and Codex agents have installed — one command, every platform.

Resources

License

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors