Start here
Several agents, one repository
How several coding agents share one Git repository without races, double landings or unchecked merges.
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.
curl -fsSL https://getbay.io/install.sh | sh