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

contextpruner

v0.3.0

Published

Lint your AI-context config files (AGENTS.md, CLAUDE.md, GEMINI.md, Cursor rules) against your repo — find missing, dead, drifting, and conflicting rules.

Readme

contextpruner

Lint your AI-context config files against your repo. contextpruner lint checks your AGENTS.md / CLAUDE.md / GEMINI.md / Copilot / Cursor rules — plus the enforced ignore artifacts (.cursorignore / .geminiignore / .codeiumignore and the Claude Code deny rules in .claude/settings.json) — against the files actually in your tree and reports:

  • Missing — junk the config doesn't ignore yet (with what it's costing you),
  • Dead — rules that match nothing,
  • Drift — rules in one config but not another,
  • Conflict — rules that contradict each other, including an enforced rule that hard-blocks a file you pinned Keep or Skim, or a path you declared keep: in .contextpruner.

It exits non-zero when it finds issues, so it drops straight into CI or a pre-commit hook.

Usage

export CONTEXTPRUNER_API_KEY=cp_live_...   # from https://contextpruner.app/account
npx contextpruner lint

One subscription, one key: the same cp_live_ key authorizes both this CLI and the ContextPruner config automation (the GitHub Action / pre-commit hook), so reuse the one you already have.

contextpruner lint [--config <path>]... [--fix] [--json]
  • --config <path> — a config to lint (repeatable). Defaults to auto-detecting the standard files at the repo root: the advisory markdown configs plus the four enforced artifacts. An explicit path's format is inferred from its basename (settings.json → Claude settings, the *ignore files → gitignore syntax, anything else → markdown).
  • --fix — rewrite each config's managed block in place to fix the issues. Your own content outside the block (and the "Exceptions" section) is left alone. Enforced ignore files regenerate only the # contextpruner:begin/end block; .claude/settings.json is merged via its sentinel-delimited deny span and is skipped — never clobbered — when it has no recognized span or can't be merged safely.
  • --json — emit the full report as JSON.

If the repo root has a committed .contextpruner file, its keep: <path-or-glob> lines (enforcement exceptions — paths that must stay readable by agents, even untracked ones like docs inside node_modules/) drop any enforced rule covering them from the expected rule set, exactly as the generate automation does — so lint, --fix, and generation always agree. Unrecognized lines are reported as a warning and ignored.

Exit codes: 0 clean · 1 issues found · 2 usage/auth error.

In CI

Fail the build when a config drifts. Save this as .github/workflows/contextpruner-lint.yml and add your key as the repo secret CONTEXTPRUNER_API_KEY:

name: ContextPruner Lint
on: [push, pull_request]
jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npx --yes contextpruner lint
        env:
          CONTEXTPRUNER_API_KEY: ${{ secrets.CONTEXTPRUNER_API_KEY }}

Privacy

The pruning engine runs entirely on your machine — your file tree never leaves it. The only network call is to /api/license/verify, which sends just your API key to confirm an active subscription.

Development

The CLI bundles the app's pure engine at build time:

npm install   # in packages/cli
npm run build # → dist/index.js

The published package name is contextpruner; the repository's root package.json is a separate private app that happens to share the name.