Early · macOS and Linux

Let coding agents run free.
Keep your machine out of reach.

Solitary runs coding agents in hypervisor-isolated cells: disposable virtual machines with no host mounts, narrowly scoped secrets, controlled network access, and a deliberate way to move work in and out.

The problem

A mounted project is not a boundary. It is a way in.

Most tools that sandbox a coding agent hand it a container and mount your project directory into it. An agent that can write to that directory can write to .git/hooks/pre-commit, a package.json script, a Makefile, an .envrc, a .vscode/tasks.json, or a lint plugin resolved from the local tree.

Then you run npm test or git commit on your machine, and the payload runs as you. No escape was necessary. You executed it yourself.

Read why Solitary exists →

The model

A cell is a VM with a container inside it.

The boundary and the toolset are different things, so you can replace one without disturbing the other.

  1. Your host

    Starts machines, holds the secrets, displays results. Never mounted into a cell.

  2. The VM

    The boundary

    The boundary. A hypervisor, not a shared kernel — root in the container is not root on your machine.

  3. The container

    The toolset, and replaceable. Change the image, run up again: same disk, same secrets, different tools.

Nothing is mounted from the host, ever. Clone, build, lint, test and review inside the cell. Core concepts →

See it running

Every cell, and what its network is doing.

The dashboard →
solitary dashboard
solitary dashboard · t

The traffic view reads the machine's own log, so a cell cannot see — let alone edit — what is recorded about it. It is also the fastest way to find what an allow list is missing: a refused line names it.

What you control

Authority arrives in named pieces.

A cell in practice

Define it once. Share it. Rebuild it clean.

The definition says what a cell needs, not the values it receives. Publish it and whoever copies it supplies their own credentials and their own tunnel — so an environment can be reviewed in a pull request before anyone runs it.

Shareable workflows →
image: ghcr.io/you/agent:latestsecrets:            # only these names are passed in  - GITHUB_TOKENports:              # only these reach the host  - 8080network:            # and it reaches nothing else  allow:    - github.com    - registry.npmjs.org  vpn: ./vpn.conf   # optional: all of it, through this tunnel

Honest limits

This does not make an agent harmless.

Isolation stops a compromise of your machine. It does not stop an agent misusing the authority you granted it: it can still push to any repository the token you whitelisted can reach, and reach anything you allowed. A cell with no allow list reaches the whole internet. The image you run is trusted code.

A secret passed to a cell lives inside that cell. Give one only the credentials it needs, and treat a cell's output as data rather than as something to run.

Limitations and trade-offs →

Install it and take a cell for a walk.

Every release ships a binary for macOS and Linux, and the source builds in one command. It needs Lima 2.0 or newer, and Go only if you build it yourself. Creating the first cell takes a couple of minutes while it downloads a cloud image and installs podman; everything after that is container-speed.

curl -fsSL -o solitary.tar.gz \  https://github.com/balakin/solitary/releases/latest/download/solitary_darwin_arm64.tar.gztar -xzf solitary.tar.gz solitaryinstall -m 755 solitary /usr/local/bin/solitary