
speckit2beads
by kbrockhoff
Brockhoff Cloud Claude Plugins
SKILL.md
name: speckit2beads description: Convert Spec Kit task list markdown files to bd (Beads) issues with proper hierarchy
Spec Kit to Beads Converter
This skill converts Spec Kit-generated task list markdown files into bd (Beads) issue hierarchies.
Conversion Rules
- Document → Epic: The entire tasks document becomes a single bd epic (from the
# Tasks:title) - Phase headers (pattern:
## Phase N: Title) → bd features- Each phase becomes a feature under the epic
- Phase "Purpose" text → feature description
- Phase "Checkpoint" text → feature acceptance_criteria
- Task items (pattern:
- [ ] T\d{3}) → bd tasks under their phase's feature- Task ID (e.g., T001) preserved in title or description
[P]marker indicates parallel capability (add to design notes)[US#]marker indicates user story association (add label or description)
- Contract references → Added to feature acceptance_criteria
- Dependencies section → Used to set up bd blocking dependencies between features
Field Distribution Logic
Bullet points should be intelligently distributed based on their content:
- Description: General explanatory content, "what" statements, background information
- Design: Technical implementation details, architecture notes, file locations, technical "how" statements
- Acceptance Criteria: Testing requirements, validation rules, property tests, requirements references
Workflow
When invoked with a path to a spec-kit tasks.md file:
- Parse the tasks markdown file
- Extract the epic title from
# Tasks: <Title>heading - Identify phases by scanning for
## Phase N:headers - For each phase:
- Extract phase title and number
- Extract "Purpose" text for description
- Extract "Checkpoint" text for acceptance_criteria
- Extract "Contract" reference if present
- Collect all
- [ ] T###task items
- Parse task markers:
[P]→ parallel capability[US#]→ user story association- File paths in description → design field
- Extract dependencies from "Dependencies" section if present
- Generate JSONL preview showing all issues to be created
- Display the JSONL to the user for review
- Wait for user approval
- Create issues using bd create commands if approved
Issue Structure
Epic (from document)
title: From# Tasks: <Title>headingdescription: From document header content (Input, Prerequisites, etc.)issue_type: epicpriority: 1
Feature (from phase)
title: Phase title (e.g., "Setup (Shared Infrastructure)")description: Phase "Purpose" textdesign: Path conventions, implementation notesacceptance_criteria: Phase "Checkpoint" text + Contract referenceissue_type: featurepriority: Derived from user story priority (P1=1, P2=2, P3=3) or default 2
Task (from task item)
title: Task description (e.g., "Create plugin directory structure per plan.md")description: Full task text including file pathsdesign: File paths extracted from task (e.g., "plugins/bkff-git/")issue_type: taskpriority: Inherit from parent featurelabels:[P]→ "parallel",[US#]→ "user-story-#"
Example JSONL Output
Epic (from document title)
Input:
# Tasks: Git Lifecycle Plugin
**Input**: Design documents from `/specs/001-git-lifecycle-plugin/`
**Prerequisites**: plan.md, spec.md, research.md, data-model.md, contracts/
Output:
{"type":"epic","title":"Git Lifecycle Plugin","description":"Input: Design documents from /specs/001-git-lifecycle-plugin/. Prerequisites: plan.md, spec.md, research.md, data-model.md, contracts/"}
Feature (from phase header)
Input:
## Phase 1: Setup (Shared Infrastructure)
**Purpose**: Plugin initialization and directory structure
- [ ] T001 Create plugin directory structure per plan.md at plugins/bkff-git/
- [ ] T002 [P] Create plugin.json with metadata in plugins/bkff-git/.claude-plugin/plugin.json
Output:
{"type":"feature","title":"Phase 1: Setup (Shared Infrastructure)","description":"Plugin initialization and directory structure","parent":"epic-id"}
Feature with checkpoint and contract (User Story phase)
Input:
## Phase 3: User Story 1 - Check Development Status (Priority: P1) 🎯 MVP
**Goal**: Developer can check current worktree status including uncommitted changes, last commit, beads tasks, and PR status
**Independent Test**: Run `/bkff:git-st` in a git worktree and verify output shows correct status information
**Contract**: specs/001-git-lifecycle-plugin/contracts/git-st.md
- [ ] T017 [US1] Create skill.md documentation for git-st command
...
**Checkpoint**: User Story 1 complete - `/bkff:git-st` should be fully functional and testable independently
Output:
{"type":"feature","title":"User Story 1 - Check Development Status","description":"Developer can check current worktree status including uncommitted changes, last commit, beads tasks, and PR status","acceptance_criteria":"Checkpoint: /bkff:git-st should be fully functional and testable independently. Contract: specs/001-git-lifecycle-plugin/contracts/git-st.md","priority":1,"parent":"epic-id"}
Task (from task item)
Input:
- [ ] T017 [US1] Create skill.md documentation for git-st command in plugins/bkff-git/skills/git-st/skill.md
Output:
{"type":"task","title":"T017: Create skill.md documentation for git-st command","design":"plugins/bkff-git/skills/git-st/skill.md","labels":["user-story-1"],"parent":"feature-us1-id"}
Parallel task
Input:
- [ ] T002 [P] Create plugin.json with metadata in plugins/bkff-git/.claude-plugin/plugin.json
Output:
{"type":"task","title":"T002: Create plugin.json with metadata","design":"plugins/bkff-git/.claude-plugin/plugin.json","labels":["parallel"],"parent":"feature-phase1-id"}
Usage
/speckit2beads path/to/tasks.md
Or simply invoke the skill and provide the path when prompted.
Example with the Git Lifecycle Plugin spec:
/speckit2beads specs/001-git-lifecycle-plugin/tasks.md
Implementation Notes
- Use the Read tool to load the tasks.md file
- Parse markdown systematically (line by line)
- Use regex patterns to identify elements:
- Document title:
^# Tasks:\s*(.+)$(captures epic title) - Phase header:
^## Phase (\d+):\s*(.+)$(captures phase number and title) - Task item:
^- \[ \] (T\d{3})\s*(.+)$(captures task ID and description) - Parallel marker:
\[P\]in task description - User story marker:
\[US(\d+)\]in task description (captures story number) - Purpose text:
^\*\*Purpose\*\*:\s*(.+)$ - Goal text:
^\*\*Goal\*\*:\s*(.+)$ - Checkpoint text:
^\*\*Checkpoint\*\*:\s*(.+)$ - Contract reference:
^\*\*Contract\*\*:\s*(.+)$ - File path:
\b(plugins/[^\s]+|specs/[^\s]+)in task description
- Document title:
- Phase parsing logic:
- When a
## Phase N:header is found, start a new feature - Collect all
- [ ] T###items until the next## Phaseor---separator - Extract Purpose/Goal for description, Checkpoint for acceptance_criteria
- When a
- Priority mapping:
(Priority: P1)→ priority 1(Priority: P2)→ priority 2(Priority: P3)→ priority 3- No priority marker → default 2
- Generate unique IDs using bd's prefix pattern
- Present JSONL for review before creating issues
- Use bd create commands with proper escaping for special characters
Creating Issues and Dependencies
Step 1: Create all issues first
Create issues in any order:
- Create epic
- Create all features
- Create all tasks
Capture the issue IDs from the output for use in step 2.
Step 2: Add blocking dependencies
Use blocks type to enforce completion order:
bd dep add <blocked-issue> <blocker-issue>
Rule: The thing that must complete FIRST blocks the thing that depends on it.
For hierarchies:
- Tasks block Features (tasks must close before feature can close)
- Features block Epic (features must close before epic can close)
Examples:
# Tasks block their feature
bd dep add bkfflz-feature bkfflz-task1 # task1 blocks feature
bd dep add bkfflz-feature bkfflz-task2 # task2 blocks feature
# Features block their epic
bd dep add bkfflz-epic bkfflz-feature1 # feature1 blocks epic
bd dep add bkfflz-epic bkfflz-feature2 # feature2 blocks epic
# Batch multiple dependencies
bd dep add bkfflz-feature bkfflz-task1 && \
bd dep add bkfflz-feature bkfflz-task2 && \
bd dep add bkfflz-feature bkfflz-task3
Verification:
bd show <issue-id> # See what blocks this issue
bd blocked # List all blocked issues
bd ready # Show only unblocked work
Result: Epic cannot close until all features close, features cannot close until all tasks close.
Step 3: Add cross-phase dependencies
Parse the "Dependencies & Execution Order" section to set up phase-level blocking:
# Example from tasks.md: Foundational (Phase 2) blocks all User Story phases (3-7)
bd dep add bkfflz-phase3 bkfflz-phase2 # Phase 2 blocks Phase 3
bd dep add bkfflz-phase4 bkfflz-phase2 # Phase 2 blocks Phase 4
bd dep add bkfflz-phase5 bkfflz-phase2 # Phase 2 blocks Phase 5
...
# Polish phase (8) depends on all user story phases
bd dep add bkfflz-phase8 bkfflz-phase3
bd dep add bkfflz-phase8 bkfflz-phase4
...
Optional - Add parent-child for structure: If you want hierarchical metadata (doesn't enforce closure order):
bd dep add bkfflz-task bkfflz-feature --type parent-child
bd dep add bkfflz-feature bkfflz-epic --type parent-child
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon