Source available · MIT License · Part of the Vetrix software factory
The self-hosted AI agent sandbox

Seven coding agents. One sealed container. No bind mounts, no route to your other containers, no shell on your host.

llmcli is an isolated Docker environment that runs Claude Code, OpenAI Codex, Gemini CLI, Grok, OpenCode, Cursor Agent, and Antigravity — with every toolchain they need to actually build software — behind a containment boundary your agents cannot cross.

One bin/dockerbuild, one docker compose up. Your host filesystem stays yours.

llmcli · containment map Isolated
two doors in reachable no route

Why now

Coding agents earned autonomy. Your laptop shouldn't pay for it.

Agents now install packages, rewrite configs, and execute whatever they just wrote. Running that on your host — next to your SSH keys, your cloud credentials, your other projects — is the part of the workflow nobody signed off on.

Blast radius

Agents execute arbitrary code. On purpose.

A hallucinated rm, a poisoned dependency, a prompt-injected install script — on your host, any of these reaches everything you own. Inside llmcli, the worst case is a disposable container and a rebuilt volume.

Autonomy

Permission prompts kill the whole point.

Unattended agents are where the leverage is — but nobody sane runs --dangerously-skip-permissions on bare metal. Containment is what makes "skip permissions" a workflow instead of a gamble.

Sprawl

Every agent wants its own snowflake setup.

Seven CLIs, seven install paths, seven credential stores, seven version treadmills — multiplied by every engineer. llmcli pins the whole combination in one Dockerfile. Bump a version in one place; everyone rebuilds the same environment.

What's inside

Every major agent CLI. Pre-installed, version-pinned, ready to work.

Not a base image you finish yourself — a batteries-included workbench. The agents are installed. The languages they'll build with are installed. The versions are pinned, tested together, and bumped on a visible monthly changelog.

The agent roster

Seven agents, one tested combination

Bring your own API keys via .env, or use each CLI's interactive login — credentials persist in the named volume across image rebuilds, so a toolchain bump never logs you out.

  • Run agents side by side and route tasks by strength or cost
  • Version pins bumped monthly, tested as a set
  • Login state survives every rebuild
Pinned agent CLIsTested together
  • claude — Claude Code2.1.197
  • codex — OpenAI Codex CLI0.142.5
  • gemini — Google Gemini CLI0.49.0
  • grok — Grok CLI0.0.34
  • opencode — sst OpenCodev1.17.11
  • cursor-agent — Cursor CLI2026.06.29
  • agy — Antigravity CLI1.1.9
  • graphify — knowledge graph0.9.3
Included toolchains15 languages
Go 1.26Rust 1.96Zig 0.16OdinNode 24 LTSJava 21.NET 10Python 3.12Ruby 3.2PHP 8.3C / C++ (gcc 13)FortranCOBOLQt 6LLVM / Clang
The workbench

Toolchains, so agents can actually build what they write

An agent that can't compile, test, or run its own output is autocomplete with extra steps. llmcli ships the full polyglot bench — including the legacy stacks that real migration work runs on.

Graphify turns any folder of code and docs into a queryable knowledge graph the agents consult instead of re-reading raw source — parsed locally with tree-sitter, cutting the token burn of context reloading before it hits your bill.

The containment model

Isolation you can explain to a security review in one page.

No clever tricks. A boring, auditable boundary at every surface — which is exactly what you want between an autonomous agent and everything else you run.

Every surface, accounted for

Four boundaries, one page of audit

  • Network — a dedicated bridge with no route to any other development container; outbound to LLM APIs only with host-level egress rules
  • Filesystem — no host paths bind-mounted; HOME lives in a Docker-managed named volume. Your project tree, dotfiles, and keys simply aren't there
  • Entry — two published ports: SSH on 3022, pubkey only (no password fallback, no root login, key rotation is a deliberate scripted rebuild), plus a loopback-bound OpenCode OAuth callback relay on 127.0.0.1:19876 that only completes a browser login already running on the host — it exposes no other in-container service and isn't a way in
  • Privilege — everything runs as the unprivileged llmcli user, UID-matched to yours
Unattended workflowSkip-permissions, safely
# three agents, three tickets, overnight
$ ssh -p 3022 llmcli@localhost
Welcome — llmcli · isolated agent workbench

$ screen -S ticket-1289
$ claude --dangerously-skip-permissions \
    -p "Fix the race in payments worker"
# Ctrl-A D — detach. It keeps working.

$ screen -S ticket-1290
$ codex exec "Migrate the config loader"

$ screen -ls
ticket-1289 (Detached)  ticket-1290 (Detached)

The honest comparison

Cloud sandboxes meter you. Bare isolation leaves you the setup. llmcli ships the workbench.

Isolation alone is table stakes in 2026. The question is what's waiting inside the boundary when your agents get to work.

Capability llmcli Cloud sandboxesE2B, Modal, … Docker Sandboxes DIY devcontainer
Runs on your hardware, data never leavesYesNo — their cloudYesYes
Seven major agent CLIs pre-installed & pinnedYes, tested as a setBring your ownBring your ownYou build it
Full polyglot toolchain (15 languages)YesPer-image setupPer-image setupYou maintain it
Persistent, SSH-accessible, detachable sessionsYes — screen over SSHSession limits / billingDisposable by designIf you wire it
Cost modelYour hardware, flatMetered per secondLocalLocal
Credential state survives rebuildsNamed volumeVariesVariesYou wire it
Knowledge-graph skill to cut token burnGraphify included
Path to governed forge, per-repo MCP, token attributionVetrix platform

