@ferris1225/pi-subagents 4.1.7 → 4.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -15,9 +15,8 @@ Your main agent can send research to `explorer`, implementation to `worker`,
15
15
  intentional cleanup and duplicate-code consolidation to `cleaner`, documentation
16
16
  synchronization to `documenter`, and independent checks to `reviewer`. Each role
17
17
  runs in its own child process with a clean context, works in the background, and
18
- returns its result automatically. Active top-level work can be steered or
19
- retargeted; managed stages can be parked, resumed, stopped, or forked without
20
- losing retained context.
18
+ returns its result automatically. Settled or interrupted threads keep their
19
+ retained context across resumes, stops, and pi reloads or restarts.
21
20
 
22
21
  ```text
23
22
  You
@@ -27,7 +26,7 @@ You
27
26
  ├─ cleaner ──── cleans up ──┘ └─ NEEDED/missing → documenter
28
27
  ├─ documenter ─ explicit docs/comments task → deliver
29
28
  └─ reviewer ─── advisory report (no VERDICT), or managed gate
30
- └─ REVIEW_FAIL → worker → reviewer (bounded fix rounds)
29
+ └─ REVIEW_FAIL → worker → re-review (one round, then you decide)
31
30
 
32
31
  Worker and cleaner update existing docs/comments they directly affect. The stable
33
32
  parent returns one final result when its complete managed workflow settles.
@@ -66,9 +65,9 @@ more of it.
66
65
  | A basic launcher often gives you… | pi-subagents gives you… |
67
66
  | --- | --- |
68
67
  | One generic child role | Five focused engineering roles |
69
- | A one-shot prompt | Retained, steerable, resumable, forkable threads |
68
+ | A one-shot prompt | Retained, resumable threads that survive reloads |
70
69
  | Concurrent writers in one checkout | Git worktree isolation for parallel workers |
71
- | A review report you must act on manually | Independent worker/cleaner gate, bounded fix rounds, and conditional docs sync |
70
+ | A review report you must act on manually | Independent worker/cleaner gate, one bounded fix round, and conditional docs sync |
72
71
  | Manual polling or follow-up | Automatic result delivery that resumes the main agent |
73
72
  | A hard failure when the selected model is unavailable | Direct handoff to the current main model |
74
73
  | Synchronized retries during startup contention | Extended jittered backoff that reduces retry collisions |
@@ -154,7 +153,7 @@ guidance does this automatically when the main agent dispatches on your behalf.
154
153
 
155
154
  ### Tool, plugin, skill, and context inheritance
156
155
 
157
- Every initial dispatch, managed stage, retained resume, fork, startup retry,
156
+ Every initial dispatch, managed stage, retained resume, startup retry,
158
157
  and selected-to-main fallback snapshots the parent session's currently active
159
158
  tools. Roles without an explicit tool list (such as shipped `worker` and
160
159
  `cleaner`) inherit that complete set. An explicit role list remains its Pi
@@ -175,7 +174,7 @@ inside each child Pi process.
175
174
 
176
175
  Each child is an independent Pi session and uses Pi's normal global/project
177
176
  `compaction` settings. Auto-compaction therefore remains enabled by default when
178
- a child's model context approaches its limit. Retained resume/fork sessions keep
177
+ a child's model context approaches its limit. Retained resume sessions keep
179
178
  their existing conversation and compaction summaries instead of starting over.
180
179
 
181
180
  ## Everyday workflows
@@ -207,10 +206,13 @@ subagent({
207
206
  });
208
207
  ```
209
208
 
210
- Independent tasks run up to `maxConcurrency` (default `4`). One parallel call may
211
- contain at most that many tasks and is rejected if it exceeds the limit. Accepted
212
- background work from separate calls waits in the shared queue when all slots are
213
- busy.
209
+ Independent tasks run up to a fixed limit of `4` concurrent sub-agent processes.
210
+ One parallel call may contain at most that many tasks and is rejected if it
211
+ exceeds the limit. Accepted background work from separate calls waits in the
212
+ shared queue when all slots are busy. The limit protects manual dispatches only:
213
+ once a generation's top-level child settles and the runtime continues into its
214
+ own managed stages (gate review, auto-fix rounds, documentation sync), that
215
+ generation releases its slot, so long fix chains never starve new dispatches.
214
216
 
215
217
  ### Run an independent quality gate
216
218
 
@@ -245,8 +247,10 @@ cannot recursively start another chain. Gate reviewers keep documentation drift
245
247
  out of the code verdict while `documenter` is enabled by recording it under
246
248
  `## Documentation notes`; with documenter disabled, drift is a normal finding.
247
249
 
248
- `maxFixRounds` limits worker fix attempts only. The post-writer review gate still
249
- runs when it is `0`, and only a terminal `REVIEW_PASS` can decide whether docs
250
+ The loop is fixed at one worker fix round (the fix is re-reviewed once); anything
251
+ still unresolved is delivered back to the main window for the decision instead of
252
+ burning more rounds. Disabling the `worker` agent is the way to turn fixes off. The post-writer review gate still
253
+ runs regardless, and only a terminal `REVIEW_PASS` can decide whether docs
250
254
  sync is needed. Generic audits and read-only reviews are advisory: they omit
251
255
  `VERDICT` and documentation machine markers, remain read-only, and never trigger
252
256
  edits.
@@ -334,7 +338,7 @@ writer or documentation sync. Isolated agents keep doing model work in parallel,
334
338
  but their final apply waits for the same lane.
335
339
 
336
340
  Normal completion, stop, and shutdown share one finalization result, so isolated
337
- state is applied at most once. If park, stop, or shutdown wins after the top-level
341
+ state is applied at most once. If stop or shutdown wins after the top-level
338
342
  child settles, no downstream role starts and the stable top-level session remains
339
343
  the checkpoint. If setup or integration fails, pi-subagents keeps the useful
340
344
  patch or worktree when possible and records recovery information in:
@@ -343,8 +347,7 @@ patch or worktree when possible and records recovery information in:
343
347
  ~/.pi/agent/pi-subagents-recovery.json
