@plainconceptsplatform/agent-harness 2.0.0 → 2.0.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.
- package/README.md +423 -419
- package/package.json +3 -3
- package/src/commands/join.js +244 -244
- package/src/commands/shared.js +27 -27
- package/src/commands/single.js +79 -79
- package/src/commands/update.js +109 -109
- package/src/commands/wizard.js +134 -134
- package/src/content/.agents/skills/browser-automation/SKILL.md +66 -66
- package/src/content/.agents/skills/pc-guardrails-generic/SKILL.md +68 -68
- package/src/content/.agents/skills/pc-guardrails-project/SKILL.md +8 -8
- package/src/content/.agents/skills/pc-make-architecture/SKILL.md +51 -51
- package/src/content/.agents/skills/pc-make-architecture/structure-template.md +38 -38
- package/src/content/.agents/skills/pc-make-design/SKILL.md +68 -68
- package/src/content/.agents/skills/pc-make-engineer/SKILL.md +219 -219
- package/src/content/.agents/skills/pc-make-engineer/signal-mapping.md +68 -68
- package/src/content/.agents/skills/pc-make-engineer/template.md +81 -81
- package/src/content/.agents/skills/pc-make-evidence-scaffold/SKILL.md +18 -18
- package/src/content/.agents/skills/pc-make-evidence-scaffold/evidence-contract.md +29 -29
- package/src/content/.agents/skills/pc-make-guardrails/SKILL.md +74 -74
- package/src/content/.agents/skills/pc-make-guardrails/category-reference.md +68 -68
- package/src/content/.agents/skills/pc-make-merge-risk-assess/SKILL.md +70 -70
- package/src/content/.agents/skills/pc-make-merge-risk-assess/category-reference.md +98 -98
- package/src/content/.agents/skills/pc-make-user-model/SKILL.md +66 -66
- package/src/content/.agents/skills/pc-ops-evidence/SKILL.md +127 -127
- package/src/content/.agents/skills/pc-ops-ship/SKILL.md +18 -18
- package/src/content/.agents/skills/pc-plan-apply/SKILL.md +83 -83
- package/src/content/.agents/skills/pc-plan-apply/simple-mode.md +21 -21
- package/src/content/.agents/skills/pc-plan-archive/SKILL.md +63 -63
- package/src/content/.agents/skills/pc-plan-explore/SKILL.md +9 -9
- package/src/content/.agents/skills/pc-plan-goal/SKILL.md +94 -94
- package/src/content/.agents/skills/pc-plan-goal/branching.md +30 -30
- package/src/content/.agents/skills/pc-plan-goal/failure-policy.md +30 -30
- package/src/content/.agents/skills/pc-plan-goal/output-mode.md +9 -9
- package/src/content/.agents/skills/pc-plan-goal/output.md +68 -68
- package/src/content/.agents/skills/pc-plan-propose/SKILL.md +125 -125
- package/src/content/.agents/skills/pc-plan-propose/task-annotation.md +39 -39
- package/src/content/.agents/skills/pc-plan-quick/SKILL.md +62 -62
- package/src/content/.agents/skills/pc-plan-story/SKILL.md +146 -146
- package/src/content/.agents/skills/pc-repo-audit/SKILL.md +44 -44
- package/src/content/.agents/skills/pc-repo-help/SKILL.md +91 -91
- package/src/content/.agents/skills/pc-repo-initialize/SKILL.md +130 -130
- package/src/content/.agents/skills/pc-repo-onboard/SKILL.md +87 -87
- package/src/content/.agents/skills/pc-repo-verify/SKILL.md +34 -34
- package/src/content/.agents/skills/pc-userstory-az/SKILL.md +157 -157
- package/src/content/.agents/skills/pc-userstory-browser/SKILL.md +132 -132
- package/src/content/.agents/skills/pc-userstory-gh/SKILL.md +120 -120
- package/src/content/.agents/skills/pc-userstory-jira/SKILL.md +131 -131
- package/src/content/.opencode/_gitignore +7 -7
- package/src/content/.opencode/commands/init.md +5 -5
- package/src/content/.opencode/commands/make-architecture.md +5 -5
- package/src/content/.opencode/commands/make-design.md +5 -5
- package/src/content/.opencode/commands/make-engineer.md +5 -5
- package/src/content/.opencode/commands/make-evidence-scaffold.md +5 -5
- package/src/content/.opencode/commands/make-guardrails.md +5 -5
- package/src/content/.opencode/commands/make-user-model.md +5 -5
- package/src/content/.opencode/commands/ops-backlog.md +10 -10
- package/src/content/.opencode/commands/ops-evidence.md +9 -9
- package/src/content/.opencode/commands/ops-review.md +8 -8
- package/src/content/.opencode/commands/ops-ship.md +9 -9
- package/src/content/.opencode/commands/plan-apply.md +9 -9
- package/src/content/.opencode/commands/plan-archive.md +5 -5
- package/src/content/.opencode/commands/plan-explore.md +9 -9
- package/src/content/.opencode/commands/plan-goal.md +5 -5
- package/src/content/.opencode/commands/plan-propose.md +9 -9
- package/src/content/.opencode/commands/plan-quick.md +5 -5
- package/src/content/.opencode/commands/plan-story.md +9 -9
- package/src/content/.opencode/commands/repo-audit.md +5 -5
- package/src/content/.opencode/commands/repo-help.md +5 -5
- package/src/content/.opencode/commands/repo-initialize.md +5 -5
- package/src/content/.opencode/commands/repo-onboard.md +5 -5
- package/src/content/.opencode/commands/repo-verify.md +5 -5
- package/src/content/.opencode/plugins/pc-subagent-monitor.js +139 -139
- package/src/content/.opencode/plugins/pc-subagent-tiers.js +179 -179
- package/src/content/.opencode/plugins/pc-system-reminders.js +96 -96
- package/src/content/.opencode/tui/pc-subagents.tsx +98 -98
- package/src/content/.opencode/tui.json +6 -6
- package/src/content/AGENTS.md +71 -71
- package/src/fragments/archive/az.md +95 -95
- package/src/fragments/archive/gh.md +94 -94
- package/src/fragments/archive/gl.md +94 -94
- package/src/fragments/archive/none.md +73 -73
- package/src/fragments/guardrails/codegraph.md +7 -7
- package/src/fragments/guardrails/humanizer.md +4 -4
- package/src/fragments/guardrails/memory.md +4 -4
- package/src/fragments/guardrails/rtk.md +3 -3
- package/src/fragments/guardrails/simple-english.md +4 -4
- package/src/fragments/ops-backlog/az.md +28 -28
- package/src/fragments/ops-backlog/gh.md +29 -29
- package/src/fragments/ops-backlog/jira.md +28 -28
- package/src/fragments/ops-evidence/az.md +41 -41
- package/src/fragments/ops-evidence/gh.md +53 -53
- package/src/fragments/ops-evidence/jira.md +38 -38
- package/src/fragments/ops-review/az.md +62 -62
- package/src/fragments/ops-review/gh.md +52 -52
- package/src/fragments/ops-review/gl.md +56 -56
- package/src/fragments/ops-ship/az.md +80 -80
- package/src/fragments/ops-ship/gh.md +68 -68
- package/src/fragments/ops-ship/gl.md +85 -85
- package/src/index.js +107 -107
- package/src/presets/agents-content.json +53 -53
- package/src/presets/models.json +68 -68
- package/src/steps/copy/agents.js +118 -118
- package/src/steps/copy/commands.js +91 -91
- package/src/steps/copy/fullstack-engineer.js +83 -83
- package/src/steps/copy/index.js +88 -88
- package/src/steps/copy/opencode-json.js +129 -129
- package/src/steps/copy/skills.js +196 -196
- package/src/steps/metadata/index.js +108 -108
- package/src/steps/models/write.js +34 -34
- package/src/steps/optimization/patch-guardrails.js +108 -108
- package/src/utils/copy.js +108 -108
- package/src/utils/legacy-check.js +30 -30
- package/src/utils/models-cache.js +58 -58
- package/src/utils/paths.js +64 -64
- package/src/utils/update-manifest.js +49 -49
- package/src/content/.opencode/plugins/pc-system-reminders.test.js +0 -35
|
@@ -1,125 +1,125 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: pc-plan-propose
|
|
3
|
-
description: Parse a work item or idea and produce an OpenSpec change plan (proposal.md, specs, tasks.md) with enriched task assignments (agent, tier, depends_on, touches). Load when turning a requirement into a structured plan. Invoked by the /plan-propose command (interactive) and the plan-goal pipeline (autonomous).
|
|
4
|
-
license: MIT
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Plan Propose
|
|
8
|
-
|
|
9
|
-
**READ-ONLY UNTIL CONFIRMED.** Until the Step 3 checkpoint resolves to `yes`, this entire skill is read-only. You MUST NOT write, edit, or create any file. Build everything in context. Files hit disk only in Step 4. After Step 5, the skill ends; if the user keeps chatting without invoking a new command, remain read-only. Writing requires either an explicit user command (e.g. `/plan-apply`) or the Step 3 `yes` confirmation.
|
|
10
|
-
|
|
11
|
-
## Input
|
|
12
|
-
|
|
13
|
-
The caller provides:
|
|
14
|
-
- A work item URL, issue key, or direct feature description. Exploration findings may accompany it; incorporate them.
|
|
15
|
-
- Optionally a mode (see below). Default: `interactive`.
|
|
16
|
-
|
|
17
|
-
## Modes
|
|
18
|
-
|
|
19
|
-
- `interactive` (default): every checkpoint below is active. Wait for the user at each one.
|
|
20
|
-
- `autonomous`: there is no user. Never ask anything. Each checkpoint marked with a stop sign states its autonomous resolution inline.
|
|
21
|
-
|
|
22
|
-
## Step 0.a: Check for unarchived changes (stop)
|
|
23
|
-
|
|
24
|
-
Before proposing a new change, inspect `openspec/changes/` (ignore `openspec/changes/archive`).
|
|
25
|
-
If any change folder exists in `openspec/changes/` (names vary by platform: `gh-*`, `us-*`, or a plain slug), list them in the question text, then call the `question` tool:
|
|
26
|
-
|
|
27
|
-
```json
|
|
28
|
-
{
|
|
29
|
-
"questions": [
|
|
30
|
-
{
|
|
31
|
-
"header": "Unarchived changes",
|
|
32
|
-
"question": "There are unarchived changes pending:\n{change-name}\n{change-name}\n...\n\nContinue with the proposal or stop to archive first?",
|
|
33
|
-
"options": [
|
|
34
|
-
{ "label": "continue", "description": "Proceed with the proposal." },
|
|
35
|
-
{ "label": "stop", "description": "End without generating a proposal. Archive the pending change first." }
|
|
36
|
-
]
|
|
37
|
-
}
|
|
38
|
-
]
|
|
39
|
-
}
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
- If the user answers `stop`, end without generating a proposal.
|
|
43
|
-
- If the user answers `continue`, proceed to the next step.
|
|
44
|
-
|
|
45
|
-
Autonomous mode: do not call the `question` tool; treat the answer as `continue` and proceed.
|
|
46
|
-
|
|
47
|
-
## Step 0.b: Load proposal skill
|
|
48
|
-
|
|
49
|
-
If a work item URL or issue key is provided (GitHub Issue, Azure DevOps work item, Jira issue, or browser-based backlog): load `@pc-userstory` skill and fetch the work item before continuing. Backlog platform is set in `.opencode/harness.json` -> `platform.backlog`. If backlog platform is `none`, skip this step and work from direct input.
|
|
50
|
-
|
|
51
|
-
## Step 1: Generate the proposal in memory
|
|
52
|
-
|
|
53
|
-
Load `@openspec-propose` skill and follow its instructions to generate proposal.md, specs, and tasks.md. Do not write them to disk yet. Build the complete proposal content in your context.
|
|
54
|
-
|
|
55
|
-
## Step 2: Enrich task assignments
|
|
56
|
-
|
|
57
|
-
1. List every `*-engineer.md` file in `.opencode/agents/`. For each file read:
|
|
58
|
-
- `description:` from the YAML frontmatter: the engineer's specialization summary
|
|
59
|
-
- `## Abilities` section: the skills listed under Development, Testing, Infrastructure (e.g. `@nodejs-backend`, `@secure-nextjs-api-routes`)
|
|
60
|
-
Build a map of `agent-name -> { description, abilities }`.
|
|
61
|
-
2. For each task, compare the task text and domain against every engineer's description AND abilities. Pick the engineer whose combined profile most closely matches. `fullstack-engineer` is `mode: primary` (the user's planning agent), not a spawned worker. If no specialist matches a task, leave the agent field blank and record the missing specialization in the proposal. An annotated OpenSpec task needs a real subagent; never substitute the lead or an obsolete generic agent name.
|
|
62
|
-
3. Pick a tier, derive `depends_on`, derive `touches`, and annotate each task line. Follow the [task annotation](task-annotation.md) reference for the full tier selection guide, dependency derivation, touches derivation, and annotation format with examples.
|
|
63
|
-
|
|
64
|
-
## Step 3: Show the plan and ask for confirmation (stop)
|
|
65
|
-
|
|
66
|
-
Display the complete proposal to the user:
|
|
67
|
-
- Change name and description
|
|
68
|
-
- Total task count
|
|
69
|
-
- Full task list with agent (including tier suffix) and dependency annotations
|
|
70
|
-
|
|
71
|
-
Then call the `question` tool:
|
|
72
|
-
|
|
73
|
-
```json
|
|
74
|
-
{
|
|
75
|
-
"questions": [
|
|
76
|
-
{
|
|
77
|
-
"header": "Save proposal",
|
|
78
|
-
"question": "Save this proposal?",
|
|
79
|
-
"options": [
|
|
80
|
-
{ "label": "yes", "description": "Write all files to disk and proceed." },
|
|
81
|
-
{ "label": "edit", "description": "Provide feedback, revise in memory, show again." },
|
|
82
|
-
{ "label": "stop", "description": "End without writing anything." }
|
|
83
|
-
]
|
|
84
|
-
}
|
|
85
|
-
]
|
|
86
|
-
}
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
- `yes` -> proceed to Step 4 and write all files
|
|
90
|
-
- `edit` -> user provides feedback, revise in memory, show again, ask again
|
|
91
|
-
- `stop` -> end without writing anything
|
|
92
|
-
|
|
93
|
-
Wait for the user's response. Do not proceed without a response.
|
|
94
|
-
|
|
95
|
-
Autonomous mode: do not call the `question` tool; treat the answer as `yes` and write the files immediately.
|
|
96
|
-
|
|
97
|
-
## Step 4: Write (only after the Step 3 checkpoint resolves)
|
|
98
|
-
|
|
99
|
-
Write the proposal files to `openspec/changes/{change-slug}/`:
|
|
100
|
-
- `proposal.md`: the change description and rationale
|
|
101
|
-
- `specs/`: any spec files generated
|
|
102
|
-
- `tasks.md`: the enriched task list with agent annotations
|
|
103
|
-
|
|
104
|
-
## Step 5: Stop (stop)
|
|
105
|
-
|
|
106
|
-
Call the `question` tool:
|
|
107
|
-
|
|
108
|
-
```json
|
|
109
|
-
{
|
|
110
|
-
"questions": [
|
|
111
|
-
{
|
|
112
|
-
"header": "Ready to implement",
|
|
113
|
-
"question": "Ready to implement?",
|
|
114
|
-
"options": [
|
|
115
|
-
{ "label": "yes", "description": "Load the pc-plan-apply skill to start implementation." },
|
|
116
|
-
{ "label": "no", "description": "Stop here. You can run /plan-apply later." }
|
|
117
|
-
]
|
|
118
|
-
}
|
|
119
|
-
]
|
|
120
|
-
}
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
Loading `pc-plan-apply` requires explicit user confirmation.
|
|
124
|
-
|
|
125
|
-
Autonomous mode: do not call the `question` tool. The PROPOSE stage is complete. Hand the change slug and task count back to the caller (the `/plan-goal` pipeline) so it immediately continues to the apply phase. This is a stage boundary, not the end of the run.
|
|
1
|
+
---
|
|
2
|
+
name: pc-plan-propose
|
|
3
|
+
description: Parse a work item or idea and produce an OpenSpec change plan (proposal.md, specs, tasks.md) with enriched task assignments (agent, tier, depends_on, touches). Load when turning a requirement into a structured plan. Invoked by the /plan-propose command (interactive) and the plan-goal pipeline (autonomous).
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Plan Propose
|
|
8
|
+
|
|
9
|
+
**READ-ONLY UNTIL CONFIRMED.** Until the Step 3 checkpoint resolves to `yes`, this entire skill is read-only. You MUST NOT write, edit, or create any file. Build everything in context. Files hit disk only in Step 4. After Step 5, the skill ends; if the user keeps chatting without invoking a new command, remain read-only. Writing requires either an explicit user command (e.g. `/plan-apply`) or the Step 3 `yes` confirmation.
|
|
10
|
+
|
|
11
|
+
## Input
|
|
12
|
+
|
|
13
|
+
The caller provides:
|
|
14
|
+
- A work item URL, issue key, or direct feature description. Exploration findings may accompany it; incorporate them.
|
|
15
|
+
- Optionally a mode (see below). Default: `interactive`.
|
|
16
|
+
|
|
17
|
+
## Modes
|
|
18
|
+
|
|
19
|
+
- `interactive` (default): every checkpoint below is active. Wait for the user at each one.
|
|
20
|
+
- `autonomous`: there is no user. Never ask anything. Each checkpoint marked with a stop sign states its autonomous resolution inline.
|
|
21
|
+
|
|
22
|
+
## Step 0.a: Check for unarchived changes (stop)
|
|
23
|
+
|
|
24
|
+
Before proposing a new change, inspect `openspec/changes/` (ignore `openspec/changes/archive`).
|
|
25
|
+
If any change folder exists in `openspec/changes/` (names vary by platform: `gh-*`, `us-*`, or a plain slug), list them in the question text, then call the `question` tool:
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"questions": [
|
|
30
|
+
{
|
|
31
|
+
"header": "Unarchived changes",
|
|
32
|
+
"question": "There are unarchived changes pending:\n{change-name}\n{change-name}\n...\n\nContinue with the proposal or stop to archive first?",
|
|
33
|
+
"options": [
|
|
34
|
+
{ "label": "continue", "description": "Proceed with the proposal." },
|
|
35
|
+
{ "label": "stop", "description": "End without generating a proposal. Archive the pending change first." }
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
- If the user answers `stop`, end without generating a proposal.
|
|
43
|
+
- If the user answers `continue`, proceed to the next step.
|
|
44
|
+
|
|
45
|
+
Autonomous mode: do not call the `question` tool; treat the answer as `continue` and proceed.
|
|
46
|
+
|
|
47
|
+
## Step 0.b: Load proposal skill
|
|
48
|
+
|
|
49
|
+
If a work item URL or issue key is provided (GitHub Issue, Azure DevOps work item, Jira issue, or browser-based backlog): load `@pc-userstory` skill and fetch the work item before continuing. Backlog platform is set in `.opencode/harness.json` -> `platform.backlog`. If backlog platform is `none`, skip this step and work from direct input.
|
|
50
|
+
|
|
51
|
+
## Step 1: Generate the proposal in memory
|
|
52
|
+
|
|
53
|
+
Load `@openspec-propose` skill and follow its instructions to generate proposal.md, specs, and tasks.md. Do not write them to disk yet. Build the complete proposal content in your context.
|
|
54
|
+
|
|
55
|
+
## Step 2: Enrich task assignments
|
|
56
|
+
|
|
57
|
+
1. List every `*-engineer.md` file in `.opencode/agents/`. For each file read:
|
|
58
|
+
- `description:` from the YAML frontmatter: the engineer's specialization summary
|
|
59
|
+
- `## Abilities` section: the skills listed under Development, Testing, Infrastructure (e.g. `@nodejs-backend`, `@secure-nextjs-api-routes`)
|
|
60
|
+
Build a map of `agent-name -> { description, abilities }`.
|
|
61
|
+
2. For each task, compare the task text and domain against every engineer's description AND abilities. Pick the engineer whose combined profile most closely matches. `fullstack-engineer` is `mode: primary` (the user's planning agent), not a spawned worker. If no specialist matches a task, leave the agent field blank and record the missing specialization in the proposal. An annotated OpenSpec task needs a real subagent; never substitute the lead or an obsolete generic agent name.
|
|
62
|
+
3. Pick a tier, derive `depends_on`, derive `touches`, and annotate each task line. Follow the [task annotation](task-annotation.md) reference for the full tier selection guide, dependency derivation, touches derivation, and annotation format with examples.
|
|
63
|
+
|
|
64
|
+
## Step 3: Show the plan and ask for confirmation (stop)
|
|
65
|
+
|
|
66
|
+
Display the complete proposal to the user:
|
|
67
|
+
- Change name and description
|
|
68
|
+
- Total task count
|
|
69
|
+
- Full task list with agent (including tier suffix) and dependency annotations
|
|
70
|
+
|
|
71
|
+
Then call the `question` tool:
|
|
72
|
+
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"questions": [
|
|
76
|
+
{
|
|
77
|
+
"header": "Save proposal",
|
|
78
|
+
"question": "Save this proposal?",
|
|
79
|
+
"options": [
|
|
80
|
+
{ "label": "yes", "description": "Write all files to disk and proceed." },
|
|
81
|
+
{ "label": "edit", "description": "Provide feedback, revise in memory, show again." },
|
|
82
|
+
{ "label": "stop", "description": "End without writing anything." }
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
- `yes` -> proceed to Step 4 and write all files
|
|
90
|
+
- `edit` -> user provides feedback, revise in memory, show again, ask again
|
|
91
|
+
- `stop` -> end without writing anything
|
|
92
|
+
|
|
93
|
+
Wait for the user's response. Do not proceed without a response.
|
|
94
|
+
|
|
95
|
+
Autonomous mode: do not call the `question` tool; treat the answer as `yes` and write the files immediately.
|
|
96
|
+
|
|
97
|
+
## Step 4: Write (only after the Step 3 checkpoint resolves)
|
|
98
|
+
|
|
99
|
+
Write the proposal files to `openspec/changes/{change-slug}/`:
|
|
100
|
+
- `proposal.md`: the change description and rationale
|
|
101
|
+
- `specs/`: any spec files generated
|
|
102
|
+
- `tasks.md`: the enriched task list with agent annotations
|
|
103
|
+
|
|
104
|
+
## Step 5: Stop (stop)
|
|
105
|
+
|
|
106
|
+
Call the `question` tool:
|
|
107
|
+
|
|
108
|
+
```json
|
|
109
|
+
{
|
|
110
|
+
"questions": [
|
|
111
|
+
{
|
|
112
|
+
"header": "Ready to implement",
|
|
113
|
+
"question": "Ready to implement?",
|
|
114
|
+
"options": [
|
|
115
|
+
{ "label": "yes", "description": "Load the pc-plan-apply skill to start implementation." },
|
|
116
|
+
{ "label": "no", "description": "Stop here. You can run /plan-apply later." }
|
|
117
|
+
]
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Loading `pc-plan-apply` requires explicit user confirmation.
|
|
124
|
+
|
|
125
|
+
Autonomous mode: do not call the `question` tool. The PROPOSE stage is complete. Hand the change slug and task count back to the caller (the `/plan-goal` pipeline) so it immediately continues to the apply phase. This is a stage boundary, not the end of the run.
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
# Task annotation reference
|
|
2
|
-
|
|
3
|
-
## Tier selection
|
|
4
|
-
|
|
5
|
-
Pick a tier for each task based on complexity:
|
|
6
|
-
- `build`: complex code: data models, APIs, auth logic, core business logic, UI components
|
|
7
|
-
- `fast`: light work: i18n keys, config changes, env variables, navigation links, simple markup, verification runs
|
|
8
|
-
- `plan`: reserved for orchestration, do not use for implementation tasks
|
|
9
|
-
|
|
10
|
-
The tier suffix is appended to the agent name with a dot (e.g. `backend-engineer.build`). This is the agent name you write in the annotation. The `pc-subagent-tiers` plugin resolves the model at startup from `models[<tier>]`.
|
|
11
|
-
|
|
12
|
-
## depends_on
|
|
13
|
-
|
|
14
|
-
Derive `depends_on` for each task: the OpenSpec task IDs (`N.M`) it logically needs completed first (a task that consumes another's output: UI needs its RPC, tests need the code, a seed needs its migration). Root tasks get `[]`. Reference the IDs OpenSpec already generated. Never invent new ones.
|
|
15
|
-
|
|
16
|
-
## touches
|
|
17
|
-
|
|
18
|
-
Derive `touches` for each task: the file path(s)/glob(s) it will create or modify (the task text usually names them, e.g. "Modify src/board/components/CreateForm.tsx"). This lets `pc-plan-apply` serialize same-file tasks that have no logical dependency. Include net-new files.
|
|
19
|
-
|
|
20
|
-
## Annotation format
|
|
21
|
-
|
|
22
|
-
Annotate each task line in-place with all three fields:
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
- [ ] <task text> <!-- agent: <name>, depends_on: [<ids>], touches: [<globs>] -->
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Example result (note same-file tasks like 1.1/1.2 share `touches`, so `pc-plan-apply` runs them sequentially even with no `depends_on` between them; tier suffix encodes the model):
|
|
29
|
-
|
|
30
|
-
```
|
|
31
|
-
- [ ] 1.1 Add Project model to schema <!-- agent: backend-engineer.build, depends_on: [], touches: [src/types.ts] -->
|
|
32
|
-
- [ ] 1.2 Add projectId field to LoopOptions <!-- agent: backend-engineer.build, depends_on: [], touches: [src/types.ts] -->
|
|
33
|
-
- [ ] 2.1 Project RPC endpoints <!-- agent: backend-engineer.build, depends_on: [1.1], touches: [src/rpc/project/**] -->
|
|
34
|
-
- [ ] 3.1 Accept page UI <!-- agent: frontend-engineer.build, depends_on: [2.1], touches: [src/board/components/CreateForm.tsx] -->
|
|
35
|
-
- [ ] 3.2 i18n keys for invitation flow <!-- agent: frontend-engineer.fast, depends_on: [3.1], touches: [src/i18n/**] -->
|
|
36
|
-
- [ ] 4.1 Run typecheck and fix errors <!-- agent: backend-engineer.fast, depends_on: [2.1,3.1], touches: [] -->
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
`pc-plan-apply` reads these annotations to build conflict-free waves: `depends_on` gates ordering, `touches` keeps concurrent agents file-disjoint, and the tier suffix in `agent` determines the model (resolved at startup by the `pc-subagent-tiers` plugin). `depends_on` is mandatory; `touches` is a best-effort hint.
|
|
1
|
+
# Task annotation reference
|
|
2
|
+
|
|
3
|
+
## Tier selection
|
|
4
|
+
|
|
5
|
+
Pick a tier for each task based on complexity:
|
|
6
|
+
- `build`: complex code: data models, APIs, auth logic, core business logic, UI components
|
|
7
|
+
- `fast`: light work: i18n keys, config changes, env variables, navigation links, simple markup, verification runs
|
|
8
|
+
- `plan`: reserved for orchestration, do not use for implementation tasks
|
|
9
|
+
|
|
10
|
+
The tier suffix is appended to the agent name with a dot (e.g. `backend-engineer.build`). This is the agent name you write in the annotation. The `pc-subagent-tiers` plugin resolves the model at startup from `models[<tier>]`.
|
|
11
|
+
|
|
12
|
+
## depends_on
|
|
13
|
+
|
|
14
|
+
Derive `depends_on` for each task: the OpenSpec task IDs (`N.M`) it logically needs completed first (a task that consumes another's output: UI needs its RPC, tests need the code, a seed needs its migration). Root tasks get `[]`. Reference the IDs OpenSpec already generated. Never invent new ones.
|
|
15
|
+
|
|
16
|
+
## touches
|
|
17
|
+
|
|
18
|
+
Derive `touches` for each task: the file path(s)/glob(s) it will create or modify (the task text usually names them, e.g. "Modify src/board/components/CreateForm.tsx"). This lets `pc-plan-apply` serialize same-file tasks that have no logical dependency. Include net-new files.
|
|
19
|
+
|
|
20
|
+
## Annotation format
|
|
21
|
+
|
|
22
|
+
Annotate each task line in-place with all three fields:
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
- [ ] <task text> <!-- agent: <name>, depends_on: [<ids>], touches: [<globs>] -->
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Example result (note same-file tasks like 1.1/1.2 share `touches`, so `pc-plan-apply` runs them sequentially even with no `depends_on` between them; tier suffix encodes the model):
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
- [ ] 1.1 Add Project model to schema <!-- agent: backend-engineer.build, depends_on: [], touches: [src/types.ts] -->
|
|
32
|
+
- [ ] 1.2 Add projectId field to LoopOptions <!-- agent: backend-engineer.build, depends_on: [], touches: [src/types.ts] -->
|
|
33
|
+
- [ ] 2.1 Project RPC endpoints <!-- agent: backend-engineer.build, depends_on: [1.1], touches: [src/rpc/project/**] -->
|
|
34
|
+
- [ ] 3.1 Accept page UI <!-- agent: frontend-engineer.build, depends_on: [2.1], touches: [src/board/components/CreateForm.tsx] -->
|
|
35
|
+
- [ ] 3.2 i18n keys for invitation flow <!-- agent: frontend-engineer.fast, depends_on: [3.1], touches: [src/i18n/**] -->
|
|
36
|
+
- [ ] 4.1 Run typecheck and fix errors <!-- agent: backend-engineer.fast, depends_on: [2.1,3.1], touches: [] -->
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
`pc-plan-apply` reads these annotations to build conflict-free waves: `depends_on` gates ordering, `touches` keeps concurrent agents file-disjoint, and the tier suffix in `agent` determines the model (resolved at startup by the `pc-subagent-tiers` plugin). `depends_on` is mandatory; `touches` is a best-effort hint.
|
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: pc-plan-quick
|
|
3
|
-
description: Quick plan: analyze the codebase and create a task checklist using the Todo pane. No files, no OpenSpec. Invoked by the /plan-quick command.
|
|
4
|
-
license: MIT
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
This command is strictly read-only. You may read files, search code, and use `todowrite` to create Todo pane items. You MUST NOT write, edit, or create any file. After completing the checklist and asking the user what's next, if the user continues chatting without invoking a new command (e.g. `/plan-apply`) or explicitly requesting implementation, remain read-only. The only output of this command is the Todo pane checklist and a question to the user.
|
|
8
|
-
|
|
9
|
-
Lightweight planning for focused changes. Reads the codebase, creates a task checklist in the Todo pane using `todowrite`, and stops. This is a thinking tool, not a file writer.
|
|
10
|
-
|
|
11
|
-
When to use this instead of `/plan-explore` then `/plan-propose`:
|
|
12
|
-
- The task is clear and well-scoped (not a half-formed idea)
|
|
13
|
-
- You don't need to think through alternatives or investigate deeply
|
|
14
|
-
- You want a task list in under a minute, not a full proposal
|
|
15
|
-
|
|
16
|
-
## Step 1: Understand the task
|
|
17
|
-
|
|
18
|
-
Read the user's description. Use `glob` and `grep` to locate the relevant files, components, and patterns in the codebase. Read the key files to understand what exists and what needs to change.
|
|
19
|
-
|
|
20
|
-
## Step 2: Create the plan in the Todo pane
|
|
21
|
-
|
|
22
|
-
Use `todowrite` to create one todo item per task. Each item must be:
|
|
23
|
-
|
|
24
|
-
- Concrete and actionable: include file paths or areas in the task text when possible
|
|
25
|
-
- Ordered by logical dependency: dependencies first
|
|
26
|
-
- Granular: one clear action per item, not a bundle
|
|
27
|
-
|
|
28
|
-
Example `todowrite` call:
|
|
29
|
-
|
|
30
|
-
```json
|
|
31
|
-
{
|
|
32
|
-
"todos": [
|
|
33
|
-
{ "content": "Add Project model to src/types.ts", "status": "pending", "priority": "high" },
|
|
34
|
-
{ "content": "Add projectId field to LoopOptions in src/types.ts", "status": "pending", "priority": "high" },
|
|
35
|
-
{ "content": "Create Project RPC endpoints in src/rpc/project/", "status": "pending", "priority": "medium" },
|
|
36
|
-
{ "content": "Build Accept page UI in src/board/components/CreateForm.tsx", "status": "pending", "priority": "medium" },
|
|
37
|
-
{ "content": "Run typecheck and fix errors", "status": "pending", "priority": "low" }
|
|
38
|
-
]
|
|
39
|
-
}
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
## Step 3: Ask what's next
|
|
43
|
-
|
|
44
|
-
Call the `question` tool:
|
|
45
|
-
|
|
46
|
-
```json
|
|
47
|
-
{
|
|
48
|
-
"questions": [
|
|
49
|
-
{
|
|
50
|
-
"header": "What next",
|
|
51
|
-
"question": "What next?",
|
|
52
|
-
"options": [
|
|
53
|
-
{ "label": "/plan-apply", "description": "Implement these tasks now (creates a feature branch and works through them)." },
|
|
54
|
-
{ "label": "/plan-propose", "description": "Turn this into a full OpenSpec proposal with agent assignments." },
|
|
55
|
-
{ "label": "Start on specific tasks", "description": "Tell me which tasks to start on." }
|
|
56
|
-
]
|
|
57
|
-
}
|
|
58
|
-
]
|
|
59
|
-
}
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
Do not create any files. Do not run `/plan-apply` or `/plan-propose` automatically. The only output is the Todo pane checklist.
|
|
1
|
+
---
|
|
2
|
+
name: pc-plan-quick
|
|
3
|
+
description: Quick plan: analyze the codebase and create a task checklist using the Todo pane. No files, no OpenSpec. Invoked by the /plan-quick command.
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
This command is strictly read-only. You may read files, search code, and use `todowrite` to create Todo pane items. You MUST NOT write, edit, or create any file. After completing the checklist and asking the user what's next, if the user continues chatting without invoking a new command (e.g. `/plan-apply`) or explicitly requesting implementation, remain read-only. The only output of this command is the Todo pane checklist and a question to the user.
|
|
8
|
+
|
|
9
|
+
Lightweight planning for focused changes. Reads the codebase, creates a task checklist in the Todo pane using `todowrite`, and stops. This is a thinking tool, not a file writer.
|
|
10
|
+
|
|
11
|
+
When to use this instead of `/plan-explore` then `/plan-propose`:
|
|
12
|
+
- The task is clear and well-scoped (not a half-formed idea)
|
|
13
|
+
- You don't need to think through alternatives or investigate deeply
|
|
14
|
+
- You want a task list in under a minute, not a full proposal
|
|
15
|
+
|
|
16
|
+
## Step 1: Understand the task
|
|
17
|
+
|
|
18
|
+
Read the user's description. Use `glob` and `grep` to locate the relevant files, components, and patterns in the codebase. Read the key files to understand what exists and what needs to change.
|
|
19
|
+
|
|
20
|
+
## Step 2: Create the plan in the Todo pane
|
|
21
|
+
|
|
22
|
+
Use `todowrite` to create one todo item per task. Each item must be:
|
|
23
|
+
|
|
24
|
+
- Concrete and actionable: include file paths or areas in the task text when possible
|
|
25
|
+
- Ordered by logical dependency: dependencies first
|
|
26
|
+
- Granular: one clear action per item, not a bundle
|
|
27
|
+
|
|
28
|
+
Example `todowrite` call:
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"todos": [
|
|
33
|
+
{ "content": "Add Project model to src/types.ts", "status": "pending", "priority": "high" },
|
|
34
|
+
{ "content": "Add projectId field to LoopOptions in src/types.ts", "status": "pending", "priority": "high" },
|
|
35
|
+
{ "content": "Create Project RPC endpoints in src/rpc/project/", "status": "pending", "priority": "medium" },
|
|
36
|
+
{ "content": "Build Accept page UI in src/board/components/CreateForm.tsx", "status": "pending", "priority": "medium" },
|
|
37
|
+
{ "content": "Run typecheck and fix errors", "status": "pending", "priority": "low" }
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Step 3: Ask what's next
|
|
43
|
+
|
|
44
|
+
Call the `question` tool:
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{
|
|
48
|
+
"questions": [
|
|
49
|
+
{
|
|
50
|
+
"header": "What next",
|
|
51
|
+
"question": "What next?",
|
|
52
|
+
"options": [
|
|
53
|
+
{ "label": "/plan-apply", "description": "Implement these tasks now (creates a feature branch and works through them)." },
|
|
54
|
+
{ "label": "/plan-propose", "description": "Turn this into a full OpenSpec proposal with agent assignments." },
|
|
55
|
+
{ "label": "Start on specific tasks", "description": "Tell me which tasks to start on." }
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Do not create any files. Do not run `/plan-apply` or `/plan-propose` automatically. The only output is the Todo pane checklist.
|