Apache 2.0 · open-source on GitHub

A real Linux box, in one command.

The open-source agent runtime with SSH-native isolation. Each agent gets a persistent, network-isolated box on Kubernetes or LXC — no kube-apiserver token, eBPF egress policy, MCP server built in. Self-hostable, Apache 2.0.

Self-host on your own VM, or skip the ops and run it on our hosted control plane.

~ / containarium
$ containarium create my-agent-box
 container my-agent-box created
 sentinel route my-agent-box.example.com live
 MCP server listening inside the box

$ containarium ssh-config my-agent-box >> ~/.ssh/config

# Now point any agent at it — Claude Code, Cursor, Cline...
$ claude --mcp my-agent-box.example.com
Connected. Your agent has its own box.

What is Containarium

A primitive, not another agent.

Every agent needs an environment to act in — somewhere safe to run code, edit files, and call tools. Containarium is that environment. You bring the agent. We give it the box.

Isolated box — LXC or Kubernetes

One Linux box per agent, on LXC or a K8s pod. Real root, real filesystem, eBPF egress policy — sandboxed from your host, cluster control plane, and every other tenant.

Exposed on a hostname

A built-in sentinel (sshpiper + Caddy + PROXY protocol) gives every box a routable hostname with TLS. SSH and HTTP just work.

MCP server inside

An MCP server runs in the box, exposing shell + file ops over stdio. Any MCP-aware agent drives it: Claude Code, Cursor, Cline, your own.

How it works

From agent to box, in one hop.

AGENTS Claude Code Cursor Cline / OpenCode Your own agent Sentinel sshpiper · Caddy PROXY protocol · TLS CONTAINERS my-agent-box MCP server · shell · files my-agent-box.example.com deploy-bot-box MCP server · shell · files deploy-bot.example.com research-box MCP server · shell · files research.example.com
  1. STEP 1
    Create a box

    containarium create spins up an LXC container and registers a route on the sentinel.

  2. STEP 2
    Point your agent at it

    The box exposes an MCP server. Your agent connects over SSH or HTTPS — by hostname.

  3. STEP 3
    Let it work

    The agent edits files, runs commands, and ships code — inside an isolated environment you control.

Built for

Anywhere an agent shouldn't run on your laptop.

Long-running coding agents

Give Claude Code or Cursor a persistent box — survives across sessions, ships from anywhere.

CI & ephemeral envs

Spin a box per PR, run the agent inside it, throw it away. No more racing the runner.

Agent fleets

One box per task, per user, per tenant. The sentinel handles routing; you handle the agent.

Custom MCP tools

Drop your own MCP server beside the built-in one. Every agent sees both, no plumbing.

For CI

A test runner you can SSH into when it fails.

GitHub-hosted runners are a black box that dies the moment your test fails. Containarium gives every CI job a real Linux box with warm caches across runs — and keeps it alive for an hour on failure so a human (or an agent) can debug the broken state in place.

.github/workflows/test.yml
name: CI
on: [pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: footprintai/containarium-run@v1
        with:
          api-url: ${{ secrets.CONTAINARIUM_API_URL }}
          token:   ${{ secrets.CONTAINARIUM_TOKEN }}
          cache-key: ${{ hashFiles('go.sum') }}
.github/containarium.yml
# Three fields. Resist adding a fourth.
image: ubuntu-24.04

setup:                   # cached by cache-key
  - apt-get install -y build-essential
  - go mod download

test:                    # the actual CI command
  - go test ./...

When a test fails, keep-on-failure: true posts this on your PR:

containarium-bot commented just now
❌ CI failed — box kept alive for debugging

Failing test: TestExposePort_TLSHandshake in internal/server/expose_test.go:142


Debug this box live (expires in 58 minutes · extend 1h · tear down now)

# SSH in
ssh -p 2222 debug@pr-1234-containarium.boxes.containarium.dev

# Or hand it to your agent (Claude Code, Cursor, ...)
claude mcp add containarium-debug \
  https://mcp.containarium.dev/box/pr-1234-abc?token=ey...

🤖 Posted by containarium-run · commit a7b2f93

Three ways to wire CI into Containarium

GitHub Actions is one common surface — and Containarium supports it at three increasingly self-contained tiers. The capability (per-job ephemeral Linux box) is the same across all of them; what differs is where the code actually runs.

Tier Best for Setup Where code runs
0 · Try it
~5 min setup
Evaluators, hobby OSS Sign up to hosted cloud · use containarium-run Action Code → GHA-hosted → cloud.containarium.dev → Containarium box
1 · Mid-market
~30 min setup
Teams with own infra Self-host Containarium OSS · hacks/runner/ for N ephemeral runners Code → GHA-hosted (orchestration only) → your runner pool
2 · Enterprise
audited / SSO
"Code can't leave our perimeter" Tier 1 + audit log + SSO + data-residency docs Nothing crosses to FootprintAI infra
3 · Air-gapped
offline bundle
Regulated industries Tier 2 + offline install bundle + private Git server Fully contained in customer VPC

Tier 0 is the fastest evaluation path. Tier 1+ keeps source code, tests, and build artifacts inside your network. Same Containarium primitive underneath all four.

For PR previews

Every pull request gets a live URL.

Open a PR → Containarium spins a box from the branch, serves your app on a real HTTPS subdomain, and posts the URL as a sticky comment. Push more commits → 8-second redeploys against a warm cache. Close the PR → the box disappears.

ON OPEN
Spin a box from the branch

App reads .github/containarium.yml, runs setup: + serve:.

ON PUSH
Rebuild in place

Same box, warm cache. Sticky comment updates with the new commit SHA.

ON CLOSE
Tear it down

Box deleted. Subdomain freed. Idle previews auto-suspend after 24h of no commits.

One sticky comment per PR — edited in place on every push, never spammed:

containarium-bot edited 12s ago
Preview is live

https://pr-1234-containarium.preview.containarium.dev

Built from commit a7b2f93 in 8.2s (cache hit on go.sum).

This comment updates on every push. The box and URL are torn down when the PR closes. View logs · Rebuild

Choose your flavor

Open source, or fully hosted.

Same primitive. You decide who runs it.

Containarium OSS

Apache 2.0

The CLI, the platform daemon, the sentinel, the agent-box MCP server. Self-host on one VM. Single-tenant, but yours forever.

  • Full CLI: create / list / route / expose-port
  • Bring-your-own-agent over MCP — Claude Code, Cursor, Cline, custom
  • Sentinel: hostnames, TLS, SSH routing
  • Local web UI for managing your boxes
  • No CLA. PRs welcome.
View on GitHub v0.x
Recommended

Containarium Cloud

Hosted

The same primitive, run for you. Multi-tenant, billed by the hour, with SSO, audit logs, and a polished control plane.

  • Everything in OSS, no infra to run
  • Multi-tenant orgs · roles · SSO (SAML / OIDC)
  • Hosted dashboard · audit log · metering
  • Hybrid pricing: per-container base + usage overage
  • Free tier · upgrade when you grow
Open Containarium Cloud v1.0

Give your agent a real box.

Sign up to the hosted cloud, or clone the OSS and run it on your VM tonight.