ecluse
Ephemeral local environments for coding agents — any stack.
Each git worktree gets its own slot — isolated ports, isolated services, isolated data. Works whether your stack runs in Docker, on the host, or a mix. No collisions, clean teardown.
You're running 4 Claude Code sessions in parallel. Each agent finishes its task and wants to verify — run the test suite, spin up the app, hit the endpoints. But port 3000 is taken. Agent 2 kills agent 1's server. Agent 3 waits. The verification loop that was supposed to run in parallel is now sequential. You're paying for 4 agents and getting the throughput of one.
ecluse gives each agent its own slot: isolated ports, its own services, its own infra. All 4 agents spin up, verify, and tear down independently. The full AI verification loop — build, migrate, test, e2e — runs in parallel, without collisions, without waiting.
Create worktree → Spin up env → Do work → Verify → PR → Teardown
ecluse up feat-foo # new worktree, isolated ports, isolated services
ecluse up fix-bar # parallel session, different slot, zero collisions
ecluse down feat-foo # clean teardown, nothing left behind
ecluse is French for "canal lock" — each session gets its own chamber, everything is isolated, nothing leaks between them.
How it works
The central concept is a slot — an integer from 1 to max_slots. Every resource is derived from the slot:
- Per-service port:
base_port + slot(e.g.apiatbase_port=3000, slot 1 → 3001, slot 2 → 3002) - Compose project name:
<prefix>_<slug> - Named volumes:
<volume>_<prefix>_<slug>
Three thin mode implementations share this slot primitive. Mode is selected once at init time and stored in .ecluse.toml.