@loneexile/omp-superpowers 6.4.2-omp.1 → 6.4.2-omp.3
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 +13 -5
- package/CHANGELOG.md +40 -2
- package/README.md +38 -27
- package/agents/sdd-escalation-implementer.md +18 -6
- package/agents/sdd-final-reviewer.md +22 -7
- 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 +40 -0
- package/skills/subagent-driven-development/SKILL.md +245 -97
- 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 +17 -9
- package/skills/using-superpowers/references/pi-tools.md +18 -12
|
@@ -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,16 @@ 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
|
+
- **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
79
|
|
|
78
|
-
This is the whole-session layer. Per-*subagent* isolation
|
|
80
|
+
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
81
|
|
|
80
82
|
Then skip to Step 2.
|
|
81
83
|
|
|
@@ -120,6 +122,8 @@ git worktree add "$path" -b "$BRANCH_NAME"
|
|
|
120
122
|
cd "$path"
|
|
121
123
|
```
|
|
122
124
|
|
|
125
|
+
**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.
|
|
126
|
+
|
|
123
127
|
**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
128
|
|
|
125
129
|
## Step 2: Project Setup
|
|
@@ -141,6 +145,8 @@ if [ -f pyproject.toml ]; then poetry install; fi
|
|
|
141
145
|
if [ -f go.mod ]; then go mod download; fi
|
|
142
146
|
```
|
|
143
147
|
|
|
148
|
+
**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.
|
|
149
|
+
|
|
144
150
|
## Step 3: Verify Clean Baseline
|
|
145
151
|
|
|
146
152
|
Run tests to ensure workspace starts clean:
|
|
@@ -170,9 +176,11 @@ Ready to implement <feature-name>
|
|
|
170
176
|
| In a submodule | Treat as normal repo (Step 0 guard) |
|
|
171
177
|
| Native worktree tool available | Use it (Step 1a) |
|
|
172
178
|
| No native tool | Git worktree fallback (Step 1b) |
|
|
173
|
-
| omp,
|
|
179
|
+
| omp, your human partner typed `/wt <branch>` | Session already moved, WIP carried — re-run Step 0, skip to Step 2 |
|
|
174
180
|
| 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
|
|
181
|
+
| omp, dirty tree | Commit/stash first, or ask your human partner for `/wt` — `omp worktree add` leaves WIP behind |
|
|
182
|
+
| omp, setup or tests before `/move` | `bash` with `cwd=<worktree path>`, or `cd <path> && <cmd>` in one call |
|
|
183
|
+
| omp, tidy up | `git worktree remove <path>`; `omp worktree clear --all` force-removes every worktree, live ones included — only on request |
|
|
176
184
|
| `.worktrees/` exists | Use it (verify ignored) |
|
|
177
185
|
| `worktrees/` exists | Use it (verify ignored) |
|
|
178
186
|
| Both exist | Use `.worktrees/` |
|
|
@@ -6,35 +6,41 @@ 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 | `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.
|
|
38
44
|
|
|
39
45
|
## Task lists
|
|
40
46
|
|