CI/CD for agent-speed development

Merge at the speed your agents ship.

AI agents open tens of PRs an hour. A serialized merge queue lands one per CI cycle, and every PR behind it goes stale. Conveyor replaces the lock with optimistic concurrency — speculative merge trains, a fast/full gate split, automated post-merge repair, and PRs that regenerate instead of rebase. No server, no database: state lives in git refs, logic runs in your existing GitHub Actions.

6 PRs/h
Serialized merge queue with a 10-minute check: throughput capped at 1 ÷ CI latency.
48 PRs/h
Conveyor with the same 10-minute check and batch size 8: positions tested in parallel against the predicted future main.

Four pillars

Pillar 1Fast signal

A cheap, change-scoped check gates merging in minutes; the heavy suite moves post-merge and runs continuously.

Pillar 2Merge trains

Queued PRs are tested on top of each other's predicted merges, in parallel. Cumulative positions make failure attribution free.

Pillar 3Auto-repair

Post-merge failures bisect to a culprit and dispatch a fix-forward agent — or an auto-revert into the urgent lane.

Pillar 4Intents, not diffs

Agent PRs carry a replayable task manifest. Conflicts and evictions regenerate against fresh main; write-set claims prevent most conflicts up front.

How a train lands

main ──●  (current head)
        \
         ●──────── conveyor/train/1   = main + PR#101   ✓ green
          \
           ●─────── conveyor/train/2  = main + PR#101 + PR#104   ✓ green
            \
             ●────── conveyor/train/3 = main + PR#101 + PR#104 + PR#107   ● running

# positions 1–2 green → main fast-forwards to train/2's merge commit.
# The SHA that was tested is byte-for-byte the SHA that lands.

Quick start

npm install -g conveyor-ci
cd your-repo
conveyor init                # conveyor.yml + workflows + labels

# conveyor.yml — the two mandatory lines:
fast_check:
  run: pnpm turbo run test --filter="...[origin/main]"   # target < 10 min
full_check:
  run: pnpm test && pnpm playwright test                 # runs post-merge

conveyor merge 101 102 103   # enqueue; the train does the rest

Dogfooded from day one. The Conveyor repository merges through its own train: main requires a green fast-check on the exact landed SHA, direct pushes are disabled, and every change since bootstrap has ridden a train position — including the fixes for the three bugs the first two PRs uncovered.