
prd-to-json
by bearbinary
SKILL.md
name: prd-to-json description: "Convert a PRD markdown file to a structured JSON task file with progress tracking. Use when converting a PRD to JSON, creating trackable tasks from a PRD, or when asked to make a PRD actionable. Triggers on: convert prd to json, prd to json, make prd trackable, create tasks from prd, json from prd."
PRD to JSON Converter
Convert PRD markdown documents into structured JSON task files with progress tracking capabilities.
The Job
- Read an existing PRD markdown file from
/PRD/or/tasks/ - Parse the PRD structure (user stories, requirements, etc.)
- Generate a JSON file with
passedfields for tracking completion - Save to
/tasks/[prd-name].json
Important: This skill converts existing PRDs. Use the prd skill first to create the PRD.
Input
The skill accepts:
- A path to a PRD markdown file (e.g.,
/PRD/pyroscope-and-load-testing.md) - Or a PRD name to search for in
/PRD/or/tasks/directories
JSON Output Schema
{
"title": "string - Feature/PRD title",
"priority": "High | Medium | Low",
"status": "Not Started | In Progress | Partially Compliant | Compliant",
"source": "string - Path to source PRD file",
"createdAt": "ISO 8601 timestamp",
"updatedAt": "ISO 8601 timestamp",
"overview": {
"description": "string - Brief description from PRD introduction",
"goals": ["array of goal strings"]
},
"userStories": [
{
"id": "US-001",
"title": "string",
"description": "string - The 'As a... I want... so that...' statement",
"passed": false,
"acceptanceCriteria": [
{
"criterion": "string - The specific criterion",
"passed": false
}
]
}
],
"functionalRequirements": [
{
"id": "FR-1",
"description": "string",
"passed": false
}
],
"nonGoals": ["array of non-goal strings"],
"technicalConsiderations": [
{
"area": "string - Topic area",
"details": "string - Details or considerations"
}
],
"acceptanceCriteria": [
{
"criterion": "string - Overall acceptance criterion",
"passed": false
}
],
"successMetrics": ["array of success metric strings"],
"openQuestions": ["array of open question strings"]
}
Field Definitions
Status Values
| Status | Meaning |
|---|---|
Not Started | No user stories or requirements completed |
In Progress | At least one item completed, work ongoing |
Partially Compliant | Most items complete, some remaining |
Compliant | All user stories and requirements passed |
The passed Field
Every trackable item gets a passed field:
{
"id": "US-001",
"title": "Create logging package",
"passed": false, // <-- Track overall story completion
"acceptanceCriteria": [
{
"criterion": "Logger writes JSON to stdout",
"passed": false // <-- Track individual criteria
}
]
}
Rules for passed:
- Default:
falsefor all items - A user story's
passedbecomestruewhen ALL its acceptance criteria aretrue - Overall
statusupdates based on user story completion percentage
Parsing Rules
User Stories
Look for patterns like:
### US-001: Title Here
**Description:** As a [user], I want [feature] so that [benefit].
**Acceptance Criteria:**
- [ ] First criterion
- [ ] Second criterion
Extract:
id: From heading (e.g., "US-001")title: Text after the IDdescription: The "As a..." statementacceptanceCriteria: Each checkbox item
Functional Requirements
Look for patterns like:
- FR-1: Description of the requirement
- FR-2: Another requirement
Or:
| FR-1 | Description |
Tables
Convert markdown tables to arrays of objects:
| Requirement | Description |
|-------------|-------------|
| Config | Environment-based settings |
Becomes:
[
{ "requirement": "Config", "description": "Environment-based settings", "passed": false }
]
Conversion Process
Step 1: Identify PRD File
User: convert prd to json for pyroscope
Search for:
/PRD/pyroscope*.md/tasks/prd-pyroscope*.md- Ask user to specify if multiple matches
Step 2: Parse Sections
Extract these sections from the markdown:
- Title (first H1)
- Introduction/Overview
- Goals
- User Stories (with acceptance criteria)
- Functional Requirements
- Non-Goals
- Technical Considerations
- Success Metrics
- Open Questions
Step 3: Generate JSON
- Create the JSON structure
- Set all
passedfields tofalse - Set
statusto "Not Started" - Add metadata (
createdAt,source)
Step 4: Save File
- Location:
/tasks/ - Filename:
[prd-name].json(match PRD name, kebab-case) - Report the output path to user
Example Conversion
Input PRD (excerpt):
# PRD: Pyroscope End-to-End Implementation
## Overview
Complete Pyroscope integration with proper configuration...
## Goals
- Production-ready configuration
- Grafana integration
## User Stories
### US-001: Configuration Improvements
**Description:** As a developer, I want environment-based Pyroscope configuration so that settings can change per environment.
**Acceptance Criteria:**
- [ ] Server address configurable via PYROSCOPE_SERVER_ADDRESS
- [ ] Application name configurable via PYROSCOPE_APPLICATION_NAME
- [ ] go test ./... passes
## Functional Requirements
- FR-1: Create configuration struct with environment variable support
- FR-2: Update SetupProfiling() to use configuration
Output JSON:
{
"title": "Pyroscope End-to-End Implementation",
"priority": "Medium",
"status": "Not Started",
"source": "/PRD/pyroscope-and-load-testing.md",
"createdAt": "2024-01-15T10:00:00Z",
"updatedAt": "2024-01-15T10:00:00Z",
"overview": {
"description": "Complete Pyroscope integration with proper configuration...",
"goals": [
"Production-ready configuration",
"Grafana integration"
]
},
"userStories": [
{
"id": "US-001",
"title": "Configuration Improvements",
"description": "As a developer, I want environment-based Pyroscope configuration so that settings can change per environment.",
"passed": false,
"acceptanceCriteria": [
{
"criterion": "Server address configurable via PYROSCOPE_SERVER_ADDRESS",
"passed": false
},
{
"criterion": "Application name configurable via PYROSCOPE_APPLICATION_NAME",
"passed": false
},
{
"criterion": "go test ./... passes",
"passed": false
}
]
}
],
"functionalRequirements": [
{
"id": "FR-1",
"description": "Create configuration struct with environment variable support",
"passed": false
},
{
"id": "FR-2",
"description": "Update SetupProfiling() to use configuration",
"passed": false
}
],
"nonGoals": [],
"technicalConsiderations": [],
"acceptanceCriteria": [],
"successMetrics": [],
"openQuestions": []
}
Updating Progress
When working through tasks, update the JSON file:
Mark Acceptance Criterion Complete:
{
"criterion": "Server address configurable via PYROSCOPE_SERVER_ADDRESS",
"passed": true // Changed from false
}
Mark User Story Complete:
When all acceptance criteria are passed: true:
{
"id": "US-001",
"passed": true, // Auto-set when all criteria pass
"acceptanceCriteria": [
{ "criterion": "...", "passed": true },
{ "criterion": "...", "passed": true }
]
}
Update Overall Status:
- 0% stories passed → "Not Started"
- 1-49% stories passed → "In Progress"
- 50-99% stories passed → "Partially Compliant"
- 100% stories passed → "Compliant"
Commands
After conversion, suggest these follow-up actions:
Task file created: /tasks/pyroscope-and-load-testing.json
Next steps:
1. Review the generated tasks
2. Start implementing US-001
3. Update passed fields as you complete criteria
4. Run: cat /tasks/pyroscope-and-load-testing.json | jq '.userStories[] | select(.passed == false)'
to see remaining work
Checklist
Before saving the JSON:
- All user stories extracted with IDs
- All acceptance criteria captured per story
- All functional requirements extracted
-
passed: falseset on all trackable items -
statusset to "Not Started" -
sourcepoints to original PRD - Timestamps included
- Valid JSON (parseable by
jq) - Saved to
/tasks/[name].json
スコア
総合スコア
リポジトリの品質指標に基づく評価
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
レビュー
レビュー機能は近日公開予定です