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

claude-dont

v1.0.6

Published

Persistent negative memory for Claude — teach it once, it remembers forever

Downloads

845

Readme

claude-dont

Stop paying for Claude's repeated mistakes.

Every time Claude ignores your preferences, you correct it. Next session — same mistake, same correction, same wasted tokens. claude-dont ends that loop.

One command. Remembered forever.

/dont use field injection

Claude never uses field injection again. In any project. In any future session.


The token problem

Every correction you type costs tokens. Every repeated mistake costs tokens. Every rule you re-explain costs tokens.

Without claude-dont:

You:   implement the auth service
Claude: [writes code with field injection]
You:   I told you — use constructor injection, not field injection
Claude: sorry, here's the fix...

[next session]
You:   implement the user service
Claude: [writes code with field injection again]
You:   HOW MANY TIMES...

Each "I told you" costs ~100–300 tokens. Multiply by sessions, by teammates, by months.

With claude-dont:

You:   /dont use field injection
       → Saved. Never again.

[next session, new project, different machine]
Claude: [automatically reads your constraints]
Claude: [writes constructor injection correctly, first try]

Savings breakdown

| What you stop paying for | Tokens saved | |---|---| | Re-explaining the same rule each session | 100–300 per session | | Corrections after Claude ignores preferences | 150–400 per incident | | Re-injecting rules that already fired this session | 50–200 per repeat | | Injecting irrelevant rules (wrong project/context) | 100–500 per session | | Total per active project / month | 2,000–15,000 tokens |

Rules are automatically synced to your CLAUDE.md system prompt. Thanks to prompt caching in modern LLMs, reading your rules costs practically nothing after the first message, saving you thousands of output tokens in corrections.


Install

One command:

npx claude-dont init

Then restart Claude Code.

Done. That's the entire installation.

init automatically:

  • Registers the MCP server in ~/.claude/settings.json
  • Creates the /dont slash command
  • Wires an error-detection hook that prompts rule capture on mistakes
  • Injects auto-call instructions into ~/.claude/CLAUDE.md so Claude calls the tools every session without you asking

Verify your setup:

npx claude-dont doctor

How to use

Add a rule

/dont use var declarations
/dont use default exports — named exports only
/dont call setState directly — use the store action
/dont use async/await in Vue computed properties
/dont hardcode environment variables — use .env

If your instruction is vague, Claude asks one clarifying question before saving.

View your rules

Just ask Claude in chat:

"show my rules"
"what constraints do I have for this project?"

Or via CLI:

npx claude-dont list
npx claude-dont list /path/to/project

Shows all rules with hit counts — so you know which rules fire most.

Remove a rule

Just ask Claude in chat:

"remove the rule about var declarations"
"forget the field injection rule"

Uses fuzzy matching — you don't need the exact rule text.

That's it

Claude reads your rules automatically at the start of every session from CLAUDE.md. You never repeat yourself again.


Self-learning from mistakes

When Claude makes a mistake, it doesn't just fix it — it drafts a rule:

I made a mistake: used var instead of const.
Cause: default reflex — var is shorter.
Suggested rule: "Don't use var. Use const or let."
Keywords: [var, declaration, variable]

Add this to rules.md? [Y/n]

One keypress. Mistake captured forever.

The error-detect hook fires automatically when you send a stack trace or say "that's wrong" — Claude knows to suggest a rule before responding.


Conflict detection

Try to add a contradictory rule and claude-dont blocks it:

⚠ Conflict detected
  New:      "Don't avoid async functions"
  Existing: "Don't use async functions"
  Reason:   Opposite polarity — shared keywords: [async, functions]

To save anyway: /dont ... force

Team rules

Commit a .claude-dont/rules.md to your repo. Everyone on the team gets the same constraints automatically on git pull. No setup required per developer.

my-project/
├── .claude-dont/
│   └── rules.md    ← commit this
└── src/

Bulk import

Already have a list of rules? Import them all at once by asking Claude:

"import rules from /path/to/my-rules.md"

Each - line becomes a rule with auto-extracted keywords.


Diagnose

npx claude-dont doctor
[MCP Server]      ✓ Registered
[CLAUDE.md]       ✓ Auto-injection active
[Hook]            ✓ Error detection active
[Slash Commands]  ✓ /dont
[Rules]           ✓ 12 rules across 3 projects
[Conflicts]       ✓ None

How rules are stored

Human-readable markdown at ~/.claude/dont/rules.md. Hand-editable.

## global

- keywords: [console.log, logging]
  rule: Don't use console.log. Use structured logger.
  why: Security leak risk in prod.

## project:/your/project

- keywords: [inject, @Autowired, field injection]
  rule: Don't use field injection. Constructor injection only.
  why: Hides dependencies, breaks unit tests.
  tags: [.java, .ts]

Requirements

  • Node.js 18+
  • Claude Code (CLI or desktop app)

Contributing

  1. Clone the repository
  2. Run npm install
  3. Run npm run build to compile
  4. Run npm test to run the test suite

License

MIT