spec
Skill0 starsChanged 3 months agoMITView on GitHub
Creates, translates, indexes, deduplicates, and drift-checks multilingual specifications stored under the project's spec/ folder. Invoke when the user wants to write a new spec, update or translate an existing one, check whether a requirement is already covered, regenerate the spec index, or verify that translations are still in sync with the canonical version. Supports writing the request in any configured language; specs on disk always exist in all configured languages, with one canonical source and the rest as translations kept strictly in sync. Don't use for readiness audit (contradiction detection, audience fit, AC coverage) — use spec-readiness-reviewer. Supports resume on re-invocation per `spec/claude/resumable-work/`.
168 other projects use a version of this.
Adopted by
Most recently taken up by
- thistleknot/skillstheir own version, first seen Nov 8, 2026
- varelaia/claude-skills-publictheir own version, first seen Nov 8, 2026
- mrlemoos/galiciatheir own version, first seen Nov 8, 2026
- PeanutGT/NutsSkillstheir own version, first seen Nov 8, 2026
- standardagents/skillstheir own version, first seen Nov 8, 2026
- Surething-io/cockpittheir own version, first seen Nov 8, 2026
Used with
Projects with it also use backprop, ios-clean and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
JuliusBrusseeSkillbackprop
Bug → spec protocol. When a bug is found or a test fails, trace the cause, decide whether a new §V invariant would catch recurrence, append to §B. This is the one non-obvious thing SDD does that plan-then-execute doesn't. Triggers on test failure, bug report, post-mortem, or explicit user ask.
Also in 4 projects that use this
Saqlain-811Skillios-clean
Remove the DebugBridge SPM package and all #if DEBUG wiring from an iOS app. (gstack)
Also in 5 projects that use this
Saqlain-811Skillios-fix
Autonomous iOS bug fixer. (gstack)
Also in 5 projects that use this
bastosSkillios-design-review
Review iOS app UI/UX design quality using Apple's design principles and the Liquid Glass-era design language from WWDC25/26. Use when asked for a design review, UX critique, visual design assessment, or evaluation of an app's interface quality, design intent, alignment with the new Apple design system, or usability. Triggers: "design review", "UX review", "visual design critique", "review the UI", "does this design work", "evaluate this interface", "design feedback", "Liquid Glass review".
Also in 5 projects that use this
ShreyRaviSkillplan-tune
Self-tuning question sensitivity + developer psychographic for gstack (v1: observational). Review which AskUserQuestion prompts fire across gstack skills, set per-question preferences (never-ask / always-ask / ask-only-for-one-way), inspect the dual-track profile (what you declared vs what your behavior suggests), and enable/disable question tuning. Conversational interface — no CLI syntax required.
Also in 7 projects that use this
timurgaleevSkilldocument-generate
Generate missing docs for a feature, module or project as tutorials, how-tos, reference and explanation.
Also in 6 projects that use this
- +2 more from Saqlain-811
Other versions168 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 168
- garrytan/gstack★ 141ksame name
- getsentry/sentry-react-native★ 1.8ksame name
- JuliusBrussee/cavekit★ 1.1ksame name
- kdlbs/kandev★ 1.1ksame name
- getsentry/sentry-dart★ 878same name
- poshan0126/dotclaude★ 871same name
- codewithmukesh/dotnet-claude-kit★ 808same name
- SparkDevNetwork/Rock★ 701same name
- hyperlink-academy/leaflet★ 527same name
- strands-agents/box★ 503same name
158 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository36 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- audience-identifySkill
- backlog-delivery-orchestrateSkill
- backstage-catalog-generateSkill
- blog-authorSkill
- blog-author-triggerSkill
- cicd-pipeline-designSkill
- continuous-improvement-triageSkill
- cookiecutter-template-manageSkill
- docs-audience-tracks-applySkill
- docs-dry-refactorSkill
- github-issue-templates-applySkill
- issue-backlog-partitionSkill
- issue-batch-orchestrateSkill
- issue-orchestrateSkill
- lektorat-applySkill
- lektorat-auto-reviseSkill
- mermaid-diagrams-applySkill
- mkdocs-structure-applySkill
- permission-allowlist-maintainSkill
- portfolio-auditSkill
- portfolio-inflight-triageSkill
- project-structure-applySkill
- pull-request-createSkill
- pull-request-mergeSkill
- pull-request-runner-sweepSkill
- readme-structure-applySkill
- release-notes-curateSkill
- release-publish-triggerSkill
- requirements-elicitSkill
- spec-drift-auditSkill
- tech-stack-captureSkill
- vocab-drift-auditSkill
- workflow-health-triageSkill
- working-copy-startSkill
- yaml-json-schemaSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
20 rules. 0 are common, 9 are distinctive, and 11 are very specific to this project.
0
Common
Most of the 145 edited versions we read keep these.
9
Distinctive
This author's own choices. Worth a look.
11
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 75
If the file is missing, use the defaults.
- Distinctive: line 90
If the user describes a feature in a non-canonical language, still produce the canonical version first, then translate.
- Very specific: line 108
Write spec/[<topic>/]<slug>/<lang>.md for every configured language in a single operation—never leave a spec partially written.
- Distinctive: line 115
If the user edits the canonical version: regenerate every translation from it.
- Distinctive: line 116
If the user edits a translation directly: warn that changes must flow through the canonical.
- Distinctive: line 119
After any update operation, all language files for that spec must match structurally and semantically.
- Very specific: line 123
every cross-reference to the changed rule, including §X anchors that may now point at the wrong section.
- Very specific: line 139
Run against each source's pinned ref, not against the hub's current develop, so conformance is judged against the exact upstream the …
- Distinctive: line 140
Run the comparisons canonical-to-canonical (in the hub's canonical language).
- Very specific: line 148
Write spec/README.md with a table:
- Very specific: line 153
Don't invent values—if something can't be read, mark it unknown.
- Distinctive: line 171
If real specs repeatedly need a section the template lacks → propose adding it.
- Distinctive: line 172
If template sections stay empty across most specs → propose trimming them.
- Distinctive: line 174
Don't silently modify the template.
- Very specific: line 178
Read examples/01-create-new-spec-multilingual.md when creating a new spec from scratch in all configured languages simultaneously.
- Very specific: line 179
Read examples/02-translate-existing-spec.md when translating an existing canonical spec into a second language.
- Very specific: line 180
Read examples/03-drift-check-translations.md when checking whether a translation has drifted from the canonical version.
- Distinctive: line 195
After any operation that touches spec content, translations must be in sync with the canonical—no drift, ever.
- Very specific: line 197
Never modify spec/.spec-config.yml without telling the user.
- Very specific: line 198
Never invent Status, dates, or requirement content.
“Common” is measured: kept by at least 6 in 10 of the 145 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Multilingual Spec Skill
Manages specifications inside a project's spec/ folder. Layout: one folder per spec, one file per language. Specs may optionally be grouped under a one-level topic folder.
Why this is a skill, not an agent
- Mid-flow interactivity is the contract — duplicate-check confirmation ("extend existing, supersede, or proceed as new?"), translation review, slug-rename gates, and drift-resolution choices are all per-step user dialogues; an agent's fire-and-forget contract would lose them.
- Persistent on-disk artifact is the deliverable — every operation writes spec files (canonical + translations) under
spec/[<topic>/]<slug>/<lang>.mdin pairs and may also regeneratespec/README.md; skills own persistent state. - Multilingual sync requires conversational context — when a translation drifts from the canonical, the skill negotiates the resolution with the user (lift the change, discard the edit) rather than picking silently; that gating only fits in a skill.
- Counter-dimension considered: translation itself benefits from a narrow specialised prompt, but the load-bearing dimension is the canonical-vs-translation flow control, not the per-string translation quality — skill wins; if translation quality ever needs sharpening, dispatch a translation agent from inside this skill rather than reshaping it.
spec/
├── .spec-config.yml
├── README.md # autogenerated index
└── [<topic>/]<slug>/
├── en.md # canonical
└── de.md # translationTopic folders group related specs (for example spec/api/, spec/claude/). Only one level of topic nesting is allowed. Without a topic, specs live directly under spec/<slug>/.
Defaults
- Canonical language:
en - Translations:
de - Spec root:
spec/(relative to project root)
Overridable via spec/.spec-config.yml (validated against schemas/spec-config-v1.0.schema.yaml by scripts/validate_schemas.py):
canonical_language: en
languages: [en, de]
spec_root: spec
inherits: # optional — portfolio-inherited spec layer
- source: nolte-shared # the hub plugin whose portfolio-scope specs are inherited
ref: v0.1.8 # tag-pinned hub release (never a floating branch)
overrides: # optional declared deviations from inherited specs
- spec: project/branching-model
section: "§Branch roles"
reason: "trunk-based repo; the long-lived develop branch role does not apply"
local: spec/project/branching-model/override.mdIf the file is missing, use the defaults. Create it on the first create operation so downstream projects have a visible extension point.
Portfolio-inherited spec layer (the inherits: key)
Per spec/project/portfolio-inherited-spec-layer/, a consumer repo may reference portfolio-wide specs that live canonically in a hub (claude-shared) instead of copying them. The contract this skill must respect:
inherits:is optional and absent on the hub itself (the hub is the root; resolution terminates there). A consumer's effective spec set islocal ∪ inherited— the localspec/tree plus every hub spec whose canonical file carries aPortfolio-Scope: portfolioheader, resolved at each source's pinnedreffrom${CLAUDE_PLUGIN_ROOT}/spec/.- A spec is inheritable only if its canonical file carries a
Portfolio-Scope:header line (sibling toStatus:), valueportfolioorlocal. A spec with no such line defaults tolocal. When creating or editing a spec, preserve anyPortfolio-Scope:line; do not addportfolioscope unprompted (promoting a spec to portfolio-wide is an explicit maintainer act). - Inherited specs are authoritative by default. A consumer deviates only through a declared
overrides:record (with a non-emptyreason:) plus alocaloverride file containing only the replaced sections — never by copying the inherited spec into the local tree, and never by an undeclared same-key local spec. - A requirement marked
[locked]immediately after its RFC 2119 keyword (- **MUST** [locked] …) is non-overridable downstream; never author an override against a locked section.
User-language policy
- Detect the user's language from their message and reply in that language.
- Spec files on disk always exist in every configured language. The canonical file is authoritative; translations must mirror it semantically.
- If the user describes a feature in a non-canonical language, still produce the canonical version first, then translate.
Slug and topic rules
- Slug: ASCII kebab-case, derived from the canonical EN title. Example: user says "Benutzer-Authentifizierung" → canonical title "User Authentication" → slug
user-authentication. - Topic (optional): ASCII kebab-case, chosen to group related specs. Use an existing topic if one fits; otherwise propose a new one to the user before creating it.
- Slugs and topics are stable. Renaming is a conscious operation—confirm with the user before moving folders.
Operations
1. Create
- Take the user's description (any language).
- Duplicate check first (see operation 5). If clear overlap exists, stop and ask: extend existing, supersede, or proceed as new. Show candidate paths.
Draft the canonical spec from
templates/spec.template.md, filling every section with content from the user's description. Mark unknowns explicitly instead of inventing.Ground every load-bearing claim the draft makes about the working copy — a cause, a state ("this component is unreachable"), an existence ("the helper is already there"), an absence ("no caller remains"). Per
spec/claude/claim-provenance/, write each such claim as established, naming the observation that established it (a command with its output, or afile:line), or as unestablished, naming the observation that would settle it and stating it wasn't made. When that observation is cheap with the means at hand — aGrep, aRead, one command — make it rather than publish the claim unestablished; the unestablished exit obliges the spec to say what makes the observation expensive. The same rule governs prose that operation 2 lifts into the canonical, and translations mirror the canonical's provenance markers unchanged.- Translate into each other configured language. Translation preserves structure (headings, requirement order, checklist items). RFC 2119 keywords stay in English and are glossed in-language, for example
MUSS [MUST],SOLLTE [SHOULD],KANN [MAY]. The acceptance-criteria heading takes one contract form per language,## Acceptance Criteriain English and## Akzeptanzkriterienin German; a translation never coins its own variant, because tooling and cross-references look the section up by that exact heading. - Write
spec/[<topic>/]<slug>/<lang>.mdfor every configured language in a single operation—never leave a spec partially written. - Regenerate
spec/README.md(operation 4). - Confirm in the user's language with relative paths.
2. Update / prevent drift
- The canonical version is the only source of truth.
- If the user edits the canonical version: regenerate every translation from it.
- If the user edits a translation directly: warn that changes must flow through the canonical. Offer:
- (a) lift the semantic change into the canonical, then regenerate all translations, or
- (b) discard the translation edit and regenerate from the canonical.
- After any update operation, all language files for that spec must match structurally and semantically.
- Every changed requirement is followed to what restates it, in the same pass. A spec restates its own rules in several places, and an edit that reaches the rule but not its restatements leaves the corpus asserting the old and the new version at once. Before the update is finished, walk each changed requirement through:
- the acceptance criteria that roll it up — a criterion carrying an exception the requirement no longer has is the single most common form of this defect;
- any stated count the change invalidates ("seven dimensions", "the three grounding specs", "these four decisions");
- every cross-reference to the changed rule, including
§Xanchors that may now point at the wrong section; - the artifacts outside the spec that restate it — a skill's
references/digest, a checklist, a template — since they go stale silently and no spec-level check sees them.
- This walk is not optional tidying:
spec/project/spec-readiness/§Dimension 3 flags a stale restatement as aWarning, because a downstream consumer that reads the acceptance criterion as the gate will implement the abandoned rule. For a skill's own supporting files,spec/claude/skill-management/§"Progressive disclosure & file references" carries the matching obligation andspec/claude/skill-review/verifies it against the skill'sSKILL.md. Keeping a skill in step with a spec this edit changed has no automated gate at all — that is why it belongs in this walk, done by the author, in the same pass.
3. Drift check
A. Translation-vs-canonical drift (always):
- For every spec folder, compare each translation to the canonical:
- Same headings in the same order
- Same count of requirement bullets and acceptance-criteria checkboxes
- Same requirement IDs / ordering
- Report mismatches. Offer to regenerate the affected translations from the canonical.
B. Local-vs-inherited drift (only when spec/.spec-config.yml carries an inherits: key; per spec/project/portfolio-inherited-spec-layer/ §"Drift detection"):
- Run against each source's pinned
ref, not against the hub's currentdevelop, so conformance is judged against the exact upstream the consumer pinned. Resolve the inherited corpus from${CLAUDE_PLUGIN_ROOT}/spec/at that release. - Run the comparisons canonical-to-canonical (in the hub's canonical language); never compare against a translation view, which is derived and never authoritative.
- For each
inherits:source, report:- Critical — a tracked verbatim copy of an inherited spec in the local
spec/tree; a local spec sharing a logical key<topic>/<slug>with an inheritedportfolio-scope spec without a declared override (undeclared divergence); anoverrides:record whosesectioncontains a[locked]requirement; a cross-reference that is a ghost reference or a duplicate-key collision in the combined namespace; a cyclic inheritance declaration. - Warning — an
overrides:specthat does not resolve to aportfolio-scope spec at the pinnedref(broken reference); an overriddensectionthat no longer exists upstream (stale override); an empty or missingreason; a floating or absentref.
- Critical — a tracked verbatim copy of an inherited spec in the local
- Severities are the canonical scale from
spec/claude/review-plan/§"Severity scale"; surface findings forspec-drift-auditto reconcile. Treat any open Critical as a gate failure (the silent fork must not reachdevelop).
4. Regenerate index
- Write
spec/README.mdwith a table:- Topic | Slug | Title (per language) | Status | Scope | Last updated
Statusis read from theStatus:line in the canonical file's header. If absent, usedraft.Scopeis read from thePortfolio-Scope:line in the canonical file's header (portfolio|local). If absent, uselocal(the default perspec/project/portfolio-inherited-spec-layer/). This column makes the inheritable subset visible at a glance.Last updatedusesgit log -1 --format=%cs -- <canonical file>. If the file is untracked, useunversioned.- Don't invent values—if something can't be read, mark it
unknown.
5. Coverage / duplicate check
Can be invoked standalone ("is X already covered?") or as step 2 of create.
- Extract salient nouns/verbs from the user's requirement.
Grepthe canonical files underspec/for those terms.Readevery canonical file with more than one keyword hit and assess semantic overlap against the user's requirement—not just keyword overlap.- Respond in the user's language with:
- which existing specs fully cover the requirement,
- which partially cover it and the specific gap,
- none, if no overlap.
Template maintenance
The starter template at templates/spec.template.md is deliberately minimal. Every time this skill is used for a non-trivial spec, briefly assess fitness:
- If real specs repeatedly need a section the template lacks → propose adding it.
- If template sections stay empty across most specs → propose trimming them.
Don't silently modify the template. Surface the proposal to the user and let them decide.
Examples
- Read
examples/01-create-new-spec-multilingual.mdwhen creating a new spec from scratch in all configured languages simultaneously. - Read
examples/02-translate-existing-spec.mdwhen translating an existing canonical spec into a second language. - Read
examples/03-drift-check-translations.mdwhen checking whether a translation has drifted from the canonical version.
Gotchas
spec/.spec-config.ymlis the authoritative language source: the canonical language and the full language list come from this file; if it is missing, fall back toen/[en, de]defaults but create the config on the firstcreateoperation — guessing language settings from the conversation language will produce wrong canonical paths in multilingual repos.- Canonical file must be written first, translations second: if a spec is only partially written (canonical exists, translations absent), the repo is in a broken state per the "always together" rule; ensure the write step covers every configured language in a single operation or rolls back entirely.
git log -1forLast updatedrequires the file to be tracked: untracked spec files produce no git log output; the index regeneration step must handle this case by markingLast updatedasunversionedrather than leaving the cell empty or erroring out.
Resumability
Per spec/claude/resumable-work/, this skill is resumable: true. State is persisted to .resume/spec/<run-id>.yml after every successful user-approval gate and after each named phase boundary. On re-invocation, scan that directory for files with status: in_progress whose inputs: snapshot matches the current invocation; if one matches, prompt the operator with Resume run <run_id> from phase <phase> (last checkpoint <last_checkpoint_at>)? [resume / start-new / discard]. The state-file envelope (schema_version, run_id, inputs, phase, decisions[], status, ...) and the fail-closed semantics on schema or YAML errors are load-bearing in the spec; don't duplicate those rules here.
Hard rules
- Canonical and translation files are always created and updated together. Never leave a spec with only one language file on disk.
- After any operation that touches spec content, translations must be in sync with the canonical—no drift, ever.
- Slugs are ASCII kebab-case and never change silently.
- Never modify
spec/.spec-config.ymlwithout telling the user. - Never invent
Status, dates, or requirement content. Read from source or mark unknown.
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.

