# bay 0.3.1: Git made simple for many coding agents

> bay makes Git simple when many coding agents work in one codebase. Each agent submits once and moves on, and bay merges only what passed on the latest main.

Gudjon Gudjonsson, Founder and CEO of OZ. 2026-10-22. Source: https://getbay.io/blog/bay-0-3-1 (HTML).

bay 0.3.1 is out today. bay is for teams that run many coding agents in one codebase, often on the same files. Git itself is fine, but the human-paced branch and merge workflow breaks at that speed. Branches go stale, two changes that each passed break main together, and agents wait hours to merge. bay makes that part simple again, on the Git you already have. Point it at one branch, such as `main` or `dev`, and it stays there.

## Simple by design

Simple is hard. A small surface takes careful architecture, and many hard choices about what to leave out. Behind a few commands, bay builds each change on the latest main and checks again when main moves. It keeps evidence of every check, and turns every refusal into one exact next step. That work and judgment stay inside bay's design, so what agents and people see stays small. Simplicity guides every part of bay, and 0.3.1 takes it further.

- **A few commands**: an agent starts a change, merges it, and reads its status.
- **Four words for people**: `bay save`, `bay waiting`, `bay approve` and `bay undo`.
- **One branch, no sprawl**: bay merges into the one branch you name, and agents create no branches.
- **One word per idea**: commands, results, help and this site all say main, merge, runner and plugin.
- **Plain sentences**: every result carries one sentence a person can read, with no Git words.
- **Kept small on purpose**: a test counts bay's commands, flags and reason codes, so growth must simplify something.

## How it works

An agent uses a few commands, and a runner does the rest.

- **Start**: `bay start CARD-123` opens a view with only the paths that one change needs.
- **Merge**: `bay merge` submits the change and returns at once, so the agent moves on.
- **Check**: a runner combines the change with the latest main and checks that exact result.
- **Merged or refused**: it merges what passed, or names one exact repair for the agent.
- **Status**: `bay status` says what each change does now, and why it waits.
- **Undo**: `bay undo` adds a new change that takes one merge back, and history stays as it was.

## What you can count on

- **bay merges what it checked**: if main moves first, bay checks again before it merges.
- **Unknown never passes**: a check that crashes, times out or finds too few tests blocks the merge.
- **Stale work is caught**: when code a change depends on merges, its agent hears what changed.
- **Refusals say what to do**: each one names a fixed reason, the next step, and when to retry.

> Each of these has a failure test that must pass before every release, signed in Git notes.

## Built for many agents at once

- **Hooks**: with Claude Code, bay refuses unsafe Git commands, such as a force push, before they run.
- **One view of the fleet**: `bay status --fleet` shows every live change, machine and runner.
- **People decide where it matters**: a person approves or rejects risky changes with their own key.
- **From dev to production**: `staging` and `production` move only to commits already checked upstream.

## Yours, on your machines

bay is free and open source under the MIT licence, with no paid tier and no account. It runs no server and sends no telemetry, so your code goes only to your own Git remote. It is one small program for macOS and Linux, and an agent can read every line. Use it with any Git host, or host main yourself with `bay host init`.

## Get started

Install bay, then follow the quickstart to merge your first change. 0.x means a minor release can still change a command, and the changelog names each change.
