Open source · self-hosted
Let AI agents run code — without handing them your machine.
VaultRun is a self-hosted sandbox for AI agents. Every command runs in an isolated container on your own infrastructure — network off by default, every action signed in an audit trail. Works with Claude, Cursor, OpenAI and local models via MCP.
- Apache-2.0 core
- No telemetry
- Ollama & LM Studio ready
- Runs on Docker Compose
Why
Agents that can act need somewhere safe to act.
Once an agent can run commands, the question isn't whether it will run something it shouldn't — it's what happens when it does.
without Agent on your host
- Shell access with your user's permissions and credentials
- Open network: anything it reads, it can send somewhere
- No reliable record of what actually ran
- Runaway loops eat your CPU and your afternoon
with VaultRun Agent in a sandbox
- Throwaway container per session, non-root, all capabilities dropped
- Network off by default; allowlist per session when you need it
- Every action HMAC-signed and queryable
- CPU, memory and timeout limits per session
How it works
One API between your agent and the blast radius.
Your agent calls VaultRun instead of a shell. VaultRun decides, isolates, runs and records.
Point your agent at VaultRun
Use the MCP server with Claude or Cursor, the OpenAI-compatible gateway for local models, or the Python and Go SDKs.
Policy check, then a sandbox
A pluggable policy hook (OPA-ready) decides what may run. Allowed commands go through the Docker exec API — never a shell string.
Signed trail, verified result
Every step lands in an HMAC-signed audit log. Optional checkpoints and sealed evidence assert exit codes, output and files before you trust the result.
Quickstart
Running locally in five minutes.
Pick how you want to start. Everything runs on your machine; nothing phones home.
git clone https://github.com/nickvd7/vaultrun
cd vaultrun
cp .env.example .env # set MASTER_API_KEY
make up # API + Postgres + Redis + dashboard
make bootstrap-key # prints your first vr_… key
curl http://localhost:8080/health
{"status":"ok"}
# dashboard → http://localhost:3000# pip install vaultrun-sdk
from sandbox_sdk import Client
client = Client("http://localhost:8080", api_key="vr_…")
s = client.create_session(image="python:3.12-slim")
client.upload_file(s.id, "script.py", open("script.py", "rb"))
r = client.run(s.id, command="python", args=["script.py"])
print(r.stdout)import (
"fmt"
vaultrun "github.com/nickvd7/vaultrun/sdk/go"
)
client := vaultrun.New("http://localhost:8080", "vr_…")
s, err := client.CreateSession(ctx, vaultrun.CreateSessionOptions{
Image: "python:3.12-slim"})
if err != nil { return err }
run, err := client.Run(ctx, s.ID, vaultrun.RunOptions{
Command: "python", Args: []string{"script.py"}})
if err != nil { return err }
if run.Stdout != nil { fmt.Println(*run.Stdout) }{
"mcpServers": {
"vaultrun": {
"command": "/path/to/vaultrun-mcp",
"env": {
"VAULTRUN_BASE_URL": "http://localhost:8080",
"VAULTRUN_API_KEY": "vr_your_key"
}
}
}
}- NeedsDocker, Docker Compose, and Go 1.25+ to build from source.
- StartsAPI on :8080, dashboard on :3000, Postgres and Redis.
- NextWire up MCP or connect a local model.
Security model
Paranoid defaults. Honest limits.
Here's what VaultRun protects against, and where you should add more isolation.
- 1No shellCommands go through the Docker exec API as argument arrays — no string interpolation.
- 2Locked-down containersNon-root, all Linux capabilities dropped, workspace path-traversal checks.
- 3Network offDisabled by default; per-session iptables allowlist when a task needs it.
- 4Bounded resourcesCPU, memory and timeout limits per session.
- 5Tamper-evident auditEvery action HMAC-signed. API keys stored as SHA-256 hashes. Optional sealed verify evidence digests.
- 6Opt-in reachAWS, database, host-filesystem and OpenJEV/Jev tools are off until you enable them — no ambient credentials.
Threat model at a glance
| Agent runs a destructive command | contained only the session container is affected |
| Agent tries to exfiltrate data | blocked network off unless allowlisted |
| Fork bomb / runaway loop | bounded CPU, memory and timeout limits |
| Someone edits the audit log | detected HMAC signature breaks |
| Container escape via a kernel bug | add a layer Docker shares the host kernel — run with gVisor or Kata for untrusted workloads |
Full write-up: docs/security.md · Report a vulnerability: SECURITY.md
MCP server
53+ tools. Two transports. Any agent.
Paste one snippet into Claude Desktop or Cursor, or run the HTTP transport for OpenAI and custom agents. Click a group to see its tools.
{
"mcpServers": {
"vaultrun": {
"command": "/path/to/vaultrun-mcp",
"env": {
"VAULTRUN_BASE_URL": "http://localhost:8080",
"VAULTRUN_API_KEY": "vr_your_key"
}
}
}
}MCP_TRANSPORT=http \
MCP_AUTH_TOKEN=your-secret-token \
VAULTRUN_BASE_URL=http://localhost:8080 \
VAULTRUN_API_KEY=vr_your_key \
./vaultrun-mcp
# POST /mcp — JSON-RPC 2.0, Bearer your-secret-tokenLocal AI
Ollama thinks. VaultRun acts.
Point Open WebUI, Continue or any OpenAI-compatible client at vaultrun-local. Chat goes to your local model; tool calls run in a sandbox. Optional mission capture and OpenJEV completion gates when a loop claims it is done.
Open WebUI / Continue → vaultrun-local → Ollama / LM Studio / vLLM
│ tool_calls
▼
VaultRun sandbox
run · files · audit
Where it fits
Self-hosted, on purpose.
Hosted sandbox APIs are great when your data can leave. VaultRun is for when it can't.
| VaultRun | Hosted sandbox API | Agent on your host | |
|---|---|---|---|
| Where code runs | Your infra | Vendor cloud | Your machine, unisolated |
| Data leaves your network | No | Yes | Depends on the agent |
| Works with local models offline | Yes | No | Yes |
| Signed audit trail | Built in | Varies | No |
| Setup effort | Docker Compose | API key | None |
| Cost | Free core, your hardware | Per-second usage | Free |
Beyond the sandbox
More in the repo.
Built on the same API, documented separately.
Open core
Apache 2.0 core. SSO when your team needs it.
Everything above is open source. VaultRun Enterprise adds OIDC and SAML single sign-on with org-aware roles. Evaluation is free.
| Core · Apache 2.0 | Enterprise | |
|---|---|---|
| Sandboxes, API, MCP, SDKs, CLI, CI runner, dashboard | ✓ | ✓ |
| API key auth | ✓ | ✓ |
| OIDC + SAML SSO (Okta, Azure AD, Google, Keycloak…) | — | ✓ |
| IdP group → role mapping | — | ✓ |
| Dev, test, evaluation | Free | Free |
| Production SSO | — | Commercial license |
Contact
Talk to us.
Bugs and feature requests go to GitHub Issues. Everything else, here.
Privacy
Privacy statement
The contact form on this site is processed by FormSubmit and delivered to mail@030.dev. We use the information you send only to respond to your request. We do not sell personal data. VaultRun software itself does not phone home and collects no product telemetry. For security reports, use SECURITY.md instead of the form.