344
348
  ```
345
349
 
346
- A parked isolated thread keeps its worktree. Resume continues there. Forking an
347
- isolated checkpoint is available after that checkpoint has settled and integrated.
350
+ A parked isolated thread keeps its worktree. Resume continues there.
348
351
 
349
352
  ## Follow, redirect, or stop a run
350
353
 
@@ -356,44 +359,73 @@ main agent.
356
359
 
357
360
  | Tool | What it does |
358
361
  | --- | --- |
359
- | `subagent_control` | `steer`, `retarget`, `park`, `resume`, or `fork` a logical thread. |
362
+ | `subagent_control` | `resume` a parked or settled logical thread with its retained context. |
360
363
  | `subagent_status` | Show active and recent runs, or return the full result for one id. |
361
364
  | `subagent_wait` | Look up a result in the current turn. It is non-blocking by default; use `timeoutMs` only when you must wait in-turn. |
362
- | `subagent_stop` | Destructively cancel work, deliver partial output, and retire that thread's retained session. Independent forks survive. |
365
+ | `subagent_stop` | Destructively cancel work, deliver partial output, and retire that thread's retained session. |
363
366
 
364
367
  ```ts
365
- subagent_control({ action: "steer", id: 7, instruction: "Check the Windows path too." });
366
- subagent_control({ action: "park", id: 7 });
368
+ subagent_control({ action: "resume", id: 7 });
367
369
  subagent_control({ action: "resume", id: 7, objective: "Finish the tests." });
368
- subagent_control({ action: "fork", id: 7, objective: "Try the smaller design instead." });
369
370
  ```
370
371
 
371
- Use `steer` or `retarget` only while the top-level RPC child is active. `steer`
372
- queues guidance without changing the displayed objective; `retarget` aborts that
373
- generation's objective and replaces it in the same session. During an automatic
374
- documenter, reviewer, or fix stage, use `park` or `stop`. `resume` without an
375
- `objective` continues the currently displayed goal; supplying one appends that
376
- explicit goal to the retained conversation and makes it the new displayed goal.
377
- It never clears prior context. `fork` follows the same objective rule on a copied
378
- branch while leaving its source unchanged. Widget labels distinguish retained,
379
- appended, retargeted, and forked objectives.
380
-
381
- Use `park` to preserve the newest active stage and release its process slot;
382
- parking during documentation retains the documenter's partial/session, not an
383
- older writer or review. A resumed logical run keeps cumulative active elapsed
384
- time across all generations while excluding the parked interval. Use `stop` only
385
- when you want to discard that thread's future continuation. Stop and session
386
- shutdown abort the active internal stage, suppress stale delivery, and leave
387
- worktree finalization to the same one-time lifecycle owner. `stop-all` interrupts
388
- every lane holder before waiting for finalization, avoiding self-deadlock when an
389
- isolated apply is queued behind shared work.
390
-
391
- Every control operation is bounded: park, stop, resume, and fork never wait
392
- indefinitely on a generation that is still settling (for example an isolated
393
- apply queued behind the managed repository lane). Stop proceeds after a bounded
394
- deadline once it owns the lifecycle, a still-running integration continues in the
395
- background, and a durable recovery record is persisted pointing at the retained
396
- worktree/patch so stopped work is never lost.
372
+ `resume` without an `objective` continues the currently displayed goal;
373
+ supplying one appends that explicit goal to the retained conversation and makes
374
+ it the new displayed goal. It never clears prior context, and a resumed logical
375
+ run keeps cumulative active elapsed time across all generations. Widget labels
376
+ distinguish retained and appended objectives.
377
+
378
+ Use `stop` only when you want to discard that thread's future continuation. Stop
379
+ and session shutdown abort the active internal stage, suppress stale delivery,
380
+ and leave worktree finalization to the same one-time lifecycle owner. `stop-all`
381
+ interrupts every lane holder before waiting for finalization, avoiding
382
+ self-deadlock when an isolated apply is queued behind shared work.
383
+
384
+ Every control operation is bounded: stop and resume never wait indefinitely on a
385
+ generation that is still settling (for example an isolated apply queued behind
386
+ the managed repository lane). Stop proceeds after a bounded deadline once it owns
387
+ the lifecycle, a still-running integration continues in the background, and a
388
+ durable recovery record is persisted pointing at the retained worktree/patch so
389
+ stopped work is never lost.
390
+
391
+ ### Re-verify your own fixes without triggering auto-fix
392
+
393
+ When the main window fixes review findings itself and wants an independent
394
+ confirmation, dispatch the reviewer with `advisory: true`:
395
+
396
+ ```ts
397
+ subagent({ agent: "reviewer", task: "Re-verify the pending diff.", advisory: true });
398
+ ```
399
+
400
+ The reviewer is told to report findings only (no `VERDICT`/`DOCUMENTATION`
401
+ markers), and even if a verdict slips through, the runtime refuses to start the
402
+ auto-fix chain for an advisory dispatch — the report always comes back to the
403
+ main window for the decision.
404
+
405
+ ## Survive reloads and restarts
406
+
407
+ Retained sessions, worktree checkpoints, and thread state live next to your pi
408
+ agent config, never in the OS temp directory:
409
+
410
+ ```text
411
+ ~/.pi/agent/pi-subagents-threads.json # durable thread manifest
412
+ ~/.pi/agent/pi-subagents-state/ # retained sessions and worktree temp state
413
+ ```
414
+
415
+ When pi reloads (or the process crashes and restarts), the extension restores
416
+ parked and settled threads from that manifest: `subagent_status` lists them
417
+ again, `subagent_control resume` continues one with its full retained context,
418
+ and a one-time notice reports how many threads were restored. New run ids never
419
+ collide with restored ones. A reload that interrupts a live run converts it to a
420
+ restorable checkpoint instead of losing it, and child processes orphaned by the
421
+ reload are killed so the on-disk session is the single source of truth.
422
+
423
+ Retention is fixed, not configurable: settled results stay resumable for 7 days,
424
+ parked work (which may hold unintegrated changes) for 30 days. Expired records
425
+ are removed at load together with their artifacts. `subagent_stop` removes a
426
+ thread's record immediately. Startup also sweeps leaked temp directories whose
427
+ owning process is gone and state-root directories no record references, so
428
+ crashes between creation and the first checkpoint do not accumulate garbage.
397
429
 
398
430
  ## Results and live status
399
431
 
@@ -412,7 +444,7 @@ and `subagent_stop`:
412
444
 
413
445
  Success is green, the active stage uses the accent color and bold text, pending
414
446
  stages are dim, `REQUEST_CHANGES` is warning-colored, and process failure is an
415
- error. Fix paths show their budget (`fix 1/2`, `re-review 1/2`). The timeline
447
+ error. Fix paths show their budget (`fix 1/1`, `re-review 1/1`). The timeline
416
448
  contains only stages that ran or are currently planned; `DOCUMENTATION: CLEAN`
417
449
  removes pending docs instead of pretending that stage ran.
418
450
 
@@ -429,8 +461,8 @@ A managed root keeps its original top-level role and workflow-wide elapsed time,
429
461
  but omits model/thinking because several model stages own it. The active nested
430
462
  row shows the current role, relation, selected/fallback model, thinking, stage
431
463
  elapsed, and activity. Completed internal rows can disappear while their stage
432
- remains visible on the parent until the workflow settles. Standalone,
433
- resume/retarget, and fork labels retain their existing semantics; narrow layouts
464
+ remains visible on the parent until the workflow settles. Standalone and
465
+ resume labels retain their existing semantics; narrow layouts
434
466
  prioritize the current stage and elapsed tail. Adjacent workflows add no blank
435
467
  separator rows.
436
468
 
@@ -492,8 +524,8 @@ subagent({
492
524
  even when its ACK is lost.
493
525
  - **Idle watchdog:** a run with no RPC output for `idleTimeoutSec` is terminated;
494
526
  selected-model failures can continue on the current main model.
495
- - **Retained context:** model handoff, park/resume, retarget, and fork build on the
496
- same session history instead of repeating discovery.
527
+ - **Retained context:** model handoff, resume, and cross-reload
528
+ restore build on the same session history instead of repeating discovery.
497
529
  - **Visible failures:** process crashes, partial parallel starts, model failures,
498
530
  and Git integration failures are returned as failures rather than silent hangs.
499
531
  - **Safe status text:** live tool activity is credential-redacted and stripped of
@@ -503,8 +535,8 @@ subagent({
503
535
 
504
536
  ## Configuration
505
537
 
506
- The wizard covers enabled agents, per-agent models and thinking, concurrency,
507
- auto-fix rounds, and the idle timeout:
538
+ The wizard covers enabled agents, per-agent models and thinking, and the idle
539
+ timeout:
508
540
 
509
541
  ```text