Competitor capabilities as generally available mid-2026; verify current vendor packaging for your evaluation. Cloud sandboxes are excellent for embedding execution in a SaaS product — that's a different job than a developer workbench.

Part of the Vetrix software factory

Containment is step one. Governance is the destination.

llmcli is the execution cell of a larger machine. Connect it to Vetrix — the sovereign, self-hosted software factory — and your agents don't just run safely, they run accountably.

  • A governed MCP server on every repository — agents get a scoped door, not a master key, with every tool call audited
  • Multi-agent pipelines — Dev, Code Review, and QA agents dispatched per ticket through your merge-request workflow
  • Per-ticket token attribution — spend rolled up by agent, stage, and ticket, posted straight onto the merge request
  • Firecracker-isolated CI, SBOMs, and policy gates — on your infrastructure

Explore the Vetrix platform →

Token roll-up · TCK-2000Posted to MR #418
## Per-stage totals
Stage       Input  Output   Total
Dev           315     185  11,300
BackendCR      50      25   2,075
BackendQA      80      40   3,120
─────────────────────────────────
rc grand total: 16,495 tokens

Who runs llmcli

Built for people who read the Dockerfile before they run it.

The senior engineer

You want unattended agents without the anxiety

You've watched an agent "clean up" the wrong file once. Never again. You want the leverage of skip-permissions with a boundary you personally verified — and you can, because the source is open to audit.

The platform team

You're rolling agents out to the whole org

Forty engineers, seven CLIs, one question from the CISO: "where do these things run?" One pinned image, one containment story, one answer. Pair it with Vetrix and the audit log writes itself.

The polyglot shop

You ship in whatever the client runs

Rust today, .NET tomorrow, a COBOL migration you don't want to talk about. One container covers the bench — and every project's agent state stays isolated in its own volume.

Get started

From clone to contained agents before your coffee cools.

First build takes 10–20 minutes (it's compiling half the languages in existence). After that, version bumps rebuild in about a minute thanks to layer caching.

Quick start · self-hosted3 commands
# 1. Build — prompts once for your SSH public key
$ bin/dockerbuild

# 2. Bring it up — stays running, survives reboots
$ docker compose up -d appmerc_llmcli

# 3. In — pubkey only, the single door
$ ssh -p 3022 llmcli@localhost
✓ seven agents · fifteen toolchains · no host filesystem access
The pin discipline

We test the combination so you don't

Seven fast-moving agent CLIs and fifteen toolchains are a version treadmill. That treadmill is the product — every pin bumped on a visible changelog, tested as a set, upgraded with a one-line edit.

July 2026

Monthly pins

Claude Code → 2.1.197 · Codex → 0.142.5 · Gemini CLI → 0.49.0 · OpenCode → v1.17.11 · Node → 24.18 LTS (CVE fix) · .NET → 10 LTS

Every month

Bump, test, publish

Pins verified together before release. Your persisted HOME and agent logins survive every rebuild untouched.

Your move

One-line upgrades

Edit the ARG, rebuild, recreate. Layer caching keeps npm-only bumps to ~1–2 minutes.

Questions

Frequently asked

What is llmcli, exactly?

A self-hosted Docker container purpose-built as an AI agent sandbox: Claude Code, OpenAI Codex, Gemini CLI, Grok CLI, OpenCode, Cursor Agent, and Antigravity pre-installed and version-pinned, plus fifteen programming toolchains and the Graphify knowledge-graph skill — all behind a strict containment boundary with no host filesystem access and two published ports: a pubkey-only SSH port and a loopback-bound OAuth callback relay.

Is it safe to run --dangerously-skip-permissions inside it?

That's the job. The container mounts no host paths, lives on an isolated bridge network with no route to your other containers, and publishes only a pubkey-only SSH port plus a loopback-bound OAuth callback relay — no other network entry point. If an agent goes sideways, you lose a disposable container — not your machine. For strict outbound control, the docs cover host-level egress allowlisting down to the LLM API endpoints alone.

How is this different from E2B, Modal, or other cloud AI sandboxes?

Those are metered execution APIs on someone else's infrastructure — the right tool for embedding code execution inside a SaaS product. llmcli is a persistent, local, self-hosted developer workbench: flat cost, no session limits, no third party between your agents and your code.

How is this different from Docker Sandboxes or rolling my own devcontainer?

Those give you an empty isolated room. llmcli gives you the room with the workbench already bolted down: every major agent CLI installed and pinned as a tested set, the toolchains to build real software in fifteen languages, persistent credential state, and detachable long-running sessions over SSH — plus a growth path into the Vetrix factory for MCP access, orchestration, and token attribution.

How do API keys and logins work?

Fill ANTHROPIC_API_KEY, OPENAI_API_KEY, XAI_API_KEY, GEMINI_API_KEY, and CURSOR_API_KEY into .env and the CLIs pick them up — or leave them blank and use each tool's interactive login. Either way, state persists in the named volume across image rebuilds, so a toolchain bump never logs you out.

How is llmcli licensed?

Source available under the MIT License

Who maintains the version pins?

We do. Seven fast-moving agent CLIs and fifteen toolchains are a treadmill — that's the point of the product. Pins are bumped on a visible monthly changelog, tested as a combination, and upgrading is a one-line edit and a short cached rebuild. Your persisted state survives every bump.