Alternatives
Most ways of running several agents at once solve a different problem from turnstile's. Worktrees keep agents out of each other's files. Containers keep a mistake inside a box. Cloud agents move the work off your Mac. Job flags cap one tool. All of them are useful, and nearly all of them compose with turnstile rather than replace it.
| Approach | What it controls | Scope |
|---|---|---|
| Worktrees and orchestrators | Which files an agent can touch | Per agent |
| Containers and VMs | What an agent can reach, and its ceiling | Per container |
| Cloud agents | Whose machine the work runs on | Per session |
| Shell tools | How many wrapped commands run at once | Per command you remember to wrap |
| Build tool limits | One tool's internal parallelism | Per invocation |
| turnstile | What starts on the machine, and when | Every shell, repo, and agent |
The gap they share
Each of these draws its boundary around one agent, one container, or one tool. None of them has a view of the machine.
Three agents, each politely capped at four compile jobs, is twelve compile jobs. Three test runners, each sizing its worker pool from your core count, each believe they have the machine to themselves. Nothing in that picture is misconfigured, and the Mac still swaps.
turnstile draws the boundary around the machine instead. A swift test in one worktree knows about the npm run build in another, because both went through the same gate.
When you don't need turnstile
- One or two agents. A modern Mac absorbs that. Come back when you're running four.
- Far more RAM than your builds need. If your heaviest concurrent load still leaves headroom, gating buys you nothing.
- Everything heavy runs in the cloud. See cloud agents.
- One repo, one heavy command. A
semalias is less software to install. See shell tools.
What turnstile adds
- Admission by free memory and learned peaks, not by a job count you guessed.
- Classes with separate slots, so a browser suite and a type check aren't the same kind of load.
- Pressure relief once jobs are already running: lower parallelism, then pause, then kill a runaway.
- Your commands ahead of agents', and never paused.
- No per-project setup, and no hard failure if the daemon isn't there.
It also has real limits, and they're worth reading before you decide.