dotclaude
CLAUDE.md5 starsChanged 4 months agoMITView on GitHub
Personal Claude Code registry: skills, agents, commands, and hooks, distributed via the shadcn registry and a Claude Code plugin marketplace. Full contributor guide: CONTRIBUTING.md. Every item lives at <type>/<category>/<name>/<MANIFEST> (SKILL.md, AGENT.md, COMMAND.md, or HOOK.md). Everything else is derived by pnpm gen: Never hand-edit generated files. Edit the source manifest, run pnpm gen, and commit the regenerated output. pnpm gen:check fails CI when anything is stale. The catalog site lives in site/: static HTML, CSS, and JS with no build step…
We split this CLAUDE.md into the rules it gives an agent
2 rules. About 0 are common, 1 is distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 7
Every item lives at <type>/<category>/<name>/<MANIFEST> (SKILL.md, AGENT.md, COMMAND.md, or HOOK.md).
- Distinctive: line 24
Run before considering any change done (same as CI):
≈ “Common” is an estimate: at least 1 in 5 of the 25,680 CLAUDE.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
dotclaude
Personal Claude Code registry: skills, agents, commands, and hooks, distributed via the shadcn registry and a Claude Code plugin marketplace. Full contributor guide: CONTRIBUTING.md.
The one rule: source vs generated
Every item lives at <type>/<category>/<name>/<MANIFEST> (SKILL.md, AGENT.md, COMMAND.md, or HOOK.md). Everything else is derived by pnpm gen:
- each item's
registry.jsonand the rootregistry.json - the README catalog, badges, and plugins table (between
<!-- ... -->markers) - everything under
.claude-plugin/(marketplace + per-plugin trees) site/data.json, the one file the catalog site reads- one crawlable page per item and per plugin under
site/<type>/<name>/andsite/plugins/<name>/(plus each item'sindex.md),site/sitemap.xmlandsite/llms-full.txt, all fromscripts/site-pages.ts NOTICE.md, the attributions collected from every manifest's## Attributionsection
Never hand-edit generated files. Edit the source manifest, run pnpm gen, and commit the regenerated output. pnpm gen:check fails CI when anything is stale.
The catalog site lives in site/: static HTML, CSS, and JS with no build step and no runtime dependencies, deployed to dotclaude.khaledsaeed.tech by .github/workflows/pages.yml on every push to main that touches site/. Its only data source is the generated site/data.json, so the site never needs editing when items change; index.html, styles.css, app.js and 404.html are hand-written and Biome-linted like the rest of the repo. Three marked regions inside index.html (meta, rows and jsonld) and site/llms.txt are generated too, so crawlers that do not run JavaScript still see the full catalog. The home page keeps its filters in the query string (/?q=&type=&category=&plugin=&sort=); old #/ hash links redirect. Every other page is generated by scripts/site-pages.ts: the per-item and per-plugin pages (the canonical URLs for search and answer engines, with their own title, description, Open Graph, BreadcrumbList and SoftwareSourceCode JSON-LD, the rendered manifest, a table of contents and the plugin's sibling items), site/plugins/index.html and site/install/index.html. The shared header and footer live in site-pages.ts and in index.html; change both together. Preview locally with any static server, e.g. python3 -m http.server 4173 --directory site, and run pnpm test:e2e (Playwright, e2e/) after touching anything under site/ or site-pages.ts; CI runs it on a desktop and a phone profile.
One thing deliberately sits outside that rule: .agents/skills/improve/, surfaced to this repo's own sessions through the .claude/skills/improve symlink. It is tooling for working on the registry, not an item in it, so it is invisible to gen and validate, follows none of the item conventions, and ships to nobody. Anything under skills/, agents/, commands/, or hooks/ is a registry item; .agents/ is not.
Verification gate
Run before considering any change done (same as CI):
pnpm typecheck && pnpm lint && pnpm test && pnpm gen:check && pnpm validatepnpm coverage reports how much of hooks/ and scripts/ the suite actually
executes, and fails below 90%. It exists because the suite is black-box, hooks
run as child processes, so ordinary coverage tooling instruments only the
runner and reports a confident, wrong 0%. This collects V8 coverage from the
children and merges it. Use it to find untested branches, not to chase 100%:
some branches are platform-specific and unreachable on a given OS.
pnpm smoke is the slower end-to-end check CI also runs, kept out of the line above because it drives the real Claude Code CLI: it installs every generated plugin into a throwaway config dir, diffs the installed tree against the generated one, and runs each bundled hook script from its installed path (including that the deny rules still block). Run it after touching gen.ts's plugin logic or any hook script. It needs no auth or network beyond resolving the CLI, and leaves nothing behind.
pnpm validate also enforces content rules: no <TODO: scaffold markers in manifests, every description carries a trigger clause ("Use when ..."), no em dash anywhere in an item's markdown (manifest or companion file), an ## Attribution section (required on any item adapted from elsewhere) names a source URL and a permissive licence, an ## Inspired by section (for a shape followed with nothing copied) names a source URL, and a cross-reference like "the paper-reader skill" or "the /pr command" must name an item that exists. pnpm format fixes Biome formatting.
Adding an item
pnpm new --type skill --category engineering --name my-skill \
--description "What it does. Use when ..."The scaffolder writes a stub manifest and regenerates. Fill in the stub (validate fails while <TODO: remains), then run the gate.
Layout constraints worth knowing
- Agents and commands are file-layout: their folder must contain only the manifest;
pnpm genrejects extras. Skills and hooks are folder-layout: companion files ride along. - Item names are globally unique across all four types and must match their folder name.
- Hooks that take settings read
<project>/.claude/dotclaude.json(one key per hook, documented in eachHOOK.mdand the README) and fall back to defaults when it is absent or unreadable. - A plugin may pull in a skill from another category with
extraSkillsin itsPLUGINSentry (humanizeships in boththesisandwriting). Each plugin carries a semverversion; bump the minor when items are added, the patch when they change. - Hook scripts are standalone, zero-dependency
.mjsfiles (Node stdlib, node >= 18, deliberately below the repo's ownengines.node >= 20, because hooks run in the user's environment, not this repo's toolchain) that fail open (exit 0 on any internal error, exit 2 to block). They are copied verbatim into plugin trees, so a shared runtime module is not possible,command-guardandsmart-approveintentionally duplicate their deny rules, and the parity table inscripts/__tests__/hooks.test.tsis the drift guard: change the rules in both files and the table together. - Tests are black-box: hooks are spawned with the event JSON on stdin; gen/validate/new run against fixture repos in temp dirs. Follow those patterns.
Voice
Items address the agent in the second person, imperative, third-person descriptions with an explicit "Use when ..." clause. No AI/co-authorship mentions inside items or their output.
In this repository89 other files it gives its agents.
- site/llms-full.txtllms.txt
- site/llms.txtllms.txt
- improveSkill
- academic-writingSkill
- benchmark-reportingSkill
- bibtex-managerSkill
- citation-graphSkill
- citation-verifierSkill
- design-science-methodologySkill
- docx-thesisSkill
- experiment-reproducibilitySkill
- latex-toolkitSkill
- literature-searchSkill
- lit-review-synthesisSkill
- paper-readerSkill
- proofread-academicSkill
- research-figuresSkill
- research-methodologySkill
- research-questionSkill
- statistics-advisorSkill
- supervisor-updateSkill
- systematic-reviewSkill
- thesis-proposalSkill
- coolify-image-appSkill
- coolify-vps-baselineSkill
- deploy-verificationSkill
- express-prisma-coolify-imageSkill
- ghcr-coolify-pipelineSkill
- live-domain-cutoverSkill
- nextjs-coolify-imageSkill
- proxy-client-addressSkill
- vps-ops-toolkitSkill
- adr-writingSkill
- openapi-specSkill
- readme-writingSkill
- technical-writingSkill
- adversarial-reviewerSkill
- api-design-reviewSkill
- code-review-responseSkill
- create-agentSkill
- create-commandSkill
- create-hookSkill
- create-skillSkill
- db-migration-safetySkill
- dependency-upgradeSkill
- dockerfile-best-practicesSkill
- error-handling-patternsSkill
- executing-plansSkill
- explain-codebaseSkill
- fix-ciSkill
- github-actions-pipelineSkill
- grill-with-docsSkill
- incident-postmortemSkill
- logging-and-observabilitySkill
- parallel-agentsSkill
- performance-optimizationSkill
- refactoring-recipesSkill
- solid-principlesSkill
- systematic-debuggingSkill
- test-driven-developmentSkill
- The first 60 shown.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

