Your AI coding agent, in a throwaway container. One binary. Zero hassle.
A single Go binary that runs Claude Code — or Codex, OpenCode, Pi — in an
isolated Docker container per project. A declarative .vb file pins your
setup; a wizard fills the gaps. Cloud keys or local models via Ollama / LM Studio.
As easy as vibrate.
The recommended path. just install compiles the binary, drops it on your
$PATH, adds a short vb alias, and registers shell completion for
your shell. Needs Go and
just.
git clone https://github.com/wlame/vibrator.git
cd vibrator
just install # → /usr/local/bin (sudo) + `vb` alias + completion
# or: just install ~/.local/bin # user-local, no sudo
cd ~/my-project
vibrate
First run builds a per-project image; every run after that jumps straight in.
No Go toolchain? Grab a static binary from the
Releases page
— built for Linux and macOS on amd64/arm64. Drop it anywhere on your $PATH as
vibrate. (Windows runs via WSL2 with the linux/amd64 binary.)
# Pick the asset for your OS/arch (e.g. vibrate_0.3.0_darwin_arm64):
chmod +x vibrate_*_*_*
sudo mv vibrate_*_*_* /usr/local/bin/vibrate
vibrate --version
cd ~/my-project
vibrate
The first vibrate in a project runs the wizard and builds the image; later runs reuse it.
# Already logged in on the host? Do nothing — your ~/.claude.json
# is merged into the container automatically on every start.
# Option A: browser login, captured & written back to the host
vibrate --login
# Option B: long-lived token, read automatically on every run
claude setup-token
echo "eyJhbG..." > ~/.claude-docker-token
# Option C: pass an API key from the host
ANTHROPIC_API_KEY=sk-ant-... vibrate
OPENAI_API_KEY for Codex,
GEMINI_API_KEY / OPENROUTER_API_KEY & friends for OpenCode and Pi.
Vibrator forwards the right host env vars per harness and mounts each agent's host config so
logins persist — or skip keys entirely and pick a local Ollama / LM Studio
model in the wizard.
A single self-contained Go binary — nothing to install on the host but Docker. just install adds a vb alias and shell completion.
.vbYour choices land in a TOML .vb at the project root — harness, profile, extensions, mounts, LLM provider. Auto-gitignored, replayed on every run.
First run with anything unset? An interactive wizard walks you through it — and prints the equivalent command. vibrate reconfigure re-runs it anytime, keeping your credentials.
Finds Docker Desktop, OrbStack, Colima, Rancher Desktop, Podman, or native Docker — and the right socket — with zero configuration.
Point Codex, OpenCode, or Pi at Anthropic, OpenAI, any OpenAI-compatible endpoint — or a local Ollama / LM Studio model. Vibrator starts the server and pulls the model for you.
Claude Code is first-class and the most exercised. Codex, OpenCode, and Pi are wired in (experimental) — one flag switches agents.
Per-harness MCP servers, skills, and agents — Serena, Context7, Playwright, claude-mem, plus the ECC bundle — added with --extensions.
Inside the sandbox the agent skips its permission prompts by default — that's the point of the container. Want the prompts back? --no-yolo, persisted to .vb.
One throwaway container per workspace, matching your host UID/GID. Host config is mounted read-only; Docker-in-Docker is opt-in via --dind — and never forces a rebuild.
A lean always-on base image, plus everything else on demand — profiles bundle the toolchains,
--extensions adds the MCP servers, skills, and agents your harness understands.
--with/--no
The base image (docker client, ripgrep, fd, fzf, jq, just, htop, git, …) is always present.
Toolchains come from your profile or --with; MCP servers, skills, and agents come from
--extensions. Everything you pick is recorded in .vb and rebuilt deterministically
— while each agent's config and session history live in sidecar mounts, so they survive container
recreation.
vibrate
Wizard fills the gaps, builds the image, drops you into the agent. Instant on every run after.
vibrate --harness=codex --profile=backend
Choose a harness and a profile; the rest defaults sensibly.
vibrate --dind
Mount the host Docker socket. The client is always baked in, so toggling never rebuilds the image.
vibrate --extensions=ecc-developer
Layer in MCP servers, skills, and agents — here the ECC developer preset.
vibrate shell
Same container, but a plain shell instead of the agent — for poking around.
vibrate wizard
Run the wizard standalone to see the resolved spec — no image, no container.
vibrate update
New Claude Code out? Update the harness CLI inside the container or image — no full rebuild.
vibrate reconfigure
Re-run the wizard for an existing workspace — new harness, profile, or extensions. Credentials in .vb are preserved.
vibrate --no-yolo
Agents skip permission prompts by default — it's a sandbox. This restores them, and sticks via .vb.
vb shortcut
just install already wires up a vb alias and shell completion for you.
Installed a prebuilt binary by hand? Add the alias yourself:
echo 'alias vb=vibrate' >> ~/.bashrc && source ~/.bashrc
echo 'alias vb=vibrate' >> ~/.zshrc && source ~/.zshrc
Then just run vb in any project directory!