Once one agent works for you, the ceiling becomes your attention, not their speed. The parallel pattern: three or four agents on independent tasks, each isolated in its own git worktree, launched in the afternoon or overnight, then a disciplined morning review-and-merge loop.
Tier: Advanced · Workflow area: Feature development
Production teams report roughly half to two-thirds of overnight agent branches arriving merge-ready; the craft is picking tasks and running the review loop so the failures cost you minutes, not mornings.
Skip it for tasks that overlap in files, need mid-flight product judgment, or that you cannot specify without "you know what I mean".
make test-fast under ~2 min — see pb-09; slow flaky tests make agents thrash).Pick 3-4 non-overlapping tasks. Check independence at the file level: if two tasks plausibly touch app/models/order.py, serialize them. Good batch: (a) fix the pagination bug in /api/exports (repro attached), (b) add tests for services/pricing.py, (c) migrate utils/dates.py off the deprecated tz API.
One worktree per task.
git worktree add ../wt-export-bug -b agent/export-pagination
git worktree add ../wt-pricing-tests -b agent/pricing-tests
git worktree add ../wt-dates-tz -b agent/dates-tz
Worktrees share history but isolate working files — agents cannot trample each other, and each branch diffs cleanly against main.
Launch each agent with spec + done-command + stop rule.
Task spec: [paste]. Definition of done: `make test-fast && make lint`
both green, plus a new test reproducing the original bug.
Commit in small steps with clear messages. If you are stuck for more
than ~3 attempts on the same error, STOP and write BLOCKED.md
explaining what you tried - do not thrash.
Launch all, then go do something else. Resist supervising; the economics only work if launch is fire-and-forget.
Morning review loop — triage first, review second. Per branch, in this order:
cd ../wt-export-bug
git log --oneline main..HEAD # sane progression?
make test-fast && make lint # rerun; never trust reported green
git diff main --stat # blast radius as expected?
Then triage: merge-ready (full diff review now, as skeptically as a human PR — hallucinated APIs and weakened tests are the classic tells), salvage (right direction, needs one steering message — reply and relaunch), or discard (git worktree remove, branch deleted, spec improved for next time; a discarded branch that taught you the task was underspecified is not a loss).
Merge serially, main stays green. Merge one, run the full suite on main, then the next — parallel development, serial integration.
Tune the batch. Track your merge-ready rate weekly. Below ~50%, your specs are too vague or your tasks too entangled — fix that before adding a fourth agent.
Never let two agents share a working directory or a branch — the failure mode is interleaved commits that neither you nor git bisect can untangle later.
git diff main --stat per branch matched the task's expected blast radius.Parallel agentic work requires sanctioned agentic tooling; on client engagements that usually means Copilot coding agent under the client's GitHub Enterprise (issue → PR flow, firewalled), or agents running entirely inside the client's VDI/cloud tenancy. If only chat-level AI is sanctioned, keep the structure but drop autonomy: prepare the 3-4 specs in the evening, and run them yourself next day with AI-assisted implementation per task — the batching and spec discipline still pay. Local models are not yet reliable for unattended multi-hour agent runs; do not simulate this pattern on them for client deliverables.