@loneexile/omp-superpowers 6.4.2-omp.2 → 6.4.2-omp.4
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/.pi/extensions/superpowers.ts +18 -6
- package/CHANGELOG.md +44 -2
- package/README.md +41 -28
- package/agents/sdd-escalation-implementer.md +18 -6
- package/agents/sdd-final-reviewer.md +15 -6
- package/agents/sdd-implementer.md +9 -4
- package/agents/sdd-rereviewer.md +15 -4
- package/agents/sdd-reviewer.md +13 -5
- package/package.json +1 -1
- package/skills/executing-plans/SKILL.md +49 -7
- package/skills/subagent-driven-development/SKILL.md +261 -98
- package/skills/subagent-driven-development/implementer-prompt.md +8 -2
- package/skills/subagent-driven-development/re-review-prompt.md +22 -11
- package/skills/subagent-driven-development/task-reviewer-prompt.md +22 -13
- package/skills/using-git-worktrees/SKILL.md +18 -9
- package/skills/using-superpowers/references/pi-tools.md +50 -12
- package/skills/writing-plans/SKILL.md +2 -0
|
@@ -9,6 +9,12 @@ Use this template when dispatching an implementer subagent.
|
|
|
9
9
|
agent: "sdd-implementer", # REQUIRED — carries model, thinking level, tools.
|
|
10
10
|
# Fix round 3 / a ruled strongest-tier exception:
|
|
11
11
|
# "sdd-escalation-implementer". Never plain "task".
|
|
12
|
+
solutionSpace: "one task: requirements and exact values are in the brief",
|
|
13
|
+
# REQUIRED by omp's task schema: one line on how open the
|
|
14
|
+
# problem is. A first implementation on the escalation
|
|
15
|
+
# seat: "design open across files: interfaces given,
|
|
16
|
+
# approach to choose" (and say it is a first
|
|
17
|
+
# implementation: no report file, no findings).
|
|
12
18
|
task: |
|
|
13
19
|
You are implementing Task N: [task name]
|
|
14
20
|
|
|
@@ -88,8 +94,8 @@ Use this template when dispatching an implementer subagent.
|
|
|
88
94
|
|
|
89
95
|
**How to escalate:** Report back with status BLOCKED or NEEDS_CONTEXT. Describe
|
|
90
96
|
specifically what you're stuck on, what you've tried, and what kind of help you need.
|
|
91
|
-
The controller can provide more context,
|
|
92
|
-
or break the task into smaller pieces.
|
|
97
|
+
The controller can provide more context, hand the task to a stronger seat
|
|
98
|
+
(`sdd-escalation-implementer`), or break the task into smaller pieces.
|
|
93
99
|
|
|
94
100
|
## Before Reporting Back: Self-Review
|
|
95
101
|
|
|
@@ -11,8 +11,11 @@ that the fix itself broke nothing.
|
|
|
11
11
|
{ context: "<one line: plan name, branch, read-only re-review of one fix round>",
|
|
12
12
|
tasks: [ {
|
|
13
13
|
name: "ReReviewTaskNRoundR",
|
|
14
|
-
agent: "sdd-rereviewer", # REQUIRED — the
|
|
15
|
-
#
|
|
14
|
+
agent: "sdd-rereviewer", # REQUIRED — the verdict-only seat: read/grep only (no
|
|
15
|
+
# edit, bash, or file-write tool), four working calls
|
|
16
|
+
# plus the final yield.
|
|
17
|
+
solutionSpace: "verdicts only: the findings and the fix diff are given; nothing to design",
|
|
18
|
+
# REQUIRED by omp's task schema: one line on how open the problem is.
|
|
16
19
|
task: |
|
|
17
20
|
You are re-reviewing one task's fix round. A previous review produced
|
|
18
21
|
findings; an implementer has attempted to fix them. Your job is to
|
|
@@ -20,7 +23,7 @@ that the fix itself broke nothing.
|
|
|
20
23
|
|
|
21
24
|
## The Task
|
|
22
25
|
|
|
23
|
-
Read the task brief: [BRIEF_FILE]
|
|
26
|
+
Read the task brief (explicit range: `[BRIEF_FILE]:1-3000`): [BRIEF_FILE]
|
|
24
27
|
|
|
25
28
|
## The Findings Under Verification
|
|
26
29
|
|
|
@@ -28,19 +31,26 @@ that the fix itself broke nothing.
|
|
|
28
31
|
|
|
29
32
|
## The Fix
|
|
30
33
|
|
|
31
|
-
Read the implementer's report
|
|
32
|
-
|
|
34
|
+
Read the implementer's report to its last line — the fix reports are
|
|
35
|
+
appended at the end, past a bare read's 300 lines (explicit range:
|
|
36
|
+
`[REPORT_FILE]:1-3000`): [REPORT_FILE]
|
|
33
37
|
|
|
34
38
|
**Fix base:** [FIX_BASE_SHA] (the head the previous review saw)
|
|
35
39
|
**Head:** [HEAD_SHA]
|
|
36
40
|
**Diff file:** [DIFF_FILE]
|
|
37
41
|
|
|
38
|
-
Read the diff file
|
|
39
|
-
|
|
40
|
-
|
|
42
|
+
Read the diff file in full, with an explicit range: `[DIFF_FILE]:1-3000`
|
|
43
|
+
(a bare read returns only the first 300 lines; while the footer says
|
|
44
|
+
`[Showing lines … of N. Use :M to continue]`, continue with the next
|
|
45
|
+
range). It contains the fix commits, a stat summary, and the fix diff
|
|
46
|
+
with surrounding context. You have no bash tool; if the diff file is
|
|
47
|
+
missing, report that as a gap and stop.
|
|
41
48
|
|
|
42
49
|
Your review is read-only on this checkout. Do not mutate the working
|
|
43
|
-
tree, the index, HEAD, or branch state in any way
|
|
50
|
+
tree, the index, HEAD, or branch state in any way, and never call an
|
|
51
|
+
`xd://` device or an extension, MCP, or memory tool that executes code,
|
|
52
|
+
writes files, or changes external state — your `tools:` list does not
|
|
53
|
+
stop those, this instruction does.
|
|
44
54
|
|
|
45
55
|
## You Do Not Dispatch Subagents
|
|
46
56
|
|
|
@@ -65,10 +75,11 @@ that the fix itself broke nothing.
|
|
|
65
75
|
The implementer re-ran the tests covering the amended code and appended
|
|
66
76
|
the results to the report file. Treat the report as unverified claims:
|
|
67
77
|
confirm the fix report names the covering tests and shows their output,
|
|
68
|
-
and verify the claims against the diff. You have no
|
|
78
|
+
and verify the claims against the diff. You have no bash tool: if reading
|
|
69
79
|
the code raises a specific doubt that no existing run answers, name the
|
|
70
80
|
focused test you would run in that finding's evidence and verdict on
|
|
71
|
-
what the diff shows
|
|
81
|
+
what the diff shows — the controller runs that test before it accepts
|
|
82
|
+
`all_addressed`.
|
|
72
83
|
|
|
73
84
|
## Output
|
|
74
85
|
|
|
@@ -11,8 +11,11 @@ more, nothing less) and is well-built (clean, tested, maintainable)
|
|
|
11
11
|
{ context: "<one line: plan name, branch, read-only task review>",
|
|
12
12
|
tasks: [ {
|
|
13
13
|
name: "ReviewTaskN",
|
|
14
|
-
agent: "sdd-reviewer", # REQUIRED — read/grep/glob only, no
|
|
15
|
-
# review package IS its view of
|
|
14
|
+
agent: "sdd-reviewer", # REQUIRED — read/grep/glob only, no edit, bash, or
|
|
15
|
+
# file-write tool: the review package IS its view of
|
|
16
|
+
# the change.
|
|
17
|
+
solutionSpace: "review only: the brief and the diff are given; nothing to design",
|
|
18
|
+
# REQUIRED by omp's task schema: one line on how open the problem is.
|
|
16
19
|
task: |
|
|
17
20
|
You are reviewing one task's implementation: first whether it matches its
|
|
18
21
|
requirements, then whether it is well-built. This is a task-scoped gate,
|
|
@@ -21,14 +24,14 @@ more, nothing less) and is well-built (clean, tested, maintainable)
|
|
|
21
24
|
|
|
22
25
|
## What Was Requested
|
|
23
26
|
|
|
24
|
-
Read the task brief: [BRIEF_FILE]
|
|
27
|
+
Read the task brief (explicit range: `[BRIEF_FILE]:1-3000`): [BRIEF_FILE]
|
|
25
28
|
|
|
26
29
|
Global constraints from the spec/design that bind this task:
|
|
27
30
|
[GLOBAL_CONSTRAINTS]
|
|
28
31
|
|
|
29
32
|
## What the Implementer Claims They Built
|
|
30
33
|
|
|
31
|
-
Read the implementer's report: [REPORT_FILE]
|
|
34
|
+
Read the implementer's report (explicit range: `[REPORT_FILE]:1-3000`): [REPORT_FILE]
|
|
32
35
|
|
|
33
36
|
## Diff Under Review
|
|
34
37
|
|
|
@@ -36,13 +39,16 @@ more, nothing less) and is well-built (clean, tested, maintainable)
|
|
|
36
39
|
**Head:** [HEAD_SHA]
|
|
37
40
|
**Diff file:** [DIFF_FILE]
|
|
38
41
|
|
|
39
|
-
Read the diff file
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
Read the diff file in full, with an explicit range: `[DIFF_FILE]:1-3000`
|
|
43
|
+
(a bare read returns only the first 300 lines; while the footer says
|
|
44
|
+
`[Showing lines … of N. Use :M to continue]`, continue with the next
|
|
45
|
+
range). It contains the commit list, a stat summary, and the full diff
|
|
46
|
+
with surrounding context, and it is your view of the change. The diff's
|
|
47
|
+
context lines ARE the changed files: do not Read a changed file
|
|
48
|
+
separately unless a hunk you must judge is cut off mid-function — and
|
|
49
|
+
say so in your report. You have no bash tool; if the diff file is
|
|
50
|
+
missing, report that as a gap and stop — do not reconstruct the diff
|
|
51
|
+
from files.
|
|
46
52
|
Do not crawl the broader codebase. Inspect code outside the diff only
|
|
47
53
|
to evaluate a concrete risk you can name — one focused check per named
|
|
48
54
|
risk, and name both the risk and what you checked in your report.
|
|
@@ -51,7 +57,10 @@ more, nothing less) and is well-built (clean, tested, maintainable)
|
|
|
51
57
|
checking the call sites is the right method.
|
|
52
58
|
|
|
53
59
|
Your review is read-only on this checkout. Do not mutate the working
|
|
54
|
-
tree, the index, HEAD, or branch state in any way
|
|
60
|
+
tree, the index, HEAD, or branch state in any way, and never call an
|
|
61
|
+
`xd://` device or an extension, MCP, or memory tool that executes code,
|
|
62
|
+
writes files, or changes external state — your `tools:` list does not
|
|
63
|
+
stop those, this instruction does.
|
|
55
64
|
|
|
56
65
|
## You Do Not Dispatch Subagents
|
|
57
66
|
|
|
@@ -74,7 +83,7 @@ more, nothing less) and is well-built (clean, tested, maintainable)
|
|
|
74
83
|
## Tests
|
|
75
84
|
|
|
76
85
|
The implementer already ran the tests and reported results with TDD
|
|
77
|
-
evidence for exactly this code. You have no
|
|
86
|
+
evidence for exactly this code. You have no bash tool and cannot re-run
|
|
78
87
|
anything: verify their claims against the diff. If reading the code
|
|
79
88
|
raises a specific doubt that no existing run answers, name the focused
|
|
80
89
|
test you would run in that finding's body and verdict on what the diff
|
|
@@ -44,7 +44,7 @@ Has the user already indicated their worktree preference in your instructions? I
|
|
|
44
44
|
|
|
45
45
|
Honor any existing declared preference without asking. If the user declines consent, work in place and skip to Step 2.
|
|
46
46
|
|
|
47
|
-
**On omp,
|
|
47
|
+
**On omp, your human partner has a one-line answer:** `/wt <branch>` moves *this session* into a new worktree on a new branch off `HEAD`, carrying uncommitted changes with it (clone-first, so `node_modules`/`target` come along). Only your human partner can run it — it is a slash command, refused while you are streaming. If they do, re-run the detection above: `GIT_DIR != GIT_COMMON` now holds, so skip to Step 2. (`worktree.cleanSource: true` additionally runs `git reset --hard` + `git clean` on the *original* checkout afterwards; it is off by default.)
|
|
48
48
|
|
|
49
49
|
## Step 1: Create Isolated Workspace
|
|
50
50
|
|
|
@@ -60,7 +60,7 @@ Only proceed to Step 1b if you have no native worktree tool available.
|
|
|
60
60
|
|
|
61
61
|
#### On omp: `omp worktree add`
|
|
62
62
|
|
|
63
|
-
omp exposes no worktree *tool* to the agent — `/wt` and `/move` are slash commands only
|
|
63
|
+
omp exposes no worktree *tool* to the agent — `/wt` and `/move` are slash commands only your human partner can type. The native mechanism you can run is the CLI, from `bash`:
|
|
64
64
|
|
|
65
65
|
```bash
|
|
66
66
|
repo=$(basename "$(git rev-parse --show-toplevel)")
|
|
@@ -68,14 +68,17 @@ path=~/.omp/wt/"$BRANCH_NAME-$repo"
|
|
|
68
68
|
omp worktree add -b "$BRANCH_NAME" "$path" # optional trailing commit-ish, default HEAD
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
-
Rules, each measured on omp 18.
|
|
71
|
+
Rules, each measured on omp 18.4.10:
|
|
72
72
|
|
|
73
73
|
- **Put it under `~/.omp/wt/`** (or the configured `worktree.base`). That is the registry `omp worktree list` / `omp worktree clear` manage; a worktree created elsewhere is a valid git worktree that omp cannot see — the phantom state this step exists to avoid. Do not use `.worktrees/` on omp.
|
|
74
|
-
- **It does not carry uncommitted changes.** It is clone-first (ignored build artifacts like `node_modules` come along), but a dirty tree stays behind. If
|
|
75
|
-
- **
|
|
76
|
-
- **
|
|
74
|
+
- **It does not carry uncommitted changes.** It is clone-first (ignored build artifacts like `node_modules` come along, unless the clone falls back — next rule), but a dirty tree stays behind. If your human partner has work in flight, either commit/stash it first or ask them to use `/wt <branch>`, which does carry it.
|
|
75
|
+
- **Clone-first can fall back to a plain checkout.** Cloning needs a filesystem that supports copy-on-write clones (measured: APFS clones, HFS+ does not) and a target outside the source checkout (measured on APFS: an in-repo target such as Step 1b's `.worktrees/` fails to clone). When it cannot, omp prints `warning: worktree clone fell back to plain checkout: …` and still exits 0; the worktree then lacks `node_modules`, `target`, and other ignored artifacts, so run Step 2's install as for any fresh checkout. `worktree.clone: false` turns clone-first off.
|
|
76
|
+
- **Your working directory does not follow.** `cd` in `bash` is per call, and `read`/`edit`/`glob` resolve relative paths against the *session* cwd. After creating the worktree, ask your human partner to run `/move <path>` so the session follows you. Until then, use absolute paths for everything under the worktree, and run commands there with the `bash` tool's `cwd` parameter set to the worktree path — or `cd <path> && <cmd>` in the same call (a leading `cd <path> &&` is lifted into `cwd`; the `cd` does not carry to the next call).
|
|
77
|
+
- **Subagents start in the session cwd, not your `cd`.** The `task` tool has no `cwd` argument, so until `/move` a subagent works in the ORIGINAL checkout, not the worktree (measured: after `omp worktree add`, a dispatched subagent's `pwd` was the original checkout). Get `/move` done before dispatching any subagent — implementer, reviewer, or scout. If you cannot, put the worktree's absolute path in every dispatch and tell the subagent to use absolute paths and the `bash` tool's `cwd` parameter throughout.
|
|
78
|
+
- **In vibe mode the session cannot follow a worktree.** Vibe refuses `/move` and `/wt` ("Exit vibe mode first."), and leaving vibe mode kills every worker. A vibe director (your tools include `vibe_spawn` but not `task`) has no `bash`; a worker can run `omp worktree add`, but the session cannot follow it while vibe is on. So ask your human partner to create the worktree and `/move` into it before `/vibe`; otherwise put the worktree's absolute path in every worker brief and `read` files there by absolute path.
|
|
79
|
+
- **Cleanup.** A finished worktree is removed with `git worktree remove <path>` from the repo — that also deletes the directory. `omp worktree clear` only sweeps *orphaned* entries (its own words: "parent repo no longer tracks this worktree"); a live worktree survives it. **`omp worktree clear --all` removes every entry under the worktree directory** — live worktrees and `/wt` session worktrees included — and force-removes them even with uncommitted changes, without asking (the branches survive). Never run it unless your human partner asked for exactly that, and preview any `clear` with `--dry-run`. Never `rm -rf` a registered worktree.
|
|
77
80
|
|
|
78
|
-
This is the whole-session layer. Per-*subagent* isolation
|
|
81
|
+
This is the whole-session layer. Per-*subagent* isolation is a separate switch, `task.isolation.enabled` (default off); subagent-driven-development dispatches its implementers one at a time and does not use it.
|
|
79
82
|
|
|
80
83
|
Then skip to Step 2.
|
|
81
84
|
|
|
@@ -120,6 +123,8 @@ git worktree add "$path" -b "$BRANCH_NAME"
|
|
|
120
123
|
cd "$path"
|
|
121
124
|
```
|
|
122
125
|
|
|
126
|
+
**On omp,** the `bash` tool rewrites a literal `git worktree add` into `omp worktree add` (clone-first; `worktree.clone` is on by default), so a rewritten run prints `Cloned from … via …`, or the fallback warning from the clone rule above. Only a flat command of the shape `git [-C dir] worktree add [-b|-B branch] [--detach] [-q] [--] path [commit]` is rewritten, and only when it holds no shell-expansion characters: a `$variable`, backtick, `~`, or glob in the command, or any other flag (`--lock`, `--no-checkout`, `--force`), sends it to plain git untouched. The block above, with its `"$path"` and `"$BRANCH_NAME"`, therefore runs as plain git; write the path and branch out literally to get clone-first. A target inside the repo, such as the default `.worktrees/`, cannot be cloned and falls back to a plain checkout with that warning. An extension that rewrites the command before omp sees it also prevents the rewrite: neither a `Cloned from` line nor the warning means plain git ran.
|
|
127
|
+
|
|
123
128
|
**Sandbox fallback:** If `git worktree add` fails with a permission error (sandbox denial), tell the user the sandbox blocked worktree creation and you're working in the current directory instead. Then run setup and baseline tests in place.
|
|
124
129
|
|
|
125
130
|
## Step 2: Project Setup
|
|
@@ -141,6 +146,8 @@ if [ -f pyproject.toml ]; then poetry install; fi
|
|
|
141
146
|
if [ -f go.mod ]; then go mod download; fi
|
|
142
147
|
```
|
|
143
148
|
|
|
149
|
+
**On omp, until `/move`** the session cwd is still the original checkout. Run these commands, and Step 3's tests, in the worktree with the `bash` tool's `cwd` parameter set to its path, or `cd <path> && <cmd>` in one call.
|
|
150
|
+
|
|
144
151
|
## Step 3: Verify Clean Baseline
|
|
145
152
|
|
|
146
153
|
Run tests to ensure workspace starts clean:
|
|
@@ -170,9 +177,11 @@ Ready to implement <feature-name>
|
|
|
170
177
|
| In a submodule | Treat as normal repo (Step 0 guard) |
|
|
171
178
|
| Native worktree tool available | Use it (Step 1a) |
|
|
172
179
|
| No native tool | Git worktree fallback (Step 1b) |
|
|
173
|
-
| omp,
|
|
180
|
+
| omp, your human partner typed `/wt <branch>` | Session already moved, WIP carried — re-run Step 0, skip to Step 2 |
|
|
174
181
|
| omp, you create it | `omp worktree add -b <branch> ~/.omp/wt/<branch>-<repo>`; then ask for `/move <path>` |
|
|
175
|
-
| omp, dirty tree | Commit/stash first, or ask
|
|
182
|
+
| omp, dirty tree | Commit/stash first, or ask your human partner for `/wt` — `omp worktree add` leaves WIP behind |
|
|
183
|
+
| omp, setup or tests before `/move` | `bash` with `cwd=<worktree path>`, or `cd <path> && <cmd>` in one call |
|
|
184
|
+
| omp, tidy up | `git worktree remove <path>`; `omp worktree clear --all` force-removes every worktree, live ones included — only on request |
|
|
176
185
|
| `.worktrees/` exists | Use it (verify ignored) |
|
|
177
186
|
| `worktrees/` exists | Use it (verify ignored) |
|
|
178
187
|
| Both exist | Use `.worktrees/` |
|
|
@@ -6,36 +6,74 @@ Skills speak in actions ("dispatch a subagent", "create a todo", "read a file").
|
|
|
6
6
|
| --- | --- |
|
|
7
7
|
| Dispatch a subagent (`Subagent (general-purpose):` template) | The built-in `task` tool |
|
|
8
8
|
| Dispatch N subagents in parallel | ONE `task` call with N entries in `tasks[]` |
|
|
9
|
+
| Resume or message an idle subagent | `write agent://<id>` |
|
|
10
|
+
| Read a long subagent result | `read agent://<id>` (structured fields at `agent://<id>/<field>`) |
|
|
9
11
|
| Task tracking ("create a todo", "mark complete") | The built-in `todo` tool |
|
|
10
12
|
|
|
11
13
|
## Subagents
|
|
12
14
|
|
|
13
15
|
omp ships a built-in `task` tool. Use it for every Superpowers subagent workflow — never conclude that subagent capability is missing.
|
|
14
16
|
|
|
15
|
-
Batch shape: one call carries `{ context, tasks[] }`, one subagent per item, run concurrently (capped by the `task.maxConcurrency` setting). Dispatch parallel agents as multiple entries in a single call, never as sequential calls.
|
|
17
|
+
Batch shape (the `task.batch` setting, on by default): one call carries `{ context, tasks[] }`, one subagent per item, run concurrently (capped by the `task.maxConcurrency` setting). Every item also needs `solutionSpace`, one line on how open the problem is. Dispatch parallel agents as multiple entries in a single call, never as sequential calls.
|
|
16
18
|
|
|
17
19
|
Agent types: pick the most specific one per item from the roster in the `task` tool's own description. Commonly available: `scout` (read-only research — use for investigation), `reviewer`, `security-reviewer`, `sonic` (strictly mechanical work), `task` (general-purpose, full capabilities). The exact roster depends on installed and configured agents, so read the tool description rather than assuming.
|
|
18
20
|
|
|
19
|
-
The tool is lowercase `task`; `Task` does not exist.
|
|
21
|
+
The tool is lowercase `task`; `Task` does not exist. `task.isolation.enabled` (default off) only lets a dispatch mark items `isolated: true`; isolated work comes back as an applied patch (default `task.isolation.merge: patch`), and an isolated subagent cannot be messaged afterwards. Superpowers SDD does not use it.
|
|
20
22
|
|
|
21
23
|
### Model selection on omp
|
|
22
24
|
|
|
23
|
-
The `task` tool has **no `model:` field**. Every `model: [...]` line in a Superpowers template is inert here — the agent TYPE carries model, thinking level, and tool set.
|
|
25
|
+
The `task` tool has **no `model:` field**. Every `model: [...]` line in a Superpowers template is inert here — the agent TYPE carries model, thinking level, and tool set. The bundled `task` is a general agent with the widest tool set and whatever `modelRoles.task` names, not an SDD seat's contract.
|
|
24
26
|
|
|
25
27
|
This fork ships SDD-specific agents (they appear in the `task` roster once the plugin is installed):
|
|
26
28
|
|
|
27
|
-
| Superpowers role | `agent:` |
|
|
28
|
-
| --- | --- | --- |
|
|
29
|
-
| Implementer, fix rounds 1-2 | `sdd-implementer` | sonnet-5 · medium
|
|
30
|
-
| Task reviewer | `sdd-reviewer` | sonnet-5 · high
|
|
31
|
-
| Scoped re-review | `sdd-rereviewer` | sonnet-5 · low
|
|
32
|
-
| Fix round 3 / ruled strongest-tier task | `sdd-escalation-implementer` | opus-5 ·
|
|
33
|
-
| Final whole-branch review (subagent-driven-development or executing-plans) | `sdd-final-reviewer` | opus-5 ·
|
|
29
|
+
| Superpowers role | `agent:` | Shipped default · thinking | Tools |
|
|
30
|
+
| --- | --- | --- | --- |
|
|
31
|
+
| Implementer, fix rounds 1-2 | `sdd-implementer` | claude-sonnet-5-5 · medium | edit/test tools; no subagents |
|
|
32
|
+
| Task reviewer | `sdd-reviewer` | claude-sonnet-5-5 · high | `read`, `grep`, `glob` — no bash, edit, or file-writing tool |
|
|
33
|
+
| Scoped re-review | `sdd-rereviewer` | claude-sonnet-5-5 · low | `read`/`grep`; ≤4 working calls plus the final `yield` |
|
|
34
|
+
| Fix round 3 / ruled strongest-tier task | `sdd-escalation-implementer` | claude-opus-5-5 · max | same tools as the implementer |
|
|
35
|
+
| Final whole-branch review (subagent-driven-development or executing-plans) | `sdd-final-reviewer` | claude-opus-5-5 · max | read-only + focused bash |
|
|
34
36
|
|
|
35
|
-
Shipped defaults are Anthropic; the tiers are a thinking ladder (low / medium / high /
|
|
37
|
+
Shipped defaults are Anthropic; the tiers are a thinking ladder (low / medium / high / max). Re-point any seat per host with `task.agentModelOverrides` in `~/.omp/agent/config.yml` (or `/agents`) — it beats the agent file's `model:`, applies on the next dispatch, and a bare model keeps the agent's `thinkingLevel:` while an explicit `:level` replaces it. Turn on `task.showResolvedModelBadge` (default off) to see the model each subagent actually ran.
|
|
36
38
|
|
|
37
|
-
Never use the bundled `task` agent for an SDD seat: it
|
|
39
|
+
Never use the bundled `task` agent for an SDD seat: it lacks the seat's tools, output contract and no-subagent rule, and runs whatever `modelRoles.task` names (else the session model). If `task.enableEffort` is on, `effort: "hi"` on a dispatch raises that one subagent's thinking without changing its model — the only accepted values are `"lo"`, `"med"`, `"hi"`. `"hi"` maps to the model's top supported level, capped by `task.maxEffort`.
|
|
40
|
+
|
|
41
|
+
### Tool boundary
|
|
42
|
+
|
|
43
|
+
An agent's `tools:` list limits built-in tools only. Extension tools and MCP tools (mounted as `xd://` devices and run through a device-only `write` that refuses file paths) still attach to every subagent; memory tools attach only when the agent's `tools:` list names them. On omp 18.4.10 a read/grep/glob reviewer ran a shell command through an MCP device. Read-only seats are read-only by instruction, not by sandbox.
|
|
44
|
+
|
|
45
|
+
### Checks
|
|
46
|
+
|
|
47
|
+
From omp 18.4.12, every subagent's system prompt carries a hand-off rule ahead of the agent body (read in 18.4.12's `src/prompts/system/system-prompt.md`). It says the main agent verifies once after all subagents land, and: "NEVER verify your changes (builds, tests, linters, formatters, smoke runs) unless your assignment explicitly instructs it." It also tells the subagent to yield when its changes are complete and to name the checks the main agent should run. omp 18.4.10 allowed scoped proof instead: a single test file, a targeted repro, a smoke run.
|
|
48
|
+
|
|
49
|
+
The rule is prompt text, not a tool block. It applies to every subagent at task depth > 0: plugin agents and vibe workers alike. An explicit instruction in the dispatch wins. Measured on 18.4.12 with haiku-4-5:low, a weak proxy for the real seats:
|
|
50
|
+
|
|
51
|
+
- an `sdd-implementer` given the implementer template ran `npm test` before and after its fix, and reported RED/GREEN;
|
|
52
|
+
- a vibe `good` worker told "fix sum.js so sum(2, 3) returns 5, then commit" ran no test;
|
|
53
|
+
- the same brief plus "This assignment explicitly instructs you to run the tests yourself (`npm test`), before and after the fix" ran both.
|
|
54
|
+
|
|
55
|
+
So every dispatch that needs a check names the command and when to run it. SDD's implementer template already instructs its test runs: the focused test while iterating, the full suite once before committing.
|
|
38
56
|
|
|
39
57
|
## Task lists
|
|
40
58
|
|
|
41
59
|
omp ships a built-in `todo` tool (`init`, `start`, `done`, `rm`, `drop`, `block`, `unblock`, `append`, `view`). Use it for all task tracking. Do not use Superpowers plan files, Markdown checklists, or a repo-local `TODO.md` for this. Older Superpowers docs may refer to `TodoWrite`; treat that as the `todo` tool.
|
|
60
|
+
|
|
61
|
+
## Vibe mode
|
|
62
|
+
|
|
63
|
+
`/vibe` makes the session a director of worker sessions. You are the director when your tools include `vibe_spawn` but not `task` (a hidden `<vibe-mode>` block before each prompt also says "Vibe mode ON. You are DIRECTOR"). The director keeps `read`, `todo`, the `vibe_*` tools (`vibe_spawn`, `vibe_send`, `vibe_wait`, `vibe_kill`, `vibe_list`) and any MCP tools. It has no `task`, `bash`, `edit`, `write`, `grep`, `glob` or `ask`. MCP tools stay, but omp's vibe rule still applies (never edit, run, grep or build yourself), so do not run commands through an MCP tool either. Every instruction that needs a missing tool goes to a worker.
|
|
64
|
+
|
|
65
|
+
| Action skills request | Vibe director's equivalent |
|
|
66
|
+
| --- | --- |
|
|
67
|
+
| Dispatch a subagent | `vibe_spawn` a worker. `vibe_spawn` takes only `cli`, a name and a prompt. `cli: "fast"` is omp's bundled `sonic` agent on the `modelRoles.smol` model; `cli: "good"` is the bundled `task` agent on the `modelRoles.task` model. It cannot start any other agent type |
|
|
68
|
+
| Message or resume it | `vibe_send` to the same worker session |
|
|
69
|
+
| Read a long result | The worker writes it to a file; you `read` the file |
|
|
70
|
+
| Run a command, edit, commit | A worker does it |
|
|
71
|
+
| Verify a claim | A worker you explicitly tell to run the command saves the full output and exit code to a file; you `read` that file |
|
|
72
|
+
| Task tracking ("create a todo", "mark complete") | `todo`, which only the director has |
|
|
73
|
+
|
|
74
|
+
A worker is an ordinary omp subagent. It has the normal coding tools, including `task`, `wait` and `write agent://`, but no `todo`, `ask` or `vibe_*`, and it starts in the session's cwd. It never gets this plugin's bootstrap (the extension skips subagent sessions), so a brief names the skill to `read` (`read skill://<name>`). Workers get the 18.4.12 hand-off rule too (see *Checks*), so a brief that needs a test, build or smoke run names it. A worker is never an SDD seat: `fast` and `good` are the bundled `sonic` and `task` agents, and overrides for their models are `task.agentModelOverrides.sonic` and `task.agentModelOverrides.task`. A long worker result reaches you as a cut-off `<vibe-turn>` response, and its full text at `agent://<id>` comes back as a single line that `read` cuts at 768 characters. Have workers write long reports to a file, and `read` the file.
|
|
75
|
+
|
|
76
|
+
- **subagent-driven-development and executing-plans:** hand the whole run to ONE `good` worker. Its brief names the skill to read, the plan path and the worktree path, and gives two rules. First, run every test, build and script the skill calls for: the brief must say so explicitly, because an 18.4.12 worker skips checks otherwise (see *Checks*). Second, when the skill says to stop and ask your human partner, end the turn with the question. That worker is the controller. It runs the scripts, keeps the ledger, and dispatches the SDD seats through its own `task` tool, so each seat keeps its model, tools and output contract (measured on omp 18.4.10: a `good` worker ran `read skill://subagent-driven-development`, dispatched `sdd-rereviewer` through its own `task` tool, and the seat ran on its `task.agentModelOverrides` model, returned its structured output to the worker, and was resumed with `write agent://<id>`). The worker has no `todo`; the ledger (`<workspace>/progress.md`) is its record. You keep `todo` from the ledger, take its questions to your human partner, and `vibe_send` the answers.
|
|
77
|
+
- **Worktrees:** while vibe is on, `/move`, `/wt`, `/new` and fork are refused ("Exit vibe mode first."), and leaving vibe mode kills every worker. Create the worktree and `/move` into it before `/vibe`. Otherwise every brief carries the worktree's absolute path, and you `read` files there by absolute path.
|
|
78
|
+
- **Long runs:** a worker's first turn runs under omp's soft request budget, `task.softRequestBudget`: 200 by default, and the `fast` worker's `sonic` agent caps at 100. At the budget the worker gets a wrap-up notice; at 1.5x it is stopped and must yield. A long plan's controller can cross the budget. Set `task.softRequestBudget: 0` (it disables the budget for every subagent), or `vibe_send` the stopped worker "continue from the ledger": omp's source runs a `vibe_send` turn without the budget and keeps a budget-stopped worker idle and resumable (read in 18.4.12's source, not run).
|
|
79
|
+
- **The rest:** brainstorming's questions, the plan handoff and finishing a branch's options are conversation, and stay with the director. A worker writes the files and runs git and the tests its brief names.
|
|
@@ -193,6 +193,8 @@ them to review the plan and choose an execution method before implementation.
|
|
|
193
193
|
|
|
194
194
|
**For this plan I recommend <one of the two>, because <one sentence from the plan: how much the tasks depend on each other's interfaces, how many there are, what a shipped mistake would cost>. Does the plan capture what you want, and which approach should we use?"**
|
|
195
195
|
|
|
196
|
+
**On omp in vibe mode** (your tools include `vibe_spawn` but not `task`), both approaches run in one `good` worker you brief, not in your own session; the chosen skill's vibe note says how. Say so when you offer them.
|
|
197
|
+
|
|
196
198
|
**When an execution method has already been supplied:**
|
|
197
199
|
|
|
198
200
|
**"Plan complete and saved to `docs/superpowers/plans/<filename>.md`. Please review the plan. Does it capture what you want?"**
|