JailBee Latest JailBee 1.7: run a dozen agents from one dashboard News Docs Source code v1.7.3 GPL-3.0
JailBee logo: a bee behind bars
JailBee by GISGRO

Isolated dev environments for Linux

One container per branch. All of them at once.

JailBee gives each branch a full system container: its own services and, if you enable them, its own Docker daemon, IDE and browser. Build one golden image, then run several stacks in parallel on one host, each with its own localhost.

Install
pipx install jailbee

Linux host required — see Requirements.

See it work.

jailbee 1.7 · narrated · 3:25

The 3-minute tour. What a container per branch gives an agent, how the dashboard tells you which of a dozen agents needs you, what to do with many containers at once, and the two layers that hold the network in.

Every JailBee screen in it is a real screenshot; the voice is synthesized. Nothing loads from YouTube until you press play · Watch on YouTube · More on the channel

The dashboard's container table with its AI column ringed: green dots for agents at work, hollow ones for idle agents, a half-filled one for an agent whose shell job is still running, and a legend explaining each mark
jailbee dashboard

Which agent needs you. See which Claude Code sessions are working, waiting for you or idle. Scan the column, not the terminals.

A real screenshot from daily use; one internal repository name is blurred.

The details panel for one container: its state, network and address, a git table for the branch and two submodules, and the agent's last activity, last shell command and the start of its last message, ringed
jailbee dashboard · details panel

What it is doing. Inspect the branch and changed submodules, then catch up on Claude Code's latest tool call and message — without opening another terminal.

A real screenshot from daily use.

Four containers marked in the dashboard, the top bar reading 4 selected, and the bulk menu: Merge into, Update from base, Send commits to host, Restart, Stop, Network, Clear name and Destroy, each with how many of the marked containers it applies to
Space · Enter

Act on many. Mark containers and one menu acts on all of them, saying how many each action applies to: restart, stop and destroy in parallel, push and pull once per repo, or merge several agents' attempts into one branch.

Real screenshots from daily use.

$ jailbee new feat/login                   # a container for the branch
$ jailbee tmux feat-login                  # attach to its agent
$ jailbee ls                               # containers and supported agent states
$ jailbee fork feat-login feat-login-2     # a second attempt
$ jailbee git merge feat-login-2 --into feat-login
$ jailbee git pull feat-login --no-cleanup # commits home; keep the container for PR
$ jailbee pr feat-login                    # open or update the PR
$ jailbee destroy feat-login               # warns about detected work at risk
▶ Watch a real session
jailbee · jb for short

Or from the command line. Everything the dashboard does is a command — jailbee, or jb for short — so it scripts and works over SSH. On a terminal, a value you leave out is asked for; scripts pass it explicitly. jailbee console adds completion and history.

Container names in the list are examples. The session is a real recording: every command and every line of output is real, and the two stretches marked ×6 are sped up.

The problemTwo branches, one host, one of everything.

Port 8080 is taken. The second branch's dev server, database and Docker Compose project all want names the first branch already holds.

The database is shared. A migration written on one branch quietly changes what the other branch is testing against.

Switching costs twenty minutes. Stash, rebuild, reinstall, re-seed — and then do it again when you switch back.

The solutionParallel agents, separate stacks.

Point a coding agent at a branch and it gets a container to itself: its own working tree and its own services, with no other branch competing for the ports or the database. What you choose to share — caches, logins — stays shared.

The work stays one project the whole time. Each container is a branch of your repository, commits travel straight back to it when a run is worth keeping, and a container that goes wrong is thrown away rather than untangled.

Three branch containers running in parallel A branch line labelled main runs down the left. Three branches lead off it into three hexagonal cells, one each for feat/parser, fix/upload and pull request 482. Every cell holds an agent and the same port 8080, and every branch line is two-way, because commits travel back to the repository the containers came from. main feat/parser :8080 fix/upload :8080 pr/482 :8080
Isometric illustration: a hand slides an entrance reducer into the front of a beehive brood box that doubles as a server chassis, narrowing the opening the bees pass through.

A guarded entrance, not a sealed box.

