pi-herdr-agents 1.3.0 → 1.4.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/AGENTS.md +1 -1
- package/CHANGELOG.md +19 -1
- package/README.md +23 -15
- package/docs/adr/0002-agent-workflow-skill-runtime-taxonomy.md +3 -1
- package/docs/worktree-subagents.md +10 -0
- package/package.json +1 -1
- package/pi-extension/subagents/index.ts +15 -8
- package/pi-extension/subagents/plan-skill.md +16 -0
- package/pi-extension/subagents/runtime-routing.ts +2 -2
- package/skills/orchestrate/SKILL.md +8 -1
package/AGENTS.md
CHANGED
|
@@ -55,7 +55,7 @@ Read [`docs/worktree-subagents.md`](docs/worktree-subagents.md) before changing
|
|
|
55
55
|
## Orchestration guidance
|
|
56
56
|
|
|
57
57
|
- Use ordinary panes for read-only scouts and reviewers.
|
|
58
|
-
-
|
|
58
|
+
- A single or sequential writer can work in the parent checkout; reserve unique worktree branches for independent parallel writing tasks.
|
|
59
59
|
- Keep overlapping or dependent writing tasks sequential unless the dependency is committed and used as the next exact base.
|
|
60
60
|
- Tell worktree workers whether to commit. A good default is: edit, test, commit, report the SHA, and do not push/merge/remove.
|
|
61
61
|
- The parent owns review, integration, publication, and cleanup.
|
package/CHANGELOG.md
CHANGED
|
@@ -7,11 +7,29 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
|
9
9
|
|
|
10
|
-
## [v1.
|
|
10
|
+
## [v1.4.0](https://github.com/giuseppecrj/pi-herdr-agents/compare/v1.3.1...v1.4.0)
|
|
11
|
+
|
|
12
|
+
### Commits
|
|
13
|
+
|
|
14
|
+
- test: disable commit signing in git fixtures [`c87e20d`](https://github.com/giuseppecrj/pi-herdr-agents/commit/c87e20dd3d4d7ff058b555759904de36bf881875)
|
|
15
|
+
- feat: state the coordinator contract in always-visible guidelines [`08b1dc6`](https://github.com/giuseppecrj/pi-herdr-agents/commit/08b1dc6ffdfbb4ef03289b0871cc4fbc48883032)
|
|
16
|
+
- fix: stop implying every writing subagent needs a worktree [`114c239`](https://github.com/giuseppecrj/pi-herdr-agents/commit/114c239f71666a8a9c9a2c8705197b70c5f4e7a2)
|
|
17
|
+
- fix: point reviewers of worktree results at the retained worktree path [`4d84718`](https://github.com/giuseppecrj/pi-herdr-agents/commit/4d84718ada823eba830195e865c327155f37a8dd)
|
|
18
|
+
|
|
19
|
+
## [v1.3.1](https://github.com/giuseppecrj/pi-herdr-agents/compare/v1.3.0...v1.3.1) - 2026-08-29
|
|
20
|
+
|
|
21
|
+
### Commits
|
|
22
|
+
|
|
23
|
+
- fix: recommend tier-first model selection over parent inheritance [`c86e002`](https://github.com/giuseppecrj/pi-herdr-agents/commit/c86e0027d857f3b31c8a9925789baf56203e5bba)
|
|
24
|
+
- docs: align remaining spawn examples with tier-first policy [`776f656`](https://github.com/giuseppecrj/pi-herdr-agents/commit/776f656419f8afe8a998705803cb2d1889218b97)
|
|
25
|
+
- chore: release v1.3.1 [`79fce1f`](https://github.com/giuseppecrj/pi-herdr-agents/commit/79fce1fd88717c9d7b15701939bb649bbdefb05b)
|
|
26
|
+
|
|
27
|
+
## [v1.3.0](https://github.com/giuseppecrj/pi-herdr-agents/compare/v1.2.3...v1.3.0) - 2026-08-18
|
|
11
28
|
|
|
12
29
|
### Commits
|
|
13
30
|
|
|
14
31
|
- feat: identify workflow review nodes [`6919ab1`](https://github.com/giuseppecrj/pi-herdr-agents/commit/6919ab1c655f0e6c50944011889df14800cf2021)
|
|
32
|
+
- chore: release v1.3.0 [`36c8187`](https://github.com/giuseppecrj/pi-herdr-agents/commit/36c8187098e24f3d65dc309e19ccd44e6432f8ce)
|
|
15
33
|
|
|
16
34
|
## [v1.2.3](https://github.com/giuseppecrj/pi-herdr-agents/compare/v1.2.2...v1.2.3) - 2026-08-18
|
|
17
35
|
|
package/README.md
CHANGED
|
@@ -71,12 +71,12 @@ For an isolated writing task:
|
|
|
71
71
|
Pi can also call the tool directly:
|
|
72
72
|
|
|
73
73
|
```typescript
|
|
74
|
-
subagent({ name: "Auth scout", agent: "scout", task: "Map the authentication flow" });
|
|
75
|
-
subagent({ name: "DB scout", agent: "scout", task: "Map the session schema" });
|
|
74
|
+
subagent({ name: "Auth scout", agent: "scout", model: "<provider>/<fast-tier-id>", thinking: "low", task: "Map the authentication flow" });
|
|
75
|
+
subagent({ name: "DB scout", agent: "scout", model: "<provider>/<fast-tier-id>", thinking: "low", task: "Map the session schema" });
|
|
76
76
|
// Both return immediately; each result comes back independently.
|
|
77
77
|
```
|
|
78
78
|
|
|
79
|
-
Use ordinary panes for read-only agents.
|
|
79
|
+
Use ordinary panes for read-only agents. A single or sequential writer can work in the parent checkout; give each parallel independent writing agent a unique managed worktree. See [Worktree subagents](docs/worktree-subagents.md).
|
|
80
80
|
|
|
81
81
|
## How it works
|
|
82
82
|
|
|
@@ -197,9 +197,15 @@ This package does not install optional prerequisites.
|
|
|
197
197
|
|
|
198
198
|
Bundled agents use model defaults from `config.json` when configured; otherwise
|
|
199
199
|
they inherit the parent model. Thinking defaults still come from agent
|
|
200
|
-
frontmatter or the parent level.
|
|
201
|
-
|
|
202
|
-
|
|
200
|
+
frontmatter or the parent level. This resolution chain remains available as a
|
|
201
|
+
fallback, but orchestrators should explicitly set each child's exact
|
|
202
|
+
authenticated `provider/model-id` and supported thinking level. Select the
|
|
203
|
+
model tier first: fast for bounded mechanical work and recon, mid for ordinary
|
|
204
|
+
implementation or review, and frontier for architecture, security, hard
|
|
205
|
+
diagnosis, or adversarial review. Then select thinking within that model's
|
|
206
|
+
supported range. Independent reviewers must use a different provider/family
|
|
207
|
+
than the model that produced the work; a stronger model in the same family is a
|
|
208
|
+
quality escalation, not independent review.
|
|
203
209
|
|
|
204
210
|
Discovery loads definitions in **package → global → project** order, so effective
|
|
205
211
|
priority remains **project** (`.pi/agents/`) > **global**
|
|
@@ -340,22 +346,24 @@ status and model configuration are loaded when the extension starts.
|
|
|
340
346
|
## Spawning Subagents
|
|
341
347
|
|
|
342
348
|
```typescript
|
|
343
|
-
//
|
|
344
|
-
subagent({ name: "Scout", agent: "scout", task: "Analyze the codebase..." });
|
|
349
|
+
// Explicit fast-tier runtime for bounded reconnaissance
|
|
350
|
+
subagent({ name: "Scout", agent: "scout", model: "<provider>/<fast-tier-id>", thinking: "low", task: "Analyze the codebase..." });
|
|
345
351
|
|
|
346
352
|
// Force a full-context fork for this spawn
|
|
347
|
-
subagent({ name: "Iterate", fork: true, task: "Fix the bug where..." });
|
|
353
|
+
subagent({ name: "Iterate", fork: true, model: "<provider>/<mid-tier-id>", thinking: "medium", task: "Fix the bug where..." });
|
|
348
354
|
|
|
349
|
-
//
|
|
350
|
-
subagent({ name: "Planner", agent: "planner", task: "Work through the design with me" });
|
|
355
|
+
// Explicit frontier-tier runtime for architecture work
|
|
356
|
+
subagent({ name: "Planner", agent: "planner", model: "<provider>/<frontier-tier-id>", thinking: "high", task: "Work through the design with me" });
|
|
351
357
|
|
|
352
|
-
//
|
|
353
|
-
subagent({ name: "Designer", agent: "game-designer", cwd: "agents/game-designer", task: "..." });
|
|
358
|
+
// Explicit mid-tier runtime with a custom working directory
|
|
359
|
+
subagent({ name: "Designer", agent: "game-designer", model: "<provider>/<mid-tier-id>", thinking: "medium", cwd: "agents/game-designer", task: "..." });
|
|
354
360
|
|
|
355
361
|
// Isolated ticket branch in a Herdr-managed Git worktree
|
|
356
362
|
subagent({
|
|
357
363
|
name: "Ticket 123",
|
|
358
364
|
agent: "worker",
|
|
365
|
+
model: "<provider>/<mid-tier-id>",
|
|
366
|
+
thinking: "medium",
|
|
359
367
|
worktree: { branch: "ticket/123", base: "main" },
|
|
360
368
|
task: "Implement ticket 123, test it, and commit the result",
|
|
361
369
|
});
|
|
@@ -371,7 +379,7 @@ subagent({
|
|
|
371
379
|
| `fork` | boolean | `false` | Force the full-context fork mode for this spawn, overriding any agent `session-mode` frontmatter |
|
|
372
380
|
| `interactive` | boolean | derived | Mark this spawn as interactive (don't wake the parent on stall/recovery). Defaults to the agent's `interactive` frontmatter, otherwise the inverse of `auto-exit`. |
|
|
373
381
|
| `model` | string | configured or parent | Exact authenticated `provider/model-id`, or an ordered comma-separated Pi fallback list; fallback lists are unavailable for worktree spawns. Resolution is tool argument → agent frontmatter → per-agent config → global config → parent |
|
|
374
|
-
| `thinking` | string | parent level |
|
|
382
|
+
| `thinking` | string | parent level | Pick the model tier first, then set thinking within that model's range: minimal/low for bounded mechanical work, medium for ordinary implementation or review, high+ for architecture, security, or hard diagnosis. Omitting still inherits the parent level; this is a discouraged fallback for orchestrated children. |
|
|
375
383
|
| `systemPrompt` | string | — | Role/system-prompt text for a bare spawn; named agents keep their definition body |
|
|
376
384
|
| `skills` | string | — | Comma-separated skill names |
|
|
377
385
|
| `tools` | string | — | Comma-separated tool names |
|
|
@@ -389,7 +397,7 @@ prompts, handoffs, and results.
|
|
|
389
397
|
|
|
390
398
|
### Isolated worktree runs
|
|
391
399
|
|
|
392
|
-
Use one worktree per independent writing task;
|
|
400
|
+
Use one worktree per parallel independent writing task; a single or sequential writer can work in the parent checkout, and read-only agents use ordinary panes. `cwd` selects the source Git repository, `branch` must be unique, and `base` is resolved to an exact commit before creation. If `base` is omitted, the source checkout's committed `HEAD` is used. Parent-checkout changes that have not been committed are not copied.
|
|
393
401
|
|
|
394
402
|
A launch with `worktree` and an effective bundled `scout`, `reviewer`, or `adversarial-reviewer` returns a non-blocking warning. Scouts and reviewers normally need an ordinary pane; the adversarial reviewer is a coordinator that uses an ordinary pane for its child reviewers. To inspect or review an existing worker result, start an ordinary child in that retained worktree path. Project or global role overrides do not receive these bundled-role warnings.
|
|
395
403
|
|
|
@@ -132,7 +132,9 @@ the package's `/plan` workflow, not as a second kind of subagent definition.
|
|
|
132
132
|
A role describes the work; a runtime describes which authenticated Pi
|
|
133
133
|
provider/model and thinking level one invocation uses. The model-resolution
|
|
134
134
|
chain is explicit invocation choice, agent default, per-agent configuration,
|
|
135
|
-
global configuration, then the parent model.
|
|
135
|
+
global configuration, then the parent model. Inheritance is the resolver fallback,
|
|
136
|
+
not the orchestrator default; independent review requires a different
|
|
137
|
+
provider/family than the model that produced the work.
|
|
136
138
|
|
|
137
139
|
Apply these rules:
|
|
138
140
|
|
|
@@ -10,6 +10,8 @@ Run Pi inside Herdr from a Git checkout, then give each independent writing task
|
|
|
10
10
|
subagent({
|
|
11
11
|
name: "Ticket 123",
|
|
12
12
|
agent: "worker",
|
|
13
|
+
model: "<worker-provider>/<mid-tier-id>",
|
|
14
|
+
thinking: "medium",
|
|
13
15
|
cwd: "/path/to/repository",
|
|
14
16
|
worktree: { branch: "ticket/123", base: "main" },
|
|
15
17
|
task: "Implement ticket 123, run its tests, commit the result, and report the commit SHA. Do not push, merge, or remove the worktree.",
|
|
@@ -28,6 +30,8 @@ Use an ordinary subagent pane instead when the task is read-only, interactive, o
|
|
|
28
30
|
subagent({
|
|
29
31
|
name: "Scout auth",
|
|
30
32
|
agent: "scout",
|
|
33
|
+
model: "<scout-provider>/<fast-tier-id>",
|
|
34
|
+
thinking: "low",
|
|
31
35
|
task: "Map the auth flow; do not modify files.",
|
|
32
36
|
});
|
|
33
37
|
```
|
|
@@ -70,6 +74,8 @@ Independent tasks can launch concurrently from the same committed base:
|
|
|
70
74
|
subagent({
|
|
71
75
|
name: "API ticket",
|
|
72
76
|
agent: "worker",
|
|
77
|
+
model: "<worker-provider>/<mid-tier-id>",
|
|
78
|
+
thinking: "medium",
|
|
73
79
|
worktree: { branch: "tickets/api", base: "main" },
|
|
74
80
|
task: "Implement the API ticket, test it, and commit. Do not push or merge.",
|
|
75
81
|
});
|
|
@@ -77,6 +83,8 @@ subagent({
|
|
|
77
83
|
subagent({
|
|
78
84
|
name: "UI ticket",
|
|
79
85
|
agent: "worker",
|
|
86
|
+
model: "<worker-provider>/<mid-tier-id>",
|
|
87
|
+
thinking: "medium",
|
|
80
88
|
worktree: { branch: "tickets/ui", base: "main" },
|
|
81
89
|
task: "Implement the UI ticket, test it, and commit. Do not push or merge.",
|
|
82
90
|
});
|
|
@@ -138,6 +146,8 @@ For parallel read-only review, prepare one stable existing checkout of the pull
|
|
|
138
146
|
subagent({
|
|
139
147
|
name: "PR reviewer",
|
|
140
148
|
agent: "reviewer",
|
|
149
|
+
model: "<review-provider>/<mid-tier-id>",
|
|
150
|
+
thinking: "medium",
|
|
141
151
|
cwd: "/path/to/pr-checkout",
|
|
142
152
|
task: "Review base <base-sha> through head <head-sha>. First report git rev-parse HEAD. Do not modify files.",
|
|
143
153
|
});
|
package/package.json
CHANGED
|
@@ -169,10 +169,13 @@ function getFirstText(
|
|
|
169
169
|
|
|
170
170
|
function buildSubagentRoutingGuidelines(catalog?: string): string[] {
|
|
171
171
|
return [
|
|
172
|
-
"
|
|
173
|
-
"
|
|
174
|
-
"
|
|
175
|
-
"
|
|
172
|
+
"Act as the coordinator: decompose the work, give each child one bounded outcome — goal, allowed files, verification, and whether to commit — and keep dependent writes sequential; parallelize only independent tasks.",
|
|
173
|
+
"Children are leaves by default: they do not push, merge, deploy, or orchestrate further agents unless their task explicitly authorizes it. The parent inspects each result or worktree handoff (diff against the reported base, run relevant tests) and owns integration, verification, and cleanup.",
|
|
174
|
+
"For orchestrated subagent work, explicitly set both model and thinking for every child: first choose a fast, mid, or frontier provider-family tier matched to task complexity, then set thinking within that model's supported range.",
|
|
175
|
+
"Use fast tier for bounded mechanical work and recon, mid tier for ordinary implementation or review, and frontier tier for architecture, security, hard diagnosis, or adversarial review. Use minimal/low thinking for mechanical work, medium for ordinary work, and high+ for hard work.",
|
|
176
|
+
"Review agents must use a different provider/family than the model that produced the work; a stronger model in the same family is quality escalation, not independent review. Use an exact authenticated provider/model-id from the live catalog below, never an alias or fuzzy name.",
|
|
177
|
+
"Omitting model and thinking still inherits the parent runtime, but this is a discouraged fallback for orchestrated children.",
|
|
178
|
+
"Before launching a new group of subagents, choose a short task slug and name each new child <task>-<role>[-n], for example login-api or login-test2. Use only plan, research, ui, api, build, test, review, browser, security, perf, or merge as roles; leave existing names unchanged. After the final launch, print name | agent kind | role | model | worktree (if any), then use each name in prompts, handoffs, and results.",
|
|
176
179
|
catalog ??
|
|
177
180
|
"Authenticated subagent model catalog becomes available after session start.",
|
|
178
181
|
];
|
|
@@ -184,7 +187,7 @@ const ThinkingLevelSchema = Type.Union(
|
|
|
184
187
|
THINKING_LEVELS.map((level) => Type.Literal(level)),
|
|
185
188
|
{
|
|
186
189
|
description:
|
|
187
|
-
"Pi thinking level.
|
|
190
|
+
"Pi thinking level. Pick the model tier first, then set thinking within that model's range: minimal/low for bounded mechanical work, medium for ordinary implementation or review, high+ for architecture, security, or hard diagnosis. Omitting still inherits the parent level; do not omit on orchestrated child work.",
|
|
188
191
|
},
|
|
189
192
|
);
|
|
190
193
|
|
|
@@ -209,7 +212,7 @@ const SubagentParams = Type.Object({
|
|
|
209
212
|
model: Type.Optional(
|
|
210
213
|
Type.String({
|
|
211
214
|
description:
|
|
212
|
-
"
|
|
215
|
+
"Explicitly pick an exact authenticated provider/model-id in a fast, mid, or frontier provider-family tier matched to the task, or use an ordered comma-separated fallback list. Review must use a different provider/family than the producing model. Omitting still inherits the parent model; do not omit for orchestrated children. Fallbacks are Pi-backed only and cannot be used with worktrees.",
|
|
213
216
|
}),
|
|
214
217
|
),
|
|
215
218
|
thinking: Type.Optional(ThinkingLevelSchema),
|
|
@@ -3054,8 +3057,10 @@ export default function subagentsExtension(pi: ExtensionAPI) {
|
|
|
3054
3057
|
label: "Subagent",
|
|
3055
3058
|
description:
|
|
3056
3059
|
"Spawn a sub-agent in a dedicated terminal herdr pane, or in an isolated Herdr-managed Git worktree when worktree is provided. " +
|
|
3057
|
-
"Use
|
|
3060
|
+
"Use ordinary panes for read-only tasks; a single or sequential writer can work in the parent checkout without a worktree. " +
|
|
3061
|
+
"Reserve unique worktree branches for parallel independent writers starting from committed state — the worktree base is committed HEAD, so uncommitted parent changes are not copied. " +
|
|
3058
3062
|
"Worktree runs retain their workspace after completion for parent review; they are not pushed, merged, or removed automatically. " +
|
|
3063
|
+
"To inspect a retained worktree result, spawn read-only agents in an ordinary pane with cwd set to that worktree path — do not create a new worktree for them. " +
|
|
3059
3064
|
"This is a fire-and-forget async tool: the call returns immediately with only an acknowledgement. " +
|
|
3060
3065
|
"When the sub-agent finishes, the harness AUTOMATICALLY delivers its result as a steer message that wakes you up and starts a new turn — you do not need to do anything to receive it. " +
|
|
3061
3066
|
"DO NOT write polling loops, sleep/wait commands, tail/watch scripts, or repeatedly read session/log files to detect completion. DO NOT call subagents_list or any other tool to 'check' status. All of that is wasted work — the harness handles delivery for you. " +
|
|
@@ -3063,8 +3068,10 @@ export default function subagentsExtension(pi: ExtensionAPI) {
|
|
|
3063
3068
|
"After spawning, either end your turn immediately, or work on other independent tasks (including spawning more subagents in parallel). The harness will wake you with the result when it is ready.",
|
|
3064
3069
|
promptSnippet:
|
|
3065
3070
|
"Spawn a sub-agent in a dedicated terminal herdr pane, or in an isolated Herdr-managed Git worktree when worktree is provided. " +
|
|
3066
|
-
"Use
|
|
3071
|
+
"Use ordinary panes for read-only tasks; a single or sequential writer can work in the parent checkout without a worktree. " +
|
|
3072
|
+
"Reserve unique worktree branches for parallel independent writers starting from committed state — the worktree base is committed HEAD, so uncommitted parent changes are not copied. " +
|
|
3067
3073
|
"Worktree runs retain their workspace after completion for parent review; they are not pushed, merged, or removed automatically. " +
|
|
3074
|
+
"To inspect a retained worktree result, spawn read-only agents in an ordinary pane with cwd set to that worktree path — do not create a new worktree for them. " +
|
|
3068
3075
|
"This is a fire-and-forget async tool: the call returns immediately with only an acknowledgement. " +
|
|
3069
3076
|
"When the sub-agent finishes, the harness AUTOMATICALLY delivers its result as a steer message that wakes you up and starts a new turn — you do not need to do anything to receive it. " +
|
|
3070
3077
|
"DO NOT write polling loops, sleep/wait commands, tail/watch scripts, or repeatedly read session/log files to detect completion. DO NOT call subagents_list or any other tool to 'check' status. All of that is wasted work — the harness handles delivery for you. " +
|
|
@@ -38,6 +38,10 @@ Phase 7: Review
|
|
|
38
38
|
|
|
39
39
|
---
|
|
40
40
|
|
|
41
|
+
## Runtime
|
|
42
|
+
|
|
43
|
+
Set `model` and `thinking` on every spawn. Use an exact authenticated provider/model ID: a fast-tier model for scouts, a mid-tier model for ordinary workers, and a frontier-tier model only for architecture or hard diagnosis. Reviewers must use a different provider/family than workers. Do not omit `model` in this workflow.
|
|
44
|
+
|
|
41
45
|
## Fire-and-forget completion
|
|
42
46
|
|
|
43
47
|
`subagent` is fire-and-forget. After each spawn:
|
|
@@ -83,6 +87,8 @@ Standard filenames:
|
|
|
83
87
|
subagent({
|
|
84
88
|
name: "🔍 Scout",
|
|
85
89
|
agent: "scout",
|
|
90
|
+
model: "<scout-provider>/<fast-tier-id>",
|
|
91
|
+
thinking: "low",
|
|
86
92
|
task: `Analyze the codebase for [user's request area]. Map file structure, key modules, patterns, conventions, and existing code related to [feature area]. Focus on what a planner would need to understand before designing this feature.
|
|
87
93
|
|
|
88
94
|
Put your full findings in your final assistant message.`,
|
|
@@ -105,6 +111,8 @@ Spawn the interactive planner with the scout's context and the user's request. T
|
|
|
105
111
|
subagent({
|
|
106
112
|
name: "💬 Planner",
|
|
107
113
|
agent: "planner",
|
|
114
|
+
model: "<planner-provider>/<frontier-tier-id>",
|
|
115
|
+
thinking: "high",
|
|
108
116
|
interactive: true,
|
|
109
117
|
task: `Plan: [what the user wants to build]
|
|
110
118
|
|
|
@@ -132,6 +140,8 @@ If the planner significantly changed scope (new subsystems, areas the original s
|
|
|
132
140
|
subagent({
|
|
133
141
|
name: "🔍 Scout (updated scope)",
|
|
134
142
|
agent: "scout",
|
|
143
|
+
model: "<scout-provider>/<fast-tier-id>",
|
|
144
|
+
thinking: "low",
|
|
135
145
|
task: "The plan changed scope. Gather context for [new areas]. Read the plan at [plan path]. Focus on [specific files/modules the planner identified that weren't in the original scout]. Put findings in your final assistant message.",
|
|
136
146
|
});
|
|
137
147
|
```
|
|
@@ -171,6 +181,8 @@ Sequential example:
|
|
|
171
181
|
subagent({
|
|
172
182
|
name: "🔨 Worker 1/N",
|
|
173
183
|
agent: "worker",
|
|
184
|
+
model: "<worker-provider>/<mid-tier-id>",
|
|
185
|
+
thinking: "medium",
|
|
174
186
|
task: `Implement Task 1 from the plan.
|
|
175
187
|
|
|
176
188
|
Plan: [plan path]
|
|
@@ -187,6 +199,8 @@ For independent writing tasks, first ensure their shared base is committed. The
|
|
|
187
199
|
subagent({
|
|
188
200
|
name: "🔨 Task-1",
|
|
189
201
|
agent: "worker",
|
|
202
|
+
model: "<worker-provider>/<mid-tier-id>",
|
|
203
|
+
thinking: "medium",
|
|
190
204
|
cwd: "/absolute/path/to/source-repo",
|
|
191
205
|
worktree: { branch: "plan-name/task-1", base: "HEAD" },
|
|
192
206
|
task: `Implement Task 1.
|
|
@@ -229,6 +243,8 @@ After all shared-checkout changes and accepted worktree results are integrated:
|
|
|
229
243
|
subagent({
|
|
230
244
|
name: "Reviewer",
|
|
231
245
|
agent: "reviewer",
|
|
246
|
+
model: "<review-provider>/<mid-tier-id>",
|
|
247
|
+
thinking: "medium",
|
|
232
248
|
interactive: false,
|
|
233
249
|
task: "Review the recent changes. Plan: [plan path]. Put the full review in your final assistant message.",
|
|
234
250
|
});
|
|
@@ -336,12 +336,12 @@ export function buildAuthenticatedModelCatalog(
|
|
|
336
336
|
].filter(Boolean);
|
|
337
337
|
lines.push(`- ${model.provider}/${model.id} — ${facts.join(", ")}`);
|
|
338
338
|
}
|
|
339
|
-
if (models.length === 0) lines.push("- none discovered;
|
|
339
|
+
if (models.length === 0) lines.push("- none discovered; omitting model still inherits the parent runtime");
|
|
340
340
|
if (models.length > visibleModels.length) {
|
|
341
341
|
lines.push(`- … ${models.length - visibleModels.length} more authenticated models omitted`);
|
|
342
342
|
}
|
|
343
343
|
lines.push(
|
|
344
|
-
"
|
|
344
|
+
"For orchestrated children, explicitly select an exact provider/model-id by task tier first (fast for bounded mechanical work and recon, mid for ordinary implementation or review, frontier for architecture, security, hard diagnosis, or adversarial review), then set supported thinking. Reviews must use a different provider/family than the producing model. Omitting model and thinking inherits the parent runtime as a discouraged fallback.",
|
|
345
345
|
);
|
|
346
346
|
return lines.join("\n");
|
|
347
347
|
}
|
|
@@ -43,7 +43,14 @@ role. Every declared role must be Pi-backed and have a non-empty read-only tool
|
|
|
43
43
|
set after runner derivation. Use bounded caps no higher than `maxAgents: 8` and
|
|
44
44
|
`maxConcurrency: 4`; leave enough agent calls for one synthesizer and any
|
|
45
45
|
permitted replacement. Exact model and thinking are mandatory for every node.
|
|
46
|
-
|
|
46
|
+
Pick each node's exact authenticated `provider/model-id` by the tier matched to
|
|
47
|
+
its task: fast for bounded mechanical work and recon, mid for ordinary review,
|
|
48
|
+
and frontier for architecture or hard diagnosis. Then set thinking within that
|
|
49
|
+
model's supported range. When more than one provider is authenticated,
|
|
50
|
+
independent reviewer nodes must use a different provider/family than the model
|
|
51
|
+
that produced the work; do not reuse that family for its review. Never inherit,
|
|
52
|
+
guess, or fall back to a parent or role default. Do not add tier fields to
|
|
53
|
+
workflow metadata; each node continues to pin its exact provider/model.
|
|
47
54
|
|
|
48
55
|
The first flow is review-only. Do not plan writers, commits, worktrees for
|
|
49
56
|
writing, ticket changes, pull requests, merges, deployments, publishing,
|