Self-hosted secure runtime for AI agents.

Your agent asks for a tool. VaultRun runs it in an isolated Docker sandbox on your infra — with policy, limits, and a signed audit trail. No SaaS. No telemetry. No data leaving your network.

license apache-2.0 core lang go 1.25 mcp tools 53+ auth api-key / oidc / saml mode self-hosted
status early open source proof repo + docs, not logos data stays on your infra license apache-2.0 core

request path

Agent asks. Sandbox runs. Audit sticks.

Illustrated walkthrough using the real API shapes — not a recorded customer run. Click a step, then verify the same trail on your own instance with the curl below.


      
illustrated · click steps · ← → · auto-plays once on first view

After install, replay your audit trail (same endpoint the demo shows):

 sh — verify audit
$ curl -sS -H "Authorization: Bearer $VAULTRUN_API_KEY" \
  "http://localhost:8080/api/v1/audit?session_id=$SESSION_ID"
# → { "audit_logs": [ { "action": "command.finished", "sig": "…" }, … ] }

quickstart

Up and running in five commands.

 sh — vaultrun
$ git clone https://github.com/nickvd7/vaultrun && cd vaultrun
$ cp .env.example .env        # set MASTER_API_KEY to something strong
$ make up                     # API + Postgres + Redis + dashboard
$ make bootstrap-key          # prints your first vr_... API key
$ curl http://localhost:8080/health
{"status":"ok"}
# dashboard → http://localhost:3000

Prerequisites: Docker, Docker Compose, Go 1.25+.

how it works

One API between your agent and the blast radius.

┌──────────────────────────────────────────────────────────────┐
│  Your AI agent  (Claude, GPT, custom, …)                     │
│                                                              │
│  result = client.run(session_id,                             │
│      command="python", args=["analyze.py"])                  │
└────────────────────────┬─────────────────────────────────────┘
                         │ API key
                         ▼
┌──────────────────────────────────────────────────────────────┐
│  VaultRun API  (your server, your infra)                     │
│                                                              │
│  • isolated Docker container per session                     │
│  • exec API only — no shell injection                        │
│  • path traversal prevention in workspace                    │
│  • HMAC-signed audit trail                                   │
│  • CPU / memory / timeout limits per session                 │
│  • network disabled by default                               │
└──────────────────────────────────────────────────────────────┘

what's in the box

Nine components, one repo.

01 / cmd/api

API server

Gin-based REST API — sessions, runs, files, audit logs, key management.

02 / sdk/mcp

MCP server

53 tools over stdio and HTTP. Claude, OpenAI, OpenRouter, custom agents.

03 / cmd/cli

CLI

The vaultrun command-line tool for sessions, files, runs and logs.

04 / cmd/ci-runner

CI runner

GitHub webhook → sandboxed CI with Slack / Teams notifications.

05 / apps/frontend

Dashboard

Next.js management UI with a server-side API proxy — keys never reach the browser.

06 / sdk/go + sdk/python

SDKs

Typed Go client and a Python client. Same API, your language.

07 / enterprise

Enterprise SSO

OIDC (PKCE) + SAML 2.0 with org-aware RBAC. Okta, Azure AD, Google, Keycloak. VaultRun Enterprise.

08 / internal/audit

Audit trail

Every action HMAC-signed and queryable. Tamper-evident by design.

09 / internal/policy

Policy hook

Pluggable policy layer, OPA-ready. Decide what agents may run, centrally.

mcp server

53 tools. Two transports. Any agent.

Pick your transport, copy the snippet, paste into the agent. Same tools either way.

 claude_desktop_config.json
{
  "mcpServers": {
    "vaultrun": {
      "command": "/path/to/vaultrun-mcp",
      "env": {
        "VAULTRUN_BASE_URL": "http://localhost:8080",
        "VAULTRUN_API_KEY": "vr_your_key"
      }
    }
  }
}
 sh — mcp http
