opencode-onboard 0.3.3 → 0.4.2
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 +278 -214
- package/content/.agents/agents/basic-engineer.md +30 -0
- package/content/.agents/agents/devops-manager.md +38 -29
- package/content/.agents/session-log.json +41 -0
- package/content/.agents/skills/ob-default/SKILL.md +21 -0
- package/content/.agents/skills/ob-generic-guardrails/SKILL.md +32 -0
- package/content/.agents/skills/ob-global/SKILL.md +49 -0
- package/content/.agents/skills/ob-pullrequest-az/SKILL.md +11 -21
- package/content/.agents/skills/ob-pullrequest-gh/SKILL.md +14 -24
- package/content/.agents/skills/ob-userstory-az/SKILL.md +8 -14
- package/content/.agents/skills/ob-userstory-gh/SKILL.md +6 -14
- package/content/.opencode/commands/init.md +8 -0
- package/content/.opencode/commands/main.md +17 -0
- package/content/.opencode/commands/opsx-apply.md +50 -33
- package/content/.opencode/commands/plan.md +37 -0
- package/content/.opencode/plugins/session-log.js +1 -1
- package/content/.opencode/skills/openspec-apply-change/SKILL.md +50 -33
- package/content/AGENTS.md +94 -144
- package/content/skills-lock.json +4 -0
- package/package.json +6 -1
- package/src/commands/join.js +43 -0
- package/src/commands/shared.js +12 -0
- package/src/commands/shared.test.js +56 -0
- package/src/commands/single.js +64 -0
- package/src/commands/wizard.js +99 -0
- package/src/index.js +25 -202
- package/src/presets/browser.json +18 -0
- package/src/presets/clean.json +21 -0
- package/src/presets/models.json +33 -0
- package/src/presets/optimization.json +22 -0
- package/src/presets/platforms.json +29 -2
- package/src/presets/quota.json +14 -0
- package/src/presets/source.json +17 -0
- package/src/steps/browser/browser.test.js +81 -0
- package/src/steps/{install-browser.js → browser/index.js} +12 -15
- package/src/steps/{__tests__/clean-ai-files.test.js → clean/clean.test.js} +28 -13
- package/src/steps/{clean-ai-files.js → clean/index.js} +32 -30
- package/src/steps/copy/agents.js +106 -0
- package/src/steps/{__tests__/copy-content.test.js → copy/copy.test.js} +10 -1
- package/src/steps/copy/index.js +33 -0
- package/src/steps/copy/skills.js +55 -0
- package/src/steps/{write-onboard-config.js → metadata/index.js} +3 -3
- package/src/steps/metadata/metadata.test.js +99 -0
- package/src/steps/models/format.js +60 -0
- package/src/steps/models/format.test.js +75 -0
- package/src/steps/models/index.js +52 -0
- package/src/steps/models/write.js +54 -0
- package/src/steps/models/write.test.js +117 -0
- package/src/steps/{init-openspec.js → openspec/ensemble.js} +20 -57
- package/src/steps/openspec/ensemble.test.js +79 -0
- package/src/steps/openspec/index.js +32 -0
- package/src/steps/optimization/caveman-guidance.js +11 -0
- package/src/steps/{install-caveman.js → optimization/caveman.js} +5 -19
- package/src/steps/optimization/global.js +64 -0
- package/src/steps/optimization/index.js +101 -0
- package/src/steps/{__tests__/token-optimization.test.js → optimization/optimization.test.js} +37 -22
- package/src/steps/{install-quota.js → optimization/quota.js} +12 -10
- package/src/steps/platform/index.js +81 -0
- package/src/steps/platform/platform.test.js +129 -0
- package/src/steps/{choose-source-scope.js → source/index.js} +11 -17
- package/src/steps/source/source.test.js +91 -0
- package/src/utils/__tests__/copy.test.js +12 -5
- package/src/utils/copy.js +4 -24
- package/src/utils/exec-spinner.js +47 -0
- package/src/utils/exec.js +120 -162
- package/src/utils/models-cache.js +25 -68
- package/src/utils/models-pricing.js +42 -0
- package/src/utils/models-pricing.test.js +93 -0
- package/content/.agents/agents/back-engineer.md +0 -87
- package/content/.agents/agents/front-engineer.md +0 -86
- package/content/.agents/agents/infra-engineer.md +0 -85
- package/content/.agents/agents/quality-engineer.md +0 -86
- package/content/.agents/agents/security-auditor.md +0 -86
- package/src/steps/__tests__/check-env.test.js +0 -70
- package/src/steps/__tests__/check-platform.test.js +0 -104
- package/src/steps/__tests__/check-rtk.test.js +0 -38
- package/src/steps/__tests__/choose-platform.test.js +0 -38
- package/src/steps/check-env.js +0 -26
- package/src/steps/check-platform.js +0 -80
- package/src/steps/check-rtk.js +0 -38
- package/src/steps/choose-models.js +0 -165
- package/src/steps/choose-platform.js +0 -22
- package/src/steps/choose-skills-provider.js +0 -79
- package/src/steps/copy-content.js +0 -89
- package/src/steps/enable-caveman-guidance.js +0 -78
- package/src/steps/patch-agents-md.js +0 -153
- package/src/steps/token-optimization.js +0 -59
|
@@ -13,14 +13,14 @@ Implement tasks from an OpenSpec change using the ensemble agent team.
|
|
|
13
13
|
If a name is provided, use it. Otherwise:
|
|
14
14
|
- Infer from conversation context if the user mentioned a change
|
|
15
15
|
- Auto-select if only one active change exists
|
|
16
|
-
- If ambiguous, run `
|
|
16
|
+
- If ambiguous, run `openspec list --json` to get available changes and use the **AskUserQuestion tool** to let the user select
|
|
17
17
|
|
|
18
18
|
Always announce: "Using change: <name>" and how to override (e.g., `/opsx-apply <other>`).
|
|
19
19
|
|
|
20
20
|
2. **Check status to understand the schema**
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
|
-
|
|
23
|
+
openspec status --change "<name>" --json
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
Parse the JSON to understand:
|
|
@@ -30,7 +30,7 @@ Implement tasks from an OpenSpec change using the ensemble agent team.
|
|
|
30
30
|
3. **Get apply instructions**
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
|
-
|
|
33
|
+
openspec instructions apply --change "<name>" --json
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
This returns:
|
|
@@ -58,7 +58,7 @@ Implement tasks from an OpenSpec change using the ensemble agent team.
|
|
|
58
58
|
|
|
59
59
|
6. **Implement via ensemble team**
|
|
60
60
|
|
|
61
|
-
NEVER implement tasks directly. Always delegate to
|
|
61
|
+
NEVER implement tasks directly. Always delegate to engineer workers via ensemble.
|
|
62
62
|
Do NOT touch any source files before the team is running, not even a single edit.
|
|
63
63
|
|
|
64
64
|
Steps MUST be followed in order. Do not skip any step.
|
|
@@ -86,20 +86,40 @@ Implement tasks from an OpenSpec change using the ensemble agent team.
|
|
|
86
86
|
DO NOT call team_claim yourself, only agents claim tasks.
|
|
87
87
|
DO NOT proceed to 6d until team_tasks_add succeeds.
|
|
88
88
|
|
|
89
|
-
**Step 6d.** Discover
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
-
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
|
|
89
|
+
**Step 6d.** Discover available agents, assign tasks by best fit, then spawn workers.
|
|
90
|
+
|
|
91
|
+
Agent discovery and assignment rule:
|
|
92
|
+
- Read `.agents/agents/*.md` and use each agent's `description` and `## Abilities` to understand specialization.
|
|
93
|
+
- For each task ID, choose the best-fit agent based on task domain (backend, frontend, infra, testing, etc.).
|
|
94
|
+
- Prefer specialized agents when available; use `basic-engineer` as fallback only.
|
|
95
|
+
- Only spawn agents that have assigned task IDs.
|
|
96
|
+
|
|
97
|
+
REQUIRED assignment algorithm (do not skip):
|
|
98
|
+
1. Build candidate list from `.agents/agents/*.md` excluding `devops-manager`.
|
|
99
|
+
2. Classify each task by domain using task text (api/backend, ui/frontend, infra/devops, testing/qa).
|
|
100
|
+
3. For each task, score every candidate agent:
|
|
101
|
+
- +3 if agent description explicitly matches domain
|
|
102
|
+
- +2 if agent `## Abilities` include domain-relevant skills
|
|
103
|
+
- +1 if prior tasks of same domain already assigned to that agent (cohesion)
|
|
104
|
+
4. Assign task to highest-score agent.
|
|
105
|
+
5. Use `basic-engineer` ONLY when no specialized agent has positive score.
|
|
106
|
+
6. If all tasks go to `basic-engineer`, you MUST explain why no specialist matched.
|
|
107
|
+
|
|
108
|
+
HARD RULES:
|
|
109
|
+
- NEVER assign a task to `basic-engineer` if a specialized agent has higher score.
|
|
110
|
+
- NEVER skip agent discovery from `.agents/agents/*.md`.
|
|
111
|
+
- ALWAYS include assignment rationale in spawn prompt: "Selected because <domain match>".
|
|
112
|
+
|
|
113
|
+
Skill loading is worker-driven:
|
|
114
|
+
- The spawned agent MUST load `@ob-global` first.
|
|
115
|
+
- Then it MUST load skills from its own `## Abilities` for the claimed task domain.
|
|
97
116
|
|
|
98
117
|
Each team_spawn MUST include the agent field (required, causes NOT NULL error if omitted).
|
|
99
118
|
|
|
100
119
|
The spawn prompt must contain exactly:
|
|
101
120
|
1. Their name and role on this team
|
|
102
121
|
2. Which tasks are theirs, list the task IDs and content from the board
|
|
122
|
+
2.1 Why they were selected for those tasks (domain/abilities match)
|
|
103
123
|
3. Key context they need (summarized from context files, do NOT tell them to read files themselves)
|
|
104
124
|
4. The 6 OpenCode tools they have available (these are OpenCode tools, NOT shell commands, call them directly as tools, never via bash):
|
|
105
125
|
team_claim, team_tasks_complete, team_tasks_list, team_tasks_add, team_message, team_broadcast
|
|
@@ -109,21 +129,18 @@ Implement tasks from an OpenSpec change using the ensemble agent team.
|
|
|
109
129
|
Keep spawn prompts under 600 tokens. Do not describe team internals or how ensemble works.
|
|
110
130
|
Only spawn agents whose tasks are actually needed by this change. Skip agents with no tasks.
|
|
111
131
|
|
|
112
|
-
|
|
132
|
+
Spawn one or more best-fit workers (parallel when dependencies allow):
|
|
113
133
|
```
|
|
114
|
-
team_spawn name:"
|
|
115
|
-
|
|
116
|
-
team_spawn name:"
|
|
117
|
-
(wait for result)
|
|
118
|
-
team_spawn name:"infra" agent:"infra-engineer" prompt:"..."
|
|
119
|
-
(wait for result)
|
|
134
|
+
team_spawn name:"eng-1" agent:"backend-engineer" prompt:"..."
|
|
135
|
+
team_spawn name:"eng-2" agent:"frontend-engineer" prompt:"..."
|
|
136
|
+
team_spawn name:"eng-3" agent:"basic-engineer" prompt:"..."
|
|
120
137
|
```
|
|
121
138
|
|
|
122
|
-
Then immediately send each spawned
|
|
139
|
+
Then immediately send each spawned worker a start message with exact task IDs:
|
|
123
140
|
```
|
|
124
|
-
team_message to:"
|
|
125
|
-
team_message to:"
|
|
126
|
-
team_message to:"
|
|
141
|
+
team_message to:"eng-1" text:"Start now. Load @ob-global first, then use your agent `## Abilities` for these tasks: [task-<id1>] ... Claim each task ID before starting."
|
|
142
|
+
team_message to:"eng-2" text:"Start now. Load @ob-global first, then use your agent `## Abilities` for these tasks: [task-<id2>] ... Claim each task ID before starting."
|
|
143
|
+
team_message to:"eng-3" text:"Start now. Load @ob-global first, then use your agent `## Abilities` for these tasks: [task-<id3>] ... Claim each task ID before starting."
|
|
127
144
|
```
|
|
128
145
|
|
|
129
146
|
**Step 6e.** After sending start messages, tell the user what is running, then STOP and wait.
|
|
@@ -135,18 +152,18 @@ Implement tasks from an OpenSpec change using the ensemble agent team.
|
|
|
135
152
|
If team_merge blocks ("overlapping local changes"), commit or stash your local changes first, then retry.
|
|
136
153
|
Fix any other blockers reported.
|
|
137
154
|
|
|
138
|
-
7. **
|
|
155
|
+
7. **Verification check**
|
|
139
156
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
Wait for
|
|
157
|
+
Run verification tasks (tests/build/lint) using a worker suited for verification scope:
|
|
158
|
+
- either same engineer workers
|
|
159
|
+
- or a dedicated verifier worker if your project defines one
|
|
160
|
+
|
|
161
|
+
Wait for results → fix blockers.
|
|
145
162
|
|
|
146
163
|
8. **Mark tasks complete in openspec**
|
|
147
164
|
|
|
148
165
|
Update tasks.md: `- [ ]` → `- [x]` for each completed task.
|
|
149
|
-
Run `
|
|
166
|
+
Run `openspec status --change "<name>" --json` to confirm.
|
|
150
167
|
|
|
151
168
|
9. **Show status, then cleanup**
|
|
152
169
|
|
|
@@ -169,10 +186,10 @@ Implement tasks from an OpenSpec change using the ensemble agent team.
|
|
|
169
186
|
- ALWAYS pass the task IDs returned by team_tasks_add to each agent's spawn prompt
|
|
170
187
|
- NEVER edit files between team_spawn and team_merge, team_merge blocks on overlapping local changes
|
|
171
188
|
- ALWAYS add every task to the board with team_tasks_add before spawning
|
|
172
|
-
- ALWAYS spawn
|
|
189
|
+
- ALWAYS spawn workers based on dependencies: parallel when safe, sequential when required
|
|
173
190
|
- ALWAYS instruct agents to call team_claim before each task and team_tasks_complete after
|
|
174
191
|
- If teammates are stuck, use team_message to resend tasks, then wait, never implement directly
|
|
175
|
-
- Mark tasks complete in openspec AFTER
|
|
192
|
+
- Mark tasks complete in openspec AFTER worker implementation and verification finish, not before
|
|
176
193
|
- Pause on errors, blockers, or unclear requirements. Do not guess
|
|
177
194
|
- Use contextFiles from CLI output, do not assume specific file paths
|
|
178
|
-
-
|
|
195
|
+
- Follow CLI rules from `@ob-global` when present
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Parse a user story URL and produce a plan — proposal, specs, and tasks. Stops before implementation.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Parse the work item at the URL provided after `/plan` and produce a full implementation plan.
|
|
6
|
+
|
|
7
|
+
**Input**: A GitHub Issue URL or Azure DevOps work item URL. Example: `/plan https://github.com/org/repo/issues/42`
|
|
8
|
+
|
|
9
|
+
**Steps:**
|
|
10
|
+
|
|
11
|
+
1. **Load baseline**
|
|
12
|
+
|
|
13
|
+
Load `@ob-global` first.
|
|
14
|
+
|
|
15
|
+
2. **Detect URL type and load matching skill**
|
|
16
|
+
|
|
17
|
+
- GitHub Issue URL → load `ob-userstory-gh` skill
|
|
18
|
+
- Azure DevOps URL → load `ob-userstory-az` skill
|
|
19
|
+
|
|
20
|
+
Follow the skill steps exactly: fetch the issue/work item via CLI and create an OpenSpec change.
|
|
21
|
+
|
|
22
|
+
3. **Propose**
|
|
23
|
+
|
|
24
|
+
Run `/opsx-propose` to generate `proposal.md`, specs, and `tasks.md`.
|
|
25
|
+
|
|
26
|
+
4. **Show the plan**
|
|
27
|
+
|
|
28
|
+
Display:
|
|
29
|
+
- Change name
|
|
30
|
+
- Total number of tasks
|
|
31
|
+
- Full task list summary
|
|
32
|
+
|
|
33
|
+
5. **Stop**
|
|
34
|
+
|
|
35
|
+
Ask the user: "Ready to implement? Type `/opsx-apply` to start."
|
|
36
|
+
|
|
37
|
+
Do NOT proceed to implementation. Do NOT run `/opsx-apply` automatically.
|
|
@@ -343,7 +343,7 @@ export const SessionLogPlugin = async ({ client, directory }) => {
|
|
|
343
343
|
correlationMethod: spawnMatch.spawnedSessionId === sessionId ? "direct" : "time-window",
|
|
344
344
|
})
|
|
345
345
|
} else {
|
|
346
|
-
// No spawn match
|
|
346
|
+
// No spawn match, schedule an unmatched-session warning
|
|
347
347
|
const capturedSessionId = sessionId
|
|
348
348
|
setTimeout(() => {
|
|
349
349
|
const s = sessionState.get(capturedSessionId)
|
|
@@ -19,14 +19,14 @@ Implement tasks from an OpenSpec change using the ensemble agent team.
|
|
|
19
19
|
If a name is provided, use it. Otherwise:
|
|
20
20
|
- Infer from conversation context if the user mentioned a change
|
|
21
21
|
- Auto-select if only one active change exists
|
|
22
|
-
- If ambiguous, run `
|
|
22
|
+
- If ambiguous, run `openspec list --json` to get available changes and use the **AskUserQuestion tool** to let the user select
|
|
23
23
|
|
|
24
24
|
Always announce: "Using change: <name>" and how to override (e.g., `/opsx-apply <other>`).
|
|
25
25
|
|
|
26
26
|
2. **Check status to understand the schema**
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
|
-
|
|
29
|
+
openspec status --change "<name>" --json
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
Parse the JSON to understand:
|
|
@@ -36,7 +36,7 @@ Implement tasks from an OpenSpec change using the ensemble agent team.
|
|
|
36
36
|
3. **Get apply instructions**
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
-
|
|
39
|
+
openspec instructions apply --change "<name>" --json
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
This returns:
|
|
@@ -64,7 +64,7 @@ Implement tasks from an OpenSpec change using the ensemble agent team.
|
|
|
64
64
|
|
|
65
65
|
6. **Implement via ensemble team**
|
|
66
66
|
|
|
67
|
-
NEVER implement tasks directly. Always delegate to
|
|
67
|
+
NEVER implement tasks directly. Always delegate to engineer workers via ensemble.
|
|
68
68
|
Do NOT touch any source files before the team is running, not even a single edit.
|
|
69
69
|
|
|
70
70
|
Steps MUST be followed in order. Do not skip any step.
|
|
@@ -92,20 +92,40 @@ Implement tasks from an OpenSpec change using the ensemble agent team.
|
|
|
92
92
|
DO NOT call team_claim yourself, only agents claim tasks.
|
|
93
93
|
DO NOT proceed to 6d until team_tasks_add succeeds.
|
|
94
94
|
|
|
95
|
-
**Step 6d.** Discover
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
101
|
-
-
|
|
102
|
-
|
|
95
|
+
**Step 6d.** Discover available agents, assign tasks by best fit, then spawn workers.
|
|
96
|
+
|
|
97
|
+
Agent discovery and assignment rule:
|
|
98
|
+
- Read `.agents/agents/*.md` and use each agent's `description` and `## Abilities` to understand specialization.
|
|
99
|
+
- For each task ID, choose the best-fit agent based on task domain (backend, frontend, infra, testing, etc.).
|
|
100
|
+
- Prefer specialized agents when available; use `basic-engineer` as fallback only.
|
|
101
|
+
- Only spawn agents that have assigned task IDs.
|
|
102
|
+
|
|
103
|
+
REQUIRED assignment algorithm (do not skip):
|
|
104
|
+
1. Build candidate list from `.agents/agents/*.md` excluding `devops-manager`.
|
|
105
|
+
2. Classify each task by domain using task text (api/backend, ui/frontend, infra/devops, testing/qa).
|
|
106
|
+
3. For each task, score every candidate agent:
|
|
107
|
+
- +3 if agent description explicitly matches domain
|
|
108
|
+
- +2 if agent `## Abilities` include domain-relevant skills
|
|
109
|
+
- +1 if prior tasks of same domain already assigned to that agent (cohesion)
|
|
110
|
+
4. Assign task to highest-score agent.
|
|
111
|
+
5. Use `basic-engineer` ONLY when no specialized agent has positive score.
|
|
112
|
+
6. If all tasks go to `basic-engineer`, you MUST explain why no specialist matched.
|
|
113
|
+
|
|
114
|
+
HARD RULES:
|
|
115
|
+
- NEVER assign a task to `basic-engineer` if a specialized agent has higher score.
|
|
116
|
+
- NEVER skip agent discovery from `.agents/agents/*.md`.
|
|
117
|
+
- ALWAYS include assignment rationale in spawn prompt: "Selected because <domain match>".
|
|
118
|
+
|
|
119
|
+
Skill loading is worker-driven:
|
|
120
|
+
- The spawned agent MUST load `@ob-global` first.
|
|
121
|
+
- Then it MUST load skills from its own `## Abilities` for the claimed task domain.
|
|
103
122
|
|
|
104
123
|
Each team_spawn MUST include the agent field (required, causes NOT NULL error if omitted).
|
|
105
124
|
|
|
106
125
|
The spawn prompt must contain exactly:
|
|
107
126
|
1. Their name and role on this team
|
|
108
127
|
2. Which tasks are theirs, list the task IDs and content from the board
|
|
128
|
+
2.1 Why they were selected for those tasks (domain/abilities match)
|
|
109
129
|
3. Key context they need (summarized from context files, do NOT tell them to read files themselves)
|
|
110
130
|
4. The 6 OpenCode tools they have available (these are OpenCode tools, NOT shell commands, call them directly as tools, never via bash):
|
|
111
131
|
team_claim, team_tasks_complete, team_tasks_list, team_tasks_add, team_message, team_broadcast
|
|
@@ -115,21 +135,18 @@ Implement tasks from an OpenSpec change using the ensemble agent team.
|
|
|
115
135
|
Keep spawn prompts under 600 tokens. Do not describe team internals or how ensemble works.
|
|
116
136
|
Only spawn agents whose tasks are actually needed by this change. Skip agents with no tasks.
|
|
117
137
|
|
|
118
|
-
|
|
138
|
+
Spawn one or more best-fit workers (parallel when dependencies allow):
|
|
119
139
|
```
|
|
120
|
-
team_spawn name:"
|
|
121
|
-
|
|
122
|
-
team_spawn name:"
|
|
123
|
-
(wait for result)
|
|
124
|
-
team_spawn name:"infra" agent:"infra-engineer" prompt:"..."
|
|
125
|
-
(wait for result)
|
|
140
|
+
team_spawn name:"eng-1" agent:"backend-engineer" prompt:"..."
|
|
141
|
+
team_spawn name:"eng-2" agent:"frontend-engineer" prompt:"..."
|
|
142
|
+
team_spawn name:"eng-3" agent:"basic-engineer" prompt:"..."
|
|
126
143
|
```
|
|
127
144
|
|
|
128
|
-
Then immediately send each spawned
|
|
145
|
+
Then immediately send each spawned worker a start message with exact task IDs:
|
|
129
146
|
```
|
|
130
|
-
team_message to:"
|
|
131
|
-
team_message to:"
|
|
132
|
-
team_message to:"
|
|
147
|
+
team_message to:"eng-1" text:"Start now. Load @ob-global first, then use your agent `## Abilities` for these tasks: [task-<id1>] ... Claim each task ID before starting."
|
|
148
|
+
team_message to:"eng-2" text:"Start now. Load @ob-global first, then use your agent `## Abilities` for these tasks: [task-<id2>] ... Claim each task ID before starting."
|
|
149
|
+
team_message to:"eng-3" text:"Start now. Load @ob-global first, then use your agent `## Abilities` for these tasks: [task-<id3>] ... Claim each task ID before starting."
|
|
133
150
|
```
|
|
134
151
|
|
|
135
152
|
**Step 6e.** After sending start messages, tell the user what is running, then STOP and wait.
|
|
@@ -141,18 +158,18 @@ Implement tasks from an OpenSpec change using the ensemble agent team.
|
|
|
141
158
|
If team_merge blocks ("overlapping local changes"), commit or stash your local changes first, then retry.
|
|
142
159
|
Fix any other blockers reported.
|
|
143
160
|
|
|
144
|
-
7. **
|
|
161
|
+
7. **Verification check**
|
|
145
162
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
Wait for
|
|
163
|
+
Run verification tasks (tests/build/lint) using a worker suited for verification scope:
|
|
164
|
+
- either same engineer workers
|
|
165
|
+
- or a dedicated verifier worker if your project defines one
|
|
166
|
+
|
|
167
|
+
Wait for results → fix blockers.
|
|
151
168
|
|
|
152
169
|
8. **Mark tasks complete in openspec**
|
|
153
170
|
|
|
154
171
|
Update tasks.md: `- [ ]` → `- [x]` for each completed task.
|
|
155
|
-
Run `
|
|
172
|
+
Run `openspec status --change "<name>" --json` to confirm.
|
|
156
173
|
|
|
157
174
|
9. **Show status, then cleanup**
|
|
158
175
|
|
|
@@ -175,10 +192,10 @@ Implement tasks from an OpenSpec change using the ensemble agent team.
|
|
|
175
192
|
- ALWAYS pass the task IDs returned by team_tasks_add to each agent's spawn prompt
|
|
176
193
|
- NEVER edit files between team_spawn and team_merge, team_merge blocks on overlapping local changes
|
|
177
194
|
- ALWAYS add every task to the board with team_tasks_add before spawning
|
|
178
|
-
- ALWAYS spawn
|
|
195
|
+
- ALWAYS spawn workers based on dependencies: parallel when safe, sequential when required
|
|
179
196
|
- ALWAYS instruct agents to call team_claim before each task and team_tasks_complete after
|
|
180
197
|
- If teammates are stuck, use team_message to resend tasks, then wait, never implement directly
|
|
181
|
-
- Mark tasks complete in openspec AFTER
|
|
198
|
+
- Mark tasks complete in openspec AFTER worker implementation and verification finish, not before
|
|
182
199
|
- Pause on errors, blockers, or unclear requirements. Do not guess
|
|
183
200
|
- Use contextFiles from CLI output, do not assume specific file paths
|
|
184
|
-
-
|
|
201
|
+
- Follow CLI rules from `@ob-global` when present
|