Skip to content
Back to skills

Spec Kit

ASecurity

Write a Gherkin story file to docs/stories/ for a feature. The story IS the spec. No intermediate PROBLEM/SPEC/PLAN/TASKS artifacts.

  • 66 stars
  • 0 votes
  • 0 copies
  • 6 views
  • Added September 12, 2026
testingbashgitdocumentation

Security analysis

A100/100

Scanned September 12, 2026

npx -y skills add kinncj/Heimdall --skill spec-kit --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Spec Kit?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Spec Kit
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kinncj-spec-kit-heimdall/badge)](https://www.skillsdirectory.com/skills/kinncj-spec-kit-heimdall)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: spec-kit
description: "Write a Gherkin story file to docs/stories/ for a feature. The story IS the spec. No intermediate PROBLEM/SPEC/PLAN/TASKS artifacts."
---

# SKILL: spec-kit

## Purpose

Produce a complete Gherkin story file in `docs/stories/` before any implementation begins. One invocation = one story file. The story file is the minimum spec — no additional artifacts required.

## State Machine

```
feature description → story draft → human approval → DISCOVER
```

No step may begin until the previous one completes. Approval = human sets `status: approved` in the story frontmatter, or confirms verbally.

## Story File Location

```
docs/stories/{epic-slug}-{feature-slug}.md   # with epic context
docs/stories/{feature-slug}.md               # standalone feature
```

## Story File Template

```markdown
---
id: "{feature-slug}"
title: "{Feature Title}"
epic: "{epic-slug or null}"
priority: "high|medium|low"
ui: false
adr_required: false
phase: discover
labels:
  - "type:feature"
  - "priority:{priority}"
status: draft
---

## Story

**As a** {user role},
**I want** {what they want},
**so that** {business outcome}.

## Acceptance Criteria

```gherkin
@story:{feature-slug} @priority:{priority}
Feature: {Feature Title}

  Scenario: {happy path title}
    Given {precondition}
    When {action}
    Then {outcome}

  Scenario: {failure or edge case title}
    Given {precondition}
    When {action}
    Then {outcome}
```

## Definition of Done

- [ ] All Gherkin scenarios have passing step implementations
- [ ] Unit tests written and passing
- [ ] Code reviewed and approved
- [ ] Documentation updated if user-facing
```

## Validate a Story File

```bash
validate_story() {
  local file="$1"

  if [ ! -f "$file" ]; then
    echo "[spec-kit] MISSING  $file"
    return 1
  fi

  if ! grep -qE "^\s*(Scenario|Scenario Outline):" "$file"; then
    echo "[spec-kit] FAIL  $file — no Gherkin scenarios found"
    return 1
  fi

  STATUS=$(grep -m1 "^status:" "$file" | awk '{print $2}' | tr -d '"')
  if [ "$STATUS" != "approved" ]; then
    echo "[spec-kit] BLOCKED  $file  status=$STATUS  required=approved"
    return 1
  fi

  echo "[spec-kit] OK  $file  status=approved"
}

# Example
validate_story "docs/stories/user-auth-reset-password.md" || exit 1
```

## Check All Stories Are Approved

```bash
FAIL=0
STORIES=$(find docs/stories -name "*.md" ! -name "_template.md" 2>/dev/null || true)

if [ -z "$STORIES" ]; then
  echo "[spec-kit] SKIP  no story files found"
  exit 0
fi

for story in $STORIES; do
  validate_story "$story" || FAIL=1
done

exit $FAIL
```

## Scenario Count Guidelines

| Feature complexity | Minimum scenarios |
|---|---|
| Simple CRUD | 2 (happy path + not-found/validation failure) |
| Auth / permissions | 3 (success + unauthorized + invalid input) |
| Multi-step workflow | 1 per step + 1 end-to-end |
| UI component | 2 (renders correctly + interaction) |

Do not invent scenarios not implied by the feature description. Mark unknown cases as `TODO` and flag for human review.

## Skip Conditions

```bash
BRANCH=$(git branch --show-current)
if echo "$BRANCH" | grep -qE '^(spike|chore)/'; then
  echo "[spec-kit] SKIP  branch=$BRANCH — spike/chore exempt"
  exit 0
fi
```

## Failure Modes

| Condition | Action |
|---|---|
| No feature description given | Ask the human before writing anything |
| Story has zero `Scenario:` blocks | Refuse to emit. Require at least one scenario. |
| Story `status: rejected` | Surface rejection reason. Do not advance. |
| Duplicate story file exists | Confirm with human before overwriting. |

## Logging

```
[spec-kit] WRITE   docs/stories/user-auth-reset-password.md
[spec-kit] HALT    awaiting human approval
[spec-kit] OK      docs/stories/user-auth-reset-password.md  status=approved
[spec-kit] SKIP    spike/* branch — spec-kit not required
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.