# Review a change with a panel

Ask two reviewers different questions about the same uncommitted change.
Each gets a project copy, so an unexpected agent edit stays out of your
working tree.

Use a Git repository with a change visible in `git diff HEAD`, and finish
the [Quickstart](https://runmar.sh/docs/quickstart.md) first. Both reviewers below use Claude
and the same Anthropic credential. The review covers staged and unstaged
changes to tracked files; it does not include untracked files.

## Run the panel

At the **marsh prompt**:

```sh
split {
  security: claude -p 'Review git diff HEAD for security defects. Do not edit files or start other agents. For each finding, give the file, line, and a concrete failure scenario. Say when you found none.'
  coverage: claude -p 'Review git diff HEAD for changed behavior that tests do not cover. Do not edit files or start other agents. Point to the behavior and the missing test; distinguish guesses from findings.'
} | join --keep
```

Both reviewers start from the same project snapshot, including uncommitted
work. The prompts name the same diff and assign different concerns. If you
want a committed branch reviewed instead, change **both** prompts to the
same base comparison, such as `git diff main...HEAD` when your base is
`main`.

Check each finding against the source and existing tests before making a fix.

If a reviewer edited files, `join` also shows that diff. Inspect it
separately from the findings and leave it unapplied unless you want the
change.

## Run checks without copies

Run the repository's real checks alongside the review or afterward. The
following recipe assumes your project already has working `make lint` and
`make typecheck` targets; substitute its documented commands if not. Verify
they work on Linux arm64 before using them here.

```sh
fanout {
  lint: make lint
  types: make typecheck
} | collect
```

`fanout` uses your real files. Only use this form when the commands can
safely share a directory: checks that rewrite the same cache, fixture, or
generated file may interfere with each other. `collect` prints results in
declaration order and reports a nonzero status if a branch fails. These
checks run as you in the shell VM, without confinement to the project.

## Finish the review

Make or request the intended fix, run the relevant checks,
and review the resulting diff. Remove the saved panel with the split ID
printed by `join`:

```sh
marsh splits rm YOUR_SPLIT_ID
```

## Limits and failure modes

This panel starts two billed agent runs. If a reviewer fails, `join`
reports the failure and keeps the copies. Ctrl-C stops the foreground panel
and its child jobs. For copy restrictions and capture limits, see
[Split and join](https://runmar.sh/docs/split.md).

## Next

[Make independent changes in parallel](https://runmar.sh/docs/guides/race-two-agents.md) uses split for
edits. [Let an agent farm out work](https://runmar.sh/docs/guides/farm-out-work.md) starts a review from
inside another job. See [Split and join](https://runmar.sh/docs/split.md) for capture limits and
full patch paths.
