@mu-crew/mu 3.10.2 → 3.11.0
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/dist/{chunk-RXVYBV3P.js → chunk-2FJK6OOZ.js} +2 -2
- package/dist/{chunk-JEWHQ4GB.js → chunk-DXKJY3NT.js} +2 -2
- package/dist/{chunk-KGGOITI5.js → chunk-JYZUNPPO.js} +43 -2
- package/dist/chunk-JYZUNPPO.js.map +1 -0
- package/dist/{cli-GBIC22X7.js → cli-GRAPF5VC.js} +5 -5
- package/dist/cli.js +1 -1
- package/dist/extension/mu-pi.js +2 -2
- package/dist/extension/mu-pi.js.map +1 -1
- package/dist/index.d.ts +15 -1
- package/dist/index.js +4 -2
- package/dist/{tui-SKZMGHA6.js → tui-DGDEH4JX.js} +3 -3
- package/docs/VISION.md +3 -0
- package/docs/guide/delegate.md +1 -1
- package/package.json +1 -1
- package/skills/mu/SKILL.md +29 -37
- package/skills/mu/recipes/adversarial-review.md +26 -21
- package/skills/mu/recipes/brief.md +3 -2
- package/skills/mu/recipes/codemode-driver.md +9 -6
- package/skills/mu/recipes/deep-research.md +2 -1
- package/skills/mu/recipes/drift-audit.md +5 -4
- package/skills/mu/recipes/fan-out.md +5 -3
- package/skills/mu/recipes/findings.md +7 -3
- package/skills/mu/recipes/hypothesis-panel.md +2 -1
- package/skills/mu/recipes/models.md +102 -0
- package/skills/mu/recipes/orchestrator-loop.md +6 -8
- package/skills/mu/recipes/plan.md +5 -5
- package/skills/mu/recipes/recovery.md +9 -8
- package/skills/mu/recipes/refute.md +7 -4
- package/skills/mu/recipes/remote-workers.md +22 -14
- package/skills/mu/recipes/review-panel.md +4 -3
- package/skills/mu/recipes/rules-audit.md +7 -6
- package/skills/mu/recipes/tasks-or-calls.md +6 -5
- package/skills/mu/recipes/tournament.md +5 -2
- package/skills/mu/recipes/ultrathink.md +6 -4
- package/skills/mu/recipes/watcher.md +4 -0
- package/skills/mu/recipes/waves.md +5 -4
- package/skills/mu/recipes/worker.md +2 -2
- package/dist/chunk-KGGOITI5.js.map +0 -1
- /package/dist/{chunk-RXVYBV3P.js.map → chunk-2FJK6OOZ.js.map} +0 -0
- /package/dist/{chunk-JEWHQ4GB.js.map → chunk-DXKJY3NT.js.map} +0 -0
- /package/dist/{cli-GBIC22X7.js.map → cli-GRAPF5VC.js.map} +0 -0
- /package/dist/{tui-SKZMGHA6.js.map → tui-DGDEH4JX.js.map} +0 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Model tiers
|
|
2
|
+
|
|
3
|
+
Read when you pick a model for a spawn or a delegate call. mu passes the
|
|
4
|
+
model through and never picks one; the choice is yours. Recipes name a
|
|
5
|
+
tier (cheap, mid, strong, frontier) and say which one their roles need;
|
|
6
|
+
this file says how to tell a model's tier.
|
|
7
|
+
|
|
8
|
+
## Tiers
|
|
9
|
+
|
|
10
|
+
Rank a model within its own family. The model-id prefix in
|
|
11
|
+
`pi --list-models` (`anthropic/`, `openai/`, `google/`) names the family
|
|
12
|
+
when it names a lab; the provider column is often one shared gateway, so
|
|
13
|
+
it does not tell families apart.
|
|
14
|
+
|
|
15
|
+
| Tier | Where it sits in its family | Names as of 2026-10 |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| **frontier** | an exceptional tier above the lab's normal flagship, priced well above it, often gated | fable, astra |
|
|
18
|
+
| **strong** | the lab's normal flagship | opus, sol |
|
|
19
|
+
| **mid** | the everyday default | sonnet, terra |
|
|
20
|
+
| **cheap** | the lab's small, fast hosted model | haiku, luna, flash, mini, nano, lite |
|
|
21
|
+
| **local** | runs on this machine (ollama, lmstudio, llama.cpp) | qwen, gemma, gpt-oss |
|
|
22
|
+
|
|
23
|
+
Names go stale within months; the position in the family does not. Rank
|
|
24
|
+
a model you cannot place by the lab's own description of its lineup
|
|
25
|
+
(flagship, balanced, fast). `pi --list-models` shows context and max
|
|
26
|
+
output, not price or quality, and siblings often share both. Still
|
|
27
|
+
unsure: run it on a small slice of the real work and compare it with a
|
|
28
|
+
model you can place. Until then, pick conservatively: a model you know
|
|
29
|
+
is strong enough for the work, and for a checker never one that might
|
|
30
|
+
sit below the author.
|
|
31
|
+
|
|
32
|
+
Thinking effort strengthens a model within its tier. It does not change
|
|
33
|
+
the tier, and it does not stand in for another family.
|
|
34
|
+
|
|
35
|
+
## Local models are a last resort
|
|
36
|
+
|
|
37
|
+
A hosted cheap model beats a small local one at agent work: tool calls,
|
|
38
|
+
long briefs, multi-step edits. Small local models lose the thread of a
|
|
39
|
+
brief and fake tool results; in `pi --list-models` they tend to show
|
|
40
|
+
thinking `no` and small context and output limits. Use one only when no
|
|
41
|
+
hosted model is available, or the work must stay on the machine, and
|
|
42
|
+
then only for cheap-tier work whose output something stronger checks. A
|
|
43
|
+
local model never reviews, refutes or judges.
|
|
44
|
+
|
|
45
|
+
## Roles
|
|
46
|
+
|
|
47
|
+
| Work | Tier |
|
|
48
|
+
| --- | --- |
|
|
49
|
+
| fan-out scouting (listing units), searchers collecting quoted claims, watchers, first-pass finders | cheap |
|
|
50
|
+
| building, refactoring, tests, routine fixes | mid |
|
|
51
|
+
| review, refute, judge, audit, synthesize | the tier of whoever wrote the thing being checked, or higher; another family when one exists |
|
|
52
|
+
| design, plans, incidents, root cause, final synthesis of a large run | strong |
|
|
53
|
+
| a strong attempt failed, or the final judge of a close call | frontier; none available: the strongest model, from a family not yet used on the job |
|
|
54
|
+
|
|
55
|
+
Cheap work suits bounded tasks whose output can be checked: a searcher's
|
|
56
|
+
claim carries a quote a checker verifies. A cheap finder's misses stay
|
|
57
|
+
missed, since refuters only test what was reported. When an omission is
|
|
58
|
+
costly (a security audit, a coverage sweep), run the finders mid or
|
|
59
|
+
strong, or add a second finder from another family.
|
|
60
|
+
|
|
61
|
+
## Checkers
|
|
62
|
+
|
|
63
|
+
A checker (reviewer, refuter, judge, auditor) must not share the
|
|
64
|
+
author's blind spots. The author is whoever wrote the thing being
|
|
65
|
+
checked: the worker for a diff, the planner for a brief, the finder for
|
|
66
|
+
a finding.
|
|
67
|
+
|
|
68
|
+
- **Level or up.** At least the author's tier; never down.
|
|
69
|
+
- **Another family when one exists**, at that tier. One model's blind
|
|
70
|
+
spot repeated is still one blind spot.
|
|
71
|
+
- **No peer in another family**: the same model, fresh context, higher
|
|
72
|
+
thinking unless at max.
|
|
73
|
+
|
|
74
|
+
A delegate with no `model` runs the cli's configured default, which is
|
|
75
|
+
your own model only if you are on that default. When the tier or family
|
|
76
|
+
matters, pass `model`.
|
|
77
|
+
|
|
78
|
+
## How to pass a model and effort level
|
|
79
|
+
|
|
80
|
+
pi takes both in one `--model` value: `<provider/id>:<level>`, where the
|
|
81
|
+
thinking (effort) level is one of `off`, `minimal`, `low`, `medium`,
|
|
82
|
+
`high`, `xhigh`, `max`. Leave `:<level>` off to keep the model's default. With `:<level>`, pi
|
|
83
|
+
reads the first segment as the provider, so copy `<provider>/<model>`
|
|
84
|
+
exactly from `pi --list-models`. Through a gateway that is
|
|
85
|
+
`modelbridge/anthropic/claude-sonnet-5-5:high`; `anthropic/…:high` fails
|
|
86
|
+
with "No API key".
|
|
87
|
+
|
|
88
|
+
- `mu_delegate`: `model: "<provider>/<model>:high"`.
|
|
89
|
+
- Spawn: `mu agent spawn r -w <ws> --command "pi --model <provider>/<model>:high"`.
|
|
90
|
+
- A `cli` key (`--cli pi_big`) works only if `$MU_<KEY>_COMMAND` is set
|
|
91
|
+
in the environment; check before you rely on one.
|
|
92
|
+
- herdr refuses a command override, so neither model nor level can be
|
|
93
|
+
set per agent there: every helper runs the cli's default. The only
|
|
94
|
+
independence left is fresh context; say so in the verdict.
|
|
95
|
+
|
|
96
|
+
Probe a model you have not used this session
|
|
97
|
+
(`pi --model <id> -p "say ok"`); `ctl: ok` after spawn does not test the
|
|
98
|
+
model.
|
|
99
|
+
|
|
100
|
+
Done when the chosen `model` is placed in a tier, a checker is at the
|
|
101
|
+
author's tier or higher and from another family (or the verdict says why
|
|
102
|
+
not), and a model new this session answered `pi --model <id> -p "say ok"`.
|
|
@@ -6,10 +6,10 @@ the loop and the reasons behind them.
|
|
|
6
6
|
|
|
7
7
|
## Every turn
|
|
8
8
|
|
|
9
|
-
1. `mu state -w <ws>` — read agents, IN_PROGRESS, ready tasks
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
1. `mu state -w <ws>` — read agents, IN_PROGRESS, ready tasks.
|
|
10
|
+
2. Spawn one agent per ready task, up to the ceiling below. Tasks that
|
|
11
|
+
edit the same files are chained with `block`, so only one is ready
|
|
12
|
+
([waves](waves.md)).
|
|
13
13
|
3. **Claim before sending — even one-shot reviewers/scouts.**
|
|
14
14
|
`mu task claim <id> -w <ws> --for <agent> --evidence "..."`.
|
|
15
15
|
If no task exists, `mu task add` first (`--note 'REPRO: ...'` when
|
|
@@ -109,9 +109,7 @@ keep the note as the durable copy. pi:
|
|
|
109
109
|
|
|
110
110
|
## Stopping a worker
|
|
111
111
|
|
|
112
|
-
`mu agent abort <w>` first for pi
|
|
113
|
-
|
|
114
|
-
to the editor unsent). Then `mu agent kick` (pi unresponsive, or
|
|
115
|
-
non-pi; local panes only), then `mu agent close`.
|
|
112
|
+
`mu agent abort <w>` first for pi, then `mu agent kick` (pi
|
|
113
|
+
unresponsive, or non-pi), then `mu agent close`.
|
|
116
114
|
|
|
117
115
|
Done when every task is closed, or a decision only a human can make blocks all progress (SKILL.md § Orchestrator rules).
|
|
@@ -38,20 +38,20 @@ human asks for a file.
|
|
|
38
38
|
of order.
|
|
39
39
|
6. **Add edges for dependencies only.** `mu task block A --by B` when A
|
|
40
40
|
consumes what B produces. Plan order is not a dependency: an extra
|
|
41
|
-
edge serialises
|
|
42
|
-
tasks that edit the same files
|
|
41
|
+
edge serialises tasks that could run in parallel. The exception:
|
|
42
|
+
tasks that edit the same files are chained ([waves](waves.md)).
|
|
43
43
|
7. **Self-review before dispatch.** Map each spec requirement to its
|
|
44
44
|
task, grep the notes for placeholders, match INTERFACES names across
|
|
45
45
|
tasks, and read the graph back (`mu task tree task_0 -w <ws> --down`).
|
|
46
46
|
Then refute each brief that makes claims ([call](tasks-or-calls.md#delegate-call),
|
|
47
|
-
all in one turn): "What in this brief is false about the code,
|
|
47
|
+
all in one turn, at your tier from another family: [models](models.md#checkers)): "What in this brief is false about the code,
|
|
48
48
|
ambiguous, or would make a correct worker fail review? Cite
|
|
49
|
-
file:line." Rewrite each
|
|
49
|
+
file:line." Rewrite each REFUTED brief. Five of six briefs refuted in one run had
|
|
50
50
|
such a defect, e.g. a fallback test old extensions made unpassable.
|
|
51
51
|
|
|
52
52
|
Done when every spec requirement maps to a task, no note holds a
|
|
53
53
|
placeholder, every claim-making brief has a verdict, and `mu state`
|
|
54
|
-
|
|
54
|
+
lists the tasks you meant to run in parallel as Ready together. Then dispatch per [orchestrator-loop](orchestrator-loop.md).
|
|
55
55
|
|
|
56
56
|
## Notes
|
|
57
57
|
|
|
@@ -4,13 +4,10 @@ Use before you undo a change, rebuild the DB, tear down a workstream,
|
|
|
4
4
|
set up sync, or act on `mu doctor` output. Each of these can lose work
|
|
5
5
|
when done in the wrong order.
|
|
6
6
|
|
|
7
|
-
- **`workstream teardown`** is
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
emits inverse ops for that group only (redo = undo the undo). Exit 4
|
|
12
|
-
if a later action changed the same fields (`--force` discards it).
|
|
13
|
-
Rows only: killed panes and freed workspace dirs do not come back.
|
|
7
|
+
- **`workstream teardown`** is reversible: `workstream list --torn-down`
|
|
8
|
+
lists the group ids to `mu undo`; the log is the backup.
|
|
9
|
+
- **`mu undo`** restores rows only: killed panes and freed workspace
|
|
10
|
+
dirs do not come back. Redo = undo the undo.
|
|
14
11
|
- **`mu rebuild <file>`** writes a new DB from the ops log, without
|
|
15
12
|
agents or workspaces; re-spawn after the swap. Recovery is
|
|
16
13
|
`mu rebuild`, not `mu db backup`.
|
|
@@ -28,4 +25,8 @@ when done in the wrong order.
|
|
|
28
25
|
only copy of uncommitted work, so mu prints cleanup commands and runs
|
|
29
26
|
none. Read before you run them.
|
|
30
27
|
|
|
31
|
-
Done when
|
|
28
|
+
Done when, per operation: undo or teardown was previewed, then applied
|
|
29
|
+
with `--yes`; rebuild was swapped in and agents re-spawned; `mu sync`
|
|
30
|
+
lists the peer; forget touched only the named workstreams. Any
|
|
31
|
+
`doctor --deep` DRIFT is backed up and reported to the human, and you
|
|
32
|
+
read every cleanup command before you ran it.
|
|
@@ -38,15 +38,18 @@ fact-check nobody will track, use delegate mode from
|
|
|
38
38
|
A synthesis task is needed only when the human wants prose.
|
|
39
39
|
|
|
40
40
|
Done when no finding is left in triage without an `UNVERIFIED` note,
|
|
41
|
-
and the
|
|
42
|
-
|
|
41
|
+
and the accepted findings are fixed or handed off. The umbrella closes
|
|
42
|
+
with `--if-ready` once no finding is open; while an `UNVERIFIED` finding
|
|
43
|
+
remains it stays open and the human gets the list.
|
|
43
44
|
|
|
44
45
|
## Traps
|
|
45
46
|
|
|
46
47
|
- **UNVERIFIED is not REFUTED.** A refuter that hit a rate limit or
|
|
47
48
|
could not run the code disproved nothing. The finding stays in triage
|
|
48
49
|
with an `UNVERIFIED:` note, reported apart.
|
|
49
|
-
- **Cheap finders, strong refuters.** Finders can run
|
|
50
|
-
|
|
50
|
+
- **Cheap finders, strong refuters.** Finders can run cheap when a
|
|
51
|
+
missed finding is affordable: refuters test what was reported, not
|
|
52
|
+
what was missed. Refuters run at the finder's tier or higher, and no
|
|
53
|
+
lower than mid, from another family ([models](models.md#checkers)).
|
|
51
54
|
- **No findings is a result.** A slice that finds nothing closes with
|
|
52
55
|
that in its note; do not re-run it until it finds something.
|
|
@@ -45,7 +45,8 @@ mu task claim t1 -w big --for worker-1 --evidence 'remote on dev'
|
|
|
45
45
|
mu agent send worker-1 -w big --fresh '...'
|
|
46
46
|
|
|
47
47
|
# 5. WAIT: pi: mu agent wait worker-1 -w big --after-runs <send's runs> --json,
|
|
48
|
-
# then the claim's Next: once
|
|
48
|
+
# then the claim's Next: once, after the worker reports done.
|
|
49
|
+
# non-pi: the same, once per reported-done turn
|
|
49
50
|
|
|
50
51
|
# 6. COLLECT: fetch straight from the remote worktree
|
|
51
52
|
git fetch "ssh://dev/~/ws/worker-1" HEAD && git cherry-pick FETCH_HEAD
|
|
@@ -89,15 +90,15 @@ plus a 10 s cache.
|
|
|
89
90
|
|
|
90
91
|
### Step 5: poll once per turn
|
|
91
92
|
|
|
92
|
-
The claim's `Next:` mule poll
|
|
93
|
-
the
|
|
93
|
+
The claim's `Next:` mule poll closes the task as done on any change of
|
|
94
|
+
the remote HEAD. Run it once, only after the worker reports done (its
|
|
95
|
+
close or final answer). For a pi worker, first block on
|
|
94
96
|
`mu agent wait <name> --after-runs <runs> --json`, with `runs` from
|
|
95
|
-
`mu agent send --json`. It settles exactly over the forwarded socket
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
the worker asks a question, run `Next:` anyway.
|
|
97
|
+
`mu agent send --json`. It settles exactly over the forwarded socket,
|
|
98
|
+
and it returns at once for a run that settled before the wait started.
|
|
99
|
+
Pass `<runs>` unchanged. On exit 5 (timeout), or on a wait that returns
|
|
100
|
+
while the worker asks a question, do not poll: read the pane
|
|
101
|
+
(`mu agent read <name> -n 20`) and answer.
|
|
101
102
|
|
|
102
103
|
- Never `sleep` in a tool call. Aborting the loop can leave remote work
|
|
103
104
|
and a capped channel running.
|
|
@@ -122,11 +123,16 @@ there with its warm dependencies:
|
|
|
122
123
|
|
|
123
124
|
```bash
|
|
124
125
|
git cherry-pick <sha>
|
|
125
|
-
git push -q "ssh://dev/~/hacking/<repo>.git" HEAD:refs/heads/
|
|
126
|
-
mule run --cwd ~/hacking/<checkout> --wait \
|
|
127
|
-
'git fetch -q origin && git
|
|
126
|
+
git push -q "ssh://dev/~/hacking/<repo>.git" HEAD:refs/heads/gate-tmp
|
|
127
|
+
mule run --cwd ~/hacking/<gate-checkout> --wait \
|
|
128
|
+
'git fetch -q origin gate-tmp && git checkout -q --detach FETCH_HEAD && npm run check'
|
|
128
129
|
```
|
|
129
130
|
|
|
131
|
+
`<gate-checkout>` is a scratch checkout or worktree used only for
|
|
132
|
+
gates, never one holding work. Push to a temporary ref, never `main`;
|
|
133
|
+
delete it afterwards (`git push origin :gate-tmp`). Push to `main` only
|
|
134
|
+
after the gate passes.
|
|
135
|
+
|
|
130
136
|
`--wait` exits with the suite's code. A bare ssh would hold the capped
|
|
131
137
|
channel for minutes. Keep two gates local: platform-sensitive tests (macOS `ps` returns argv,
|
|
132
138
|
Linux `ps -e` appends the environment, and a real bug lived there), and
|
|
@@ -307,8 +313,10 @@ command but cannot serve `git fetch`.
|
|
|
307
313
|
et dev # or your site's wrapper, such as `x2ssh -et dev`
|
|
308
314
|
```
|
|
309
315
|
|
|
310
|
-
An aborted `et` or `x2ssh` leaves local processes behind.
|
|
311
|
-
`
|
|
316
|
+
An aborted `et` or `x2ssh` leaves local processes behind. Find them
|
|
317
|
+
with `ps -o pid=,command= -ax | grep "[x]2ssh"` and kill only those of
|
|
318
|
+
the aborted invocation (match its host or tty), not every x2ssh, before
|
|
319
|
+
retrying.
|
|
312
320
|
|
|
313
321
|
On a capped host: ET for you, mule for tooling, detached tmux for mu
|
|
314
322
|
agents. None of them competes for the slot.
|
|
@@ -56,8 +56,9 @@ triage and the umbrella closes with `--if-ready` (workstream mode).
|
|
|
56
56
|
|
|
57
57
|
- **Reviewers padding the list.** A panel that always finds ten things
|
|
58
58
|
is guessing.
|
|
59
|
-
- **Vary
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
- **Vary families across angles, not tiers.** Every reviewer is at the
|
|
60
|
+
author's tier or higher ([models](models.md#checkers)); one model's
|
|
61
|
+
blind spot repeated five times is still one blind spot. Pass `model`
|
|
62
|
+
to `mu_delegate`.
|
|
62
63
|
- **The panel is not the gate command.** Merge verification still runs on the
|
|
63
64
|
merged tree ([orchestrator-loop](orchestrator-loop.md#merging)).
|
|
@@ -28,22 +28,23 @@ rules are findings: [findings](findings.md) says where they live.
|
|
|
28
28
|
2. **Pin the target**: the diff, branch, or PR, as in
|
|
29
29
|
[review-panel](review-panel.md) step 1.
|
|
30
30
|
3. **One checker per rule**, as a [delegate call](tasks-or-calls.md#delegate-call)
|
|
31
|
-
The checker gets one rule and the diff
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
The checker gets one rule and the diff. Delegate mode: end the answer
|
|
32
|
+
with `FINDING: … r7 …` lines. Workstream mode: one triage task per
|
|
33
|
+
violation ([findings § Record](findings.md#record); title
|
|
34
|
+
`<severity>: r7 <what>`). With no violation it reports `r7: no violations` with what it
|
|
34
35
|
looked at. One rule per checker keeps it from skimming; batch under
|
|
35
36
|
the cap ([orchestrator-loop § Concurrency](orchestrator-loop.md#concurrency)).
|
|
36
|
-
4. **A skeptic pass** over the
|
|
37
|
+
4. **A skeptic pass** over the findings, also a delegate call: one fresh agent reads each flagged
|
|
37
38
|
line and the rule, and drops false positives (the rule does not
|
|
38
39
|
apply here, the code already complies, the rule has a stated
|
|
39
|
-
exception). In workstream mode, a dropped
|
|
40
|
+
exception). In workstream mode, a dropped finding is
|
|
40
41
|
`close --as rejected --why "<why the rule does not bite here>"`; a
|
|
41
42
|
confirmed one is accepted with `--evidence` naming the flagged line
|
|
42
43
|
([findings § Triage](findings.md#triage) step 3; quoting:
|
|
43
44
|
[brief § Quoting](brief.md#quoting)).
|
|
44
45
|
5. **Report or fix** confirmed violations, as in review-panel step 5.
|
|
45
46
|
|
|
46
|
-
Done when every rule from step 1 has a checker result, and every
|
|
47
|
+
Done when every rule from step 1 has a checker result, and every finding
|
|
47
48
|
is decided.
|
|
48
49
|
|
|
49
50
|
## Mine: rules you keep stating but never wrote
|
|
@@ -7,7 +7,8 @@ hundreds of tasks and a workstream nobody wanted.
|
|
|
7
7
|
|
|
8
8
|
## Delegate call
|
|
9
9
|
|
|
10
|
-
A **delegate call** is one `mu_delegate` tool call in pi
|
|
10
|
+
A **delegate call** is one `mu_delegate` tool call in pi, or outside pi
|
|
11
|
+
a `scratch` spawn + `send --fresh` + `wait --after-runs` (below).
|
|
11
12
|
|
|
12
13
|
- **It starts empty.** The brief carries everything: the finding or
|
|
13
14
|
claim, file paths, the criteria, and the answer to end with. See
|
|
@@ -80,9 +81,9 @@ Before a wave, count what it will add: units + gates + expected
|
|
|
80
81
|
findings. If the count is more than a few hundred for one change, the
|
|
81
82
|
steps that only check things are probably tasks by mistake.
|
|
82
83
|
|
|
83
|
-
|
|
84
|
-
up to four times the cap; see
|
|
85
|
-
[orchestrator-loop § Concurrency](orchestrator-loop.md#concurrency).
|
|
84
|
+
Cap and queue: [orchestrator-loop § Concurrency](orchestrator-loop.md#concurrency).
|
|
86
85
|
|
|
87
86
|
Done when every agent a recipe step spawns is either a task in the DAG
|
|
88
|
-
or a delegate call whose
|
|
87
|
+
or a delegate call whose answer landed where its step says: a
|
|
88
|
+
`REFUTER` note on the task it judged, a `WINNER` line in the umbrella's
|
|
89
|
+
note, or a unit list in the umbrella's note.
|
|
@@ -35,7 +35,10 @@ final check passed.
|
|
|
35
35
|
- **Position bias.** Judges favour the first candidate shown. For close
|
|
36
36
|
calls, judge the pair twice with the order swapped; a split decision
|
|
37
37
|
goes to a third judge.
|
|
38
|
-
- **Same model, same taste.** Vary the
|
|
39
|
-
model that made no attempt
|
|
38
|
+
- **Same model, same taste.** Vary the attempts across families at the
|
|
39
|
+
same tier, and judge with a model that made no attempt, at that tier
|
|
40
|
+
or above ([models](models.md#checkers)). A close final goes to a
|
|
41
|
+
frontier judge, or with none available, the strongest model from a
|
|
42
|
+
family that made no attempt.
|
|
40
43
|
- **Ranking many items** (tickets by severity): bucket them in parallel,
|
|
41
44
|
then run pairwise comparisons only within and across bucket edges.
|
|
@@ -44,7 +44,7 @@ and check, skip it.
|
|
|
44
44
|
of a loop are the one exception: add each when the last closes.
|
|
45
45
|
5. **Review every unit that ships.** Each commit-producing task gets a
|
|
46
46
|
review task ([adversarial-review](adversarial-review.md)) on a
|
|
47
|
-
[comparable model](
|
|
47
|
+
[comparable model](models.md#checkers). Every finding is a triage task,
|
|
48
48
|
refuted before it is accepted ([findings](findings.md)).
|
|
49
49
|
6. **Run the loop** ([orchestrator-loop](orchestrator-loop.md)): pipeline
|
|
50
50
|
merges, verify each merge, keep workers busy
|
|
@@ -58,7 +58,7 @@ and check, skip it.
|
|
|
58
58
|
Done when the umbrella is closed, its stop rule holds on the merged
|
|
59
59
|
tree, every shipped unit's latest review task is `CLOSED/done`
|
|
60
60
|
(ACCEPT), and
|
|
61
|
-
`mu task list --substate triage` is empty
|
|
61
|
+
`mu task list --substate triage` is empty.
|
|
62
62
|
|
|
63
63
|
## Budget
|
|
64
64
|
|
|
@@ -69,8 +69,10 @@ tree, every shipped unit's latest review task is `CLOSED/done`
|
|
|
69
69
|
survive, not a task per refuter and judge.
|
|
70
70
|
- The run gets its own workstream, `<project>-ut-<topic>`, torn down
|
|
71
71
|
when the umbrella closes ([recovery](recovery.md) before teardown).
|
|
72
|
-
-
|
|
73
|
-
|
|
72
|
+
- Tiers per phase ([models](models.md#roles)): cheap scouts and finds,
|
|
73
|
+
mid builds, strong plans and synthesizes; each checker at the tier of
|
|
74
|
+
whoever wrote what it checks, or higher, another family. Calibrate the
|
|
75
|
+
tier split on the slice, not only the cost.
|
|
74
76
|
- Calibrate on a slice: run the phase on a few units, check the result
|
|
75
77
|
and the cost, then fan out the rest.
|
|
76
78
|
|
|
@@ -12,6 +12,10 @@ acts on change. Run it in `scratch`, or in the workstream it serves.
|
|
|
12
12
|
3. **Wait with mu, not `sleep`.** `mu agent wait <names...> --first`
|
|
13
13
|
returns when an agent goes busy → idle.
|
|
14
14
|
|
|
15
|
+
A watcher runs cheap (hosted): polling and diffing a ledger line needs
|
|
16
|
+
no judgement. It hands anything that does to you or a stronger helper
|
|
17
|
+
([models](models.md#roles)).
|
|
18
|
+
|
|
15
19
|
The ledger survives a dead or fresh helper: a replacement reads the
|
|
16
20
|
last line and carries on. To act on new items (issues, alerts), see
|
|
17
21
|
[backlog-triage](backlog-triage.md).
|
|
@@ -4,8 +4,8 @@ Use when two or more workers edit the same repo at once. Every worker
|
|
|
4
4
|
runs in its own `--workspace`; this recipe decides what each one gets.
|
|
5
5
|
|
|
6
6
|
1. **Bucket by file cluster, not severity.** Two agents editing one
|
|
7
|
-
file conflict, whatever the priority.
|
|
8
|
-
|
|
7
|
+
file conflict, whatever the priority. Chain tasks that share files
|
|
8
|
+
(`mu task block B --by A`) so only one is ready at a time.
|
|
9
9
|
2. **Freeze only what conflicts.** Give idle workers tasks that avoid
|
|
10
10
|
the shared files. A blanket freeze idled four of five workers for a
|
|
11
11
|
day.
|
|
@@ -13,8 +13,9 @@ runs in its own `--workspace`; this recipe decides what each one gets.
|
|
|
13
13
|
verify the merged tree ([orchestrator-loop § Merging](orchestrator-loop.md#merging));
|
|
14
14
|
never wait for the whole wave.
|
|
15
15
|
4. **Refresh before each dispatch.** `mu workspace refresh <agent>`
|
|
16
|
-
rebases onto
|
|
17
|
-
|
|
16
|
+
rebases onto the tracked main (git: `origin/HEAD`, so unpushed local
|
|
17
|
+
merges are missed; pass `--from <local-branch>` to include them) and
|
|
18
|
+
keeps the agent's context; run it before every `--fresh` send.
|
|
18
19
|
|
|
19
20
|
Done when every task in the wave is `CLOSED/done`, merged, and the
|
|
20
21
|
merged tree passes the gate command.
|
|
@@ -13,7 +13,7 @@ mu me
|
|
|
13
13
|
mu me next
|
|
14
14
|
mu task show <id>; mu task notes <id>
|
|
15
15
|
mu task claim <id> --evidence "starting; read notes"
|
|
16
|
-
mu task note <id> "FILES: ...\nDECISION: ...\nVERIFIED: ..."
|
|
16
|
+
mu task note <id> "FILES: ...\nCOMMANDS: ... (exit codes)\nDECISION: ...\nVERIFIED: ..."
|
|
17
17
|
mu task close <id> --evidence "tests pass: ..." # LAST action
|
|
18
18
|
```
|
|
19
19
|
|
|
@@ -23,5 +23,5 @@ you only between tool calls. Commit before you close: the orchestrator cherry-pi
|
|
|
23
23
|
review or audit task records each problem per
|
|
24
24
|
[findings § Record](findings.md#record).
|
|
25
25
|
|
|
26
|
-
Done when the task
|
|
26
|
+
Done when your changes are committed in the workspace, the task note holds FILES, COMMANDS (with exit codes) and VERIFIED, and `mu task close` succeeded as your last action. Skipping close makes the orchestrator's
|
|
27
27
|
wait hang. Won't do it: `close --as wontfix --why "..."`.
|