of AI-agent pull requests conflict when merged.
Parallel agents don't know about each other. They edit the same interfaces, regenerate the same lockfiles, and rename what a sibling just depended on.
AgenticFlict study · 142,000+ agent pull requests
Hand out the work. Walk away. Strandline plans, merges, verifies and lands the work of every agent vendor, on every code host.
A fleet of agents on a fleet of branches each pass their own tests. Then the branches meet: text conflicts, broken builds, and semantic conflicts where every piece is right and the whole is wrong.
strand·line/ˈstrandlʌɪn/noun. The line along a shore where the tide leaves what it carried. Here: the line where a fleet's work lands, verified.
of AI-agent pull requests conflict when merged.
Parallel agents don't know about each other. They edit the same interfaces, regenerate the same lockfiles, and rename what a sibling just depended on.
AgenticFlict study · 142,000+ agent pull requests
of agent pairs from different vendors conflict. Same vendor: 19.8%.
Different models make different structural choices. Mixing Claude Code, Codex, Cursor and Copilot doubles the collision rate, and most real fleets are mixed.
AgenticFlict study · pairwise conflict rate
An inbox for the few things only a human can decide, and a receipt on every pull request.
Each decision arrives with a plain-English reason and the actions that resolve it. Resolve the two here.
Codex made fetchWithRetry() retry on 5xx only. Cursor's branch relies on it retrying on 429 for the billing poller. Both branches pass alone; combined, the poller gives up under rate limits. Pick the contract.
The repair agent can fix the combined build by adding a parameter to exportReport(), which is in the published SDK. Policy says a human approves public API changes.
What was combined, which checks ran, what the repair agent changed and what the guard checked.
Every agent is a strand on its way to main. Collisions are predicted and reordered before anyone hits them. Click an agent for its details.
Every stage is automatic. A human sees a decision only when one is genuinely needed. The normal state: 20 agents, 0 decisions.
Tasks come in from GitHub Issues, Linear and Jira and go out to any vendor's agents. Each is scored for overlap. Work that would collide is ordered or split.
When another agent changes an interface you depend on, you hear mid-task, not at review. When main moves, agent branches are rebased and re-verified automatically.
Merges on structure, not lines. Lockfiles and manifests are regenerated instead of hand-resolved.
Every branch passed alone. The combined result is built and tested in a sandbox before anyone trusts it.
A failure goes back to the agent that caused it. What remains is fixed under a guard that rejects deleted tests, weakened assertions and hard-coded answers, then re-verified on the full suite.
Dependent work lands in order as a stack. Review is tiered by risk, so a one-line fix and an auth change get different treatment. Every PR gets a receipt: what was combined, checked and repaired.
Left alone, a repair agent will delete the failing test. Every repair, from any model, passes through a deterministic guard that rejects anything that makes the suite easier instead of the code right, then re-verifies on the full suite.
Generation keeps getting cheaper. Verification is the scarce part. Every new model makes Strandline better, and the guard never changes.
Open-source CLI and git merge driver.
SlackDecisions and alerts where the team already is.Linear · JiraTasks in, receipts back on the issue.VS CodeHuman engineers claim files and see the fleet. They are part of it.Bitbucket, Azure DevOpsMore code hosts. coming soon❯ strandline status acme/platform · main@a81f2c3 · queue: mergify agents 20 working · 3 idle claude-code 8 · codex 5 · cursor 5 · copilot 2 claims 64 files · 0 contested forecast 1 predicted · billing/retry.ts codex/03 × cursor/02 reordered, no action needed verify ✓ 12 passing · 1 running · sandbox 4m12s avg repair 1 repaired · guard ✓ ✓ ✓ re-verified on the full suite landed 7 today · receipts posted · 0 lines lost decisions 0 ← nothing needs you ❯
Strandline coordinates on metadata. Merging, building and testing run where your code already lives.
The coordination service sees task names, file paths and receipts. Never file contents.
The CLI and merge driver run on your machines and CI runners. Only task metadata and receipts are coordinated.
Combined builds and tests run in isolated, ephemeral sandboxes. No network by default.
Every merge, repair and decision is recorded with who, what and why. SIEM export coming soon
Run it in your own VPC. SAML and OIDC. Policies decide which changes always need a human. SCIM coming soon
Strandline never blocks your team. If it is down, work carries on with plain git and your normal CI, and it catches up after.
Open-source CLI and merge driver. Hosted coordination is priced per verified merge.
We're onboarding a small number of teams running real fleets.
We're onboarding a small number of teams running real agent fleets. Expect a reply within a few days.
Thanks. We read every one and reply within a few days.
The open-source CLI and merge driver ship to design partners first. Request access and we'll send the install instructions and a repo to try it on.
Each branch passes alone. Combined, the poller stops retrying on 429 and gives up under rate limits.
export async function fetchWithRetry( url: string, - opts: { on?: number[] } = { on: [429, 500, 502, 503] } + opts: { on?: number[] } = { on: [500, 502, 503] } ) { for (let i = 0; i < 4; i++) { const res = await fetch(url); if (!opts.on!.includes(res.status)) return res; await sleep(backoff(i)); }
export async function pollInvoices() { + // relies on fetchWithRetry handling 429 from Stripe + const res = await fetchWithRetry(STRIPE_INVOICES); + if (!res.ok) throw new PollError(res.status); + return parseInvoices(await res.json()); } // test: polls under rate limit // expects 3 retries on 429 before success