From product-design
Decomposes PRDs and Tech Specs into parallel-executable tasks with contracts, prompts, and dependency graphs for multi-agent execution.
How this skill is triggered — by the user, by Claude, or both
Slash command
/product-design:parallel-decomposeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Decompose a PRD and Tech Spec into parallel-executable tasks with contracts, dependency graphs, and agent prompts.
Decompose a PRD and Tech Spec into parallel-executable tasks with contracts, dependency graphs, and agent prompts.
flowchart TB
Start[("PRD + Tech Spec")]
Dir["1. Determine Output Dir"]
Analyze["2. Analyze Tech Spec"]
Manifest["3. Create manifest.json"]
Context["4. Create context.md"]
Arch["5. Create architecture.md"]
Contracts["6. Create contracts/"]
Tasks["7. Generate task files"]
Graph["8. Create task-graph.md"]
Prompts["9. Generate prompts/"]
Update["10. Update manifest"]
Report["11. Report Results"]
Start --> Dir
Dir --> Analyze
Analyze --> Manifest
Manifest --> Context
Context --> Arch
Arch --> Contracts
Contracts --> Tasks
Tasks --> Graph
Graph --> Prompts
Prompts --> Update
Update --> Report
Report --> Done(["Ready for cpo run"])
PARALLEL_DIR="parallel/TS-0042-inventory-system"
parallel/{slug}/If a Tech Spec (TS-XXXX) is provided:
Read and validate Tech Spec:
Extract from Tech Spec:
architecture.mdcontracts/types.pycontracts/api-schema.yamlSkip redundant steps:
If no Tech Spec provided: Generate contracts from PRD and display warning:
"Consider creating a Tech Spec first for better contract definitions"
Use the cpo format:
{
"tech_spec_id": "TS-0042",
"name": "inventory-system",
"technology": "python",
"python_version": "3.11",
"waves": [
{
"number": 1,
"tasks": [
{ "id": "task-001", "agent": "python-experts:django-expert" },
{ "id": "task-002", "agent": "python-experts:django-expert" }
],
"validation": "from apps.users.models import User; print('Wave 1 OK')"
}
],
"metadata": {
"tech_spec": "tech-specs/approved/TS-0042-inventory.md",
"generated_at": "2025-01-15T10:00:00Z",
"total_tasks": 3,
"max_parallel": 2,
"critical_path": ["task-001", "task-003"]
}
}
Shared project context read once by all agents (token-efficient):
Create architecture.md with Mermaid component diagram:
graph TB
Client["Client/Frontend"]
Gateway["API Gateway"]
subgraph Users["Users Service<br/>(task-001)"]
UserAPI["User API<br/>/api/users/"]
UserDB["User DB"]
end
subgraph Products["Products Service<br/>(task-002)"]
ProductAPI["Product API<br/>/api/products/"]
ProductDB["Product DB"]
end
Client --> Gateway
Gateway --> UserAPI
Gateway --> ProductAPI
UserAPI --> UserDB
ProductAPI --> ProductDB
Conventions:
subgraph to group by service/task-->) for direct dependencies-.->) for weak dependenciesfrom dataclasses import dataclass
from typing import Optional
from datetime import datetime
from enum import Enum
class UserRole(str, Enum):
ADMIN = "admin"
USER = "user"
@dataclass
class User:
id: int
email: str
username: str
role: UserRole
created_at: datetime
@dataclass
class UserCreateRequest:
email: str
username: str
password: str
openapi: 3.0.0
info:
title: API
version: 1.0.0
components:
schemas:
User:
type: object
required: [id, email, username]
properties:
id: {type: integer}
email: {type: string, format: email}
username: {type: string}
paths:
/users:
get:
summary: List users
responses:
'200':
description: User list
Create task specs in tasks/ using compact YAML format.
See the parallel-task-format skill for the complete task specification format.
Dependency visualization with Mermaid:
flowchart TB
subgraph W1[Wave 1 - parallel]
t001[task-001-users<br/>django-expert]
t002[task-002-products<br/>django-expert]
end
subgraph W2[Wave 2 - parallel]
t003[task-003-orders<br/>django-expert]
end
t001 --> t003
t002 --> t003
Include Gantt chart for timeline:
gantt
title Parallel Task Execution
dateFormat YYYY-MM-DD
section Wave 1
task-001-users :t001, 2025-01-01, 4h
task-002-products :t002, 2025-01-01, 4h
section Wave 2
task-003-orders :crit, t003, after t001, 3h
Use the parallel-prompt-generator skill to generate agent-ready prompts from the task files.
This creates:
prompts/agent-prompts.md - Wave summary and launch commandsprompts/task-NNN.txt - Individual agent promptsSee the parallel-prompt-generator skill for the complete prompt template and generation workflow.
Key points:
context.md contentUpdate manifest.json with final task counts.
Report summary:
Decomposition Complete
Output: parallel/TS-0042-inventory-system/
Source: docs/prd.md
Tech Spec: TS-0042
Tasks: 6
Waves: 3
Max parallel: 3
Next: Run cpo run parallel/TS-0042-inventory-system/
Merge conflicts happen when parallel tasks touch the same lines. Follow these rules:
A file can appear in CREATE for exactly one task across all waves.
# task-001 (Wave 1)
CREATE: rag/core/acl.py # Only task-001 can create this
# task-002 (Wave 1) - WRONG
CREATE: rag/core/acl.py # CONFLICT - already created by task-001
Multiple tasks CAN modify the same file in the same wave only if each task owns distinct sections (functions, classes, methods).
Scoped MODIFY syntax:
MODIFY: path/file.py::ClassName # Owns entire class
MODIFY: path/file.py::function_name # Owns entire function
MODIFY: path/file.py::ClassName.method # Owns specific method
Parallel MODIFY - ALLOWED (different scopes):
# Wave 2 - OK, different functions
task-003: MODIFY: rag/core/acl.py::to_sql_conditions
task-004: MODIFY: rag/core/acl.py::to_mongo_conditions
Parallel MODIFY - NOT ALLOWED (overlapping scopes):
# Wave 2 - CONFLICT, same scope or unscoped
task-003: MODIFY: rag/core/acl.py
task-004: MODIFY: rag/core/acl.py
# Wave 2 - CONFLICT, nested scopes
task-003: MODIFY: rag/core/acl.py::ACLFilterSpec
task-004: MODIFY: rag/core/acl.py::ACLFilterSpec.validate
Build this matrix before generating tasks:
| File | CREATE | MODIFY (scoped) | Wave |
|---|---|---|---|
rag/core/acl.py | task-001 | - | W1 |
rag/core/acl.py::to_sql_conditions | - | task-003 | W2 |
rag/core/acl.py::to_mongo_conditions | - | task-004 | W2 |
rag/core/interfaces.py | task-003 | - | W2 |
1. COUNT(tasks where file F in CREATE) <= 1
2. For parallel tasks (same wave):
- If MODIFY is unscoped (no ::), only ONE task can touch file F
- If MODIFY is scoped (has ::), scopes must NOT overlap
3. Scopes overlap if:
- Same scope (both ::ClassName)
- One contains other (::ClassName vs ::ClassName.method)
Before finalizing:
parallel-task-format skill)Wave 1: shared-models (contracts)
Wave 2: users-service, products-service, orders-service (parallel)
Wave 3: api-gateway
Wave 4: integration-tests
Wave 1: models-and-migrations
Wave 2: views-and-serializers, api-endpoints (parallel)
Wave 3: comprehensive-tests
Wave 1: types-and-hooks
Wave 2: form-components, list-components (parallel)
Wave 3: pages (parallel)
Wave 4: routing-and-integration
Split coupled tasks or create intermediate shared task.
Split by component (models, views, tests) or defer optional features.
Warn user, generate best-effort contracts with TODOs.
Update contracts first, then regenerate prompts.
npx claudepluginhub jpoutrin/product-forge --plugin product-designDecomposes specs/PRDs/plans into independent tasks, assigns to builder agents for parallel execution in waves respecting dependencies, then integrates results. For fast multi-file feature implementation.
Convert technical designs into actionable, tracked task hierarchies with sizing, dependencies, and acceptance criteria. Invoke whenever task involves any interaction with work decomposition — breaking down features into subtasks, slicing work items, creating task lists, or writing decomposition documents.
Transforms a specification into a dependency-aware task graph. Use after cw-spec to break a spec into executable tasks before dispatching.