The RPG (Repository Planning Graph) method is an advanced approach to creating Product Requirements Documents that generate highly-structured, dependency-aware task graphs. It’s based on Microsoft Research’s methodology for scalable codebase generation.
Separate functional thinking (WHAT) from structural thinking (HOW):
Functional: "Data Validation capability with schema checking and rule enforcement" ↓Structural: "src/validation/ with schema-validator.js and rule-validator.js"
This separation prevents mixing concerns and creates clearer module boundaries.
The RPG template includes inline <instruction> and <example> blocks that teach the method as you use it. Read these sections carefully - they provide valuable guidance at each decision point.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"TaskGraph","colors":{"primary":"#3366CC","light":"#6699FF","dark":"#24478F"},"logo":{"light":"https://mintcdn.com/myself-fcf8480c/GzHIJhIlhqfXn7i0/logo/light.png?fit=max\u0026auto=format\u0026n=GzHIJhIlhqfXn7i0\u0026q=85\u0026s=a9a99fb754babb33f3e453d5b6fad8bd","dark":"https://mintcdn.com/myself-fcf8480c/GzHIJhIlhqfXn7i0/logo/dark.png?fit=max\u0026auto=format\u0026n=GzHIJhIlhqfXn7i0\u0026q=85\u0026s=9a151e3e3fae6e29a90682861902973d"},"favicon":"https://mintcdn.com/myself-fcf8480c/GzHIJhIlhqfXn7i0/favicon.svg?fit=max\u0026auto=format\u0026n=GzHIJhIlhqfXn7i0\u0026q=85\u0026s=0faee9c94d472bab5c924c6d85eb19db","footer":{"socials":{"github":"https://github.com/stephennmiller/taskgraph-ai"}},"navigation":{"global":{"anchors":[{"anchor":"Github","icon":"github","href":"https://github.com/stephennmiller/taskgraph-ai"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"myself-fcf8480c","hasAudioNarration":false,"actualSubdomain":"myself-fcf8480c","customDomains":["taskgraph-ai.com"],"gitSource":{"type":"github","owner":"stephennmiller","repo":"taskgraph-ai","deployBranch":"main","contentDirectory":"apps/docs","isPrivate":false,"mountPath":"","label":"","_id":"6adbe6592725bd848f58b0e3"},"chroma":{"latestBuiltDeploymentHistoryId":"6adbf8263c71c34680b073dc","collectionId":"6d13d4d2-18be-4e16-881a-9b8ab7e6de84","liveDeploymentHistoryId":"6adbf8263c71c34680b073dc","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6adbf8263c71c34680b073dc","clientVersion":"0.0.3962","searchFilterCounts":[{"language":"default","tag":"TaskGraph Documentation","count":35},{"language":"default","tag":"Technical Capabilities","count":16},{"language":"default","tag":"Getting Started","count":13},{"language":"default","tag":"Quick Start","count":7},{"language":"default","tag":"CLI Commands","count":5},{"language":"default","tag":"Best Practices","count":3},{"language":"default","tag":"Welcome","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#navbar img{height:auto!important;width:200px!important;margin-top:5px!important}"}],"page":{"pagePath":"capabilities/rpg-method","slug":"/capabilities/rpg-method","pageMetadata":{"title":"RPG Method for PRD Creation","sidebarTitle":"RPG Method","description":null,"href":"/capabilities/rpg-method"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`1`,id:`repository-planning-graph-rpg-method`,children:`Repository Planning Graph (RPG) Method`}),`\n`,_jsx(_components.p,{children:`The RPG (Repository Planning Graph) method is an advanced approach to creating Product Requirements Documents that generate highly-structured, dependency-aware task graphs. It’s based on Microsoft Research’s methodology for scalable codebase generation.`}),`\n`,_jsx(Heading,{level:`2`,id:`when-to-use-rpg`,children:`When to Use RPG`}),`\n`,_jsxs(_components.p,{children:[`Use the RPG template (`,_jsx(_components.code,{children:`example_prd_rpg.md`}),`) for:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Complex multi-module systems`}),` with intricate dependencies`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Large-scale codebases`}),` being built from scratch`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Projects requiring explicit architecture`}),` and clear module boundaries`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Teams needing dependency visibility`}),` for parallel development`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`For simpler features or smaller projects, the standard `,_jsx(_components.code,{children:`example_prd.md`}),` template may be more appropriate.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`core-principles`,children:`Core Principles`}),`\n`,_jsx(Heading,{level:`3`,id:`1-dual-semantics`,children:`1. Dual-Semantics`}),`\n`,_jsxs(_components.p,{children:[`Separate `,_jsx(_components.strong,{children:`functional`}),` thinking (WHAT) from `,_jsx(_components.strong,{children:`structural`}),` thinking (HOW):`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`4`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Functional: \"Data Validation capability with schema checking and rule enforcement\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ↓`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Structural: \"src/validation/ with schema-validator.js and rule-validator.js\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`This separation prevents mixing concerns and creates clearer module boundaries.`}),`\n`,_jsx(Heading,{level:`3`,id:`2-explicit-dependencies`,children:`2. Explicit Dependencies`}),`\n`,_jsx(_components.p,{children:`Never assume dependencies - always state them explicitly:`}),`\n`,_jsx(CodeBlock,{numberOfLines:`8`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Good:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Module: data-ingestion`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Depends on: [schema-validator, config-manager]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Bad:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Module: data-ingestion`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` (Assumes schema-validator exists somewhere)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`Explicit dependencies enable:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Topological ordering of implementation`}),`\n`,_jsx(_components.li,{children:`Parallel development of independent modules`}),`\n`,_jsx(_components.li,{children:`Clear build/test order`}),`\n`,_jsx(_components.li,{children:`Early detection of circular dependencies`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`3-topological-order`,children:`3. Topological Order`}),`\n`,_jsx(_components.p,{children:`Build foundation layers before higher layers:`}),`\n`,_jsx(CodeBlock,{numberOfLines:`8`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Phase 0 (Foundation): error-handling, base-types, config`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ↓`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Phase 1 (Data): validation, ingestion (depend on Phase 0)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ↓`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Phase 2 (Core): algorithms, pipelines (depend on Phase 1)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ↓`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Phase 3 (API): routes, handlers (depend on Phase 2)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`TaskGraph automatically orders tasks based on this dependency chain.`}),`\n`,_jsx(Heading,{level:`3`,id:`4-progressive-refinement`,children:`4. Progressive Refinement`}),`\n`,_jsx(_components.p,{children:`Start broad, refine iteratively:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`High-level capabilities → Main tasks`}),`\n`,_jsx(_components.li,{children:`Features per capability → Subtasks`}),`\n`,_jsx(_components.li,{children:`Implementation details → Expanded subtasks`}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`template-structure`,children:`Template Structure`}),`\n`,_jsx(_components.p,{children:`The RPG template guides you through 7 key sections:`}),`\n`,_jsx(Heading,{level:`3`,id:`1-overview`,children:`1. Overview`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Problem statement`}),`\n`,_jsx(_components.li,{children:`Target users`}),`\n`,_jsx(_components.li,{children:`Success metrics`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`2-functional-decomposition-what`,children:`2. Functional Decomposition (WHAT)`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`High-level capability domains`}),`\n`,_jsx(_components.li,{children:`Features per capability`}),`\n`,_jsx(_components.li,{children:`Inputs/outputs/behavior for each feature`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Example:`})}),`\n`,_jsx(CodeBlock,{numberOfLines:`7`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Capability: Data Management`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Feature: Schema validation`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Description: Validate JSON against defined schemas`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Inputs: JSON object, schema definition`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Outputs: Validation result + error details`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Behavior: Iterate fields, check types, enforce constraints`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`3-structural-decomposition-how`,children:`3. Structural Decomposition (HOW)`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Repository folder structure`}),`\n`,_jsx(_components.li,{children:`Module-to-capability mapping`}),`\n`,_jsx(_components.li,{children:`File organization`}),`\n`,_jsx(_components.li,{children:`Public interfaces/exports`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Example:`})}),`\n`,_jsx(CodeBlock,{numberOfLines:`6`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Capability: Data Management`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` → Maps to: src/data/`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ├── schema-validator.js (Schema validation feature)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ├── rule-validator.js (Rule validation feature)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` └── index.js (Exports)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`4-dependency-graph-critical`,children:`4. Dependency Graph (CRITICAL)`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Foundation layer (no dependencies)`}),`\n`,_jsx(_components.li,{children:`Each subsequent layer’s dependencies`}),`\n`,_jsx(_components.li,{children:`Explicit “depends on” declarations`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Example:`})}),`\n`,_jsx(CodeBlock,{numberOfLines:`8`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Foundation Layer (Phase 0):`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - error-handling: No dependencies`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - base-types: No dependencies`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Data Layer (Phase 1):`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - schema-validator: Depends on [base-types, error-handling]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` - data-ingestion: Depends on [schema-validator]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`5-implementation-roadmap`,children:`5. Implementation Roadmap`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Phases with entry/exit criteria`}),`\n`,_jsx(_components.li,{children:`Tasks grouped by phase`}),`\n`,_jsx(_components.li,{children:`Clear deliverables per phase`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`6-test-strategy`,children:`6. Test Strategy`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Test pyramid ratios`}),`\n`,_jsx(_components.li,{children:`Coverage requirements`}),`\n`,_jsx(_components.li,{children:`Critical test scenarios per module`}),`\n`,_jsx(_components.li,{children:`Guidelines for test generation`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`7-architecture-\u0026-risks`,children:`7. Architecture \u0026 Risks`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Technical architecture`}),`\n`,_jsx(_components.li,{children:`Data models`}),`\n`,_jsx(_components.li,{children:`Technology decisions`}),`\n`,_jsx(_components.li,{children:`Risk mitigation strategies`}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`using-rpg-with-taskgraph`,children:`Using RPG with TaskGraph`}),`\n`,_jsx(Heading,{level:`3`,id:`step-1-create-prd-with-rpg-template`,children:`Step 1: Create PRD with RPG Template`}),`\n`,_jsx(_components.p,{children:`Use a code-context-aware tool to fill out the template:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# In Claude Code`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`\"Create a PRD using @.taskgraph/templates/example_prd_rpg.txt for [your project]\"`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Why code context matters:`}),` The AI needs to understand your existing codebase to make informed decisions about:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Module boundaries`}),`\n`,_jsx(_components.li,{children:`Dependency relationships`}),`\n`,_jsx(_components.li,{children:`Integration points`}),`\n`,_jsx(_components.li,{children:`Naming conventions`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Recommended tools:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Claude Code (claude-code CLI)`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`step-2-parse-prd-into-tasks`,children:`Step 2: Parse PRD into Tasks`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`taskgraph`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` parse-prd`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` .taskgraph/docs/your-prd.md`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --research`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`TaskGraph will:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Extract capabilities → Main tasks`}),`\n`,_jsx(_components.li,{children:`Extract features → Subtasks`}),`\n`,_jsx(_components.li,{children:`Parse dependencies → Task dependencies`}),`\n`,_jsx(_components.li,{children:`Order by phases → Task priorities`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Result:`}),` A dependency-aware task graph ready for topological execution.`]}),`\n`,_jsx(Heading,{level:`3`,id:`step-3-analyze-complexity`,children:`Step 3: Analyze Complexity`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`taskgraph`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` analyze-complexity`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --research`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Review the complexity report to identify tasks that need expansion.`}),`\n`,_jsx(Heading,{level:`3`,id:`step-4-expand-tasks`,children:`Step 4: Expand Tasks`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`taskgraph`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` expand`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --all`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --research`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Break down complex tasks into manageable subtasks while preserving dependency chains.`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`rpg-benefits`,children:`RPG Benefits`}),`\n`,_jsx(Heading,{level:`3`,id:`for-solo-developers`,children:`For Solo Developers`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Clear roadmap for implementing complex features`}),`\n`,_jsx(_components.li,{children:`Prevents architectural mistakes early`}),`\n`,_jsx(_components.li,{children:`Explicit dependency tracking avoids integration issues`}),`\n`,_jsx(_components.li,{children:`Enables resuming work after interruptions`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`for-teams`,children:`For Teams`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Parallel development of independent modules`}),`\n`,_jsx(_components.li,{children:`Clear contracts between modules (explicit dependencies)`}),`\n`,_jsx(_components.li,{children:`Reduced merge conflicts (proper module boundaries)`}),`\n`,_jsx(_components.li,{children:`Onboarding aid (architectural overview in PRD)`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`for-ai-agents`,children:`For AI Agents`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Structured context for code generation`}),`\n`,_jsx(_components.li,{children:`Clear scope boundaries per task`}),`\n`,_jsx(_components.li,{children:`Dependency awareness prevents incomplete implementations`}),`\n`,_jsx(_components.li,{children:`Test strategy guidance for TDD workflows`}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`rpg-vs-standard-template`,children:`RPG vs Standard Template`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Aspect`}),_jsx(_components.th,{children:`Standard Template`}),_jsx(_components.th,{children:`RPG Template`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Best for`})}),_jsx(_components.td,{children:`Simple features`}),_jsx(_components.td,{children:`Complex systems`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Dependency handling`})}),_jsx(_components.td,{children:`Implicit`}),_jsx(_components.td,{children:`Explicit graph`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Structure guidance`})}),_jsx(_components.td,{children:`Minimal`}),_jsx(_components.td,{children:`Step-by-step`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Examples`})}),_jsx(_components.td,{children:`Few`}),_jsx(_components.td,{children:`Inline good/bad examples`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Module boundaries`})}),_jsx(_components.td,{children:`Vague`}),_jsx(_components.td,{children:`Precise mapping`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Task ordering`})}),_jsx(_components.td,{children:`Manual`}),_jsx(_components.td,{children:`Automatic (topological)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Learning curve`})}),_jsx(_components.td,{children:`Low`}),_jsx(_components.td,{children:`Medium`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Resulting task quality`})}),_jsx(_components.td,{children:`Good`}),_jsx(_components.td,{children:`Excellent`})]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`tips-for-best-results`,children:`Tips for Best Results`}),`\n`,_jsx(Heading,{level:`3`,id:`1-spend-time-on-dependencies`,children:`1. Spend Time on Dependencies`}),`\n`,_jsx(_components.p,{children:`The dependency graph section is the most valuable. List all dependencies explicitly, even if they seem obvious.`}),`\n`,_jsx(Heading,{level:`3`,id:`2-keep-features-atomic`,children:`2. Keep Features Atomic`}),`\n`,_jsx(_components.p,{children:`Each feature should be independently testable. If a feature description is vague (“handle data”), break it into specific features.`}),`\n`,_jsx(Heading,{level:`3`,id:`3-progressive-refinement`,children:`3. Progressive Refinement`}),`\n`,_jsx(_components.p,{children:`Don’t try to get everything perfect on the first pass:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Fill out high-level sections`}),`\n`,_jsx(_components.li,{children:`Review and refine`}),`\n`,_jsx(_components.li,{children:`Add detail where needed`}),`\n`,_jsxs(_components.li,{children:[`Let `,_jsx(_components.code,{children:`taskgraph expand`}),` break down complex tasks further`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`4-use-research-mode`,children:`4. Use Research Mode`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`taskgraph`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` parse-prd`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --research`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`--research`}),` flag leverages AI to enhance task generation with domain knowledge.`]}),`\n`,_jsx(Heading,{level:`3`,id:`5-validate-early`,children:`5. Validate Early`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`taskgraph`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` validate-dependencies`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Check for circular dependencies or orphaned modules before starting implementation.`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`common-pitfalls`,children:`Common Pitfalls`}),`\n`,_jsx(Heading,{level:`3`,id:`-mixing-functional-and-structural`,children:`❌ Mixing Functional and Structural`}),`\n`,_jsx(CodeBlock,{numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Bad: \"Capability: validation.js\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Good: \"Capability: Data Validation\" → maps to \"src/validation/\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`-vague-module-boundaries`,children:`❌ Vague Module Boundaries`}),`\n`,_jsx(CodeBlock,{numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Bad: \"Module: utils\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Good: \"Module: string-utilities\" with clear exports`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`-implicit-dependencies`,children:`❌ Implicit Dependencies`}),`\n`,_jsx(CodeBlock,{numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Bad: \"Module: API handlers (needs validation)\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Good: \"Module: API handlers, Depends on: [validation, error-handling]\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`-skipping-test-strategy`,children:`❌ Skipping Test Strategy`}),`\n`,_jsx(_components.p,{children:`Without test strategy, the AI won’t know what to test during implementation.`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`example-workflow`,children:`Example Workflow`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Discuss idea with AI`}),`: Explain your project concept`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Reference RPG template`}),`: Show AI the `,_jsx(_components.code,{children:`example_prd_rpg.md`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Co-create PRD`}),`: Work through each section with AI guidance`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Save to docs`}),`: Place in `,_jsx(_components.code,{children:`.taskgraph/docs/your-project.md`}),` (use `,_jsx(_components.code,{children:`.md`}),` for better editor support)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Parse PRD`}),`: `,_jsx(_components.code,{children:`taskgraph parse-prd .taskgraph/docs/your-project.md --research`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Analyze`}),`: `,_jsx(_components.code,{children:`taskgraph analyze-complexity --research`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Expand`}),`: `,_jsx(_components.code,{children:`taskgraph expand --all --research`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Start work`}),`: `,_jsx(_components.code,{children:`taskgraph next`})]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`further-reading`,children:`Further Reading`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/getting-started/quick-start/prd-quick`,children:`PRD Creation and Parsing Guide`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/capabilities/task-structure`,children:`Task Structure Documentation`})}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://arxiv.org/html/2509.16198`,children:`Microsoft Research RPG Paper`}),` (Original methodology)`]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`The RPG template includes inline `,_jsx(_components.code,{children:`\u003cinstruction>`}),` and `,_jsx(_components.code,{children:`\u003cexample>`}),` blocks that teach the method as you use it. Read these sections carefully - they provide valuable guidance at each decision point.`]})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"RPG Method for PRD Creation","sidebarTitle":"RPG Method","description":null,"href":"/capabilities/rpg-method"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Repository Planning Graph (RPG) Method","slug":"repository-planning-graph-rpg-method","depth":1,"children":[]},{"title":"When to Use RPG","slug":"when-to-use-rpg","depth":2,"children":[]},{"title":"Core Principles","slug":"core-principles","depth":2,"children":[{"title":"1. Dual-Semantics","slug":"1-dual-semantics","depth":3,"children":[]},{"title":"2. Explicit Dependencies","slug":"2-explicit-dependencies","depth":3,"children":[]},{"title":"3. Topological Order","slug":"3-topological-order","depth":3,"children":[]},{"title":"4. Progressive Refinement","slug":"4-progressive-refinement","depth":3,"children":[]}]},{"title":"Template Structure","slug":"template-structure","depth":2,"children":[{"title":"1. Overview","slug":"1-overview","depth":3,"children":[]},{"title":"2. Functional Decomposition (WHAT)","slug":"2-functional-decomposition-what","depth":3,"children":[]},{"title":"3. Structural Decomposition (HOW)","slug":"3-structural-decomposition-how","depth":3,"children":[]},{"title":"4. Dependency Graph (CRITICAL)","slug":"4-dependency-graph-critical","depth":3,"children":[]},{"title":"5. Implementation Roadmap","slug":"5-implementation-roadmap","depth":3,"children":[]},{"title":"6. Test Strategy","slug":"6-test-strategy","depth":3,"children":[]},{"title":"7. Architecture \u0026 Risks","slug":"7-architecture-\u0026-risks","depth":3,"children":[]}]},{"title":"Using RPG with TaskGraph","slug":"using-rpg-with-taskgraph","depth":2,"children":[{"title":"Step 1: Create PRD with RPG Template","slug":"step-1-create-prd-with-rpg-template","depth":3,"children":[]},{"title":"Step 2: Parse PRD into Tasks","slug":"step-2-parse-prd-into-tasks","depth":3,"children":[]},{"title":"Step 3: Analyze Complexity","slug":"step-3-analyze-complexity","depth":3,"children":[]},{"title":"Step 4: Expand Tasks","slug":"step-4-expand-tasks","depth":3,"children":[]}]},{"title":"RPG Benefits","slug":"rpg-benefits","depth":2,"children":[{"title":"For Solo Developers","slug":"for-solo-developers","depth":3,"children":[]},{"title":"For Teams","slug":"for-teams","depth":3,"children":[]},{"title":"For AI Agents","slug":"for-ai-agents","depth":3,"children":[]}]},{"title":"RPG vs Standard Template","slug":"rpg-vs-standard-template","depth":2,"children":[]},{"title":"Tips for Best Results","slug":"tips-for-best-results","depth":2,"children":[{"title":"1. Spend Time on Dependencies","slug":"1-spend-time-on-dependencies","depth":3,"children":[]},{"title":"2. Keep Features Atomic","slug":"2-keep-features-atomic","depth":3,"children":[]},{"title":"3. Progressive Refinement","slug":"3-progressive-refinement","depth":3,"children":[]},{"title":"4. Use Research Mode","slug":"4-use-research-mode","depth":3,"children":[]},{"title":"5. Validate Early","slug":"5-validate-early","depth":3,"children":[]}]},{"title":"Common Pitfalls","slug":"common-pitfalls","depth":2,"children":[{"title":"❌ Mixing Functional and Structural","slug":"-mixing-functional-and-structural","depth":3,"children":[]},{"title":"❌ Vague Module Boundaries","slug":"-vague-module-boundaries","depth":3,"children":[]},{"title":"❌ Implicit Dependencies","slug":"-implicit-dependencies","depth":3,"children":[]},{"title":"❌ Skipping Test Strategy","slug":"-skipping-test-strategy","depth":3,"children":[]}]},{"title":"Example Workflow","slug":"example-workflow","depth":2,"children":[]},{"title":"Further Reading","slug":"further-reading","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"myself-fcf8480c","siteName":"TaskGraph","title":"RPG Method for PRD Creation - TaskGraph","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-23T23:51:10.950Z","originalFileLocation":"capabilities/rpg-method.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"application-name\" content=\"TaskGraph\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/myself-fcf8480c/VIQSwQGWxMOj2gkJ/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/myself-fcf8480c/VIQSwQGWxMOj2gkJ/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/myself-fcf8480c/VIQSwQGWxMOj2gkJ/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/myself-fcf8480c/VIQSwQGWxMOj2gkJ/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/myself-fcf8480c/VIQSwQGWxMOj2gkJ/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/myself-fcf8480c/VIQSwQGWxMOj2gkJ/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/myself-fcf8480c/VIQSwQGWxMOj2gkJ/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/myself-fcf8480c/VIQSwQGWxMOj2gkJ/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/myself-fcf8480c/VIQSwQGWxMOj2gkJ/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"RPG Method for PRD Creation - TaskGraph\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"TaskGraph\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://taskgraph-ai.com/capabilities/rpg-method\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://myself-fcf8480c.mintlify.app/_mintlify/api/og/v2?division=Documentation\u0026amp;title=RPG+Method+for+PRD+Creation\u0026amp;theme=bffb9e5eb7ba1722e7c9de5f\u0026amp;signature=0bc7e68696fdf4bd25e5da425bf0d3bc4b3c5e335edf56f6f20a0c52c10fb178\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"RPG Method for PRD Creation - TaskGraph\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://myself-fcf8480c.mintlify.app/_mintlify/api/og/v2?division=Documentation\u0026amp;title=RPG+Method+for+PRD+Creation\u0026amp;theme=bffb9e5eb7ba1722e7c9de5f\u0026amp;signature=0bc7e68696fdf4bd25e5da425bf0d3bc4b3c5e335edf56f6f20a0c52c10fb178\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/myself-fcf8480c/VIQSwQGWxMOj2gkJ/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"TaskGraph\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3366CC\">\u003clink data-mint-head rel=\"canonical\" href=\"https://taskgraph-ai.com/capabilities/rpg-method\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/capabilities/rpg-method.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"TaskGraph\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"TaskGraph","nav":{"global":{"anchors":[{"anchor":"Github","icon":"github","href":"https://github.com/stephennmiller/taskgraph-ai"}]},"tabs":[{"tab":"TaskGraph Documentation","groups":[{"group":"Welcome","pages":[{"title":"TaskGraph: task management for Claude Code","sidebarTitle":"Introduction","href":"/introduction"},{"title":"Upgrading","href":"/upgrading"},{"title":"Migrating from Task Master","href":"/migrating-from-taskmaster"}]},{"group":"Getting Started","pages":[{"group":"Quick Start","pages":[{"title":"Quick Start","sidebarTitle":"Quick Start","href":"/getting-started/quick-start/quick-start"},{"title":"Requirements","sidebarTitle":"Requirements","href":"/getting-started/quick-start/requirements"},{"title":"Installation","sidebarTitle":"Installation","href":"/getting-started/quick-start/installation"},{"title":"Configuration","sidebarTitle":"Configuration","href":"/getting-started/quick-start/configuration-quick"},{"title":"PRD Creation and Parsing","sidebarTitle":"PRD Creation and Parsing","href":"/getting-started/quick-start/prd-quick"},{"title":"Tasks Setup","sidebarTitle":"Tasks Setup","href":"/getting-started/quick-start/tasks-quick"},{"title":"Executing Tasks","sidebarTitle":"Executing Tasks","href":"/getting-started/quick-start/execute-quick"}]},{"title":"Authentication","sidebarTitle":"Authentication","href":"/getting-started/api-keys"},{"title":"Configuration","href":"/configuration"},{"title":"Tutorial","href":"/tutorial"},{"title":"Example Interactions","sidebarTitle":"Examples","href":"/examples"},{"title":"FAQ","sidebarTitle":"FAQ","href":"/getting-started/faq"},{"title":"Contributing to TaskGraph","href":"/getting-started/contribute"}]},{"group":"Best Practices","pages":[{"title":"Intro to Advanced Usage","sidebarTitle":"Advanced Usage","href":"/best-practices/index"},{"title":"Advanced Configuration","sidebarTitle":"Advanced Configuration","href":"/best-practices/configuration-advanced"},{"title":"Advanced Tasks","sidebarTitle":"Advanced Tasks","href":"/best-practices/advanced-tasks"}]},{"group":"Technical Capabilities","pages":[{"title":"MCP Tools","sidebarTitle":"MCP Tools","href":"/capabilities/mcp"},{"title":"Claude Code Integration","sidebarTitle":"Claude Code","href":"/capabilities/claude-code"},{"group":"CLI Commands","pages":[{"title":"CLI Commands","sidebarTitle":"Overview","href":"/capabilities/cli-root-commands"},{"title":"Finding Work","sidebarTitle":"Finding Work","href":"/capabilities/cli-viewing-commands"},{"title":"Updating Tasks","sidebarTitle":"Updating Tasks","href":"/capabilities/cli-updating-commands"},{"title":"Planning Commands","sidebarTitle":"Planning Commands","href":"/capabilities/cli-planning-commands"},{"title":"Project Setup","sidebarTitle":"Project Setup","href":"/capabilities/cli-project-commands"}]},{"title":"Task Structure","sidebarTitle":"Task Structure","href":"/capabilities/task-structure"},{"title":"Dependency Graph","sidebarTitle":"Dependency Graph","href":"/capabilities/dependency-graph"},{"title":"Archiving finished tasks","sidebarTitle":"Archive","href":"/capabilities/archive"},{"title":"Loop Command","sidebarTitle":"Loop Command","href":"/capabilities/loop"},{"title":"Run Tasks in Parallel","sidebarTitle":"Parallel Loop","href":"/capabilities/loop-parallel"},{"title":"Loop presets","href":"/capabilities/loop-presets"},{"title":"Research","sidebarTitle":"Research","href":"/capabilities/research"},{"title":"GitHub Sync","sidebarTitle":"GitHub Sync","href":"/capabilities/github-sync"},{"title":"Merging tasks.json","sidebarTitle":"Merging tasks.json","href":"/capabilities/merge-driver"},{"title":"JSON Output","sidebarTitle":"JSON Output","href":"/capabilities/json-output"}]}]}]},"title":"RPG Method for PRD Creation - TaskGraph","buildId":"dpl_7EGD3AHhNmnVNgQ8U7beMHiqTzw8","deploymentId":"dpl_7EGD3AHhNmnVNgQ8U7beMHiqTzw8","dynamics":[],"chunks":[]}