Skip to content

Bump default max_turns for review agents #519

Description

@williamthorsen

Context

A high-effort orchestrated run on williamthorsen/node-monorepo-tools#355 (work-types SSOT refactor; ~29 files, ~2,200 line insertion) hit max_turns ceilings on round-1 review for two of the four reviewers (orchestrated-reviewer and aspect-test-reviewer) and again on the initial holistic-review dispatch. The savings-analyzer flagged this as the largest avoidable cost in the run: ~322k tokens (~140k from round-1 wasted work + ~182k from forced round-2 re-dispatch of the full reviewer panel).

Empirical data from that run:

  • orchestrated-reviewer failed at 42 tool calls (ceiling: 30).
  • aspect-test-reviewer failed at 35 tool calls (ceiling: 20).
  • Completed agents on the same run used 6–42 tool calls.

PR #523 has since landed incremental-write resilience — partial reviewer findings now survive a max_turns interruption — but a complete review remains strictly better than a partial one with (pending) criticality. The underlying cause (ceilings tight enough that one extra investigation step pushes a reviewer over) is unchanged.

Current defaults (per packages/agents/content/skills/orchestrate/SKILL.md):

subagent_type max_turns
orchestrated-reviewer 30
aspect-code-reviewer 20
aspect-silent-failure-reviewer 20
aspect-test-reviewer 20
code-simplification-reviewer 15
orchestrated-reviewer (final) 30

Solution

Apply a global bump to all reviewer ceilings. A uniform raise — rather than effort-tiered or branch-size-adaptive defaults — keeps the change minimal, propagates a healthy safety margin to every run regardless of size, and avoids introducing a new resolution dimension. Agents stop when their work is done; max_turns is insurance, not a budget the agent fills, so raised ceilings impose near-zero cost on runs that don't need them.

Sizing targets ~30-50% margin over observed worst-case (or doubles the original where no failure data exists):

subagent_type current new rationale
orchestrated-reviewer 30 60 43% margin over observed 42-turn failure
orchestrated-reviewer (final) 30 60 parity with orchestrated-reviewer
aspect-code-reviewer 20 45 parity with aspect-test-reviewer
aspect-silent-failure-reviewer 20 45 parity with aspect-test-reviewer
aspect-test-reviewer 20 45 29% margin over observed 35-turn failure
code-simplification-reviewer 15 30 doubled (no observed failure; proportional)

Architect, planner, and coder ceilings are out of scope — no failures observed, and coder's existing 150 is already generous.

Affected files

  • packages/agents/content/skills/orchestrate/SKILL.md — the "Turn budgets" table.
  • packages/agents/content/skills/orchestrate/modules/review-cycle.md — the six inline max_turns values for reviewer Task calls.

Out of scope

  • Effort-tiered defaults — adds a resolution-cascade dimension for marginal benefit; the global bump's "extra" headroom on small runs is not actually consumed.
  • Branch-size–adaptive defaults — most invasive option; defers to "if a real need surfaces" rather than designing speculatively.
  • --max-turns=<key:N,…> CLI override — useful future escape hatch but no observed demand; defer to a follow-up if a one-off override case appears.
  • Architect/planner/coder ceilings — no observed failures and no evidence of risk.

Acceptance criteria

  • Turn budgets table in orchestrate/SKILL.md reflects the new values for all six reviewer rows.
  • Inline max_turns values in orchestrate/modules/review-cycle.md reflect the new values at every reviewer Task call site.
  • No changes to architect, planner, coder, or savings-analyzer ceilings.
  • No new resolution-cascade entries (effort presets, CLI flags) introduced.

Source

Savings-analyzer artifact from the #355 run:
~/ai-artifacts/projects/node-monorepo-tools/tickets/355/20260503-153302Z/22_analyst_savings-analysis.md

Metadata

Metadata

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions