The landing layer for agent fleets
Submit once. Land what was checked.
bay is a small open-source command for coding agents that share one Git repository. An agent submits its change once and moves on. bay checks the exact result and lands it on trunk. An executor does the rest, so no person has to watch.
Rust · one binary · macOS · Linux · Windows · ARM and Intel · MIT · in development
Sound familiar?
Is Git now the limit of your agent fleet?
Do your agents finish in minutes, then wait an hour to land?
bay land returns at once. An executor finishes the landing.
Does someone have to watch each merge until it finishes?
The agent can leave. The executor checks, lands or asks for one exact repair.
Can you show which checks the commit on trunk passed?
bay lands only the exact candidate that passed. It keeps the evidence in Git, signed once you enroll keys.
Do flaky or silent checks still get through as green?
A check that crashes, times out or finds no tests blocks the landing. A check that passed once and failed once on the same tree is flaky, never green.
Do your agents retry in loops after a refusal?
Each refusal names a fixed reason, what the agent can do, and when to retry. bay refuses an unchanged retry at once, without doing the work again.
Does each new agent pay for a full clone?
From a warm machine cache, bay start opens a view of only the paths one change needs, with no full clone.
Built to cut · each agent session, against a session that starts from a full clone
These are targets, not results. We will release the benchmark scripts and raw results, so anyone can run them again.
Agents submit and leave.
An executor finishes the landing.
Nothing lands unchecked.
Trunk gets only the exact candidate that passed.
Unknown never passes.
A crashed or silent check blocks the landing.
Refusals say what to do.
Each one names the next step for the agent.
The fleet, as one command shows it
Click a session
Five sessions on three machines. One change landed after its agent left. One agent learned that an input changed. One change stopped because a check did not answer.
This is an example of the bay status --fleet view. The ids and paths are examples.
Seven names · one meaning each
- trunk
The one shared branch. bay only adds to it.
- change
One id for one intended outcome. The id stays when the agent revises the work.
- view
A sparse checkout of the paths that one change needs.
- candidate
The merged snapshot that bay builds from a change and trunk, then checks and lands.
- check
Any command that tests a candidate and returns a result.
- evidence
A signed record of what one check, review or runtime observation saw on one candidate.
- executor
The process that runs the checks on a candidate and lands it on trunk.
What bay promises
What lands is what was checked.
bay first builds a candidate from the change and trunk. It checks that exact candidate. bay lands the candidate only if trunk did not move. If trunk moved, bay builds a new candidate and checks again. The commit on trunk is the commit that passed.
Submit once. Walk away.
bay land returns at once. An executor does the rest: bay executor run, or your CI through the same contract. It checks, lands, recovers, or asks for one exact repair. If a reply gets lost, bay finds the first result and does not land twice.
{ "decision": "queued",
"published": false,
"waiting_for": "executor_capacity",
"next": "running" }Unknown is never a pass.
A check that crashes, times out or finds no tests blocks the landing. Finished checks keep their results. A resume runs only the missing checks.
Stale work stops. Repair stays open.
When an input of your change lands, bay tells the agent what changed. The agent can still edit. It cannot land until it checks again.
Every refusal says what to do next.
Each refusal has a fixed reason code. It also lists what the agent can still do, and when a retry can work. bay refuses an unchanged retry at once, so no agent loops.
{ "schema": "bay.result/1",
"decision": "blocked",
"reason": "MERGE_CONFLICT",
"detail": { "paths": ["src/orders/client.rs"] },
"allowed": ["read", "refresh", "repair"],
"retry_when": "conflict_paths_changed" }Git is the only store.
Changes, evidence and events are Git commits, notes and refs. There is no database and no server. You can read and recover everything with plain Git, on the host you have.
A view costs what the task reads.
bay start opens only the paths that one change needs. All views on one machine share one cache. bay never reads a missing path as a deletion.
Lightweight by design
Small core. Plug-in edges.
bay owns three things: identity, validity and recovery. Adapters do the rest. Your repository stays a plain Git repository. Five commands make the daily loop.
One small binary
bay is one Rust binary that calls the git you already have. We build it for macOS, Linux and Windows, on ARM and Intel. You can also build it yourself with cargo build. It works on SHA-256 and reftable repositories, the Git 3.0 defaults. Every failure test also runs on them.
No database, no server
Every lasting fact is a Git object that a ref can reach. Local files are only caches. To land changes, you need one executor process or your CI.
Any Git host
Use GitHub, GitLab, a bare repository over SSH, or bay host init on your own machine.
Claude Code first
bay hook refuses a write that bay knows is stale. Other agent tools use the same JSON interface.
Your checks, as they are
A check is any command that returns a bay.check.result/1 document. Messages and deploy steps are adapters too.
No model in the decision
bay never calls a model, and it is not a review tool. A review is one more piece of evidence.
Roadmap
Three steps, then we open it.
Now
Reliable landing
Submit once and land the exact candidate that passed. An executor finishes the work after the agent leaves. Every crash and lost reply recovers without a second landing.
Next
Dependency-aware work
bay watchtells an agent when an input it reads changes. Claude Code hooks refuse a stale write before it happens.bay status --fleetshows every agent session live.Later
Evidence-driven completion
Runtime evidence joins check evidence, with completion profiles and check-cost reports. Failures replay on the real landing path.
bay undolands a change that reverses one landing.Launch
Open to everyone
The repository opens under the MIT licence. Ready binaries ship for macOS, Linux and Windows, on ARM and Intel. We release the benchmark against a full-clone agent session, with its scripts and raw results.
Let your agents land.
bay is for teams that run many coding agents on one Git repository. The repository opens soon under the MIT licence. Tell us about your fleet, and we will tell you when it opens.
hello@getbay.io