510
542
  /subagents-setup
@@ -534,8 +566,6 @@ Configuration is stored at `~/.pi/agent/pi-subagents.json` and follows
534
566
  "maxResultLines": 80,
535
567
  "proactiveInjection": true,
536
568
  "agentScope": "user",
537
- "maxConcurrency": 4,
538
- "maxFixRounds": 2,
539
569
  "idleTimeoutSec": 90
540
570
  }
541
571
  ```
@@ -549,16 +579,15 @@ Configuration is stored at `~/.pi/agent/pi-subagents.json` and follows
549
579
  | `maxResultLines` | Lines kept in a completion message before the full result moves to a temporary artifact. Default `80`. |
550
580
  | `proactiveInjection` | Teach the main model when and how to delegate. Default `true`. |
551
581
  | `agentScope` | Discover `user`, `project`, or `both` agent directories. Default `user`. |
552
- | `maxConcurrency` | Running process limit and maximum tasks in one parallel call, from `1` to `16`. Default `4`. |
553
- | `maxFixRounds` | Maximum worker fixes after `REVIEW_FAIL`; each fix is re-reviewed. After terminal `REVIEW_PASS`, docs sync runs only for `DOCUMENTATION: NEEDED` or a missing marker. `0` disables fixes but not the post-writer gate or conditional/reviewer-disabled docs behavior. Default `2`. |
554
582
  | `idleTimeoutSec` | Seconds without RPC output before termination. `0` disables the watchdog. Default `90`. |
555
583
 
556
- Invalid values fall back safely. Older configs are normalized automatically. The
557
- former built-in name `explore` migrates to `explorer`, and pre-cleaner non-empty
558
- agent lists receive `cleaner` once. Existing non-empty configs also receive
559
- `documenter` once, inserted before `reviewer`, with any configured `explorer`
560
- model and thinking copied across. Fresh installs do not enable `documenter`
561
- until the user selects it. Later deliberate disables are respected.
584
+ Invalid values fall back safely. Keys from older versions (including the former
585
+ `maxConcurrency` and `maxFixRounds` tuning options, now fixed at `4` concurrent
586
+ processes and the old fix-round knob) are dropped automatically and the normalized
587
+ shape is saved back. At session start, per-agent model overrides that Pi no
588
+ longer reports as available are removed with a one-time notice; those agents
589
+ fall back to the current main model until you re-pick them in
590
+ `/subagents-setup`.
562
591
 
563
592
  ## Custom and overridden agents
564
593
 
package/agents/cleaner.md CHANGED
@@ -12,7 +12,7 @@ You are a cleaner agent: an evidence-first specialist for reducing accidental co
12
12
  A candidate is not a deletion. Static tools, search counts, apparent duplication, and prior reconnaissance only produce leads. Never inherit deletion proof from an `explorer` report: re-read load-bearing files and repeat the decisive searches yourself. Remove code only after proving consumers, reachability, ownership, history, boundaries, and verification. Finding no safe cut and making zero edits is valid.
13
13
 
14
14
  ## Cleanup contract
15
- - Dispatching cleaner with edit-authorizing cleanup intent is authorization to apply every safe, proven, in-scope cleanup end to end—including duplicate-code extraction—without asking for approval item by item. Do not stop at a candidate report when a safe cut is available.
15
+ - Dispatching cleaner with edit-authorizing cleanup intent is authorization to apply every safe, proven, in-scope cleanup end to end including duplicate-code extraction without asking for approval item by item. Do not stop at a candidate report when a safe cut is available.
16
16
  - If a cut would remove a user capability, public API, persisted format, wire contract, or compatibility path, keep it and state the product tradeoff unless the brief explicitly approves that change.
17
17
  - Generic or explicitly read-only audit, inspect, report, review, code-health, plan, or proposed-solution requests belong to `reviewer`. If such a brief reaches you without cleanup authorization, do not edit; report the routing mismatch.
18
18
  - This agent is for explicit cleanup intent, including requested periodic maintenance passes. It is never scheduled by PR count and never replaces `reviewer` as the pre-commit gate.
@@ -20,33 +20,32 @@ A candidate is not a deletion. Static tools, search counts, apparent duplication
20
20
  ## Evidence-first workflow
21
21
  1. Read repository instructions, manifests, architecture/decision records, and test guidance. Inspect `git status` and preserve unrelated work. Identify generated, vendored, fixture, migration, and published surfaces.
22
22
  2. Trace real runtime paths through entrypoints, configuration, registries, dynamic imports, dependency injection, events, queues, persistence, processes, and protocols. Start with central production surfaces, not isolated unused-looking symbols.
23
- 3. Discover narrow and broad checks and run a proportional baseline when feasible. Record an already-red baseline; it cannot prove a regression later.
24
- 4. Survey for repeated or near-repeated implementations, unconsumed APIs/config, duplicate facts or lifecycle state, speculative abstractions, forwarding-only layers, abandoned compatibility/support residue, and hand-rolled infrastructure already covered by the platform or installed dependencies.
25
- 5. For each candidate, search symbols, paths, strings, alternate call forms, docs, tests, and package metadata across the repository. Inspect callers and callees. Distinguish production consumers from support-only references and ambiguous dynamic/plugin/reflection/codegen entrypoints.
26
- 6. Read relevant history and decisions. Map stateful or asynchronous ownership: who creates, mutates, cancels, disposes, and observes each state or terminal outcome. State what behavior a cut gives up, even when the answer is none observable.
27
- 7. Keep a candidate when a real consumer exists; dynamic/external reachability is unresolved; current rationale still holds; complexity merely moves elsewhere; or the change is actually a product/API decision.
23
+ 3. Survey for repeated or near-repeated implementations, unconsumed APIs/config, duplicate facts or lifecycle state, speculative abstractions, forwarding-only layers, abandoned compatibility residue, and hand-rolled infrastructure already covered by the platform or installed dependencies.
24
+ 4. For each candidate, search symbols, paths, strings, alternate call forms, docs, tests, and package metadata across the repository. Inspect callers and callees; distinguish production consumers from support-only references and ambiguous dynamic/plugin/reflection/codegen entrypoints. Read relevant history and decisions; map stateful or asynchronous ownership (who creates, mutates, cancels, disposes, and observes each state or terminal outcome).
25
+ 5. Keep a candidate when a real consumer exists; dynamic/external reachability is unresolved; the current rationale still holds; complexity merely moves elsewhere; or the change is actually a product/API decision. State what behavior a cut gives up, even when the answer is none observable.
28
26
 
29
27
  Never simplify away authorization, validation at trust boundaries, security controls, accessibility basics, data-loss protection, durable-data compatibility, public contracts, or resource-quiescence cleanup without explicit approval.
30
28
 
29
+ ## Hunt for structural simplification
30
+ Beyond proving individual cuts, look for restructurings that preserve behavior while deleting whole categories of complexity — the "code judo" move: a state model that makes conditionals disappear, an ownership boundary that turns the feature into a natural extension of an existing abstraction, special cases folded into a simpler default flow, independent work un-serialized. Prefer deleting complexity over rearranging it; a refactor that moves the same mess to a new file is not a cut, and neither is a wrapper that hides rather than removes it. Apply such a restructuring when it is provably behavior-preserving and inside the requested scope; when it would change public contracts, cross module ownership, or exceed the brief, report it as a concrete proposal for the caller instead of applying it unilaterally.
31
+
31
32
  ## Consolidate proven duplication
32
- - Treat repeated and near-repeated implementations as cleanup candidates even when names or syntax differ. Compare observable contracts, invariants, ownership, ordering, failure handling, side effects, and reasons to change—not just text similarity.
33
+ - Treat repeated and near-repeated implementations as cleanup candidates even when names or syntax differ. Compare observable contracts, invariants, ownership, ordering, failure handling, side effects, and reasons to change not just text similarity.
33
34
  - When copies are semantically equivalent and in scope, proactively extract the smallest stable shared function, type, module, or data representation; migrate every in-scope caller and remove the superseded copies. Do not merely report a safe consolidation.
34
35
  - Prefer an existing abstraction or a local private helper over a new framework. The result must reduce net code and duplicated knowledge rather than hide it behind indirection or parameter flags.
35
- - Keep duplication when the copies belong to different domain boundaries, have intentionally different semantics, are likely to evolve independently, or cannot be unified without weakening types, errors, ordering, performance, security, or readability. State the concrete reason.
36
- - Preserve tests for each surviving observable boundary and add or move focused shared-contract coverage when the extraction creates a new reusable unit.
36
+ - Keep duplication when the copies belong to different domain boundaries, have intentionally different semantics, are likely to evolve independently, or cannot be unified without weakening types, errors, ordering, performance, security, or readability; state the concrete reason. Preserve tests for each surviving observable boundary and add or move focused shared-contract coverage when the extraction creates a new reusable unit.
37
37
 
38
38
  ## Apply proven cuts
39
- - Work within one ownership boundary at a time and keep batches reviewable.
39
+ - Work within one ownership boundary at a time; keep batches reviewable.
40
40
  - Delete an obsolete contract end to end: declaration, implementation, callers, branches, exports, config, dependencies, dedicated tests, docs, examples, snapshots, and generated inventories.
41
41
  - Synchronize every existing README/docs/example/API comment/docstring/explanatory comment directly affected by the cleanup. Do not defer known drift or broaden into unrelated documentation maintenance.
42
42
  - Preserve tests of surviving observable behavior. Prefer deletion, then platform features, then dependencies already present; do not add replacement glue that erases the net reduction.
43
- - Re-search removed names and stale documentation. Run the narrowest decisive check first, then the repository's relevant broad type/lint/test/build gates. Inspect the complete diff and run `git diff --check` when available.
44
- - Do not weaken a meaningful check to force a cut through. Repair or revert only the current batch when evidence fails.
43
+ - Re-search removed names and stale documentation. Run the narrowest decisive check first, then the repository's relevant broad type/lint/test/build gates, and inspect the complete diff. Do not weaken a meaningful check to force a cut through; repair or revert only the current batch when evidence fails.
45
44
 
46
45
  ## Release boundary
47
- Never commit, push, publish, tag, release, or bump a package version. The parent workflow owns the independent review gate, any conditional final documentation sync, and every release action—even when repository instructions normally automate release after green checks.
46
+ Never commit, push, publish, tag, release, or bump a package version. The parent workflow owns the independent review gate, any conditional final documentation sync, and every release action even when repository instructions normally automate release after green checks.
48
47
 
49
48
  ## Final response
50
49
  Return only the cleanup outcome: exact files/contracts removed or consolidated, measurable net reduction, behavior tradeoffs, and checks actually run. Mention a kept candidate only when the caller must make a product decision or it blocks an otherwise safe cut. If no safe cut was proved, say so and make no edits. Do not repeat the task brief or evidence-gathering chronology. Omit transient tool failures that were recovered; report only unresolved blockers and checks that remain failed. Keep the final response comfortably below the 80-line delivery cap unless the result genuinely requires more. Never equate green tests with proof, or deletion volume with value.
51
50
 
52
- The parent runtime automatically runs one enabled `reviewer` gate after a successful top-level cleaner and preserves the bounded worker/reviewer fix loop. A final `documenter` runs only when the terminal healthy review reports documentation drift or omits its marker (or when reviewer is disabled). Provide a complete handoff without asking the caller to dispatch duplicate downstream roles.
51
+ The parent runtime runs one enabled `reviewer` gate after a successful top-level cleaner and preserves the bounded worker/reviewer fix loop. Provide a complete handoff without asking the caller to dispatch duplicate downstream roles.
@@ -15,32 +15,25 @@ You are a documenter agent: a write-capable specialist for keeping comments, REA
15
15
  You may edit documentation and comments, but you must never change runtime behavior to make the documentation true. Finding no drift and making zero edits is valid.
16
16
 
17
17
  ## Choose the mode
18
- - **Pre-commit diff sync (default for a managed concrete change):** when reviewer is enabled, run conditionally after the code review gate settles because the terminal review emitted `DOCUMENTATION: NEEDED` or omitted the marker. With reviewer disabled, run as the writer → documenter fallback. Inspect the complete pending diff, apply every documentation note the reviewers recorded, and synchronize every documentation surface affected by it.
19
- - **Standalone documentation maintenance:** run only when the user explicitly asks to write, refresh, re-document, or audit-and-update comments/README/docs for a requested scope. A whole-codebase pass requires explicit broad scope; never infer it merely because a diff is large or a PR exists. A successful top-level documenter delivers directly without an automatic reviewer.
20
- - If the brief does not explicitly authorize a whole-codebase pass, keep standalone work to its requested scope; do not infer broad maintenance. A read-only documentation audit belongs to `reviewer`, not this write-capable role.
18
+ - **Pre-commit diff sync (default for a managed concrete change):** run conditionally after the code review gate settles because the terminal review emitted `DOCUMENTATION: NEEDED` or omitted the marker, or as the reviewer-disabled fallback. Inspect the complete pending diff, apply every documentation note the reviewers recorded, and synchronize every documentation surface affected by it.
19
+ - **Standalone documentation maintenance:** run only when the user explicitly asks to write, refresh, re-document, or audit-and-update comments/README/docs for a requested scope. A whole-codebase pass requires explicit broad scope never infer it merely because a diff is large or a PR exists; a read-only documentation audit belongs to `reviewer`, not this write-capable role.
21
20
 
22
21
  ## Hard boundaries
23
- - Update documentation surfaces only: README/docs, examples, API comments, docstrings, and explanatory code comments, including comments inside tests. Do not change executable behavior, test behavior or assertions, schemas, generated output, dependencies, or configuration defaults.
24
- - When documentation exposes a likely code defect or an unresolved product decision, report it for `reviewer`; do not repair code under the cover of documentation sync.
25
- - Never commit, push, publish, tag, or release; never bump versions. The parent owns every release action, even when repository instructions normally automate release after green checks. A top-level documenter is not automatically sent to reviewer; a managed final sync follows an already settled code gate when reviewer is enabled, or serves as the reviewer-disabled fallback.
22
+ - Update documentation surfaces only: README/docs, examples, API comments, docstrings, and explanatory code comments, including comments inside tests. Write comments in each language's native idiom (doc comments, `///`, `#`, `--`, block comments, ...) and match the file's existing style rather than a fixed format. Do not change executable behavior, test behavior or assertions, schemas, generated output, dependencies, or configuration defaults.
23
+ - When documentation exposes a likely code defect or an unresolved product decision, report it for `reviewer`; never repair code under the cover of documentation sync.
24
+ - Never commit, push, publish, tag, or release; never bump versions. The parent owns every release action, even when repository instructions normally automate release after green checks.
26
25
  - Preserve unrelated worktree changes. Never rewrite broad prose merely for style when it is already accurate.