$ 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
# Authorization: Bearer your-secret-token
sandbox ×13
create_session · run_command · upload_file · read_file · list_files · get_session_logs · …
databases ×13
sqlite_query · pg_query · pg_schema · mongo_find · mongo_aggregate · …
aws ×14
s3_get_object · ssm_get_parameter · sm_get_secret · lambda_invoke · … (explicit opt-in)
filesystem ×4
fs_read_file · fs_write_file · fs_list_dir · fs_delete_file
github ×2
run_github_repo · github_post_comment
ops ×7
list_images · pull_image · create_snapshot · create_artifact · list_audit_logs · …
flowd ×6
flowd_list_suggestions · flowd_approve_suggestion · flowd_list_patterns · … (MCP_FLOWD_ENABLED)

sdks

Five lines to a sandboxed run.

Same API surface — switch language without rewriting the mental model.

 python — sandbox_sdk
# 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)
 go — sdk/go
import vaultrun "github.com/nickvd7/vaultrun/sdk/go"

client := vaultrun.New(
    "http://localhost:8080", "vr_...")
s, _ := client.CreateSession(ctx,
    vaultrun.CreateSessionOptions{
        Image: "python:3.12-slim"})
client.UploadFile(ctx, s.ID,
    "script.py", scriptContent)
run, _ := client.Run(ctx, s.ID,
    vaultrun.RunOptions{Command: "python",
        Args: []string{"script.py"}})
fmt.Println(*run.Stdout)

flowd integration

Local workflows meet isolated execution.

Flowd observes local file workflows, detects patterns, and suggests automations you approve from the terminal. VaultRun runs agent code in Docker sandboxes with an audit trail. Together: observe → suggest → approve locally, then execute risky work in a container.

  flowd (local)                    VaultRun (sandbox)
  observe · detect · suggest    →    create_session · run_command · audit
  flowctl approve                     MCP flowd_* tools (opt-in)

security model

Paranoid by default. On purpose.

Full write-up: docs/security.md

Teams with an IdP?

OIDC / SAML SSO and org-aware RBAC — evaluate free, license for prod. No fake case studies; talk to us instead.

open core

Apache 2.0 core. Fork it, ship it, embed it.

The core — API server, sandbox runtime, CLI, MCP server (53 tools), CI runner, dashboard, and both SDKs — is Apache 2.0: run it commercially, modify it, or vendor the Go SDK straight into your agent. Enterprise SSO (OIDC + SAML) ships separately under a commercial license. Issues and pull requests welcome.

enterprise

SSO for teams that already have an IdP.

VaultRun Enterprise adds OIDC (Authorization Code + PKCE) and SAML 2.0 to the self-hosted API — Okta, Azure AD, Google Workspace, Keycloak, AD FS, OneLogin — with org-aware RBAC and signed dashboard sessions. Eval is free; production needs a license. Requests land in mail@030.dev.

Capability Core (Apache 2.0) Enterprise
API / sandboxes / MCP / SDKs / CI runner included included
API key auth included included
OIDC + SAML SSO included
Org-aware IdP group → RBAC mapping included
Dev / test / evaluation use free free
Production SSO commercial license
01 / evaluate

Try it free

Dev and test use is free under the Enterprise License. Ask for evaluation access and follow the SSO setup guide.

request evaluation → read SSO setup ↗
02 / license

Get a production license

Ready for prod SSO? Tell us org, IdP, instances, and timeline — custom commercial quote (no public price list).

request a license →
03 / talk

Talk / schedule a call

Pick up to three preferred times — we confirm by email. No calendar SaaS required.

propose times → general sales question →

Procurement one-pager: enterprise.html · Use cases: use-cases.html · Demo script: demo-video-script.md

contact

Enterprise, sales, or a walkthrough?

This form goes to mail@030.dev — for SSO evaluation, licenses, and calls. Bugs & featuresGitHub Issues (use the templates). Security → private only: SECURITY.md (not this form, unless intent = security report).

 new-message — vaultrun.dev