Choose what your containers can reach. Strict mode limits direct traffic by IP and port; an HTTP(S) proxy handles hostname rules, including wildcards, for tools that use it. Two layers, covering different kinds of traffic.

Need wider access for an install or an experiment? Switch to loose mode, with optional timed return to strict mode. The network guide covers setup and expiry.

Need a database or an adb server on the host? Add an explicit port forward. These connections bypass the allowlist by design, and jailbee net status shows them alongside it, so you can see the access you have opened.

Your IDE and your browser, from inside the container.

Enable the desktop integrations to run your JetBrains IDE and browser inside the container, with native windows on your Wayland desktop and the branch's own localhost. You can also work remotely through RDP or waypipe ssh (setup guide).

Somewhere to let an agent work.

JailBee has first-class support for Claude Code: turn it on once and JailBee installs it in new containers, reusing a shared login, adding its required endpoints to the container's allowlist, and providing skills to drive jailbee itself. The same mechanism reaches other terminal coding agents too — see supported agents for the list and how to add your own. Enable autostart to launch the agent as part of the container's startup workflow. claude-jb runs the same Claude Code on other providers' models through a LiteLLM proxy (guide).

A disposable container makes it easier to let an agent work with fewer prompts. It is a workspace boundary, not a hostile multi-tenant one: whatever you share with the container — files, credentials, host services, and always the kernel — is within its reach. Review those connections before turning safeguards off — read the security model.

Isometric illustration: the same beehive brood box and server chassis, its front now a single sealed pane of glass rimmed in glowing amber; inside, four bees rebuild honeycomb amid drifting comb fragments, while the air outside the box is completely still.

What you get.

A shortcut for git. Commits move straight between your computer and a branch's container, and from one container into another, so you don't have to push to GitHub and pull again just to get code from one place to the other. Let two agents try the same change side by side, then merge the better one where you want it.

Your own Docker daemon. Enable the Docker stack and each container runs Docker and Compose of its own. Your Compose setup works unchanged, and no branch shares the host's daemon or its container names.

Set up once, reuse across branches. Reuse configured caches, tool settings and agent logins instead of starting from scratch. That shared state survives when you throw a container away.

Build once, manage in one place. New containers start from a golden image — cheap on a copy-on-write backend such as btrfs. The terminal dashboard brings every registered project together: open a shell, an IDE, a pull request or a diff from one place.

Submodules come along. Initialize them recursively on the host first; JailBee then sets them up in new containers and transports their commits in both directions. The git bridge handles the submodules as well as the parent repo.

Reach it from anywhere. An optional, key-only SSH service opens the dashboard, a restricted console or policy-limited commands from your laptop, and GUI apps can show up in a compatible RDP client or, through waypipe ssh, as native windows on your own desktop (remote GUI).

Not the only way to do this.

Four other tools solve neighbouring problems, and one of them puts a hypervisor where JailBee puts the kernel. Here is where each of them fits.

Tool What it is Pick it instead when
Dev Containers The standard devcontainer.json, implemented by VS Code, Codespaces and JetBrains. a shared toolchain is all you need — and it has to work on Windows and macOS too.
BranchBox A git worktree plus a Docker Compose project and a devcontainer, per feature. you want parallel branches cheaply and you trust what runs inside them.
nono A fence around one agent process, with a separate policy per tool it calls. one agent needs fine-grained rules rather than a system of its own. It can also be layered inside a container.
Docker Sandboxes A persistent microVM for an agent, with its own kernel and a deny-by-default network proxy. you need a separate-kernel boundary. Sandboxes persist across sessions, but do not share their Docker images and layers.
JailBee An unprivileged system container per branch — services, Docker, IDE and browser, sharing the host's kernel rather than booting a separate one. the runtime is the hard part: a stack that boots, listens and renders, several of them at once.

The kernel is the trade-off: sharing it is what lets a JailBee container be a full system without booting a second one, and also why a separate-kernel boundary is Docker Sandboxes' to offer, not JailBee's — the security model spells out what that means for an unattended agent.

Read the full comparison — what each tool does with your working tree, your credentials and the network, and what JailBee costs you.

Requirements.

Documentation.

News.

All news →

Subscribe via RSS