@davidorex/pi-workflows 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,14 @@
1
- # @davidorex/pi-workflows
2
-
3
- > Workflow orchestration extension for Pi
4
-
5
- ## Tools
6
-
7
- ### workflow
1
+ ---
2
+ name: pi-workflows
3
+ description: >
4
+ Orchestrates multi-step agent workflows defined in YAML with DAG-based
5
+ execution, typed data flow, checkpoint/resume, and output validation. Use when
6
+ running workflows, authoring workflow specs, debugging step failures, or
7
+ inspecting agent configurations.
8
+ ---
8
9
 
10
+ <tools_reference>
11
+ <tool name="workflow">
9
12
  Run a named workflow with typed input. Discovers workflows from .workflows/ and ~/.pi/agent/workflows/.
10
13
 
11
14
  *Run a multi-step workflow with typed data flow between agents*
@@ -15,15 +18,16 @@ Run a named workflow with typed input. Discovers workflows from .workflows/ and
15
18
  | `workflow` | string | yes | Name of the workflow to run |
16
19
  | `input` | unknown | no | Input data for the workflow (validated against workflow's input schema) |
17
20
  | `fresh` | string | no | Set to 'true' to start a fresh run, ignoring any incomplete prior runs |
21
+ </tool>
18
22
 
19
- ### workflow-list
20
-
23
+ <tool name="workflow-list">
21
24
  List available workflows with names, descriptions, and sources.
22
25
 
23
26
  *List available workflows with names, descriptions, and sources*
24
27
 
25
- ### workflow-agents
28
+ </tool>
26
29
 
30
+ <tool name="workflow-agents">
27
31
  List available agents with full specs, or inspect a single agent by name. Returns role, description, model, tools, output format/schema, prompt template paths.
28
32
 
29
33
  *List available agents with specs, or inspect a single agent by name*
@@ -31,9 +35,9 @@ List available agents with full specs, or inspect a single agent by name. Return
31
35
  | Parameter | Type | Required | Description |
32
36
  |-----------|------|----------|-------------|
33
37
  | `name` | string | no | Agent name to inspect (omit to list all) |
38
+ </tool>
34
39
 
35
- ### workflow-validate
36
-
40
+ <tool name="workflow-validate">
37
41
  Validate workflow specs — check agents, schemas, step references, and filters.
38
42
 
39
43
  *Validate workflow specs — check agents, schemas, step references, filters*
@@ -41,207 +45,141 @@ Validate workflow specs — check agents, schemas, step references, and filters.
41
45
  | Parameter | Type | Required | Description |
42
46
  |-----------|------|----------|-------------|
43
47
  | `name` | string | no | Workflow name to validate (omit to validate all) |
48
+ </tool>
44
49
 
45
- ### workflow-status
46
-
50
+ <tool name="workflow-status">
47
51
  Get workflow vocabulary — step types, filters, available agents, workflows, schemas, templates.
48
52
 
49
53
  *Get workflow vocabulary — step types, filters, available agents, workflows, schemas*
50
54
 
51
- ### workflow-init
55
+ </tool>
52
56
 
57
+ <tool name="workflow-init">
53
58
  Initialize .workflows/ directory for workflow run state.
54
59
 
55
60
  *Initialize .workflows/ directory for workflow run state*
56
61
 
57
- ## Commands
62
+ </tool>
58
63
 
59
- ### /workflow
64
+ </tools_reference>
60
65
 
66
+ <commands_reference>
67
+ <command name="/workflow">
61
68
  List and run workflows
62
69
 
63
70
  Subcommands: `init`, `run`, `list`, `resume`, `validate`, `status`
71
+ </command>
64
72
 
65
- ## Keyboard Shortcuts
73
+ </commands_reference>
66
74
 
75
+ <keyboard_shortcuts>
67
76
  - **ctrl+h** — Pause running workflow
68
77
  - **ctrl+j** — Resume paused workflow
78
+ </keyboard_shortcuts>
69
79
 
70
- ## Bundled Resources
71
-
72
- ### agents/ (21 files)
73
-
74
- - `agents/architecture-designer.agent.yaml`
75
- - `agents/architecture-inferrer.agent.yaml`
76
- - `agents/audit-fixer.agent.yaml`
77
- - `agents/code-explorer.agent.yaml`
78
- - `agents/decomposer.agent.yaml`
79
- - `agents/gap-identifier.agent.yaml`
80
- - `agents/handoff-writer.agent.yaml`
81
- - `agents/investigator.agent.yaml`
82
- - `agents/pattern-analyzer.agent.yaml`
83
- - `agents/phase-author.agent.yaml`
84
- - `agents/plan-creator.agent.yaml`
85
- - `agents/plan-decomposer.agent.yaml`
86
- - `agents/project-definer.agent.yaml`
87
- - `agents/project-inferrer.agent.yaml`
88
- - `agents/quality-analyzer.agent.yaml`
89
- - `agents/requirements-gatherer.agent.yaml`
90
- - `agents/researcher.agent.yaml`
91
- - `agents/spec-implementer.agent.yaml`
92
- - `agents/structure-analyzer.agent.yaml`
93
- - `agents/synthesizer.agent.yaml`
94
- - `agents/verifier.agent.yaml`
95
-
96
- ### schemas/ (11 files)
97
-
98
- - `schemas/decomposition-specs.schema.json`
99
- - `schemas/execution-results.schema.json`
100
- - `schemas/investigation-findings.schema.json`
101
- - `schemas/pattern-analysis.schema.json`
102
- - `schemas/phase.schema.json`
103
- - `schemas/plan-breakdown.schema.json`
104
- - `schemas/quality-analysis.schema.json`
105
- - `schemas/research-findings.schema.json`
106
- - `schemas/structure-analysis.schema.json`
107
- - `schemas/synthesis.schema.json`
108
- - `schemas/verifier-output.schema.json`
109
-
110
- ### workflows/ (14 files)
111
-
112
- - `workflows/analyze-existing-project.workflow.yaml`
113
- - `workflows/create-handoff.workflow.yaml`
114
- - `workflows/create-phase.workflow.yaml`
115
- - `workflows/do-gap.workflow.yaml`
116
- - `workflows/fix-audit.workflow.yaml`
117
- - `workflows/gap-to-phase.workflow.yaml`
118
- - `workflows/init-new-project.workflow.yaml`
119
- - `workflows/parallel-analysis.workflow.yaml`
120
- - `workflows/parallel-explicit.workflow.yaml`
121
- - `workflows/pausable-analysis.workflow.yaml`
122
- - `workflows/plan-from-requirements.workflow.yaml`
123
- - `workflows/resumable-analysis.workflow.yaml`
124
- - `workflows/self-implement.workflow.yaml`
125
- - `workflows/typed-analysis.workflow.yaml`
126
-
127
- ### templates/ (28 files)
128
-
129
- - `templates/analyzers/base-analyzer.md`
130
- - `templates/analyzers/macros.md`
131
- - `templates/analyzers/patterns-task.md`
132
- - `templates/analyzers/patterns.md`
133
- - `templates/analyzers/quality-task.md`
134
- - `templates/analyzers/quality.md`
135
- - `templates/analyzers/structure-task.md`
136
- - `templates/analyzers/structure.md`
137
- - `templates/architecture-designer/task.md`
138
- - `templates/architecture-inferrer/task.md`
139
- - `templates/audit-fixer/task.md`
140
- - `templates/decomposer/task.md`
141
- - `templates/explorer/system.md`
142
- - `templates/explorer/task.md`
143
- - `templates/gap-identifier/task.md`
144
- - `templates/handoff-writer/task.md`
145
- - `templates/investigator/task.md`
146
- - `templates/phase-author/task.md`
147
- - `templates/plan-creator/task.md`
148
- - `templates/plan-decomposer/task.md`
149
- - `templates/project-definer/task.md`
150
- - `templates/project-inferrer/task.md`
151
- - `templates/requirements-gatherer/task.md`
152
- - `templates/researcher/task.md`
153
- - `templates/spec-implementer/task.md`
154
- - `templates/synthesizer/system.md`
155
- - `templates/synthesizer/task.md`
156
- - `templates/verifier/task.md`
157
-
158
- ---
159
-
160
- ## How It Works
80
+ <bundled_resources>
81
+ 21 agents, 11 schemas, 14 workflows, 28 templates bundled.
82
+ See references/bundled-resources.md for full inventory.
83
+ </bundled_resources>
161
84
 
85
+ <objective>
162
86
  pi-workflows orchestrates multi-step agent workflows defined in YAML. Workflows are DAGs of typed steps with data flow via `${{ }}` expressions.
87
+ </objective>
163
88
 
164
- ### Workflow Discovery
165
-
89
+ <workflow_discovery>
166
90
  Workflows are discovered from three locations (first match wins):
167
91
  1. `.workflows/*.workflow.yaml` — project-level
168
92
  2. `~/.pi/agent/workflows/*.workflow.yaml` — user-level
169
93
  3. Package bundled `workflows/` — built-in
94
+ </workflow_discovery>
170
95
 
171
- ### Step Types
172
-
96
+ <step_types>
173
97
  | Type | Field | Description |
174
98
  |------|-------|-------------|
175
99
  | agent | `agent: name` | Dispatch an LLM subprocess via `pi --mode json` |
176
100
  | command | `command: "..."` | Run a shell command, capture stdout as output |
101
+ | monitor | `monitor: name` | Run a monitor classification as a verification gate |
177
102
  | transform | `transform: { mapping: {...} }` | Pure data transformation via expressions, no LLM |
178
103
  | gate | `gate: { check: "..." }` | Shell command exit code as pass/fail boolean |
179
104
  | loop | `loop: { maxAttempts, steps }` | Repeat sub-steps until gate breaks or max reached |
180
105
  | parallel | `parallel: { a: ..., b: ... }` | Run named sub-steps concurrently |
181
106
  | pause | `pause: true` or `pause: "message"` | Pause execution, resumable later |
182
107
  | forEach | `forEach: "${{ expr }}"` | Iterate over an array, executing the step per element |
108
+ </step_types>
183
109
 
184
- ### Expression Syntax
185
-
110
+ <expression_syntax>
186
111
  `${{ expression }}` resolves against scope: `input`, `steps`, `loop`, `forEach`.
187
112
 
188
113
  Access step outputs: `${{ steps.investigate.output.findings }}`
189
114
  Filters: `${{ steps.analyze.output | json }}`, `${{ items | length }}`, `${{ name | upper }}`
190
115
 
191
116
  Available filters: length, keys, filter, json, upper, lower, trim, default, first, last, join, split, replace, includes, map, sum, min, max, sort, unique, flatten, zip, group_by, count_by, chunk, pick, omit, entries, from_entries, merge, values, not, and, or.
117
+ </expression_syntax>
192
118
 
193
- ### Agent Resolution
194
-
119
+ <agent_resolution>
195
120
  Agent specs (`.agent.yaml`) are resolved from three locations (first match wins):
196
121
  1. `.pi/agents/<name>.agent.yaml` — project-level
197
122
  2. `~/.pi/agent/agents/<name>.agent.yaml` — user-level
198
123
  3. Package bundled `agents/<name>.agent.yaml` — built-in
199
124
 
200
125
  Agent specs define: model, thinking level, tools, system prompt (or template), task template, output format/schema.
126
+ </agent_resolution>
201
127
 
202
- ### Execution Model
203
-
128
+ <execution_model>
204
129
  1. Steps are ordered by YAML declaration order
205
130
  2. DAG planner infers parallelism from `${{ steps.X }}` references
206
131
  3. Steps without explicit dependencies run after their predecessor (conservative sequential)
207
132
  4. Each step's result is persisted atomically to `<runDir>/state.json`
208
133
  5. TUI progress widget shows real-time step status, cost, and timing
134
+ </execution_model>
209
135
 
210
- ### Checkpoint and Resume
211
-
136
+ <checkpoint_resume>
212
137
  Incomplete runs (failed or paused) are detected on next invocation. If the workflow spec hasn't changed incompatibly, execution resumes from the last completed step. Failed steps are re-executed. Use `fresh: "true"` to force a new run.
138
+ </checkpoint_resume>
213
139
 
214
- ### Output Validation
215
-
140
+ <output_validation>
216
141
  Steps with `output.schema` validate the agent's JSON output against a JSON Schema file. Validation failure marks the step as failed.
217
142
 
218
- ### Per-Step Retry
143
+ Use `block:<name>` to reference project block schemas portably: `output.schema: block:project` resolves to `.project/schemas/project.schema.json` from cwd. Works across monorepo, npm install, and user-customized schemas. Combined with `retry: { maxAttempts: 2 }`, the agent gets the schema validation error injected into its retry prompt and can self-correct.
144
+ </output_validation>
219
145
 
146
+ <retry>
220
147
  Steps with `retry: { maxAttempts: N }` are re-executed on failure. Between retries:
221
148
  - Project block files are rolled back to pre-attempt state
222
149
  - Prior error messages are injected into the prompt
223
150
  - Optional `steeringMessage` provides custom retry guidance
151
+ </retry>
224
152
 
225
- ### Completion Messages
226
-
153
+ <completion_messages>
227
154
  After execution, the workflow result is injected into the main LLM conversation. The `completion` field controls this: either a `template` (full `${{ }}` template) or `message` + `include` (message text plus resolved data paths).
155
+ </completion_messages>
228
156
 
229
- ### Artifacts
230
-
231
- Workflows can write post-completion files via the `artifacts` field. Paths may contain `${{ }}` expressions. Artifacts targeting `.project/*.json` are validated against block schemas.
157
+ <artifacts>
158
+ Workflows can write post-completion files via the `artifacts` field. Paths may contain `${{ }}` expressions. Artifacts targeting `.project/*.json` are routed through `writeBlock()` for schema validation.
232
159
 
233
- ### Validation
160
+ Block artifact write failures are fatal — if the data doesn't conform to the block's schema, the workflow fails. Non-block artifact failures remain non-fatal (warning). On resume, all steps are preserved; only artifact processing re-runs, so fixing the schema issue or agent output and resuming avoids re-running expensive LLM steps.
161
+ </artifacts>
234
162
 
163
+ <validation>
235
164
  `validateWorkflow(spec, cwd)` runs authoring-time checks without executing the workflow:
236
165
 
237
166
  1. **Agent resolution** — all referenced agents exist in the three-tier search
238
- 2. **Schema resolution** — all output schema file paths resolve to existing files
239
- 3. **Step reference validity** — `${{ steps.X }}` expressions reference declared steps
240
- 4. **Step ordering** — referenced steps are declared before the referencing step
241
- 5. **Filter name validity** — `${{ value | filter }}` uses known filter names
167
+ 2. **Monitor resolution** — all referenced monitors exist in .pi/monitors/ or built-in examples
168
+ 3. **Schema resolution** — all output schema file paths resolve to existing files
169
+ 4. **Step reference validity** — `${{ steps.X }}` expressions reference declared steps
170
+ 5. **Step ordering** — referenced steps are declared before the referencing step
171
+ 6. **Filter name validity** — `${{ value | filter }}` uses known filter names
242
172
 
243
173
  Returns `{ valid: boolean, issues: ValidationIssue[] }` where each issue has severity, message, and field path. Use `/workflow validate` or `/workflow validate <name>` to run from the command line.
244
-
245
- ---
174
+ </validation>
175
+
176
+ <success_criteria>
177
+ - Workflow completes all steps without unhandled failures
178
+ - Step outputs match declared output schemas
179
+ - State is persisted atomically after each step
180
+ - Completion message is delivered to main conversation
181
+ - `/workflow validate` returns no errors for authored specs
182
+ - Checkpoint/resume recovers from the last completed step
183
+ </success_criteria>
246
184
 
247
185
  *Generated from source by `scripts/generate-skills.js` — do not edit by hand.*
@@ -0,0 +1,87 @@
1
+ # Bundled Resources
2
+
3
+ ## agents/ (21 files)
4
+
5
+ - `agents/architecture-designer.agent.yaml`
6
+ - `agents/architecture-inferrer.agent.yaml`
7
+ - `agents/audit-fixer.agent.yaml`
8
+ - `agents/code-explorer.agent.yaml`
9
+ - `agents/decomposer.agent.yaml`
10
+ - `agents/gap-identifier.agent.yaml`
11
+ - `agents/handoff-writer.agent.yaml`
12
+ - `agents/investigator.agent.yaml`
13
+ - `agents/pattern-analyzer.agent.yaml`
14
+ - `agents/phase-author.agent.yaml`
15
+ - `agents/plan-creator.agent.yaml`
16
+ - `agents/plan-decomposer.agent.yaml`
17
+ - `agents/project-definer.agent.yaml`
18
+ - `agents/project-inferrer.agent.yaml`
19
+ - `agents/quality-analyzer.agent.yaml`
20
+ - `agents/requirements-gatherer.agent.yaml`
21
+ - `agents/researcher.agent.yaml`
22
+ - `agents/spec-implementer.agent.yaml`
23
+ - `agents/structure-analyzer.agent.yaml`
24
+ - `agents/synthesizer.agent.yaml`
25
+ - `agents/verifier.agent.yaml`
26
+
27
+ ## schemas/ (11 files)
28
+
29
+ - `schemas/decomposition-specs.schema.json`
30
+ - `schemas/execution-results.schema.json`
31
+ - `schemas/investigation-findings.schema.json`
32
+ - `schemas/pattern-analysis.schema.json`
33
+ - `schemas/phase.schema.json`
34
+ - `schemas/plan-breakdown.schema.json`
35
+ - `schemas/quality-analysis.schema.json`
36
+ - `schemas/research-findings.schema.json`
37
+ - `schemas/structure-analysis.schema.json`
38
+ - `schemas/synthesis.schema.json`
39
+ - `schemas/verifier-output.schema.json`
40
+
41
+ ## workflows/ (14 files)
42
+
43
+ - `workflows/analyze-existing-project.workflow.yaml`
44
+ - `workflows/create-handoff.workflow.yaml`
45
+ - `workflows/create-phase.workflow.yaml`
46
+ - `workflows/do-gap.workflow.yaml`
47
+ - `workflows/fix-audit.workflow.yaml`
48
+ - `workflows/gap-to-phase.workflow.yaml`
49
+ - `workflows/init-new-project.workflow.yaml`
50
+ - `workflows/parallel-analysis.workflow.yaml`
51
+ - `workflows/parallel-explicit.workflow.yaml`
52
+ - `workflows/pausable-analysis.workflow.yaml`
53
+ - `workflows/plan-from-requirements.workflow.yaml`
54
+ - `workflows/resumable-analysis.workflow.yaml`
55
+ - `workflows/self-implement.workflow.yaml`
56
+ - `workflows/typed-analysis.workflow.yaml`
57
+
58
+ ## templates/ (28 files)
59
+
60
+ - `templates/analyzers/base-analyzer.md`
61
+ - `templates/analyzers/macros.md`
62
+ - `templates/analyzers/patterns-task.md`
63
+ - `templates/analyzers/patterns.md`
64
+ - `templates/analyzers/quality-task.md`
65
+ - `templates/analyzers/quality.md`
66
+ - `templates/analyzers/structure-task.md`
67
+ - `templates/analyzers/structure.md`
68
+ - `templates/architecture-designer/task.md`
69
+ - `templates/architecture-inferrer/task.md`
70
+ - `templates/audit-fixer/task.md`
71
+ - `templates/decomposer/task.md`
72
+ - `templates/explorer/system.md`
73
+ - `templates/explorer/task.md`
74
+ - `templates/gap-identifier/task.md`
75
+ - `templates/handoff-writer/task.md`
76
+ - `templates/investigator/task.md`
77
+ - `templates/phase-author/task.md`
78
+ - `templates/plan-creator/task.md`
79
+ - `templates/plan-decomposer/task.md`
80
+ - `templates/project-definer/task.md`
81
+ - `templates/project-inferrer/task.md`
82
+ - `templates/requirements-gatherer/task.md`
83
+ - `templates/researcher/task.md`
84
+ - `templates/spec-implementer/task.md`
85
+ - `templates/synthesizer/system.md`
86
+ - `templates/synthesizer/task.md`
87
+ - `templates/verifier/task.md`
@@ -41,6 +41,9 @@ steps:
41
41
  path: ${{ input.path }}
42
42
  output:
43
43
  format: json
44
+ schema: block:architecture
45
+ retry:
46
+ maxAttempts: 2
44
47
 
45
48
  infer-project:
46
49
  agent: project-inferrer
@@ -51,6 +54,9 @@ steps:
51
54
  path: ${{ input.path }}
52
55
  output:
53
56
  format: json
57
+ schema: block:project
58
+ retry:
59
+ maxAttempts: 2
54
60
 
55
61
  identify-gaps:
56
62
  agent: gap-identifier
@@ -62,10 +68,24 @@ steps:
62
68
  path: ${{ input.path }}
63
69
  output:
64
70
  format: json
71
+ schema: block:gaps
72
+ retry:
73
+ maxAttempts: 2
74
+
75
+ artifacts:
76
+ project:
77
+ path: .project/project.json
78
+ from: steps.infer-project.output
79
+ architecture:
80
+ path: .project/architecture.json
81
+ from: steps.infer-architecture.output
82
+ gaps:
83
+ path: .project/gaps.json
84
+ from: steps.identify-gaps.output
65
85
 
66
86
  completion:
67
87
  template: |
68
- Existing project analyzed.
88
+ Existing project analyzed. Results written to .project/ blocks.
69
89
 
70
90
  **Project:** ${{ steps.infer-project.output.name }} — ${{ steps.infer-project.output.core_value }}
71
91
  **Architecture:** ${{ steps.infer-architecture.output.modules | length }} modules, ${{ steps.infer-architecture.output.patterns | length }} patterns
@@ -52,6 +52,14 @@ steps:
52
52
  path: "."
53
53
  output:
54
54
  format: json
55
+ schema: block:handoff
56
+ retry:
57
+ maxAttempts: 2
58
+
59
+ artifacts:
60
+ handoff:
61
+ path: .project/handoff.json
62
+ from: steps.capture.output
55
63
 
56
64
  completion:
57
65
  message: |
@@ -42,7 +42,7 @@ steps:
42
42
  inventory: "${{ steps.load-context.output.inventory }}"
43
43
  output:
44
44
  format: json
45
- schema: ../schemas/phase.schema.json
45
+ schema: block:phase
46
46
 
47
47
  write-phase:
48
48
  command: |
@@ -72,7 +72,7 @@ steps:
72
72
  inventory: "${{ steps.load-context.output.inventory }}"
73
73
  output:
74
74
  format: json
75
- schema: ../schemas/phase.schema.json
75
+ schema: block:phase
76
76
 
77
77
  write-phase:
78
78
  command: |
@@ -17,6 +17,9 @@ steps:
17
17
  vision: ${{ input.vision }}
18
18
  output:
19
19
  format: json
20
+ schema: block:project
21
+ retry:
22
+ maxAttempts: 2
20
23
 
21
24
  gather-requirements:
22
25
  agent: requirements-gatherer
@@ -25,6 +28,9 @@ steps:
25
28
  vision: ${{ input.vision }}
26
29
  output:
27
30
  format: json
31
+ schema: block:requirements
32
+ retry:
33
+ maxAttempts: 2
28
34
 
29
35
  design-architecture:
30
36
  agent: architecture-designer
@@ -33,6 +39,9 @@ steps:
33
39
  requirements: ${{ steps.gather-requirements.output }}
34
40
  output:
35
41
  format: json
42
+ schema: block:architecture
43
+ retry:
44
+ maxAttempts: 2
36
45
 
37
46
  create-plan:
38
47
  agent: plan-creator
@@ -42,10 +51,27 @@ steps:
42
51
  architecture: ${{ steps.design-architecture.output }}
43
52
  output:
44
53
  format: json
54
+ schema: block:tasks
55
+ retry:
56
+ maxAttempts: 2
57
+
58
+ artifacts:
59
+ project:
60
+ path: .project/project.json
61
+ from: steps.define-identity.output
62
+ requirements:
63
+ path: .project/requirements.json
64
+ from: steps.gather-requirements.output
65
+ architecture:
66
+ path: .project/architecture.json
67
+ from: steps.design-architecture.output
68
+ tasks:
69
+ path: .project/tasks.json
70
+ from: steps.create-plan.output
45
71
 
46
72
  completion:
47
73
  template: |
48
- Project initialized from vision.
74
+ Project initialized from vision. Results written to .project/ blocks.
49
75
 
50
76
  **Identity:** ${{ steps.define-identity.output.name }} — ${{ steps.define-identity.output.core_value }}
51
77
  **Requirements:** ${{ steps.gather-requirements.output.requirements | length }} captured
@@ -42,10 +42,18 @@ steps:
42
42
  existing_phases: ${{ steps.load-context.output.existing_phases }}
43
43
  output:
44
44
  format: json
45
+ schema: block:tasks
46
+ retry:
47
+ maxAttempts: 2
48
+
49
+ artifacts:
50
+ tasks:
51
+ path: .project/tasks.json
52
+ from: steps.create-plan.output
45
53
 
46
54
  completion:
47
55
  template: |
48
- Plan created from requirements.
56
+ Plan created from requirements. Tasks written to .project/tasks.json.
49
57
 
50
58
  Use `/project status` to see the phase and task breakdown.
51
59
  Use `/project validate` to check cross-block references.