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

@nickbevers/claude-rules

v1.3.2

Published

AI coding agent rules — Claude Code native, with conversion for Cursor, Windsurf, Copilot, and Aider

Readme

Claude Rules

Personal AI coding agent configuration for a freelance frontend creative developer. Claude Code native format with a built-in conversion step for Windsurf, Copilot, and Aider.

Add to an Existing Project

Already have a codebase? Run one command to copy the rules into it:

cd your-project

# Pick your package manager — all work the same
bunx @nickbevers/claude-rules init
npx @nickbevers/claude-rules init
pnpm dlx @nickbevers/claude-rules init
yarn dlx @nickbevers/claude-rules init

This copies three things into your project root:

| What | Where | Effect | | ------------------- | ------------ | ----------------------------------------------------------- | | CLAUDE.md | Project root | Always-on rules (~68 lines), loaded every interaction | | rules/*.md | rules/ | Path-scoped rules, loaded only when touching matching files | | skills/*/SKILL.md | skills/ | On-demand skills, zero cost until triggered |

Running init is safe on existing projects — it merges and adds, never overwrites:

  • CLAUDE.md — if one already exists, the global rules are merged on top and your project-specific content is preserved below a # --- Project Rules --- marker. Re-running init updates the global section while keeping your project rules intact.
  • rules/ — new rule files are added by name. Existing rules you've customized are kept as-is.
  • skills/ — new skills are added by name. Existing skills are kept as-is.

After init, add any project-specific configuration below the # --- Project Rules --- marker in CLAUDE.md, then commit the rules/ and skills/ directories alongside your code.

Re-running init (updating an existing project)

Running init again is safe and encouraged when new rules or skills are added upstream:

bunx @nickbevers/claude-rules init

What happens:

| Component | First run | Re-run | |---|---|---| | CLAUDE.md (no existing) | Copied from package | — | | CLAUDE.md (existing) | Merged: global rules on top + project rules below marker | Global section updated, project rules preserved | | rules/frontend.md (new) | Added | — | | rules/frontend.md (exists) | Kept as-is | Kept as-is | | skills/code-review/ (new) | Added | — | | skills/code-review/ (exists) | Kept as-is | Kept as-is |

Force re-init (overwrite everything)

If you want to reset all rules and skills to the latest package versions — for example after a major update — use --force:

bunx @nickbevers/claude-rules init --force

