speckit-bdd-features
Skill3 starsChanged 9 days agoApache-2.0View on GitHub
Write or update the living features and glossary a spec describes, and reference the scenarios from the spec
In this repository16 other files it gives its agents.
- .claude/rules/agents.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- speckit-analyzeSkill
- speckit-bdd-checkSkill
- speckit-buildSkill
- speckit-checklistSkill
- speckit-clarifySkill
- speckit-constitutionSkill
- speckit-convergeSkill
- speckit-designSkill
- speckit-implementSkill
- speckit-planSkill
- speckit-reviewSkill
- speckit-specifySkill
- speckit-tasksSkill
- speckit-taskstoissuesSkill
The file
We split this skill into the rules it gives an agent
8 rules. About 0 are common, 4 are distinctive, and 4 are 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.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 22
Consider the user input before proceeding, if it is not empty.
- Very specific: line 26
Read .specify/extensions/bdd/bdd-config.yml.
- Very specific: line 31
Read the glossary, and every .feature file under the features directory.
- Distinctive: line 54
Write in the domain's words, and only the glossary's: Never a screen, a button, an HTTP route, a status code, a table or a component: "When …
- Distinctive: line 64
Every word a step uses is a glossary term or an everyday word.
- Very specific: line 88
No Given/When/Then stays in the spec.
- Distinctive: line 92
Run the checker from the project root, with the configured paths:
- Very specific: line 98
When the config has specs-from, add --specs-from <specs-from>: the specs before it were written before the project had features, and the …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill 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
Write the spec's scenarios into the living features
The living features describe what the system does now; a spec describes one change to it. This command moves the spec's acceptance scenarios into the features, as Gherkin, and leaves the spec naming them, so every scenario is written once.
User input
$ARGUMENTSConsider the user input before proceeding, if it is not empty.
Setup
- Read
.specify/extensions/bdd/bdd-config.yml. Where it is missing, useglossary: GLOSSARY.md,features: features,specs: specs, nospecs-from, and as thecheckeruvx --from "git+https://github.com/thinkmorestupidless/speckit-bdd@v0.2.0#subdirectory=checker" speckit-bdd. - The spec is the one
/speckit-specifyjust wrote. When that is unclear, take the most recently modifiedspecs/*/spec.mdand say which you took. Read the glossary, and every
.featurefile under the features directory. When the glossary does not exist, create it:# Glossary The words this project's features use, each in exactly one sense. ## Everyday words
Writing scenarios
For each acceptance scenario the spec describes, decide whether it is new, changes a scenario that exists, or removes one. Look for an existing scenario before writing a new one.
- One
Featureper capability, infeatures/<area>/<capability>.feature. ABackgroundholds the preconditions every scenario in the file shares. - A scenario's name is its rule, in one sentence: "an unpaid order is cancelled after thirty minutes", not "cancellation test". The spec references it by this name.
Givenis a state,Whenis one action,Thenis an outcome a person could observe. A scenario with two actions is two scenarios, unless the order of the actions is the point.- Write in the domain's words, and only the glossary's. Never a screen, a button, an HTTP route, a status code, a table or a component: "When the customer cancels the order", not "When I POST to /orders/1/cancel". The same scenario must be runnable against one component and against the whole running system.
- Values a step carries go in quotes (
Given a card numbered "4242"); they are data, not vocabulary. - Edge cases of one rule are a
Scenario Outlinewith anExamplestable, one row per case.
The glossary
Every word a step uses is a glossary term or an everyday word. For a domain word that is new, add a term:
### unpaid order
*Proposed.* An order that has been placed and not yet paid for.*Proposed.* marks a term /speckit-clarify must settle: whether it is the right word, what it
does and does not mean, and which synonyms to refuse (Avoid: basket, trolley). An ordinary word
(pays, sent, holds) goes on the ## Everyday words line instead. Never use two words for one thing:
if the glossary has a term, use it.
The spec
Replace each acceptance scenario in the spec with a reference, under the same
**Acceptance Scenarios**: heading:
- added `features/checkout/cancel.feature`: an unpaid order is cancelled after thirty minutes
- changed `features/checkout/pay.feature`: a declined card leaves the order unpaid
- removed `features/checkout/pay.feature`: a cheque is acceptedNo Given/When/Then stays in the spec.
Check
Run the checker from the project root, with the configured paths:
<checker> check --root . --glossary <glossary> --features <features> --specs <specs>When the config has specs-from, add --specs-from <specs-from>: the specs before it were written
before the project had features, and the checker does not read them. Leave those specs as they are.
Fix what is yours to fix: a refused synonym is reworded; an undefined word becomes a proposed term
or an everyday word; a reference that names no scenario is corrected. Leave a contradiction as
it is: it is a question about what the system should do, and /speckit-clarify asks it.
Report
List the features written or changed, each scenario added, changed or removed, the terms proposed, and the findings left for clarification, each with its file and line.
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.

