development-skills
CLAUDE.md0 starsChanged 32 days agoMITView on GitHub
Repo-specific rules for Claude Code when editing this repository. Violations of any rule below are blockers — fix before declaring a task complete. Prohibited forms: Type selection: Surface-specific overrides (apply first): For changes touching skills / code / other content (coarse rule): Scope selection: docs commits per the type-selection overrides above carry no scope — that surface IS the entire change. A chore commit takes the scope rules above: confined to one skill's directory it carries that skill's name, and…
- Commits and pushes
In this repository33 other files it gives its agents.
- authoritative-text-rulesSkill
- breachreaperSkill
- bug-to-contractSkill
- code-review-gateSkill
- codex-contract-test-reviewSkill
- codex-plan-reviewSkill
- codex-reviewSkill
- copilot-reviewSkill
- debtreaperSkill
- diff-rootSkill
- docreaperSkill
- done-checkSkill
- driftreaperSkill
- file-adrSkill
- file-issueSkill
- file-pubdocSkill
- file-pullreqSkill
- finding-to-auditSkill
- finding-triageSkill
- gate-miss-to-issueSkill
- gh-body-auditSkill
- gh-body-conventionsSkill
- implementSkill
- land-via-integration-branchSkill
- quality-listSkill
- read-issueSkill
- reimreSkill
- research-and-implementSkill
- researchSkill
- review-pipelineSkill
- review-telemetrySkill
- stage-commit-pushSkill
- todo-checkSkill
The file
We split this CLAUDE.md into the rules it gives an agent
8 rules. About 0 are common, 2 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 47
When bumped, the new version becomes the git tag for that commit.
- Very specific: line 50
If the month rolls over mid-series, reset p to 1 (e.g., 2026.5.99 → 2026.6.1).
- Distinctive: line 54
When adding or removing a skill, both lists must be updated in the same commit:
- Very specific: line 73
Verify before the first skill dispatch: ls -l <worktree>/.claude/skills/done-check must resolve to a path under the worktree.
- Very specific: line 94
Update .claude-plugin/marketplace.json as applicable:
- Very specific: line 97
Update plugins[0].skills (only if adding or removing a skill).
- Distinctive: line 99
Update README.md skill table (only if adding or removing a skill).
- Very specific: line 127
When review-telemetry records a run whose change has landed on main here, skills_version is the published state that change landed on, and …
≈ “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
CLAUDE.md
Repo-specific rules for Claude Code when editing this repository. Violations of any rule below are blockers — fix before declaring a task complete.
Commit message conventions
Prohibited forms:
refactor(<anything>): ...— SKILL has no "refactor" concept. The notion of refactoring does not apply at the skill level in this repo.<type>(skills): ...— the literal scope nameskillsis forbidden. Theskills/tree is the global context of this repo; usingskillsas a scope adds no information. Use a bare<type>: ...(no scope) for repo-wide changes, or name the specific skill(s).
Type selection:
Surface-specific overrides (apply first):
- Documentation-only change (top-level doc files including
README.mdandCLAUDE.md, anything underdocs/if added later) →docs(regardless of add/remove). These don't change plugin behavior, so no bump and no tag (see Versioning below). - Development tooling and repo metadata — a surface no consumer of the installed plugin can observe, because no
SKILL.mdstep reads or runs it:.claude-plugin/marketplace.json,.pre-commit-config.yaml,.gitignore, linter / formatter config, and a bundled test noSKILL.mdinvokes →chore(regardless of add/remove). Routine version bumps with no other change fall here. A file underskills/qualifies only when noSKILL.mdstep names it; anything a step names is skill content and takes the coarse rule below. - Pure formatting pass (whitespace, table padding, list renumbering, or any other output of a formatter such as
mdformatwith no semantic content change) →style, regardless of which files it touches (skills/included). These change no plugin behavior, so no bump and no tag (see Versioning below).
For changes touching skills / code / other content (coarse rule):
- Additions only (new skill, new lines, no content removed or swapped) →
feat - Removals or replacements (line deletions, content swaps, behavior changes that overwrite prior content) →
fix
Scope selection:
- Single skill change →
feat(<skill-name>): .../fix(<skill-name>): ... - Multiple skills changed in one commit →
feat(<skill1>,<skill2>): ...(comma-separated, no spaces) - Repo-global change that touches no skill and doesn't fit a
docs/choresurface override → no scope:feat: .../fix: ...
docs commits per the type-selection overrides above carry no scope — that surface IS the entire change.
A chore commit takes the scope rules above: confined to one skill's directory it carries that skill's name, and a repo-global tooling surface leaves it bare.
Versioning
.claude-plugin/marketplace.json carries metadata.version in CalVer YYYY.M.p form, where:
YYYY= 4-digit yearM= month (no zero-padding;2026.5.51, not2026.05.51)p= patch counter, not the day. Monotonically increases within a month.
Bump rule:
- Bump
metadata.versiononfeatandfixcommits only. These represent plugin-behavior changes that consumers should be able to pin to. - Do NOT bump on
docs,chore, orstylecommits. These are out-of-band housekeeping (README rewording, marketplace.json formatting / metadata edits that aren't a version, formatter output) and produce no consumer-visible behavior delta. - When bumped, the new version becomes the git tag for that commit. No
vprefix. - Example: current
2026.5.51→ nextfeat/fixcommit tags2026.5.52. Adocsorchorecommit between them carries no tag and leaves the version untouched.
If the month rolls over mid-series, reset p to 1 (e.g., 2026.5.99 → 2026.6.1).
Skill list maintenance
When adding or removing a skill, both lists must be updated in the same commit:
.claude-plugin/marketplace.json→plugins[0].skillsarray.README.md→ skill table under the appropriate category section.
Language-specific skills go under skills/languages/<Language>/<skill-name>/ (current examples: skills/languages/Rust/cargo-mutants, skills/languages/Rust/rust-ffi-rule). The marketplace.json skills entries use the relative path including the languages/<Language>/ prefix.
Worktree development
Work on this repository in a git worktree by default. The main checkout is for reading and for the exceptional direct commit only. A worktree cannot check out main (the main checkout holds it), so worktree changes land through the "PR + squash merge" lane below.
Wire the skills into the worktree
Immediately after creating the worktree, before editing any file, wire the worktree's own skills into it, from inside the worktree:
cd <worktree> && add-skill .Verify before the first skill dispatch: ls -l <worktree>/.claude/skills/done-check must resolve to a path under the worktree. Any step that resolves <SKILLS_DIR> (done-check, todo-check, and the like) must land on the worktree side — check the resolved path, not the skill name.
Settle the version number at the merge gate
Concurrent worktrees all bump from the same main, so the number a branch picks while implementing is provisional — another branch can land it first. At the merge gate, before merging, read the published value with git show origin/main:.claude-plugin/marketplace.json (fetch first). If the branch's metadata.version is no longer the next patch counter from that value, re-bump to the correct one and push that fix-up. This does not add a second bump: the branch still carries exactly one bump (see "Landing a branch"), and only its value is revised. The tag applied after the merge is the settled value.
Commit workflow
A change reaches main one of two ways; determine which before you bump or tag, because the timing differs:
- Direct commit to
main— available only in the main checkout, which is the exception (see "Worktree development"). The commit you create is itself the published change. Bump and tag on it, following "Landing a direct commit" below. - PR + squash merge — any reviewed-implementation flow (
reimre,review-pipeline, and the like) puts several commits on a feature branch that collapse into one squash-merge commit onmain. The published unit is that merge commit, not the branch commits. Follow "Landing a branch" below.
"Every commit" below applies to both lanes, worktree branches included; the lanes diverge only in when the version is tagged and pushed.
Every commit
For every commit, on main or on a branch:
- Make the code / skill / doc changes.
Update
.claude-plugin/marketplace.jsonas applicable:- Bump
metadata.version— only onfeat/fixcommits; skip ondocs/chore. On a branch this happens once for the whole branch, not once per commit (see "Landing a branch"). - Update
plugins[0].skills(only if adding or removing a skill).
- Bump
- Update
README.mdskill table (only if adding or removing a skill). Stage and commit with a conventional-commit message per the rules above.
Formatter-hook abort. A pre-commit hook that reformats files and reports
Failedbecause it modified files has aborted the commit — no commit was created andHEADdid not move. Re-stage the hook's output (git addthe reformatted paths) and re-run the commit until the hook reportsPassed. Do not proceed to tagging until a commit actually lands.
Landing a direct commit
On
feat/fixcommits only:git tag <new-version>on the commit just created.docs,chore, andstylecommits are not tagged.Verify before tagging. Confirm the commit landed and
HEADis the new commit (git log --oneline -1) beforegit tag. Tagging blind after a formatter-aborted commit ("Every commit", step 4) applies the version to the previous, unrelatedHEAD— a broken state. If a tag was misapplied,git tag -d <version>and re-tag once the real commit exists.Push:
feat/fix:git push && git push origin <new-version>(commit then tag explicitly).docs/chore/style:git push.
Tags in this repo are lightweight (
git tag <name>, no-a).git push --follow-tagsonly pushes annotated tags, so it will silently skip lightweight tags — always push lightweight tags by name. If afeat/fixcommit lands on the remote without its corresponding tag, that is a broken state — push the tag immediately.
Landing a branch (PR + squash merge)
The branch commits are drafts; only the squash-merge commit lands on main. Two consequences:
- Bump at most once. Bump
metadata.versiona single time on the branch — on the firstfeat/fixchange — and leave it untouched on the fix-up commits that answer review feedback. All branch commits squash into one, which must carry exactly one bump; re-bumping per fix-up commit is wrong. - Tag after the merge, never on the branch. The squash merge creates a new commit on
mainwhose SHA exists nowhere on the branch, so a tag placed on a branch commit would not point at the published change. Once the PR merges, check outmain, pull, thengit tag <version>on the squash-merge commit andgit push origin <version>.
Telemetry record for a run of this repository
When review-telemetry records a run whose change has landed on main here, skills_version is the published state that change landed on, and this replaces that skill's definition of the field for the run — its command and its attestation alike:
git describe --tags --always <landing-commit>^<landing-commit> is the squash-merge commit (gh pr view <N> --json mergeCommit --jq .mergeCommit.oid), fetched with git fetch origin, or on the direct lane the commit itself.
Record what the command returns.
A run whose change has not landed takes the skill's definition unchanged.
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.

