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
request path

        
illustration of the real API shapes · ← →

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.

01 / connect

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.

02 / contain

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.

03 / record

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.

sh
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
  • 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.

  • 1
    No shellCommands go through the Docker exec API as argument arrays — no string interpolation.
  • 2
    Locked-down containersNon-root, all Linux capabilities dropped, workspace path-traversal checks.
  • 3
    Network offDisabled by default; per-session iptables allowlist when a task needs it.
  • 4
    Bounded resourcesCPU, memory and timeout limits per session.
  • 5
    Tamper-evident auditEvery action HMAC-signed. API keys stored as SHA-256 hashes. Optional sealed verify evidence digests.
  • 6
    Opt-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 commandcontained only the session container is affected
Agent tries to exfiltrate datablocked network off unless allowlisted
Fork bomb / runaway loopbounded CPU, memory and timeout limits
Someone edits the audit logdetected HMAC signature breaks
Container escape via a kernel bugadd 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.

claude_desktop_config.json
{
  "mcpServers": {
    "vaultrun": {
      "command": "/path/to/vaultrun-mcp",
      "env": {
        "VAULTRUN_BASE_URL": "http://localhost:8080",
        "VAULTRUN_API_KEY": "vr_your_key"
      }
    }
  }
}

Local 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.

flow
Open WebUI / Continue  →  vaultrun-local  →  Ollama / LM Studio / vLLM
                              │ tool_calls
                              ▼
                       VaultRun sandbox
                       run · files · audit

Gateway docs ↗

Where it fits

Self-hosted, on purpose.

Hosted sandbox APIs are great when your data can leave. VaultRun is for when it can't.

VaultRunHosted sandbox APIAgent on your host
Where code runsYour infraVendor cloudYour machine, unisolated
Data leaves your networkNoYesDepends on the agent
Works with local models offlineYesNoYes
Signed audit trailBuilt inVariesNo
Setup effortDocker ComposeAPI keyNone
CostFree core, your hardwarePer-second usageFree

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.0Enterprise
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, evaluationFreeFree
Production SSO—Commercial license

Request evaluation Enterprise one-pager →

Contact

Talk to us.

Bugs and feature requests go to GitHub Issues. Everything else, here.

✓ Message queued — we'll get back to you soon.

We use your details only to reply. See our privacy statement.

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.