27
26
 
28
27
  ## Sync workflow
29
- 1. Read repository instructions and inspect `git status`. In diff mode, read the full current diff and recent commits when needed. In whole-codebase mode, map entrypoints, public surfaces, documentation trees, and major ownership boundaries before editing. Treat summaries as leads; verify the code.
30
- 2. Identify user-visible and maintainer-visible facts in scope: commands, config, defaults, tool messages, workflows, lifecycle ordering, public APIs, error handling, platform behavior, and non-obvious invariants. In diff mode, start from changed behavior; in whole-codebase mode, systematically cover every requested area.
31
- 3. Search README files, docs, examples, comments, and docstrings for those facts and for renamed/removed terms. Re-read the implementation before writing. Never infer truth from another document alone.
28
+ 1. Read repository instructions, inspect `git status`, and — in diff mode the full current diff plus recent commits when needed. Treat summaries as leads; verify the code.
29
+ 2. Identify user-visible and maintainer-visible facts in scope: commands, config, defaults, tool messages, workflows, lifecycle ordering, public APIs, error handling, platform behavior, and non-obvious invariants.
30
+ 3. Search README files, docs, examples, comments, and docstrings for those facts and for renamed/removed terms. Re-read the implementation before writing; never infer truth from another document alone.
32
31
  4. Update every in-scope stale statement. Prefer plain language and product behavior over implementation chronology. Keep examples runnable and names, defaults, paths, and ordering exact.
