From dev-toolbox
Apply when authoring or editing docs/requirements/*.md, docs/bdd/*.feature, or docs/design/*.md. Defines ID conventions, TBC handling, Gherkin discipline, and the requirement-mirrored design-doc format.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dev-toolbox:generic-spec-authoringThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Three artefact types — requirements, BDD scenarios, design docs — three sets of rules. Always tag every BDD scenario and every design section to a requirement ID.
Three artefact types — requirements, BDD scenarios, design docs — three sets of rules. Always tag every BDD scenario and every design section to a requirement ID.
docs/requirements/*.md)[FR-<AREA>-<NNN>] (e.g. [FR-IDV-013], [FR-CARD-027]).[NFR-<AREA>-<NNN>].<AREA> is a short uppercase token tied to the feature area (IDV, CARD, SCA, ONB for onboarding, BFF, etc.). Add new areas sparingly.<NNN> is a zero-padded integer, monotonically increasing within <AREA>. Never reuse an ID even if the requirement is deleted — leave a tombstone with Status: Withdrawn.Use one of: Done, In Progress, TBD, Pending, Blocked, Withdrawn. No emoji.
TBC handlingSections under a ## TBC header (or ### TBC <topic>) are not authoritative:
When a TBC resolves, move the content out from under the TBC header into a normal section with a real ID.
Plain-language rule list. One requirement per bullet, ID at the start.
[FR-CARD-027]The system MUST allow a customer admin to set a daily spending limit per card, in the card's currency.
Avoid prose narratives. If you need narrative to explain why, that goes in the matching design doc.
docs/bdd/*.feature)Feature: / Scenario: / Given / When / Then / And structure.@FR-CARD-027.@FR-CARD-027
Scenario: Admin sets a daily spending limit
Given a customer admin is viewing an issued card
When the admin sets the daily spending limit to 5000 DKK
Then the limit appears on the card detail view
And the mobile app shows the new limit on the cardholder's card screen
docs/design/*.md)Brief intro then a section per governing requirement, mirroring the requirement's ID:
# Card spending limits — design
This document covers the design for [FR-CARD-027..030].
## [FR-CARD-027] Daily spending limit per card
How the system is shaped to satisfy this requirement…
The full project-specific section layout (Context → Architecture → State machine → Sequence diagrams → Response per requirement → Open questions → References) lives in docs/design/_index.md. The four rules below govern what to write in each section, regardless of layout.
Design docs describe how the system is shaped now. They are not ADRs. No dated change blocks, no v2 changes: headers, no revision history, no strikethrough ~~RESOLVED 2026-05-13~~ entries. The git log and PR descriptions are the audit trail; the doc is the snapshot.
When an open question is answered:
§Response per requirement entry directly and remove the question.A trade-off that was rejected can still appear inline with the requirement that would have answered it, expressed in present tense as a deviation rationale (e.g. "A separate limit aggregate was considered and rejected because…"). Never as a dated changelog entry.
A design response is 2–5 lines per requirement. If you reach ten lines, implementation detail is leaking in. Keep code samples out; if pseudocode is essential to communicate a decision, make it short and free of language-specific syntax.
Self-documenting code stays in code. The following do not belong in a design doc:
IDataProtectionProvider, CryptographicOperations.ZeroMemory, VerificationStateSigner, RunCompareStep).api/, spa/, mobile-app/. The doc says what the design is, not which file implements it.Heuristic: if you rename a class or swap a library version, the design doc should not need to change.
Requirements are business-driven; design is tech-driven. The two don't map one-to-one.
api-layering-and-ports.md, to a stated scope across multiple areas).If a tech section feels unmoored from anything — neither requirements nor a real architectural concern — that's the signal to question whether it belongs at all, not to invent an FR for it.
§Response per requirement entry without an FR/NFR ID — same problem, opposite direction. (Other design sections do not need IDs; see Rule 4.)§Open questions with a date stamp instead of being folded into the affected design section (or dropped if code/tests are sufficient).Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub tk-kamyk/dev-tools --plugin dev-toolbox