Get started · on Linux
From download to a confined agent in three commands.
Project Kennel is pre-release: the reference runtime is built and runs the full
vertical unprivileged on stock Linux (kernel 6.17, Landlock ABI ≥ 6), but interfaces and
guarantees may still change. The install is offline — prebuilt binaries, no toolchain, no
network — and adds one setuid-root helper for the three host-global operations a user
namespace cannot reach.
1 · install (root, once)
# unpack a release tarball for your arch, then:
sudo ./install.sh --provision-users
Installs the binaries under
/usr/libexec/kennel, the per-user systemd units, the AppArmor userns grant,
and the maintainer trust key. --provision-users allocates a subkennel line
for every member of the users group.
2 · enable the daemon (each user)
export PATH=$PATH:/usr/libexec/kennel
systemctl --user enable --now kenneld.socket
kenneld is an ordinary
user process, socket-activated on first use. No root daemon, no sudo at
runtime.
3 · run something inside a kennel
# confine an AI coding agent to this repo, a named toolchain, and a few registries:
kennel run ai-coding-strict -- claude
# a detachable interactive shell (Ctrl-\ d detaches; reattach later):
kennel run interactive -- /bin/bash
kennel attach interactive
A policy is declarative, signed, version-pinned code — not behaviour, but
kernel-level constraint. The shipped ai-coding-strict template, in part:
# exec: only these binaries may run — nothing else, even if present
[exec]
allow = ["/usr/bin/node", "/usr/bin/git", "/usr/bin/npm", "/usr/bin/python3", …]
# egress: named destinations through the audited broker; all else denied
[[net.proxy.allow]]
name = "registry.npmjs.org"
ports = [443]
threats.exposed = ["T1.9"] # each grant traces to a threat in the catalogue
# filesystem, identity, audit, ssh … inherited from base-confined@v1, then narrowed
THE CLI
A small surface
kennel run <policy> -- <cmd>
start a workload confined by a policy (interactive runs are detachable)
kennel attach <name>
reconnect a terminal to a running kennel
kennel review <policy>
re-pin a workspace trust manifest after edits
kennel stop / list
stop a kennel; list the running ones
kennel policy compile / sign / lint
resolve + sign a policy; check the template corpus
STATUS
Built vs. roadmap
Runs today
- The full unprivileged spawn vertical
- Egress proxy + cgroup-BPF allowlist + audit
- AF_UNIX shim · SSH re-origination bastion
- Masked workspace manifest · pty escape filter
- Signed templates · policy compiler · lockfile
Designed, not yet built
- D-Bus & X11 facades
- Binder cross-instance relay (MCP topology)
fs.scrub / fs.home.sanitise
kennel diff