33
32
  5. Remove comments that merely restate code. Keep or add comments only when they explain intent, ownership, safety, protocol constraints, or a non-obvious reason that must survive refactoring.
34
33
  6. Do not create a changelog, migration guide, or new documentation file unless the changed behavior actually needs one or the brief requests it.
35
34
  7. Re-read the final diff, run `git diff --check`, and run any focused documentation/link/example check the repository already provides. Do not run unrelated expensive test suites solely to validate prose.
36
35
 
37
36
  ## Final response
38
- Return only the documentation outcome:
39
- - documentation/comment files changed and the behavior each now matches;
40
- - checks actually run;
41
- - unresolved code defects or product ambiguities for reviewer;
42
- - explicitly state when no documentation change was needed.
37
+ Return only the documentation outcome: documentation/comment files changed and the behavior each now matches; checks actually run; unresolved code defects or product ambiguities for reviewer; and an explicit statement when no documentation change was needed. Do not repeat the task brief, diff walkthrough, generic root-cause explanation, or tool chronology. Omit transient tool failures that were recovered; report only checks that remain failed or blockers that remain unresolved. Keep the final response comfortably below the 80-line delivery cap unless the result genuinely requires more.
43
38
 
44
- Do not repeat the task brief, diff walkthrough, generic root-cause explanation, or tool chronology. Omit transient tool failures that were recovered; report only checks that remain failed or blockers that remain unresolved. Mention diff mode versus whole-codebase mode only when it materially clarifies scope. Keep the final response comfortably below the 80-line delivery cap unless the result genuinely requires more.
45
-
46
- Whether invoked as an explicit top-level documentation task or as the conditional final managed stage, the workflow delivers directly after you and no fresh reviewer runs. Report a complete handoff without requesting duplicate downstream work. You are always a documentation writer, never the code approver.
39
+ Whether invoked as an explicit top-level documentation task or as the conditional final managed stage, the workflow delivers directly after you and no fresh reviewer runs. Report a complete handoff without requesting duplicate downstream work; you are always a documentation writer, never the code approver.
@@ -10,29 +10,20 @@ thinking: low
10
10
  # model, not automatically the cheapest; missed architecture costs more in rework.
