Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

cucumber-openspec

skills.sh CI/CD npm

cucumber-openspec converts OpenSpec spec.md files into deterministic Cucumber / Gherkin .feature files.

It uses zero-AI, deterministic TypeScript scripts — a state-machine parser + generator — to produce correct .feature files in any of the 80 Gherkin languages. No runtime dependencies beyond Node.js.

Quick Start

# Install the skill for your AI agent
npx skills add neurono-ml/cucumber-openspec

# Convert a project's specs to Gherkin
npx tsx scripts/index.ts -i ./openspec -o ./features

Features

  • Deterministic parser — state machine, 0 dependencies
  • 80 Gherkin languages — English, Portuguese, Chinese, Arabic, Japanese, and 76 more
  • Tags@smoke, @regression, @critical at Feature, Rule, and Scenario level
  • Background — shared steps via ## Background section
  • Scenario Outline + Examples — data-driven parameterized scenarios
  • DataTables — pipe tables as step arguments
  • Doc Strings — sub-bullets converted to """ blocks
  • Delta specs — ADDED / MODIFIED / REMOVED sections for change management
  • Gherkin grammar validation — all output validated via @cucumber/gherkin
  • Localization — keywords in 80 languages via official Gherkin translations
  • Agent Skill — installable via skills.sh, works with Claude Code, Cursor, OpenCode, Codex

How It Works

OpenSpec spec.md                     →   Gherkin .feature
─────────────────────                    ─────────────────
# [@tag] Domain                           [@tag]
## Purpose                                Feature: Domain
## Background                                Background:
- **GIVEN** step                             Given step
### [@tag] Requirement: Name                  [@tag]
#### [@tag] Scenario: Name                    Rule: Name
- **GIVEN** text                                [@tag]
  | col | col |                                Scenario: Name
- **WHEN** text                                  Given text
- **THEN** text                                    | col | col |
                                                   When text
                                                   Then text