Quickstart
Prerequisites
Rust is only needed to build or test Warden outside Docker; make build compiles it inside
the sandbox image’s multi-stage build.
Run it
git clone https://github.com/OAISP/terrarium.git
cd terrarium
make setup # install orchestrator deps (uv sync)
make build # build the sandbox image — includes the Rust Warden (multi-stage)
make network # create the isolated agent docker network
make run # start the orchestrator (FastAPI, :8900)
make web # in another shell: install web deps + start the console (:3737)
Open http://localhost:3737.
With no auth token set the console is open for local development. Set TERRA_TOKEN to
require a bearer token; the orchestrator refuses to start on a non-loopback bind without
one, so you cannot accidentally expose an unauthenticated admin API.
Give it a credential
Two paths, and the choice matters — read the terms-of-service note before picking the second.
API key (no ToS restriction):
export ANTHROPIC_API_KEY=sk-ant-...
make run
Subscription: paste the contents of ~/.claude/.credentials.json into the console’s
credential badge. It is sealed at rest and injected by Warden.
Either way the real credential never enters the sandbox — the agent sees a realistic decoy.
Your first agent
- Agents → New agent. Pick a model and a persona, or start from a template.
- Sessions → New session. Choose the agent, type what you want it to do, and launch.
- Watch the transcript stream. The inspector rail on the right shows sub-agent activity, token composition, and any files the agent wrote (each one downloadable).
Lock down what it can reach
By default a new session inherits the global egress policy. To narrow it:
- Boundary → Egress → New profile (or start from a preset — Developer, Python, Node, Data science…).
- Boundary → Environments → New environment, and attach the profile.
- Edit the agent and attach that environment.
Attaching an environment does two different things, and the asymmetry is deliberate: secrets are scoped (the agent gets only those), while egress profiles merge (enforce wins, allowed hosts union) — so attaching can widen reach, never narrow it.
The Egress page shows live Warden decisions as they happen, and the header carries a kill switch that freezes all egress — including Anthropic — for every running session.
Next steps
- Configuration — the environment variables that matter.
- SDK — drive all of this from Python.
- Deployment — running it somewhere other than your laptop.