Try what landed
sluice preview brings a revision the branch landed up on your
repository’s own stack, at addresses a person opens, and keeps it
until it is released. One per landing, side by side, nothing kept
checked out by hand. Previews.
A merge queue for agents working in parallel worktrees. Agents submit. sluice tests each submission exactly as it would land, names the one that broke the build, and moves the branch only to code that passed.
In a Claude Code session in a terminal, install the plugin, then ask Claude
to set sluice up in your repository. It installs the sluice binary too,
asking first.
/plugin install sluice --marketplace agentplot/sluiceNeither? Install by hand and follow the walkthrough.
Run ten coding agents in ten worktrees and each one’s tests pass on its own. Merge them and the branch breaks, because nobody tested the combination. Let the agents merge for themselves and they race, rebase over each other’s work, and can’t tell whose change broke the build.
sluice takes merging away from the agents. Each one finishes its work and submits it. sluice queues the submissions, tests each one on top of everything queued ahead of it, and lands it only if that exact combination passes.
An agent finishes its work in its own worktree and submits it to a branch. The submission joins that branch’s queue. No agent merges.
Each submission is tested on top of everything queued ahead of it: the branch, plus every submission ahead, plus this one, checked out fresh in its own worktree. Several combinations run at once.
When a combination fails, sluice waits for a result on every combination ahead, works out the one submission at fault and tells only that agent, with the failing tests and their logs. The rest are formed again without it, and the tests that already passed are replayed, not run.
A combination that passes lands as a merge commit carrying exactly the tree that passed. A git hook refuses every other update to the branch, and sluice moves it only from the revision it tested on.
Try what landed
sluice preview brings a revision the branch landed up on your
repository’s own stack, at addresses a person opens, and keeps it
until it is released. One per landing, side by side, nothing kept
checked out by hand. Previews.
No daemon
sluice keeps nothing running itself. A waiting sluice submit drives
the queue while it waits; sluice run, or sluice step from cron,
does the same for a host. What a preview leaves up, your own tools
keep until it is released. Every decision is written to plain files
before it is acted on, so a crash at any point resumes from the files.
sluice is the family’s landing step. headwater and eddy notice what changed, millpond keeps the inbox, flume launches the work in a worktree and sounding works a question through; sluice lands what they make. Each tool stands alone, and sluice is the one in use today.
One loop, from what is noticed to what lands. Flywheel is the Method it belongs to.
nix profile install github:agentplot/sluiceOther ways: a release binary for macOS on Apple silicon and Linux on
x86-64 and ARM, cargo install --locked --git https://github.com/agentplot/sluice sluice
with Rust 1.98 or later, or the flake as an input. Each installs two
executables: sluice, and wt-submit, which
worktrunk runs as wt submit.
curl -fsSL https://github.com/agentplot/sluice/releases/latest/download/sluice-aarch64-darwin.tar.gz \ | tar -xz -C ~/.local/bin sluice wt-submit1. Say what gates the branch. Commit .config/sluice.toml:
[tests]runner = "command" # or "moon", to run only what a change affectscommand = "make test"
[branches.main]parallel = 4 # combinations under test at oncesluice reads this file from the branch itself, never from a submission, so no submission can loosen the rules that judge it.
2. Protect the branch, once per repository:
sluice protect3. Submit from an agent’s worktree, with its work committed:
sluice submit main # or: wt submit mainIt waits, and says what happened:
submission 3 to main · 1 queued ahead (#2)testing main + #2 + #3 · 4 tasks to run, 2 replayedpassed · landed as 9f2c1e4or, when this submission broke the combination:
failed: tests:t-cards on main + #2 + #3 (5b81d07) #2 passed on its own, so the failure is from this submission log of tests:t-cards: /…/sluice/.logs/main/c4/tests:t-cards.logfix it in your worktree and submit againThe exit code says the same:
| exit | meaning |
|---|---|
0 | landed |
1 | failed |
2 | a conflict or a refusal |
130 | stopped with Ctrl-C; the submission stays queued |
A complete setup, with moon, a sandbox, a build cache and two tiers of branches, is the walkthrough. The whole configuration is in the reference.