Isolated dev environments, one per git worktree: ports, env, and DB slices as agent tools.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent — or use 1-click editor setup below.
One-click editor setup isn’t available for this listing yet — we don’t have a confirmed install command, and we’d rather show nothing than point your editor at the wrong package or host. Follow the project’s own setup instructions, linked above.
One isolated local world per git worktree — ports, env, database, URLs.
So a swarm of coding agents runs in parallel on one machine without anything colliding.
Docs · Quickstart · Adapters · Commands · For agents · How it works · Troubleshooting
docker-compose was built for one process at a time. Binky is built for fifteen at once.
Status: alpha. The core works end to end — worktree isolation, ports, adapters, supervision, reconciler, admission, proxy, HTTPS. The config format is stable; the CLI may still move.
You point three agents at the same repo. The second one runs pnpm dev and gets EADDRINUSE.
The third runs your migrations and drops the table the first was reading. You start hand-editing
.env files, and now you're the scheduler.
Binky is the scheduler. One binky up <branch> per agent, and each gets its own ports, its own
database, its own URLs — from the same committed config.
Python 3.11+ and git, on Linux or Windows — the two platforms Binky is tested on for real. macOS isn't a supported target yet; a well-tested port would be a welcome contribution.
Or from a clone, to run the unreleased main or to hack on it:
Adapters that need a driver ship as extras — installing Binky for Redis shouldn't pull boto3:
Already have a docker-compose.yml? Start from it:
Or write it by hand — this is the whole config:
Then bring worktrees up in parallel:
Two branches, four processes, four ports nobody chose by hand. Hand a worktree's coordinates to whoever needs them — a shell, an agent, a test run:
And the rest of the lifecycle:
Nothing is hardcoded and nothing is discovered at runtime: every process boots already knowing the whole port map, its own and its dependencies'.
One rule to internalise. A service gets a port when it declares
urlorports— asking is explicit. A service with neither gets none, which is correct for a worker or a one-shot job, and a trap if you then write${self.port}in itscmd. Unknown tokens are left alone rather than blanked, so the literal${self.port}reaches the shell and the process dies on its own argument parsing.binky checkwarns when a service does this.
The claim is that N isolated worlds shouldn't cost N times one world. Measured, not asserted —
benchmarks/worlds.py is in this repo and reproduces the table below (postgres:16, 200,000 rows
per world, Docker Desktop on Windows 11):
| worlds | RAM: a container each | RAM: Binky | time: a container each | time: Binky |
|---|---|---|---|---|
| 1 | 150 MiB | 174 MiB | 6s | 4s |
| 2 | 298 MiB | 182 MiB | 11s | 6s |
| 4 | 596 MiB | 228 MiB | 20s | 10s |
| 8 | 1197 MiB | 295 MiB | 40s | 16s |
The 8th world costs +150 MiB and +4.8s as its own container, or +17 MiB and +1.7s under Binky.
Read the first row too. At one world Binky is behind — it pays for a server plus a golden
template nobody is using yet, and only earns that back on the second. And disk is not a win:
CREATE DATABASE ... TEMPLATE is a file copy, not copy-on-write, so every world is still a full
copy of the rows. What Binky removes is the server per world, not the bytes per world. It also
doesn't make your own app processes cheaper — one dev server per worktree costs the same either way.
Worth saying plainly, because the first row of that table already says it:
An adapter carves an isolated slice of one shared server — a database, a key prefix, a bucket — instead of running one server per worktree. 16 names, 10 implementations, every one exercised against a real server in CI.
| slice | adapters |
|---|---|
| a database | postgres · mysql · mariadb · percona · mongodb · clickhouse |
| a key prefix | redis · valkey |
| a bucket / prefix | s3 · minio |
| a vhost / topic prefix | rabbitmq · kafka · redpanda |
| a collection | qdrant |
| an index prefix | elasticsearch · opensearch |
Protocol-compatible names share one implementation rather than a copy of it — valkey is the Redis
adapter, percona is the MySQL one, opensearch is the Elasticsearch one.
clone_from: pay for migrate+seed onceWith clone_from, the first binky up builds a golden template — provision, migrate, seed —
and every worktree after that is a copy of it. The template is keyed by a hash of your migrate and
seed commands, so changing either rebuilds it automatically.
Supported where the server can copy a slice server-side (postgres, mysql, mariadb, percona,
mongodb). Where it isn't, or where a clone fails on something environmental — a client binary too
old to authenticate, a missing grant — Binky falls back to provision+migrate+seed for that
worktree and logs clone_fallback. Correctness never depends on cloning; only speed does.
One sharp edge worth knowing: the hash covers the migrate and seed commands, not the files they
call. Editing a script those commands run does not rebuild the template — delete its marker under
~/.binky/golden/ to force one.
Two tiers, one contract. Both implement the same four verbs:
| verb | does |
|---|---|
provision(slice) | create the slice (CREATE DATABASE ...) |
resolve(slice) | return its address → ${db.url} |
teardown(slice) | destroy it |
capabilities() | what it supports, e.g. {"clone": true} |
In-process adapters are Python classes in this repo, discovered by name. External adapters
are executables in any language, discovered as binky-adapter-<name> on PATH and driven over a
one-shot subprocess + JSON protocol:
Python authors get the protocol for free — binky.adapter_sdk.run() bridges a normal adapter class
to it. See examples/adapters/filestore.py for a complete,
dependency-free one in 30 lines.
Factual signals from GitHub, npm, and our automated checks — not a rating.
No reviews yet — be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/binky)<a href="https://allmcps.com/mcp/binky"><img src="https://allmcps.com/api/badge/binky?style=directory" alt="Binky on AllMCPs" /></a>