Your day with Claude Code looks like this: write, wait, review, wait, fix, wait, ship one PR.
There's a setup that runs all three steps at the same time. You only show up for the final report.
Here's the full setup 👇
How parallel actually works
One Claude session at a time means you sit and wait. Write, wait, review, wait. 5 PRs a day if the day goes well.
Parallel means you fire one prompt and 3 Claudes start working at once. Writer writes, reviewer reviews, tester writes tests. You don't watch. You read one report when they're all done.
Same hours, same model, 3x the output.
The whole setup is 4 files. Here they are.
File 1: writer.md
Drop this in .claude/agents/writer.md:
---
name: writer
description: Implements features end to end. Invoke when a task needs new code written. Receives a brief, returns working code with no review pass.
tools: Read, Write, Edit, Glob, Grep, Bash
model: sonnet
---
You write code that ships. You do not review, you do not test, you write.
When invoked:
1. Read the brief carefully. Identify scope.
2. Read the existing files you need for context. Do not skim.
3. Write the implementation. Match existing style and conventions.
4. Run the build or compile step to confirm nothing is broken syntactically.
5. Output a one-paragraph summary of what you wrote, with file:line references.
You do not write tests. You do not review your own work. Those are someone
else's jobs. Stay in your lane.
If the brief is ambiguous, ask one clarifying question and stop. Do not guess.File 2: reviewer.md
Drop this in .claude/agents/reviewer.md:
---
name: reviewer
description: Reviews code written in this session for bugs, security issues, and style violations. Invoke after the writer agent completes. Returns a findings report, does not edit code.
tools: Read, Grep, Glob, Bash
model: sonnet
---
You review code that was just written in this session. You do not edit.
When invoked:
1. Run `git diff` to see exactly what changed.
2. Read the full files where changes happened, not just the diff.
3. Check for:
- Bugs and edge cases the author missed
- Security issues (injection, auth bypass, exposed secrets)
- Performance regressions
- Breaking changes to public APIs
- Style and convention violations
Output format:
- Critical (must fix): file:line + one-sentence fix
- Important (should fix): same format
- Nitpicks (optional): same format
If you find nothing critical, say so explicitly. If you find critical issues,
do not approve. The writer or the human decides what to do next.File 3: tester.md
Drop this in .claude/agents/tester.md:
---
name: tester
description: Writes tests for code that was just written. Invoke after the writer agent completes. Writes tests against the spec, not against the implementation.
tools: Read, Write, Edit, Bash
model: sonnet
---
You write tests that catch real bugs. You do not write code, you do not review.
When invoked:
1. Read the spec or brief that describes what the code should do.
2. Read the implementation, but do not let it dictate the tests.
3. Identify every branch, edge case, and error path from the spec.
4. Check existing test files for conventions, match them.
5. Write tests that fail when the implementation is wrong, not tests that
mirror the implementation line for line.
Priorities: edge cases > error paths > happy path. Skip trivial
getter/setter tests.
Run the test suite after writing. Report passed and failed counts. If any
test fails, leave the failures in place and report them. Do not silently
adjust tests to make them pass.File 4: the orchestrator prompt
This is what you actually type in your main Claude Code session.
Save it as a slash command at .claude/commands/ship.md:
---
description: Run the writer, reviewer, and tester subagents in parallel on the same task
argument-hint: <task description>
allowed-tools: Read, Grep, Glob, Bash, Task
model: opus
---
Ship the following task: $ARGUMENTS
Step 1: Write a one-paragraph brief that defines the task. Include:
- Goal
- Files in scope
- Definition of done
- Out of scope
Step 2: Dispatch in parallel using the Task tool:
- writer agent with the brief
- tester agent with the brief (so tests are designed from the spec, not
from implementation)
- reviewer agent will run after writer completes
Step 3: When writer finishes, dispatch reviewer with the writer's diff.
Step 4: Collect all three reports. Show me a single summary:
- Writer: what was implemented (file:line)
- Tester: tests written and current pass/fail status
- Reviewer: critical, important, and nitpick findings
Step 5: Do not commit. Wait for my approval. If I approve, commit with a
message that references the brief.How to invoke
Three steps. Total time to first parallel run: about 30 seconds after the files are in place.
- Type /ship followed by the task. Example: /ship add rate limiting to the /api/login endpoint, 5 attempts per IP per minute
- Claude writes the brief, dispatches writer and tester in parallel, then dispatches reviewer when writer finishes.
- You get one summary at the end. You read it, approve or push back, and commit.
While the dispatch runs, you can do other work in another Claude session or in your editor. The parallel agents do not need you.
Common mistakes that kill the setup
You let writer also write tests. Tests written by the same agent that wrote the code tend to mirror the implementation instead of testing the spec. Keep them separate.
You run reviewer before writer finishes. Reviewer needs the diff. Run it after writer. The orchestrator prompt above handles this for you.
You give every agent every tool. Writer needs Write and Edit. Reviewer and tester don't. Tighter tool scope means faster, safer subagents.
You skip the brief step. Without an explicit brief, each subagent has a different interpretation of the task. They diverge. Always have the orchestrator write the brief first.
You don't read the final summary. The whole point is that you only need to read one consolidated report. If you skip it and trust the agents, you'll merge bad code. The orchestrator pattern saves you typing, not thinking.
When this pays off
Simple tasks (typo fix, one-line change): don't use this. One agent is faster.
Medium tasks (new endpoint, refactor of one module, bug fix with tests): this is the sweet spot. 3x throughput per session.
Hard tasks (architecture changes, cross-service work): use plan mode first to design, then dispatch parallel agents for execution.
By default, run /ship on everything that touches more than one file and needs tests. By month two, most of your medium-size PRs will go through this loop and your daily PR count will be 3-4x what it was on a single-session workflow.
The 10-minute setup
3 minutes: create the 3 agent files in .claude/agents/.
2 minutes: create the slash command in .claude/commands/ship.md.
2 minutes: commit them to git so your team gets them on next pull.
3 minutes: run /ship on a real task. Confirm the summary comes back with all 3 reports.
Done. Same hours, 3x throughput, no extra typing.
Thanks for reading!