airlock,
airlock <agent...>, setup mcp, stop, and init — act on the current
working directory: the repo you are in is the repo that gets mounted, and
policy is resolved from it. build, login, logout, version, help,
and proxy do not.
publish is also independent of the working directory: it reads transcripts
from ~/.airlock/agent/, egress logs from ~/.airlock/logs/, and your
identity from ~/.airlock/auth.json, so it covers every repo you have
sandboxed, not just the current one.
airlock
Opens a shell inside the sandbox for the current repo.airlock login, your identity rides into
both containers as environment ids (never tokens), and every audit line and
published event is attributed to you. Without it, the launch continues after
a one-line warning and the session’s events are unattributed until you log
in.
Identity is set when the proxy container starts. If a proxy outlives one
person’s login session on a shared machine, attribution follows whoever
was logged in at container start — restart the sandbox after switching
accounts.
airlock <agent…>
Runs a command inside the sandbox instead of opening a shell.airlock claude is shorthand for airlock run claude. Use the explicit
run form when your command name would collide with a subcommand:
airlock login
Signs this machine in.~/.airlock/auth.json (mode 0600),
separate from secrets.toml.
After login, sandbox sessions carry your identity and airlock publish
ships under it. The token is bound server-side to your account; events
claiming anyone else are rejected. It is further scoped to ingestion: it cannot
read anyone’s timeline.
airlock logout
~/.airlock/auth.json regardless of whether the network call succeeded.
A lost connection never leaves you “stuck logged in.”
airlock setup mcp
Interactively enables an MCP connector for the current repo.~/.airlock/secrets.toml, the enable flag to
.airlock.toml, and the server registration to .mcp.json. See
MCP connectors for the full flow.
airlock publish
Ships two event sources to the backend — no third-party service is involved:- Sandbox transcripts from
~/.airlock/agent/claude/projects/— prompts, replies, tool calls, and returned results, as chat events. - Proxy egress logs from
~/.airlock/logs/<repo>/— every allowed and denied connection attempt, as identity-attributed access events.
airlock login first. Publishing authenticates
with your token, and the server attributes every event to it. There is no
schema to create: the backend migrates its own database.
Re-running is safe: ingestion is insert-only and idempotent — an event
already received is skipped, never rewritten. --watch republishes any file
that grew, covering both sources, so the console can follow a session that
is still running.
See audit log for exactly what each source ships and how long
content is retained.
airlock dashboard
The console is no longer a local server — it is served by the backend itself, login-gated and multi-user. This command exists as a signpost: it prints your deployment’s console URL (from~/.airlock/auth.json) instead
of failing as an unknown command. See console.
airlock build
Fetches theairlock/base and airlock/proxy images, pinned to match the
CLI’s release.
images/*/Dockerfile remains the contributor path via
make images in a checkout.
airlock stop
Removes the current repo’s proxy container.docker compose down in deploy/ (see
deploy).
airlock init
Writes a commented example.airlock.toml into the current directory.
.airlock.toml already exists — it will not overwrite your policy.
airlock version
airlock --version.
airlock help
airlock -h and airlock --help.

