Stop 5 of 7

Parallel work

Running several agents at once is the harness's most expensive capability and the easiest one to misuse. The whole decision rests on one word — independent — and that word has a mechanical definition.

What "independent" actually means

Two features may run in parallel when both hold: empty depends_on and non-overlapping scope. Not "they feel unrelated". Not "different tickets". Those two fields, checked.

Scope overlap between two features

F004 — src/api/
F005 — src/api/, src/db/

scope overlaps — two agents own the same files

Overlapping scope is not a merge problem you resolve later. It is two agents believing they own the same file. Sequence them, or split the scope so they don't.

Choosing the mode

Single-session

One feature is next and it touches fewer than 5 files, or the work is sequential, or you explicitly want focused work. You are both lead and implementer — say so out loud, so it is a decision rather than a forgotten step.

Workflow mode

Two or more independent, spec-verified features are ready. The lead launches /vv-harness:implement-features: one implementer per feature in an isolated worktree, then a reviewer per feature, returning structured per-feature results the lead integrates.

The rule people get backwards

"Fewer than 5 files ⇒ single-session" is not the rule. When two verified independent features each touch fewer than 5 files, workflow mode still wins — the parallel gain outweighs single-session's simplicity once two independent verified features exist. The 5-file threshold decides between one feature and one session, not between one feature and two.

What workflow mode does

Each agent gets a physically separate copy of the repository. That is the cleanest separation available — scope violations become impossible rather than merely detected. The lead never edits feature code in this mode: it prepares inputs, launches, and integrates the returned results, so the task and commit gates fire in the lead's own session.

leadOpus · orchestrates, never edits
worktree · F004implementer → reviewer
worktree · F005implementer → reviewer
worktree · F006implementer → reviewer
integratemerge branches · gates fire here
Structured per-feature results come back to the lead. Sequencing stays with the lead: it merges worktree branches at integration and only spawns dependent work after its prerequisites are merged.

If the Workflow tool isn't available

Older CLI, or an organization that disabled it. Do not abort parallel work. Fall back to plain subagents spawned with the same vv-harness:* agent types, passing worktree isolation at spawn time for independent scopes. Same isolation, same agents, sequencing still with the lead.

Roles map to tiers, not to model names

Roles and their cognitive-demand tiers are protocol — they don't change when a model generation ages out. Which model name fills each tier is a binding, updated by a requalification pass.

RoleTierReasoning
Lead (coordinator)OpusDecomposition, synthesis, and quality judgment need deep reasoning
Feature implementerSonnetScoped TDD inside a well-defined directory
Layer implementerSonnetSame
ResearcherSonnetRetrieval-heavy, not reasoning-heavy
ReviewerOpusDeep review catches subtle bugs; worth the cost
The subtlety worth internalizing

Elevation escalates the review, not the implementer. A feature marked risk: "elevated" buys a deeper review pass and, optionally, an author-blind conformance check — both of which judge the work rather than produce it. Executors stay on the execution tier. A feature is elevated when it touches 10+ files or spans modules, changes a shared interface, is security-sensitive, or is the first feature in a new codebase.

When not to parallelize

Given equal weight in the source, and it should be given equal weight by you.

  • Only one feature is ready. Nothing to overlap.
  • The work is sequential — step B needs step A's output and there is nothing else to run.
  • Features touch fewer than 3 files each. Sequential single-session is cheaper; the lead runs for the whole session regardless of how many agents launch.
  • Agents share an interface. Worktree isolation is exactly wrong here — they need to see each other's changes in real time. Give one feature the shared interface and sequence the rest behind it.
  • Orchestration overhead exceeds the benefit. When in doubt, start with a single session and escalate if the task naturally decomposes.
Also not this pipeline

Research or competing-hypothesis work that genuinely needs agents to argue with each other is not what an implement→review pipeline does. Spawn plain parallel subagents for that instead.

Only verified specs enter a batch

Unverified features are excluded from a parallel batch, never silently included. Verification comes from the spec gate: read-only spec-verification and reverification-guard agents prove a spec is testable, unambiguous, and internally consistent before any implementation starts. Verdicts are PASS, ASK, or BLOCK.

The framing: the harness is a mint. It verifies specs interactively, where human judgment is cheap, and emits proof — a local spec field, or a signed readiness stamp on an issue. An external runner is a consumer that validates the stamp before trusting the issue for unattended work.

reverification-guard exists for one specific failure mode: when a human answers the gate's questions, the guard re-runs every check against the amended text and refuses to advance on pressure alone. Anti-sycophancy, encoded as an agent rather than requested in a prompt.

← The gates Evidence →