Ask about decision detection (use AskUserQuestion):
question: "Would you like to enable automatic decision detection?"
options:
- label: "Yes - Detect decisions worth documenting"
description: "Claude will notice when conversations contain architecture decisions, feature requirements, or implementation plans that should be captured as ADR/PRD/PRP documents"
- label: "No - Manual commands only"
description: "Use /blueprint:derive-plans, /blueprint:prp-create explicitly when you want to create documents"
Set has_document_detection in manifest based on response.
If enabled:
Resolve the rules output directory before writing — honour the path chosen in
Step 4a (default .claude/rules/) rather than hardcoding it, so blueprint
does not collide with rulesync-managed or hand-authored rules (issue #1675):
RULES_DIR=$(jq -r '.structure.generated_rules_path // ".claude/rules/"' docs/blueprint/manifest.json)
mkdir -p "$RULES_DIR"
When the manifest is not yet written, use the Step 4a selection directly
(default .claude/rules/).
Copy document-management-rule.md template to $RULES_DIR/document-management.md.
This rule instructs Claude to watch for:
- Architecture decisions being made during discussion → prompt to create ADR
- Feature requirements being discussed or refined → prompt to create/update PRD
- Implementation plans being formulated → prompt to create PRP
Create directory structure:
Canonical document paths are at the top level of docs/, not under docs/blueprint/. docs/blueprint/ holds blueprint machinery only (manifest, feature-tracker, work-orders, ai_docs); docs/{adrs,prds,prps,trps}/ hold the documents themselves. Every /blueprint:derive-* skill writes to the top-level paths — keeping them consistent prevents the dual-corpus bug where init creates one layout and derive-* writes to another.
Execute the creation explicitly so the directories exist even when no document migration happened in Step 3:
mkdir -p docs/blueprint/work-orders/completed
mkdir -p docs/blueprint/work-orders/archived
mkdir -p docs/blueprint/ai_docs/libraries
mkdir -p docs/blueprint/ai_docs/project
mkdir -p docs/adrs
mkdir -p docs/prds
mkdir -p docs/prps
Note: docs/trps/ is created on-demand by /blueprint:derive-tests only — init does not pre-create it.
The resulting tree:
docs/
├── blueprint/
│ ├── manifest.json # Version tracking and configuration
│ ├── feature-tracker.json # Progress tracking (if enabled)
│ ├── work-orders/ # Task packages for subagents
│ │ ├── completed/
│ │ └── archived/
│ ├── ai_docs/ # Curated documentation (on-demand)
│ │ ├── libraries/
│ │ └── project/
│ └── README.md # Blueprint documentation
├── prds/ # Product Requirements Documents (canonical)
├── adrs/ # Architecture Decision Records (canonical)
├── prps/ # Product Requirement Prompts (canonical)
└── trps/ # Test Regression Plans (created on-demand by /blueprint:derive-tests)
Claude configuration (in .claude/): — initial rules are written under
structure.generated_rules_path (default .claude/rules/; an isolated
subdirectory like .claude/rules/blueprint/ when Step 4a detected existing
content), shown here at the default location:
.claude/
├── rules/ # $RULES_DIR — generated_rules_path (default .claude/rules/)
│ ├── development.md # Development workflow rules
│ ├── testing.md # Testing requirements
│ └── document-management.md # Document organization rules (if detection enabled)
└── skills/ # Custom skill overrides (optional)
Create manifest.json (v3.3.0 schema — canonical filename is docs/blueprint/manifest.json, no dot prefix):
{
"format_version": "3.3.0",
"created_at": "[ISO timestamp]",
"updated_at": "[ISO timestamp]",
"created_by": {
"blueprint_plugin": "3.3.0"
},
"project": {
"name": "[detected from package.json/pyproject.toml or directory name]",
"detected_stack": []
},
"structure": {
"has_prds": true,
"has_adrs": true,
"has_prps": true,
"has_work_orders": true,
"has_ai_docs": false,
"has_modular_rules": true,
"has_feature_tracker": "[based on user choice]",
"has_document_detection": "[based on user choice]",
"claude_md_mode": "both",
"generated_rules_path": "[based on Step 4a; defaults to .claude/rules/ when prompt skipped]"
},
"feature_tracker": {
"file": "feature-tracker.json",
"source_document": "[auto-detected]",
"sync_targets": ["TODO.md"]
},
"generated": {
"rules": {},
"commands": {}
},
"custom_overrides": {
"skills": [],
"commands": []
},
"task_registry": {
"derive-plans": {
"enabled": true,
"auto_run": false,
"last_completed_at": null,
"last_result": null,
"schedule": "weekly",
"stats": {},
"context": {}
},
"derive-rules": {
"enabled": true,
"auto_run": false,
"last_completed_at": null,
"last_result": null,
"schedule": "weekly",
"stats": {},
"context": {}
},
"generate-rules": {
"enabled": true,
"auto_run": false,
"last_completed_at": null,
"last_result": null,
"schedule": "on-change",
"stats": {},
"context": {}
},
"adr-validate": {
"enabled": true,
"auto_run": "[based on maintenance task choice: true if auto-run safe, false otherwise]",
"last_completed_at": null,
"last_result": null,
"schedule": "weekly",
"stats": {},
"context": {}
},
"feature-tracker-sync": {
"enabled": true,
"auto_run": "[based on maintenance task choice: true if auto-run safe, false otherwise]",
"last_completed_at": null,
"last_result": null,
"schedule": "daily",
"stats": {},
"context": {}
},
"sync-ids": {
"enabled": true,
"auto_run": "[based on maintenance task choice: true if auto-run safe, false otherwise]",
"last_completed_at": null,
"last_result": null,
"schedule": "on-change",
"stats": {},
"context": {}
},
"claude-md": {
"enabled": true,
"auto_run": false,
"last_completed_at": null,
"last_result": null,
"schedule": "on-change",
"stats": {},
"context": {}
},
"curate-docs": {
"enabled": false,
"auto_run": false,
"last_completed_at": null,
"last_result": null,
"schedule": "on-demand",
"stats": {},
"context": {}
}
}
}
Note: Include feature_tracker section only if feature tracking is enabled.
Note: As of v3.2.0, progress tracking is consolidated into feature-tracker.json (work-overview.md removed).
Monorepo workspaces block (v3.3.0+), appended to the manifest based on the
detection from Step 1a:
- Child (ancestor blueprint found and user opted in):
"workspaces": {
"role": "child",
"root_relative_path": "[relative path from this dir to the root]"
}
- Root (descendant blueprints found):
"workspaces": {
"role": "root",
"discovery_strategy": "auto-cache",
"last_scanned_at": null,
"children": []
}
After writing the manifest, run /blueprint:workspace-scan once to
populate children[].
- Standalone: omit the
workspaces block entirely.