The Claude Code
setup I
use.

CLAUDE.md · rules · skills · hooks

This is the Claude Code setup I use on my own projects: a CLAUDE.md, some rules, skills and hooks. It is split into bundles so you can take the parts that fit and leave the rest. The web builder and the CLI write the same files.

Find me
What init writes
~/acme-web
$ pnpx @patrity/skills init --yes --profile nuxt-app.claude/rules/browser-testing.md.claude/skills/browser-testing/SKILL.md.claude/rules/docs.md.claude/skills/handover/SKILL.md.claude/skills/wiki-parity/SKILL.md.claude/skills/wiki-parity/_systems.example.json.claude/skills/wiki-parity/wiki-parity.test.ts.claude/rules/backend.md.claude/rules/cli.md.. 18 moreCLAUDE.md.claude/settings.json.claude/settings.local.json.gitignoreSetup written.
initnuxt-app

One run into an empty project, and what it wrote.

pnpx @patrity/skills init · --yes --profile nuxt-app

Start hereStart here3 min readPhilosophy4 min read
Scroll
In your repo

What the run writes

A file, a directory and a record. The paths are already relative to your project root, so there is no wrapper directory to dig anything out of.

One file

CLAUDE.md

Composed from the answers you gave and the bundles you picked. Your own paragraphs stay where you put them.

# acme-web
## Git
<!-- skills:base:pushes=ask -->
- Never push without explicit
  approval, even after a commit
  was approved.
One directory

.claude/

Rules scoped to paths, skills with their scripts, hooks, and the settings that wire them up.

.claude/
  rules/web-nuxt.md
  skills/nuxt-docs/SKILL.md
  hooks/protect-env.sh
  settings.json
  skills.lock.json
One record

Lockfile

Every file the tool wrote, hashed. That is how the next run can take a bundle back out without touching your edits.

{
  "version": 1,
  "projectName": "acme-web",
  "answers": { "pm": "pnpm" },
  "bundles": {
    "nuxt": { "sha": "8f3c1d" }
The choices

Why the setup looks like this

These are my choices, and each one is either a question you can answer differently or a bundle you can leave out.

Rules and skills stay apart

A rule is a glob and a constraint, and it loads on its own when Claude touches a matching file. A skill is the procedure, and it gets invoked when it is needed. Keeping them apart is what keeps my CLAUDE.md short enough that Claude still reads it. /skill/nuxt

Hooks fail closed

I moved the checks I keep forgetting into hooks, so the harness runs them rather than me. Delete a tracked hook script and the wiring exits 2, which is the behaviour I want from a check I rely on. /skill/quality-hooks

Docs in three tiers, one of them tested

Handovers, a wiki and frozen specs. The wiki is the tier that rots on me, so a registry names every system and a test fails on a system with no page, or a page nobody registered. /skill/docs-discipline

UI work is checked in a browser

Typecheck, lint and unit tests all pass on a component that never mounted, so I drive the change with playwright-cli: snapshot, act on refs, assert with eval, then read a screenshot. /skill/browser-testing

Memory and process are questions

These are the habits most likely to be wrong for your project, so the wizard asks instead of assuming. full process is brainstorm, spec, plan, TDD, then a two-stage review, and none is on the list too. Memory is off unless you turn it on. /skill/iterative-spec-design

The registry

The bundles

Listed in the order the CLI installs them. Every one is also a zip you can take on its own, with the CLAUDE.md lines that make it make sense.

AI Models

Lets Claude call the models you run yourself or reach through a gateway, for speech, vision, embeddings, reranking, decisions, images, video and music, from one CSV of endpoints.

aiinferenceaudioimagesembeddings

Browser Testing

Prove UI changes in a real browser with playwright-cli. Install-if-missing, the snapshot→ref→act workflow, the test-account convention and evidence discipline.

testinge2eplaywrightbrowser

Doc Fetcher

A generator for per-library documentation skills. Configure a template and Claude Code fetches a library's real docs from GitHub instead of recalling them.

docsgeneratorpython

Docs Discipline

The three-tier docs model (handovers, living wiki, frozen specs) with a handover skill and a mechanical wiki-parity test.

docshandoverswikiprocess

Iterative Spec Design

Design a system section by section with an approval checkpoint after each one, so a wrong assumption is caught in section two instead of in the finished spec.

processplanningspecs

Nuxt

Nuxt 4 framework docs fetcher and the rule that makes Claude Code check it before guessing a composable.

nuxtvuedocs

Nuxt UI

Nuxt UI v4 component docs and template fetchers plus the rule that makes Claude Code check them before touching a .vue file.

nuxt-uivueuidocs

Quality Hooks

Fail-closed Claude Code hooks: protect .env and credential files, lint after every edit, and flag an unwritten convention before context is compacted.

hooksqualitysafety

Read-only DB Access

A dedicated read-only role, a one-statement runner wrapped in BEGIN READ ONLY, and the rule that keeps destructive SQL out of Claude's hands.

databasepostgressafety

Remote Ops Quoting

The ssh argument-flattening trap that silently runs your command on the wrong machine, the two forms that work, and the base64 hop for anything with nested quotes or SQL.

opssshproxmoxshell

Take what you want

Take the whole thing, or just the bundle you came for.

Tony Costanzo · TechHive Labs · @Patrity