Once one session works well, parallelism and independent review multiply output without multiplying mistakes.
One well-run session is a good start; experts run several and make them check each other.
Isolation: two sessions editing the same checkout collide. Git worktrees give each session its own folder on its own branch from the same repository, so each runs its own claude safely. The desktop app and background sessions (/background, claude agents) offer the same idea with a UI.
Writer/reviewer: a fresh context reviews better than the one that wrote the code, because it is not anchored on its own reasoning. Have session A implement, session B (or a subagent) review the diff against the plan, then feed findings back. Tell the reviewer to report only correctness and requirement gaps, or it will invent work. The bundled /code-review skill does a version of this.
Fan-out: for a migration across hundreds of files, have Claude write the file list, then loop claude -p over it with tight --allowedTools and --permission-mode dontAsk. Run two or three files first, fix the prompt, then the rest. /batch <instruction> does this inside Claude Code, splitting work across subagents in separate worktrees.
Gates for unattended work: an unattended run needs a check that decides when it is done. Options from weakest to strongest: ask for the check in the prompt; set a /goal condition that an evaluator re-checks each turn; a Stop hook that runs tests and blocks finishing until they pass.
Costs scale with every parallel context, so keep tasks small and self-contained. And keep humans on the merge: parallel agents produce more diffs, which makes careful review more important, not less.
Example
# two isolated sessions on separate branches of one repo
git worktree add ../app-ratelimit -b feat/rate-limit
git worktree add ../app-review -b review/rate-limit
(cd ../app-ratelimit && claude "implement the rate limiter from PLAN.md")
# later, in a fresh context:
(cd ../app-review && git merge feat/rate-limit && \
claude "review this branch's diff against PLAN.md; report only correctness gaps")
# fan-out over a file list, tightly scoped
while read -r f; do
claude -p "Migrate $f from unittest to pytest. Reply OK or FAIL: <reason>." \
--allowedTools "Read,Edit,Bash(pytest $f)" --permission-mode dontAsk
done < files.txtRemember
- Use git worktrees so parallel sessions don't edit the same checkout
- A fresh-context reviewer catches what the writer missed; scope it to real gaps
- Fan out with claude -p or /batch; gate unattended runs with /goal or a Stop hook
Watch out for
- Running the full fan-out before testing the prompt on two or three files, multiplying one mistake hundreds of times.