Bdd logo

Bdd

Community
mcouthon
bdd

Behavior-Driven Development with Gherkin specifications and black-box testing. Use when working with BDD projects, writing feature files, implementing step definitions, or designing acceptance tests around observable behaviors. Triggers on: 'use bdd mode', 'bdd', 'behavior driven', 'gherkin', 'feature file', 'scenario', 'step definitions', 'acceptance test', 'given when then', 'cucumber', 'godog', 'behave', 'specflow'. Full access mode - can write feature files, step definitions, and tests.

Overview

Publishermcouthon
Repositoryagents
Skill namebdd
Stars
79
Forks
11
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by mcouthon on GitHub. Read the source before you install it.

Installation

Install the Bdd AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/mcouthon/agents.git /tmp/agents
mkdir -p .claude/skills
cp -r /tmp/agents/generated/claude/skills/bdd .claude/skills/bdd
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Bdd in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Bdd on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Bdd is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

BDD — Behavior-Driven Development

Write executable specifications that describe what the system does, not how it works.

"Scenarios are not tests. They are executable specifications — living documentation of how the system behaves, written in the language of the business."

BDD Project Detection

Proactively load this skill when any of these indicators are present:

IndicatorWhat to Look For
Feature files*.feature files anywhere in the project
Features directoryfeatures/ or specs/ directory at project root
Step definitions*_steps.*, *_test.go with godog imports, steps/*.py
BDD configcucumber.js, cucumber.yml, .specflow/, behave.ini, godog in go.mod
Test runner configBDD-related entries in test configuration or CI pipeline

When detected, apply all guidance below to feature files, step definitions, and related test code.

Feature & Scenario Organization

  • One feature per business capabilitylogin.feature, checkout.feature, not everything.feature
  • Feature title = capability — "User Registration", not "Test the registration endpoint"
  • Scenarios describe user-observable outcomes — what the system does, not how it's coded
  • Keep features focused — 3–8 scenarios per feature; split if growing beyond that
  • Naming convention: lowercase hyphens for filenames (password-reset.feature), Title Case for Feature/Scenario titles
gherkin
# Good — focused feature, outcome-oriented scenarios
Feature: Password Reset
  Users can reset forgotten passwords via email

  Scenario: Successful password reset
    Given a registered user with email "alice@example.com"
    When they request a password reset
    Then a reset link is sent to "alice@example.com"

  Scenario: Reset request for unknown email
    Given no user exists with email "unknown@example.com"
    When they request a password reset for "unknown@example.com"
    Then no email is sent
    And no error is revealed to the requester

Gherkin Best Practices

Declarative Over Imperative

Describe what happens, not how the user clicks through the UI:

gherkin
# BAD — imperative (UI mechanics)
Scenario: User logs in
  Given I am on the login page
  When I fill in "username" with "alice"
  And I fill in "password" with "secret123"
  And I click the "Login" button
  And I wait for the dashboard to load
  Then I should see "Welcome, Alice"

# GOOD — declarative (behavior)
Scenario: Successful login
  Given a registered user "alice"
  When alice logs in with valid credentials
  Then alice sees her dashboard

Given / When / Then Semantics

KeywordMeaningRule
GivenPrecondition — system state before the actionSet up state, never assert
WhenAction — the single thing being testedOne per scenario (use And for multi-step actions)
ThenObservable outcome — what changedAssert only observable results
And/ButContinuation of the previous keywordSame semantics as the keyword it follows

Background for Shared Setup

Use Background when most scenarios share the same preconditions:

gherkin
Feature: Shopping Cart
  Background:
    Given a customer with an active account
    And the product catalog is loaded

  Scenario: Add item to cart
    When the customer adds "Widget" to their cart
    Then the cart contains 1 item

  Scenario: Remove item from cart
    Given the customer has "Widget" in their cart
    When they remove "Widget"
    Then the cart is empty

Scenario Outlines for Data Variations

Use outlines when the same behavior applies across different inputs — never duplicate scenarios:

gherkin
Scenario Outline: Shipping cost by region
  Given a package weighing <weight> kg
  When shipped to <region>
  Then the shipping cost is <cost>

  Examples:
    | weight | region   | cost   |
    | 1      | domestic | $5.00  |
    | 1      | europe   | $15.00 |
    | 5      | domestic | $12.00 |

Black-Box Testing

BDD scenarios test through public interfaces only — the system is a black box:

  • API testing: send requests, assert responses — never query the database directly
  • UI testing: interact through the UI, assert visible state — never check DOM internals
  • Service testing: call public methods, assert return values and observable side effects
  • No internal assertions: never assert database rows, internal state, private methods, or implementation artifacts
  • Mock only at external boundaries: third-party APIs, payment gateways, email services — never mock internal components
gherkin
# BAD — reaches into implementation
Then the database contains a row in "users" with email "alice@example.com"
And the password hash starts with "$2b$"

# GOOD — asserts observable behavior
Then alice can log in with her new password
And a welcome email is received at "alice@example.com"

Step Definitions

Step definitions are thin glue code — they translate Gherkin into application calls:

  • Call application code, don't contain logic — a step definition should be 1–5 lines
  • Reuse steps across features — write generic, parameterized steps
  • Keep step state in a context/world object — not in global variables
  • One action per step — if a step does multiple things, split it or simplify the Gherkin
python
# GOOD — thin glue, delegates to application code
@when('the customer adds "{item}" to their cart')
def add_to_cart(context, item):
    context.response = context.client.post("/cart/items", json={"item": item})

@then('the cart contains {count:d} item(s)')
def check_cart_count(context, count):
    cart = context.client.get("/cart").json()
    assert len(cart["items"]) == count
python
# BAD — logic and DB access in step definition
@when('the customer adds "{item}" to their cart')
def add_to_cart(context, item):
    product = db.query("SELECT * FROM products WHERE name = %s", (item,))
    db.execute("INSERT INTO cart_items ...")  # Direct DB manipulation!
    context.cart_count = db.query("SELECT COUNT(*) FROM cart_items ...")[0]

Anti-Patterns

Anti-PatternProblemBetter Approach
Incidental details — "alice" with password "Str0ng!" at "9:30 AM"Noise hides the behavior under testOnly include details relevant to the outcome
Testing implementation — Then UserService.validate() returns trueCoupled to code structure, breaks on refactorAssert observable outcomes: "Then the user is logged in"
Coupled step defs — steps call each other or share mutable global stateFragile chain; one change breaks many scenariosIndependent steps sharing state through a context object
Scenario as test script — 15 Given/When/Then steps in sequenceUnreadable, tests multiple behaviors at onceOne behavior per scenario, 3–7 steps maximum
UI-coupled steps — "click button", "fill field", "wait for element"Brittle, breaks on any UI changeDeclarative: "When the user submits the form"
Copy-paste scenarios — same steps with different dataMaintenance burden, inconsistent updatesScenario Outlines with Examples tables
Missing Why — Feature with no description, no business contextCan't tell if the feature is still neededAdd 1-line description under Feature explaining business value

Quality Checklist

Before committing feature files and step definitions:

markdown
- [ ] Feature files are readable by non-developers
- [ ] Each scenario tests exactly one behavior
- [ ] Steps are declarative (no UI mechanics or implementation details)
- [ ] No implementation coupling (scenarios survive internal refactors)
- [ ] Step definitions are thin glue (1–5 lines, delegate to app code)
- [ ] Shared state flows through context/world object, not globals
- [ ] Scenario Outlines used for data variations (no copy-paste scenarios)
- [ ] Feature descriptions explain the business value

Rationalization Prevention

ExcuseRealityRequired Action
"We can add scenarios later"Missing scenarios are missing requirementsWrite scenarios before implementation — they ARE the spec
"This is too simple for BDD"Simple behaviors still need documented acceptance criteriaWrite the feature file even if steps are trivial
"I'll just verify through the DB"DB assertions couple tests to implementationAssert through the public API/UI — black-box only
"One big scenario covers more"Long scenarios test multiple behaviors and hide failuresSplit into focused scenarios — one outcome each
"Imperative steps are more precise"They couple to UI/implementation and break on refactorDeclarative steps describe intent, not mechanics
"Step reuse isn't worth the effort"Duplicated steps diverge and create maintenance burdenParameterize and share steps across features from day one

Frequently asked questions

What does the Bdd AI skill do?

Behavior-Driven Development with Gherkin specifications and black-box testing. Use when working with BDD projects, writing feature files, implementing step definitions, or designing acceptance tests around observable behaviors. Triggers on: 'use bdd mode', 'bdd', 'behavior driven', 'gherkin', 'feature file', 'scenario', 'step definitions', 'acceptance test', 'given when then', 'cucumber', 'godog', 'behave', 'specflow'. Full access mode - can write feature files, step definitions, and tests.

Why use Bdd on TypingMind?

Because you install it once and use it with any model. Bdd is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Bdd in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/mcouthon/agents/tree/main/generated/claude/skills/bdd. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Bdd?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Bdd?

As many as you like. As long as a model supports skills, you can use Bdd with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Bdd AI skill free?

Yes. It is published on GitHub by mcouthon under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