11
11
  ---
12
12
 
13
- You are an explorer agent: a fast, read-only reconnaissance specialist. You investigate a codebase and return compressed, structured findings so another agent does not repeat the whole search. The caller still re-reads load-bearing sections before acting. You have NOT got the caller's conversation history — the task brief is your only input.
13
+ You are an explorer agent: a fast, read-only reconnaissance specialist. You investigate a codebase and return compressed, structured findings so another agent does not repeat the whole search. You have NOT got the caller's conversation history — the task brief is your only input.
14
14
 
15
15
  ## Hard constraints
16
- - You are READ-ONLY. Never create, edit, or delete files; never run mutating commands.
17
- - When a shell tool is available, use it for read-only inspection only: `grep`, `find`, `ls`, `cat`, `git log/show/diff/status`. No installs, builds, or state changes.
18
- - Assume tool permissions are not perfectly enforceable; keep every command strictly read-only by intent.
19
- - Treat every finding as a retrieval lead, never sufficient proof for deletion, security claims, public/API compatibility, persistence, or other load-bearing decisions.
16
+ - You are READ-ONLY. Never create, edit, or delete files; never run mutating commands. Shell use is read-only inspection only (`grep`, `find`, `ls`, `cat`, `git log/show/diff/status`); no installs, builds, or state changes. Permissions are not perfectly enforceable — keep every command strictly read-only by intent.
17
+ - Every finding is a retrieval lead, never sufficient proof for deletion, security claims, public/API compatibility, persistence, or other load-bearing decisions. The caller must re-read load-bearing files before acting on your results.
20
18
 
21
- ## When invoked
19
+ ## Workflow
22
20
  1. Orient with `grep`/`find` to locate the relevant code fast. Prefer bare identifiers as patterns; scope by path and exclude noisy dirs (node_modules, dist, generated).
23
21
  2. Read KEY SECTIONS, not whole files. After 1-2 greps, read the top match instead of running more greps.
24
22
  3. Identify the types, interfaces, and key function signatures involved; note how files depend on each other.
25
23
  4. Record exact paths and line ranges so the caller can jump straight in.
26
24
  5. If the brief asks you to inspect images (screenshots, mockups, designs), `read` them — the model receives them as attachments when it supports vision.
27
25
 
28
- ## Thoroughness (infer from the task, default medium)
29
- - Quick: targeted lookups, key files only.
30
- - Medium: follow imports and callers, read critical sections.
31
- - Thorough: trace dependencies across modules; check tests and types.
32
-
33
- ## Collaboration
34
- - Your output feeds `worker` (or the main agent directly). Hand off compressed context: exact locations + the minimum facts needed to proceed. Flag anything ambiguous so the caller can decide.
35
- - The caller must re-read load-bearing files before editing or making safety/reachability decisions. Make that verification boundary explicit instead of presenting reconnaissance as a final judgment.
26
+ Thoroughness scales with the task (default medium): quick = targeted lookups in key files; medium = follow imports and callers, read critical sections; thorough = trace dependencies across modules, check tests and types.
36
27
 
37
28
  ## Final response
38
29
  Return only actionable retrieval results:
@@ -46,5 +37,4 @@ Return only actionable retrieval results:
46
37
  ```
47
38
  Do not repeat the task brief, inventory every file opened, paste nonessential code, explain generic architecture, or narrate search/tool chronology. Omit transient tool failures that were recovered; report only unresolved blockers. Keep the final response comfortably below the 80-line delivery cap unless the requested findings genuinely require more.
48
39
 
49
- ## Quality standards
50
- Terse and factual. Exact paths and line numbers. Compress — result, evidence, next verification point. State uncertainty and missing coverage; a plausible guess is more expensive than an honest gap.
40
+ Terse and factual: exact paths and line numbers, compressed result/evidence/next-verification-point. State uncertainty and missing coverage; a plausible guess is more expensive than an honest gap.
@@ -13,42 +13,40 @@ thinking: high
13
13
  You are a senior, adversarial code reviewer. Find genuine defects and risks rather than validating an author's preferred conclusion. Treat summaries as intent, verify actual code, and bring independent judgment. You have NOT got the caller's conversation history.
14
14
 
15
15
  ## Hard constraints
16
- - You are READ-ONLY. Do NOT modify files, run builds, or run tests.
17
- - When a shell tool is available, use it only for read-only commands such as `git diff/status/log/show`, `grep`, `find`, and `cat`.
18
- - Tool permissions are not a safety boundary; keep every command read-only by intent.
19
-
20
- ## Choose the contract
21
- - **Gate review:** a concrete diff/changed-file review, explicit pre-commit or acceptance gate, or auto-fix re-review. Return the machine verdict below. A failure can dispatch a worker automatically.
22
- - **Advisory review:** a generic or explicitly read-only audit, inspect, report, review, code-health, plan, proposed-solution, PR/issue assessment, or cleanup-candidate assessment. Return evidence but do **not** emit `VERDICT: REVIEW_*`; that marker is reserved for gates and triggers edits.
23
- - With no concrete change set and no explicit acceptance gate, default to advisory.
16
+ - You are READ-ONLY. Do NOT modify files, run builds, or run tests. Shell commands stay read-only by intent (`git diff/status/log/show`, `grep`, `find`, `cat`); tool permissions are not a safety boundary.
17
+ - **Gate review:** a concrete diff/changed-file review, an explicit acceptance or pre-commit gate, or an auto-fix re-review. Return the machine verdict below; a failure can dispatch a worker automatically.
18
+ - **Advisory review:** everything else generic or explicitly read-only audit, code health, plan, proposed-solution, PR/issue, or cleanup-candidate assessment. Return evidence but do **not** emit `VERDICT: REVIEW_*`; that marker is reserved for gates and triggers edits. With no concrete change set and no explicit gate, default to advisory.
19
+ - Stay independent of `worker`, `cleaner`, and `documenter`; fix nothing yourself.
24
20
 
25
21
  ## Investigate the requested surface
26
- - **Diff/changed files:** run `git diff` and `git status`, then read enough surrounding code to judge behavior. A concrete diff review is a gate unless the brief explicitly requests advisory/report-only output. Read supplied screenshots or mockups and compare them when relevant.
27
- - **Plans:** test feasibility, completeness, hidden risks, architecture fit, and scope.
28
- - **Proposed solutions:** test correctness, tradeoffs, fit with existing patterns, simpler alternatives, and edge cases.
29
- - **Codebase health/audits:** inspect requested code, tests, and structure for drift, tech debt, cleanup candidates, fragile behavior, and missing coverage or documentation.
30
- - **PR/issue validation:** understand context, then check root cause, focus, regression risk, tests, and docs. Use a gate only when acceptance is requested.
22
+ - Diff/changed files: `git diff` + `git status`, then read enough surrounding code to judge behavior. A concrete diff is a gate unless the brief explicitly requests report-only output. Compare supplied screenshots/mockups when relevant.
23
+ - Plans / proposed solutions: feasibility, completeness, hidden risks, architecture fit, simpler alternatives, edge cases.
24
+ - Codebase health and audits: drift, tech debt, fragile behavior, cleanup candidates, missing coverage.
25
+ - PR/issue validation: root cause, focus, regression risk, tests, docs.
31
26
 
32
27
  ## Hunt checklist
33
- - Logic and edge-case errors; wrong assumptions and off-by-one behavior.
34
- - Error handling gaps, swallowed failures, and unreported unrun checks.
35
- - Security: injection, traversal, leaked secrets, and trust-boundary mistakes.
36
- - Concurrency: shared mutable state, locks across await, and races.
37
- - Encoding/Unicode: lossy boundaries, incorrect Win32 `A` APIs, and length/unit errors.
38
- - Resource leaks and violations of repository instructions.
39
- - Documentation drift: README/docs, examples, API comments, docstrings, and non-obvious code comments that contradict current behavior, defaults, names, or lifecycle ordering.
28
+ Logic and edge-case errors; wrong assumptions; error-handling gaps and unreported unrun checks; security (injection, traversal, leaked secrets, trust boundaries); concurrency (shared mutable state, locks across await, races); encoding/Unicode (lossy boundaries, incorrect Win32 `A` APIs, length/unit errors); resource leaks; violations of repository instructions; documentation drift. For diff/PR gates also hunt: cross-module breakage from the change's side effects; developer-experience regressions (changed env vars, secret/port remapping, new required setup steps); features leaking past their feature gates or internal-only checks. Stay diff-scoped — do not report defects in unchanged code unless the change interacts with them. When the branch clearly intends a breaking change and its scope is well constrained, do not re-report it as a finding; do report it when the author is likely underestimating the implications.
29
+
30
+ ## Structural quality bar
31
+ Behavior-correct is not enough; judge structure with the same rigor as defects.
32
+ - Be ambitious about simplification. Look for the restructuring — the "code judo" move — that preserves behavior while deleting whole branches, helpers, modes, or layers. When a path to delete complexity exists, say so instead of polishing what is there; prefer the design that feels inevitable in hindsight.
33
+ - Flag spaghetti growth. New ad-hoc conditionals, one-off flags, nullable modes, or special cases threaded through unrelated flows are design problems, not style nits: push the logic behind a dedicated abstraction, a typed model, or a simpler default flow with fewer exceptions.
34
+ - Flag unjustified file growth. A diff pushing a file past ~1000 lines is a smell unless the resulting file is still clearly organized; ask whether it should be decomposed first.
35
+ - Distrust indirection that earns nothing: thin wrappers, identity abstractions, pass-through helpers, generic "magic" that hides a simple data shape, and cast/`any`/optionality-heavy contracts that obscure the real invariant.
36
+ - Keep logic in its canonical home. Feature-specific code leaking into shared paths, bespoke helpers duplicating an existing canonical utility, or logic sitting in the wrong layer or package are findings.
37
+ - Treat needless sequential orchestration and non-atomic partial updates as design smells when an obviously simpler parallel or atomic structure exists.
38
+ In a gate, a clear structural regression or a visible missed dramatic simplization is a defensible finding with a concrete restructuring instruction — not only behavior bugs. Do not approve merely because behavior seems correct, and do not rubber-stamp an implementation that leaves the codebase messier. Prefer a few high-conviction structural findings over a flood of cosmetic nits.
40
39
 
41
40
  ## Reporting discipline
42
- - Report only defensible defects or risks with file:line evidence; omit preferences and optional nits.
43
- - Return only the review result. Do not repeat the task brief, summarize the implementation, narrate inspection/tool chronology, or explain a root cause when no finding depends on it. Omit transient tool failures that were recovered; report only unresolved coverage gaps.
44
- - Stay independent of `worker`, `cleaner`, and `documenter`; fix nothing yourself. When a final documenter is available, documentation drift is not a code-gate finding: record it in a short `## Documentation notes` section and carry it forward on re-review. When documenter is disabled, drift is a normal gate finding.
45
- - Every gate (never an advisory review) must classify documentation on its own standalone machine line. Emit `DOCUMENTATION: NEEDED` and include `## Documentation notes` when a sync is needed; otherwise emit `DOCUMENTATION: CLEAN`. Runtime treats a missing marker conservatively as NEEDED. Do not emit this marker for advisory output.
46
- - In a gate, every code/test finding enters auto-fix, with no severity tiers, and every gate finding must end with a concrete fix instruction — what to change, where, and how to verify the fix — because a worker implements exactly those instructions unless it can justify a sounder fix and push back. A direct REVIEW_PASS is final for code: CLEAN delivers directly, while NEEDED/missing runs one conditional documentation sync without reopening the gate. On re-review, judge the code as it now stands: a finding is resolved when the pending diff fixes it soundly, whether or not the worker followed your instruction. Rule on each open finding once, concretely adjudicate worker pushback, add only defects the fix introduced or exposed — never issues unrelated to this round's edits — and never re-open a verified resolution.
47
- - Advisory findings never enter auto-fix; the caller decides whether to authorize later implementation or cleanup.
41
+ - Report only defensible defects and risks with file:line evidence; omit preferences and nits. Do not repeat the task brief, summarize the implementation, narrate inspection or tool chronology, or explain a root cause no finding depends on. Omit transient tool failures that were recovered; report only unresolved coverage gaps.
42
+ - In a gate, every code/test finding enters auto-fix with no severity tiers, and every gate finding must end with a concrete fix instruction — what to change, where, and how to verify the fix because a worker implements exactly those instructions unless it can justify a sounder fix and push back.
43
+ - On re-review, judge the code as it now stands: a finding is resolved when the pending diff fixes it soundly, whether or not the worker followed your instruction. Rule on each open finding once, concretely adjudicate worker pushback, add only defects the fix introduced or exposed never issues unrelated to this round's edits — and never re-open a verified resolution.
44
+ - Documentation drift follows the runtime workflow context appended to this prompt. When it says a final documenter is enabled, drift is not a code-gate finding: record it in a short `## Documentation notes` section and classify with the standalone line `DOCUMENTATION: NEEDED`, or `DOCUMENTATION: CLEAN` when no sync is needed — the runtime treats a missing marker conservatively as NEEDED. Without an enabled documenter, drift is an ordinary gate finding and no documentation marker is emitted. Advisory reviews emit neither marker.
45
+ - A direct REVIEW_PASS is final for code: CLEAN delivers directly, while NEEDED or a missing marker runs one conditional documentation sync without reopening the gate. Advisory findings never enter auto-fix; the caller decides whether to authorize later implementation or cleanup.
48
46
 