This overwrites all existing rule and skill files with the package versions and re-merges CLAUDE.md (your project-specific rules below the # --- Project Rules --- marker are still preserved).

The merged CLAUDE.md looks like this:

# Global Rules
... (package global rules, updated on each init) ...

# --- Project Rules ---

... (your project-specific rules, never touched by init) ...

Also using Windsurf, Copilot, or Aider?

# Add another agent during init
bunx @nickbevers/claude-rules init claude windsurf

# Or all at once
bunx @nickbevers/claude-rules init all

Or convert later from an existing project that already has rules/:

bunx @nickbevers/claude-rules convert cursor       # -> .cursorrules
bunx @nickbevers/claude-rules convert windsurf     # -> .windsurfrules
bunx @nickbevers/claude-rules convert copilot      # -> .github/copilot-instructions.md
bunx @nickbevers/claude-rules convert aider        # -> .aider.conf.yml + CONVENTIONS.md
bunx @nickbevers/claude-rules convert all          # All of the above

Replace bunx with npx, pnpm dlx, or yarn dlx as needed.

The conversion strips YAML frontmatter from rules/ and skills/, concatenates into the flat format each agent expects, and appends agent-specific guidance automatically.

Start a New Project with These Defaults

Two approaches depending on whether you want rules applied globally or per-project.

Global Install (all projects get these rules)

git clone [email protected]:NickBevers/claude-rules.git ~/.config/claude-rules
~/.config/claude-rules/setup.sh

This creates three symlinks in ~/.claude/:

| Symlink | Target | Purpose | | --------------------- | ----------- | ----------------------------- | | ~/.claude/CLAUDE.md | CLAUDE.md | Always-on global rules | | ~/.claude/rules/ | rules/ | Path-scoped conditional rules | | ~/.claude/skills/ | skills/ | On-demand skills |

Every Claude Code session on this machine now loads these rules. No per-project setup needed.

To uninstall: ~/.config/claude-rules/setup.sh --uninstall

Per-Project Install (rules live in the repo)

mkdir my-project && cd my-project
git init
bunx @nickbevers/claude-rules init

Then edit CLAUDE.md to define your project's stack:

## Project Stack

- Runtime: Bun
- Frontend: Astro 6 + Preact
- Styling: CSS Modules
- Backend: Hono
- Database: PostgreSQL 16 + Drizzle ORM

Commit everything — teammates and CI get the same rules automatically.

How It Works

Three Loading Tiers

The system is designed around Claude Code's context window — every token in always-on rules costs on every interaction AND every subagent spawn.

Tier 1 — Always-On (CLAUDE.md, ~68 lines)

Loaded on every single interaction. Contains only:

  • Stack defaults (Bun, Astro, Preact, CSS Modules, etc.)
  • Rule index for cross-context loading
  • Hard constraints Claude gets wrong without them (OKLCH colors, animation performance, Tabler Icons default)
  • Anti-AI-slop guardrails (no generic gradients, no pure grays, tinted neutrals)
  • Workflow rules (no drive-by refactors, ask when unsure)
  • Subagent sparring instructions

Tier 2 — Path-Scoped Rules (rules/, ~676 lines total, ~26-79 per file)

Each file has YAML paths: frontmatter. Claude Code only loads them when touching matching files. Editing a .tsx file loads frontend.md and design.md but NOT backend.md, database.md, or security.md.

| Rule File | Triggers On | | ---------------- | ----------------------------------------------------------------------- | | frontend.md | *.tsx, *.astro, *.module.css, components/, pages/, layouts/ | | design.md | *.module.css, *.css, tokens*, theme*, design* | | backend.md | api/, routes/, services/, middleware/, *.server.ts | | database.md | drizzle/, *schema*, *migration*, *.sql, db/ | | security.md | auth/, session*, *guard*, *crypt*, *password* | | testing.md | *.test.*, *.spec.*, e2e/, vitest*, playwright* | | devops.md | Dockerfile*, docker-compose*, deploy*, .github/ | | git.md | .gitignore, .gitattributes, .github/ | | laravel.md | *.php, livewire/, *.blade.php, composer.json | | compliance.md | privacy*, cookie*, consent*, gdpr*, legal* | | incident.md | incident*, postmortem*, runbook*, status*, ops/ | | copywriting.md | components/, pages/, content/, copy*, *.astro | | ticketing.md | .claude/tickets/ | | planning.md | .claude/research/, decisions*, architecture* | | research.md | .claude/research/, spike* |

Tier 3 — On-Demand Skills (skills/, zero cost until triggered)

Proper Claude Code skills with SKILL.md + YAML frontmatter. Only loaded when invoked by name or when Claude's description matching triggers them.

| Skill | Triggers On | | ------------------------ | --------------------------------------------------- | | design-discovery | "pick fonts", "choose colors", "visual identity" | | micro-animations | "add animations", "hover effects", "add polish" | | frontend-design | "build page", "create component", "design UI" | | code-review | "review code", "check my code", "audit code" | | project-kickoff | "new project", "plan project", "kickoff" | | seo-audit | "SEO audit", "meta tags", "structured data" | | stack-detect | "detect stack", "what stack", "scan project" | | content-strategy | "write blog post", "case study", "content plan" | | proposal-writer | "write proposal", "pitch", "estimate" | | document-generator | "write SOW", "project brief", "handoff document" | | qa-audit | "audit", "QA check", "accessibility audit" | | analytics-reporter | "analytics", "dashboard", "tracking" | | app-store-optimization | "ASO", "app store optimization", "app listing" | | behavioral-nudge | "nudge", "conversion optimization", "persuasion" | | data-consolidation | "migrate data", "ETL", "merge databases" | | mcp-builder | "build MCP", "MCP server", "agent tool" | | threat-detection | "threat model", "security review", "attack surface" | | workflow-optimizer | "optimize workflow", "speed up build", "DX" | | merge-conflict | "merge conflict", "resolve conflict", "fix conflicts"|

Token Budget

| Scenario | Lines Loaded | vs. Monolithic | | ----------------------------------- | ------------------------------------- | ----------------- | | Marketing site — editing components | ~176 (CLAUDE.md + frontend + design) | 76% reduction | | Marketing site — simple question | ~68 (CLAUDE.md only) | 91% reduction | | App with auth — editing API routes | ~162 (CLAUDE.md + backend + security) | 78% reduction | | Design Discovery (5 subagents) | ~68 x 5 = 340 base | 91% reduction |

Compared to loading all 744 lines on every interaction.

Directory Structure

~/.config/claude-rules/
├── package.json
├── CLAUDE.md                          # Always-on global rules (~68 lines)
├── setup.sh                           # Symlink into ~/.claude/ (git-clone workflow)
├── README.md
│
├── bin/
│   └── cli.js                         # CLI: init, setup, convert
│
├── rules/                             # Source of truth (Claude Code native)
│   ├── frontend.md                    #   Astro, Preact, CSS Modules, state
│   ├── design.md                      #   Spacing, tokens, motion, a11y
│   ├── backend.md                     #   Hono, API design, auth, middleware
│   ├── database.md                    #   PostgreSQL, Drizzle, md5 indexes
│   ├── security.md                    #   Rate limiting, headers, encryption
│   ├── testing.md                     #   bun:test, Vitest, Playwright
│   ├── devops.md                      #   Docker, Coolify, CI/CD
│   ├── git.md                         #   Branching, .gitignore
│   ├── laravel.md                     #   PHP, Laravel, Livewire
│   ├── compliance.md                  #   GDPR, cookies, licenses
│   ├── incident.md                    #   Severity levels, postmortem
│   ├── copywriting.md                 #   Error messages, empty states
│   ├── ticketing.md                   #   Ticket structure, prefixes
│   ├── planning.md                    #   Architecture decisions, phases
│   └── research.md                    #   Library/API evaluation
│
└── skills/                            # On-demand skills (Claude Code native)
    ├── design-discovery/SKILL.md
    ├── micro-animations/SKILL.md
    ├── frontend-design/SKILL.md
    ├── code-review/SKILL.md
    ├── project-kickoff/SKILL.md
    ├── seo-audit/SKILL.md
    ├── stack-detect/SKILL.md
    └── ... (19 total)

What Goes Where

| Content | Location | Why | | ------------------------------------ | ----------------------- | ---------------------------------------------- | | Stack choices, universal constraints | CLAUDE.md | Must be in every interaction | | Domain-specific rules | rules/*.md | Only load when touching those files | | Complex multi-step workflows | skills/*/SKILL.md | Zero cost until triggered | | Other agent configs | Generated via convert | Derived from rules/, not maintained separately |

Paired Subagent Sparring

Skills like design-discovery, micro-animations, and frontend-design use paired subagent sparring:

  1. Gather context from the user (project type, audience, mood, existing brand)
  2. Spawn Agent A and Agent B in parallel with opposing creative directions
  3. Spawn Agent C and Agent D in parallel — each cross-critiques the other proposal
  4. Synthesize into 2-3 options and present to the user
  5. Iterate based on feedback (re-spar if needed)
  6. Output production-ready CSS custom properties

The sparring prevents generic outputs. Agent A pushes for distinctiveness, Agent B pushes for polish, and the cross-critique forces the best of both.

Converting to Other AI Agents

These rules are written in Claude Code's native format (rules/*.md with YAML paths: frontmatter + skills/*/SKILL.md). If you also use Cursor, Windsurf, Copilot, or Aider, the convert command generates their config from the same rules.

Supported Agents

| Agent | Command | Output File | |---|---|---| | Cursor | bunx @nickbevers/claude-rules convert cursor | .cursorrules | | Windsurf | bunx @nickbevers/claude-rules convert windsurf | .windsurfrules | | GitHub Copilot | bunx @nickbevers/claude-rules convert copilot | .github/copilot-instructions.md | | Aider | bunx @nickbevers/claude-rules convert aider | .aider.conf.yml + CONVENTIONS.md | | All at once | bunx @nickbevers/claude-rules convert all | All of the above |

Replace bunx with npx, pnpm dlx, or yarn dlx as needed.

How It Works

rules/*.md (with YAML frontmatter)  ──┬──>  Claude Code (native, no conversion needed)
skills/*/SKILL.md                     │
                                      ├──>  .cursorrules
                                      ├──>  .windsurfrules
                                      ├──>  .github/copilot-instructions.md
                                      └──>  CONVENTIONS.md + .aider.conf.yml

The convert command:

  1. Reads rules/*.md and skills/*/SKILL.md from your local project (falls back to the package if no local rules exist)
  2. Strips YAML paths: frontmatter
  3. Concatenates everything into the flat format each agent expects
  4. Appends agent-specific guidance (e.g., "Cursor can't spawn subagents — use sequential sparring")

When to Re-run

Re-run convert after editing any rule or skill file so the other agent configs stay in sync:

# After editing rules/frontend.md
bunx @nickbevers/claude-rules convert all

No .ai/ directory. No sync scripts. No stale copies. One source, one conversion step.

Design Decisions

Why not one big CLAUDE.md? Every token in CLAUDE.md costs on every interaction. With subagent spawning (e.g., 5 agents for design discovery), a monolithic file becomes thousands of wasted context lines. Path-scoped rules eliminate 76-91% of that waste.

Why not just skills for everything? Skills require explicit triggering. Path-scoped rules load automatically when you touch matching files — no friction, no commands to remember.

Why Claude Code native as source of truth? Claude Code's rules/ format (markdown + YAML paths: frontmatter) is the most expressive: it supports conditional loading. Stripping frontmatter for other agents is trivial. Going the other direction (adding frontmatter to flat files) requires maintaining a separate path mapping. One direction is automatable; the other isn't.

Why frontend-first? This setup is for a freelance frontend creative developer doing ~80% marketing sites and ~20% apps with auth. Backend/database/security rules only load when actually touching those files, saving tokens on the 80% of work that's pure frontend.

Why are rules so specific? Generic best practices like "use semantic HTML", "write clean code", or "Arrange-Act-Assert" waste tokens — Claude already follows these by default. Every rule here exists because Claude gets it wrong without the instruction: OKLCH over hex, env(c) not Bun.env, MD5 hash indexes for TEXT columns, Argon2id via Bun.password, pgboss over BullMQ (Bun segfault). If a rule doesn't change Claude's actual behavior, it doesn't belong.