Converts a PRD markdown file into prd.json format for Ralph to execute autonomously.
View on GitHubrichtabor/agent-skills
development
January 21, 2026
Select agents to install to:
npx add-skill https://github.com/richtabor/agent-skills/blob/main/skills/create-prd-json/SKILL.md -a claude-code --skill create-prd-jsonInstallation paths:
.claude/skills/create-prd-json/# Create PRD JSON Convert a Product Requirements Document into JSON for Ralph. ## Input Look for PRD files in `prds/` directory: 1. `prds/*.md` files 2. User specifies a file If multiple PRDs exist, ask which one to convert. ## Conversion Rules ### Story Sizing (Critical) Each story MUST complete in ONE Ralph iteration (one context window). **Right-sized:** - Add a database column - Create a single UI component - Add one API endpoint - Add form validation - Update a server action **Too large (must split):** ``` ❌ "Build entire auth system" ✅ "Add login form" ✅ "Add email validation" ✅ "Add auth server action" ``` ### Dependency Ordering Stories execute sequentially by priority: 1. Database/schema changes 2. Backend logic 3. API endpoints 4. UI components ### Cross-PRD Dependencies (Critical) Ralph respects `dependsOn` to sequence PRDs. Before generating JSON: 1. **Scan existing PRDs** — Read all `prds/*.json` to know what features exist 2. **Detect dependencies** — Look for references in the markdown PRD: - Explicit: "See `elevenlabs-integration.md`", "Depends on morning brief" - Implicit: Story notes mentioning other features - Technical: Uses tables/APIs defined in another PRD 3. **Populate `dependsOn`** — Array of PRD names (without `.json` extension) **Examples of dependency detection:** ```markdown # In evening-ritual.md: "See `elevenlabs-integration.md` for shared infrastructure" → dependsOn: ["elevenlabs-integration"] "Depends on morning brief feature for regeneration" → dependsOn: ["elevenlabs-integration", "morning-brief"] ``` **If no dependencies detected:** ```json "dependsOn": [] ``` ### Acceptance Criteria (Critical) Must be explicit and verifiable: **Good:** ``` - Email/password fields present - Validates email format - Shows error on invalid input - Typecheck passes - Verify at localhost:3000/login ``` **Bad:** ``` - Users can log in (vague) - Works correctly (vague) - Good UX (subjective) ``` **Required in every story:*