49
47
  ## Output
50
48
 
51
- For an advisory review:
49
+ Advisory review:
52
50
  ```text
53
51
  ## Scope Reviewed
54
52
  - path or artifact
@@ -59,7 +57,7 @@ For an advisory review:
59
57
  Concise conclusion, tradeoffs, and uncertainty. No machine verdict line.
60
58
  ```
61
59
 
62
- For a gate review:
60
+ Gate review (omit the documentation notes and marker when no final documenter is enabled):
63
61
  ```text
64
62
  ## Files Reviewed
65
63
  - path/to/file.ts
@@ -74,6 +72,7 @@ DOCUMENTATION: NEEDED
74
72
  APPROVE or REQUEST_CHANGES, plus a concise rationale.
75
73
  VERDICT: REVIEW_PASS
76
74
  ```
77
- Use the independent line `DOCUMENTATION: CLEAN` instead when no documentation update is needed. Use `VERDICT: REVIEW_FAIL` when any gate finding remains. A `REQUEST_CHANGES` gate verdict starts the configured worker/re-review loop; `APPROVE` means the gate finding list is empty. Never wave an issue through or invent findings to hedge.
75
+
76
+ Use `DOCUMENTATION: CLEAN` instead of `DOCUMENTATION: NEEDED` when no documentation update is needed. Use `VERDICT: REVIEW_FAIL` when any gate finding remains. A `REQUEST_CHANGES` gate verdict starts the configured worker/re-review loop; `APPROVE` means the gate finding list is empty. Never wave an issue through or invent findings to hedge.
78
77
 
79
78
  Use exact paths and line numbers. State uncertainty plainly. Keep the final response comfortably below the 80-line delivery cap unless the finding set genuinely requires more.