skills
CLAUDE.md1 starsChanged 57 days agoMITView on GitHub
Repo stores agent skills in buckets under skills/. Each bucket groups skills by domain. Each skill = directory with SKILL.md + optional bundled resources: Each bucket is a plugin, and the bucket directory is its plugin root. See Plugin manifest. Skills in output-styles/ work both ways. <skill-name>.md holds the instructions as a native output style selectable from /config; SKILL.md sits beside it as a thin wrapper so the same style is still invokable as a skill:
In this repository47 other files it gives its agents.
- bump-versionsSkill
- obsolete-skillSkill
- prefer-direct-statementsSkill
- prefer-official-docsSkill
- prefer-skillsSkill
- extract-llms-txtSkill
- init-agent-docsSkill
- maintain-agent-docsSkill
- retroSkill
- tanstack-data-loadingSkill
- customize-skillSkill
- writing-skillsSkill
- cte-modeSkill
- eli10-modeSkill
- example-drivenSkill
- plain-languageSkill
- simplified-technical-englishSkill
- ghost-writingSkill
- break-down-prdSkill
- draft-a-prdSkill
- from-first-principlesSkill
- round-tableSkill
- deep-researchSkill
- get-alignedSkill
- picking-modelsSkill
- todoSkill
- transcribe-videoSkill
- using-subagentsSkill
- using-teamsSkill
- visualiseSkill
- promptingSkill
- biome-pluginsSkill
- hardenSkill
- testing-principlesSkill
- devils-advocateSkill
- rubber-duckSkill
- steelmanSkill
- ddd-modular-monolithSkill
- module-designSkill
- ubiquitous-languageSkill
- wutSkill
- doc-commentsSkill
- writing-for-agentsSkill
- writing-for-humansSkill
- design-calloutsSkill
- design-dashboardsSkill
- prune-local-branchesSkill
The file
We split this CLAUDE.md into the rules it gives an agent
7 rules. About 0 are common, 0 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 65
Every bucket holding at least one skill is a separate plugin, rooted at skills/<bucket>/.
- Very specific: line 90
Every tracked *.py file therefore:
- Very specific: line 101
After adding a new skill: run uv run tests/check-manifest.py from repo root and fix any reported gaps before committing.
- Very specific: line 102
After touching anything in output-styles/: also run uv run tests/check-output-styles.py from repo root.
- Very specific: line 103
After changing the plain-language linter or its dictionary: also run uv run tests/check-linter.py from repo root.
- Very specific: line 105
After adding or editing any Python script: run uv run tests/check-encoding.py from repo root.
- Very specific: line 106
After editing any markdown: run npx markdownlint-cli2 --fix "/*.md" from repo root (auto-discovers .markdownlint-cli2.jsonc), then review …
≈ “Common” is an estimate: at least 1 in 5 of the 26,980 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
Skills Repository
Repo stores agent skills in buckets under skills/. Each bucket groups skills by domain.
Buckets
- drafting — Writing/editing: emails, docs, reports.
- planning — Turning an idea into a spec, and a spec into pickup-ready work.
- software-design — Designing code and the vocabulary it is built on, from a method to an architectural layer.
- quality — Making work hold up: stress-testing a change, and testing it so the tests can fail.
- frameworks — Building on one framework or library: the patterns its docs recommend and the pitfalls they leave out.
- technical-writing — Developer-facing writing: the documentation that ships with the code.
- version-control — Git hygiene and repository workflow.
- context-management — Building and managing agent context: the docs and reference indexes an agent reads before touching code.
- prompting — Prompting Claude models: drafting and revising prompts against the guidance for the model that runs them.
- personal — Personal productivity: scheduling, decisions, organisation.
- productivity — Workplace productivity: summarisation, research, meeting prep, task management.
- problem-solving — Working through a hard problem or decision: reasoning from fundamentals, debating between options.
- teaching — Explanation and comprehension: making an idea land, and repairing it when it does not.
- roles — Fixed-persona skills: advocate, listener, critic stances used to sharpen thinking.
- ui-ux — User interface and experience design: dashboards, visual design, usability.
- output-styles — Tone and voice modes: communication style presets for different audiences and needs. Each one is a native Claude Code output style (
<skill-name>.md) with aSKILL.mdwrapper. See Output styles. - agent-config — Configuring the agent itself: standing rules and hooks that apply before any task begins.
- meta — Meta-skills: skills about authoring, vetting, and evaluating skills themselves.
Structure
Each skill = directory with SKILL.md + optional bundled resources:
skills/
<bucket>/
.claude-plugin/
plugin.json required: the bucket's plugin manifest
<skill-name>/
SKILL.md required: YAML frontmatter + instructions
scripts/ optional: executable scripts
references/ optional: docs loaded into context as needed
assets/ optional: templates, icons, other output filesEach bucket is a plugin, and the bucket directory is its plugin root. See Plugin manifest.
- The top-level
README.mdhas one section per public bucket (agent-config/,drafting/,planning/,software-design/,quality/,frameworks/,technical-writing/,version-control/,context-management/,prompting/,productivity/,problem-solving/,teaching/,roles/,ui-ux/,output-styles/): bucket blurb + a link to that bucket'sREADME.md. It does NOT list individual skills. - Each bucket
README.mdlists all its skills with one-line descriptions, skill names linked toSKILL.md. The bucketREADME.mdis the single source of truth for a skill's one-liner — it is the only place that one-liner lives. - Skills in
personal/must not appear in any public README.
Output styles
Skills in output-styles/ work both ways. <skill-name>.md holds the instructions as a native output style selectable from /config; SKILL.md sits beside it as a thin wrapper so the same style is still invokable as a skill:
skills/output-styles/
cte-mode/
cte-mode.md native output style — the instructions live here
SKILL.md wrapper: reads cte-mode.md, adds session framing- The instructions live in the native file only.
SKILL.mdtells the agent to read its sibling and adopt it, plus the session framing an output style cannot express — that the style holds until the user asks to stop. - Native frontmatter:
namematching the directory, the samedescriptionas the skill, andkeep-coding-instructions: true. Do not setforce-for-plugin. - The files are never placed in a root
output-styles/directory. Plugin roots are the bucket directories, so anything outsideskills/<bucket>/is unreachable by every plugin.
Plugin manifest
Every bucket holding at least one skill is a separate plugin, rooted at skills/<bucket>/. Two files declare it, and neither repeats the other:
.claude-plugin/marketplace.json— one entry per bucket, two fields:namematching theplugin.jsonname, andsourceset to./skills/<bucket>. Nothing else. Claude Code reads the rest fromplugin.jsonbecause the source is a relative path inside the marketplace. Empty buckets get no entry.skills/<bucket>/.claude-plugin/plugin.json—name,version,description,author, and"skills": ["./"].
"skills": ["./"] is what loads the bucket's <skill-name>/SKILL.md children: the plugin root is the bucket, which has no nested skills/ directory to auto-discover, and without the field the plugin loads zero skills. Write "./", not "." — both mean the plugin root to Claude Code, but npx skills drops any path that does not start with ./.
- Adding a skill to an existing bucket needs no manifest edit at all.
- Adding a bucket needs one marketplace entry and one
plugin.jsonatversion: "0.1.0". - Bump the bucket's
plugin.jsonversion when its skills change. Once per feature branch max. - Output style skills also need their native
.mdpath in the bucketplugin.jsonoutputStylesarray, relative to the bucket root (./<skill-name>/<skill-name>.md). List explicit file paths, never a directory. - Skills that ship a hook keep only the handler script inside the skill directory (
hooks/<handler>.sh) and declare thehooksobject in the bucketplugin.json, where${CLAUDE_PLUGIN_ROOT}is the bucket directory. Inline object form only (event name -> matcher array); a file path or array of paths fails to load. Never add ahooks/hooks.jsonanywhere in the repo — an auto-discovered second manifest conflicts withplugin.jsonand the plugin fails to load. personal/is a plugin like any other. It is kept out of the public READMEs, not out of the manifest.
Project Configuration Conventions
Skills that require per-project configuration use a shared dotfolder and config file:
.draekien/directory — vendor-namespaced folder at the project root. See specs/draekien.md..draekien/.skillsrc— JSON config file keyed by skill name. See specs/skillsrc.md. When writing a new skill that needs per-project config, register its keys in the Registered Keys table in that spec.
Python scripts
Scripts run on every platform, so they normalise their own text I/O rather than trusting the console codepage. Python otherwise decodes with the locale encoding — cp1252 on Windows — which cannot encode characters these scripts print routinely, and print(f"{src} → {dst}") dies with UnicodeEncodeError.
Every tracked *.py file therefore:
- reconfigures
sys.stdoutandsys.stderrto UTF-8 at import time, straight after the imports; - passes
encoding="utf-8"to everyopen(),read_text()andwrite_text(); - passes
encoding="utf-8"to everysubprocesscall that setstext=True.
uv run tests/check-encoding.py enforces all three. Running a script by hand on Windows, PYTHONUTF8=1 additionally forces UTF-8 for any file opened without an explicit encoding.
Workflow
- New skill in this repo: author it with
writing-skills. - After adding a new skill: run
uv run tests/check-manifest.pyfrom repo root and fix any reported gaps before committing. - After touching anything in
output-styles/: also runuv run tests/check-output-styles.pyfrom repo root. - After changing the plain-language linter or its dictionary: also run
uv run tests/check-linter.pyfrom repo root. - After changing a shared script in
specs/or copying one into a skill: runuv run tests/check-shared-scripts.pyfrom repo root, and--fixto propagate an edit to every copy. Never symlink a shared script into a skill — symlinks do not survive checkout on Windows without Developer Mode; ship a real copy. - After adding or editing any Python script: run
uv run tests/check-encoding.pyfrom repo root. See Python scripts. - After editing any markdown: run
npx markdownlint-cli2 --fix "**/*.md"from repo root (auto-discovers.markdownlint-cli2.jsonc), then review the autofixed diff and resolve any remaining reported errors before committing. - A skill that references another skill by name must say how to install it: the plugin that ships it and the
npx skills addroute. Never reimplement the referenced skill as a fallback. Authoring rule lives inwriting-skillsunder Craft. - Match skill body complexity to task complexity — if the agent already knows how to execute the task, one sentence beats a structured checklist.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
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.

