# Several agents, one repository

> How several coding agents share one Git repository without races, double landings or unchecked merges.

Source: https://getbay.io/docs/several-agents (HTML).

Give each agent its own change and its own view, and let one process land changes on trunk. With bay, an agent submits a change once. An executor checks the exact candidate and lands it. Agents never push or merge trunk by hand, and every refusal names the next step.

## What goes wrong without it

- Two agents push at once. One push fails, and its agent retries, merges or force-pushes.
- A check passes on a branch, but trunk moved before the merge. What lands was never checked.
- A retry after a lost reply lands the same work twice.
- An agent edits a file that another change just changed, and nobody tells it until a merge conflict.

## What bay does

| Need | bay |
|---|---|
| Work apart | `bay start <intent> --paths <paths>` opens a change and a sparse view of its paths. |
| Submit once | `bay land` returns at once. An executor finishes the landing after the agent leaves. |
| Land what was checked | The executor checks the exact candidate. Trunk gets only that candidate. |
| Trunk moved meanwhile | `TRUNK_MOVED`: bay retries once more, then joins the queue. |
| No double landing | bay records each step by op id, so a crash loses no work and a retry never lands twice. |
| A stale input | `INPUT_CHANGED` refuses the landing until the agent reads the new version and checks again. |
| See the others | `bay status --fleet` shows every machine and session. `bay watch` lists what changed. |
| Ask another agent | `bay talk` asks one agent for one change, decision or check, with a reply time. |
| Know why it landed | Evidence of every check stays in Git, signed once keys are enrolled. |

## Limits

- One trunk lands at most 1,440 divided by the check minutes changes a day.
- bay ships for macOS and Linux. On Windows, use the Linux build inside WSL.
- Early refusals in hooks need Claude Code today; with other agents, a stale change still cannot land.

## Try it

Install bay, then follow the Quickstart to land a first change.

```sh
curl -fsSL https://getbay.io/install.sh | sh
```
