Installation¶
From PyPI¶
Install from PyPI with uv or pipx:
Both put the agent6 entry point in ~/.local/bin.
If that directory is not on your PATH:
Restart the shell afterwards.
Shell completion¶
- rerunning is safe and refreshes it
--print bashemits the script instead, forevalor a dotfiles repo
Check the install¶
agent6 --version
agent6 check # sandbox (isolation, boundaries, probes), config (provider keys, git version), MCP, verify
agent6 check sandbox runs the jail through live probes and reports the isolation level a run will use on your kernel.
agent6 check verify infers a gate or checks its first executable without running it.
For rustup's cargo, follow the Rust toolchain setup.
Requirements¶
- Python 3.13 or newer
- A C compiler on Python 3.15 (
tree-sitterships no wheel for it) - A Rust toolchain where
tree-sitter-language-packhas no wheel (it ships wheels for glibc 2.34 and newer on x86_64 and aarch64, and builds with maturin elsewhere) - git 2.47 or newer
- One provider: Anthropic, any OpenAI-compatible endpoint (a local one needs no key), a ChatGPT subscription, or a Claude Code login (
agent6 connect claude) - A Linux release as recent as Debian 13 or Ubuntu 26.04 LTS; older ones are not supported
- Linux on x86_64 or aarch64 for the sandbox
- Unprivileged user namespaces for
fullsandbox.isolation -
A Rust toolchain to build from source (the PyPI wheels bundle
agent6-jail) -
On other architectures and on macOS,
sandbox.isolation = "auto"resolves tonone: commands run as ordinary subprocesses behind a startup warning, and an explicitfullorpartialrefuses. - On Windows, use WSL.
- Unprivileged user namespaces are on by default on Debian
- On Ubuntu, AppArmor blocks them (
kernel.apparmor_restrict_unprivileged_userns = 1): set it to 0, oragent6 system apparmor install(agent6 system apparmor removeremoves the profile, not the sysctl setting) - Without user namespaces
sandbox.isolation = "auto"falls back topartial, and tononeon a kernel with no Landlock.
The security model describes what each isolation level enforces.
From source¶
AGENT6_JAIL_BIN=/path/to/agent6-jail overrides the bundled jail binary.
Static launcher for commands inside a dev container¶
Container transfer requires a static Linux launcher matching the host and target architecture, x86-64 or aarch64. Published Linux wheels bundle their architecture's static-musl binary. A native editable build may be dynamically linked and is valid for local execution, but container preparation refuses it. To build the transferable binary from source on Linux:
target="$(uname -m)-unknown-linux-musl"
rustup target add "$target"
AGENT6_JAIL_TARGET="$target" uv sync --reinstall-package agent6
The target needs /bin/sh, uname, mktemp, head -c, chmod, executable writable /tmp and readable /proc/self.
It needs no Python, Node or Rust toolchain.
Preparation never installs dependencies, downloads a launcher or falls back to the host.
sandbox.isolation = "container" activates it (Commands inside a dev container).
See the installation trust boundary.