Agent skill
prd-to-json
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.
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/prd-to-json
SKILL.md
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
Didn't find tool you were looking for?