Skip to main content

JailBee

CI License: GPL v3

JailBee logo

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.

An agent needs the network to work, so the question is never whether it gets out — it is how wide you leave the entrance. That is what jailbee net strict|loose sets.

JailBee runs isolated, per-branch development environments in Incus system containers. Spin up multiple full stacks in parallel on one host — each with its own services, Docker daemon, IDE, and browser — without port conflicts, Docker name clashes, or shared-database collisions.

The CLI is jailbee, or jb for short.

JailBee is project-agnostic: every repo supplies its own .jailbee/config.yaml. The golden image ships stack-neutral by default — language toolchains (JDK, Node, Python venv/pip, Docker) are bundled but opt-in, enabled per repo via golden.stacks / golden.enable_snippets. It was built at GISGRO, which is its origin, not its scope.

Key features

  • Per-branch isolation — one full-stack container per git branch, running in parallel without port or Docker-name collisions.
  • Host↔container git bridge — the container acts as a git remote; move commits with jailbee git push/pull/checkout instead of round-tripping through GitHub.
  • Nested Dockersecurity.nesting=true out of the box on Ubuntu 26.04.
  • GUI passthrough — launch a JetBrains IDE (jailbee ide) and Chrome (jailbee chrome) from inside a container onto your Wayland session.
  • Network modes — per-container egress allowlist with strict and loose policies (jailbee net), safe for unattended agent runs.
  • Fast, cheap containers — copy-on-write clones of one golden image; a live TUI dashboard (jailbee dashboard) or Qt GUI dashboard (jailbee gui) spans every repo.

Getting started

JailBee needs a Linux host running Incus. Install the CLI with uv:

uv tool install jailbee

For the optional Qt GUI dashboard (jailbee gui), add the gui extra:

uv tool install 'jailbee[gui]'

Host setup — Incus, firewall, UID mapping, kernel keyring limits — is a one-time job with a few moving parts. Follow Installation end-to-end first. Then, from the repo you want to manage:

jailbee config init          # write .jailbee/config.yaml
jailbee doctor               # sanity-check host + config
jailbee init                 # create Incus profiles, ACL, bridge
jailbee base build           # build the golden image (one-time, ~10–15 min)
jailbee new feat/my-branch   # spin up an isolated env for a branch

See Getting started for the full first-run walkthrough.

Shell completion

Install Typer's completion script once per shell:

jailbee --install-completion

Restart the shell, and TAB completes commands, options, and:

  • container names on every command that takes one (jailbee shell, jailbee destroy, jailbee git push, jailbee ide, …) — short names, from the containers that exist in the current repo
  • branch names on jailbee new and jailbee retarget, from the host repo's local branches
  • snapshot tags on jailbee snapshot restore and jailbee snapshot delete, from the container already named on the command line
  • fixed values for --format, --layer, --attach and --user

Completion looks for .jailbee/config.yaml in the current directory, the same default the commands themselves use; elsewhere it offers nothing. Unlike the commands, it does not honor --config/-c, so e.g. jailbee shell -c /other/repo/.jailbee/config.yaml <TAB> still completes against the current directory's containers, not the repo the flag points at.

Documentation

Setup — get JailBee running:

Doc What's inside
Installation One-time host setup: Incus, UID delegation, installing the CLI (plus conditional firewall / kernel-keyring steps)
Getting started Concepts, configure a repo, build the image, and a "typical day" walkthrough
Running on macOS Using JailBee from an Apple Silicon Mac via a Linux VM (Colima/Lima) with the repo shared from macOS (experimental)

Daily use — working with containers:

Doc What's inside
Commands Full command + flag reference table
Git bridge and branch workflows Host↔container git bridge, stacked PRs, mount vs clone, PR review, gh inside containers
Setting up JailBee in your own project Tutorial for adapting JailBee to your own repo and stack
Troubleshooting Common failures by symptom, and how to remove JailBee

Reference — the details:

Doc What's inside
Configuration reference Every .jailbee/config.yaml and global.yaml key
Security and limitations Isolation model, git-remote handling, known limits
Architecture How the pieces fit together
Who JailBee is for What JailBee is good at, what it costs, and how it differs from BranchBox and nono

Meta — project internals:

Doc What's inside
Manual testing End-to-end smoke-test recipes (require a real Incus daemon)
Releasing Release process
Contributing Development setup and repo conventions

License

jailbee is free software, released under the GNU General Public License v3.0 or later (GPL-3.0-or-later). See LICENSE for the full text.

Copyright © 2026 GISGRO Oy.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jailbee-1.0.0.tar.gz (380.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jailbee-1.0.0-py3-none-any.whl (422.2 kB view details)

Uploaded Python 3

File details

Details for the file jailbee-1.0.0.tar.gz.

File metadata

  • Download URL: jailbee-1.0.0.tar.gz
  • Upload date:
  • Size: 380.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.12

File hashes

Hashes for jailbee-1.0.0.tar.gz
Algorithm Hash digest
SHA256 d20ca1785860895d0b23947114672404fbabb91bdbfec9d45a90f2e8e359e152
MD5 818fc65d6cdfefb591173fb332b5b153
BLAKE2b-256 63483eaaf2fd581317b278c299c372215860d72a283a4405da3f196aa81d460d

See more details on using hashes here.

File details

Details for the file jailbee-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: jailbee-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 422.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.12

File hashes

Hashes for jailbee-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4d65918eb8b2660870b60a63f411a16729c53ae2a1981aeeb2ccaf43cd78d8f4
MD5 66f5d54322ff558d8a6f5043620cf0ba
BLAKE2b-256 fa1da1e5571b56e14ce084c5ae822ab2447c3043942dd1fd3dd06bd15281f2a4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page