drift
AGENTS.md0 starsChanged 2 months agoMITView on GitHub
This file is the single source of guidance for coding agents working in this repository. CLAUDE.md imports it and adds nothing but Claude Code specifics, so put repository facts here and do not maintain a second copy. A collection of agent skills for design system operations: token architecture, component API design and adoption auditing. It ships two ways, via npx skills add shashanksdesign/drift and as the Claude Code plugin drift served by the marketplace in this same repository. It is…
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,774 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository4 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- component-apiSkill
- design-system-auditSkill
- design-tokensSkill
The file
We split this AGENTS.md into the rules it gives an agent
5 rules. About 0 are common, 4 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
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
- Distinctive: line 59
When a concern crosses skills, keep the rule in the owner above and let the other name only the handoff:
- Distinctive: line 71
Every command in a reference file must be runnable as written, against a real project, with its assumptions stated above it.
- Distinctive: line 74
Prefer counts and lists that cannot go stale.
- Very specific: line 76
No serial comma. Write tokens, components and drift, never tokens, components, and drift.
- Distinctive: line 82
One statement of each rule: Before adding a sentence, check whether the file already says it somewhere else.
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.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
AGENTS.md
This file is the single source of guidance for coding agents working in this repository. CLAUDE.md imports it and adds nothing but Claude Code specifics, so put repository facts here and do not maintain a second copy.
What this repository is
A collection of agent skills for design system operations: token architecture, component API design and adoption auditing. It ships two ways, via npx skills add shashanksdesign/drift and as the Claude Code plugin drift served by the marketplace in this same repository. It is documentation-only, with no build, lint, or test tooling.
.claude-plugin/plugin.json and .claude-plugin/marketplace.json define the plugin and its marketplace. Both are named drift, so plugin users invoke skills as /drift:design-system-audit while skills-CLI users invoke /design-system-audit. Skills are discovered from skills/ automatically, so adding one needs no manifest change.
Bump version in plugin.json in the same commit as any change under skills/. That number is the only signal plugin users update on, and a change shipped without a bump reports "already at the latest version" and never reaches them. Run claude plugin validate . after touching either manifest.
opencode.json registers skills/ under skills.paths so opencode loads the collection while this repository itself is open, which is for working on the skills rather than distributing them.
Scope
This collection owns design system operations: the decisions that keep a system usable after it exists. It does not own interface craft. Typography, color values, layout, motion aesthetics and accessibility have a good home in the better-* family, and duplicating a rule that lives there makes both copies worse.
The test for a new skill: does it answer a question a design system owner has on a Tuesday, about a system that already exists? Token naming, yes. Deprecation, yes. Which easing curve feels right, no.
Structure
Each skill lives in skills/<skill-name>/, with SKILL.md as the entry point, supporting files in references/ and a harness config in agents/openai.yaml.
Skills come in two shapes. A domain skill holds knowledge: what is true about tokens or about component APIs. A verb skill holds a procedure: audit this codebase. A procedure sitting inside a domain skill is a candidate for extraction, and a domain rule sitting inside a verb skill belongs to its owner instead.
Every SKILL.md carries:
- Frontmatter with
namematching the directory anddescription. - A plain-name H1 and a two-sentence opener saying what the skill is and what it does. Not what the domain means or why it matters: an agent does not need motivating.
- A calibration section, with a heading that carries its own point (
Exact, or say you did not check), saying how hard to press. Which values are exact rather than approximate, what counts as a finding versus a preference, when the right answer is to write nothing. A skill that lists rules without saying how hard to press leaves that to chance. - Headings that carry the point, in sentence case.
Count roles, not values, notAuditing. Number them only where the steps genuinely run in order, asdesign-system-auditdoes. Numbering flat reference implies a sequence that is not there and makes every insertion a renumber. - A hand-off line naming the sibling skills that own adjacent topics, by skill name in backticks.
- A
## Before you finishtable, two columns. The left column is the detection pattern, which is what a principle statement does not give you. The heading names the moment on purpose:Common mistakesis a label an agent reads past while orienting. - A
## Reportingsection carrying that skill's severity ladder, its verification checks and its output format.
Supporting files in references/ carry depth beyond the principle statements: procedures, code patterns, lookup tables. Link each from the principle that needs it, so the link sits where the agent lands. A principle states the rule and links out for the recipe. It never restates the reference file in shorter form, and the reference file never restates the principle in longer form.
Each rule lives in exactly one skill. Other skills point to it by skill name in backticks, never by cross-skill relative link, because each skill directory ships on its own. That standalone requirement is also why the three ## Reporting sections overlap, and that overlap is the price of a skill that works when installed alone.
Point at a principle by its heading in bold (Count roles, not values), never by its number. A numbered reference breaks silently the moment a principle is inserted above it, and nothing in the file fails when it does.
Invocation
A user-invoked skill may invoke model-invoked skills, but it can never reach another user-invoked skill.
design-system-auditis the only user-invoked skill. It carriesdisable-model-invocation: truein its frontmatter andpolicy.allow_implicit_invocation: falsein itsagents/openai.yaml. Those are the Claude Code and Codex halves of one switch and must be set together, or the skill behaves differently per harness.- It is user-invoked because auditing a whole codebase is never something to start on someone's behalf. It runs dozens of greps, writes a report sized for a planning meeting and asks scoping questions only a person can answer. An agent firing it after every component it touched would produce work nobody asked for.
design-tokensandcomponent-apiare model-invoked, because something must reach them. They are also wheredesign-system-auditroutes every finding.
Rule ownership
| Skill | Owns |
design-tokens | Tier architecture and the component-may-not-read-a-primitive boundary, the role inventory across every token category, semantic naming grammar, the collapse procedure, theme completeness and the Figma variable mirror |
component-api | Variant axes and invalid combinations, prop naming vocabulary, the configuration-to-composition threshold, slots and compound components, controlled and uncontrolled state, escape hatches and the deprecation path |
design-system-audit | Audit scope resolution, the eight detection passes, the gap / bypass / exception classification, the two adoption scores and their arithmetic, remediation ranking and the report format. Owns no domain rules and issues no verdict |
When a concern crosses skills, keep the rule in the owner above and let the other name only the handoff:
design-tokensowns what a token should be named and where it may be read.design-system-auditowns finding the places that broke those rules, and names the finding indesign-tokensvocabulary.component-apiowns whether a prop should exist.design-system-auditowns counting how many call sites set it.design-tokensowns component-scoped tokens as a tier.component-apiowns which variant cell binds to which token, and states no naming rule of its own.- Color values, ramp construction and contrast measurement belong to
better-colorswhere that skill is installed.design-tokensowns the architecture those values sit in and never restates a ramp rule.
Authoring conventions
- Principles are prescriptive and specific: exact property names, exact values, exact commands. Not vague advice.
- Match the degree of prescription to the decision. A tier boundary is unconditional. A heuristic names its context and its escape conditions before giving exact values.
- Skills instruct agents to match the target project's existing conventions rather than impose one. A project on
variantshould not be told to rename toappearance; it should be told to pick one and grep the other to zero. - Every command in a reference file must be runnable as written, against a real project, with its assumptions stated above it. A command that needs adjusting says which part to adjust.
- Frontmatter
descriptionis how a skill gets found, and it is one or two plain sentences saying what the skill does for the user. It loads on every turn, so it earns harder pruning than the body. No trigger list: a keyword pile is a worse match signal than a clear sentence and goes stale the moment the skill's scope moves. The wording matches the skill's line inREADME.md, so changing one means changing both. - A skill's name appears in three places: its directory, its frontmatter
nameanddisplay_namein itsagents/openai.yaml. Renaming means changing all three, then grepping for the old name to confirm nothing survived. - Prefer counts and lists that cannot go stale. Say "every skill in this repository" rather than a number the next skill invalidates.
- Straight quotes, sentence-case headings. No em dashes and no parentheses or mid-sentence colons standing in for one: end the sentence or use a comma. En dashes are for numeric ranges only.
- No serial comma. Write
tokens, components and drift, nevertokens, components, and drift. The comma stays whereandjoins two clauses, and where dropping it would swallow an appositive.
Four checks after an edit, since prose drifts back toward the mean:
- No sentence over 30 words, counting a code span as one word. A ceiling, not an average. What makes a file hard to read is the individual 40-word sentence carrying four clauses, so split those and leave the rest alone.
- A description that matches its
README.mdline. Two wordings of one skill is one skill described twice. - One statement of each rule. Before adding a sentence, check whether the file already says it somewhere else. The reflex to restate a boundary for clarity is how a mistake table ends up repeating the principle above it.
- A pruning pass, not a word ceiling. Read each sentence and ask what it changes. A sentence that cannot be restated as an instruction, a fact, or a number is cut. A sentence that could appear unchanged in another project's docs says nothing about this one. Prose about this repository's own filing decisions belongs in this file, never in a skill.
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.

