Project overlays: extend agent images from the repo
A project can now extend the agent image it runs in — extra apt packages,
language toolchains, CLIs — by committing a FROM-less Dockerfile
fragment under .vibepod/overlay/. A shared fragment applies to every
agent; a per-agent fragment like .vibepod/overlay/claude/Dockerfile
wins for that agent.
# .vibepod/overlay/Dockerfile — no FROM line
RUN apt-get update && apt-get install -y --no-install-recommends jq \
&& rm -rf /var/lib/apt/lists/*
COPY requirements.txt /tmp/requirements.txt
RUN pip install -r /tmp/requirements.txt
On vp run (and vp task create) the fragment is appended
to the agent's base image and built as a workspace-local, content-addressed image.
Unchanged overlays never rebuild, switching branches just switches images, and a
newer base image rebuilds the overlay on top. The overlay directory is the build
context, so fragments can COPY files committed next to them — the
whole team shares the environment. Opt out with --no-overlay, force a
clean rebuild with --rebuild-overlay, or set
agents.<agent>.overlay: false.
Herdr integration: live agent state in your multiplexer
herdr is a
terminal multiplexer for coding agents. When vp run starts inside a
herdr pane, VibePod detects it automatically, mounts the herdr socket into the
container, forwards HERDR_* variables, and injects a lifecycle
integration into the agent's config directory. The agent then shows up in herdr
with a vp:<agent> identity and live working / blocked / idle
state.
Built-in state reporting ships for Claude, Codex, Copilot, OpenCode, Pi, and
Tau; other agents still appear with pane identity and initial state. No setup is
needed, custom agents can be wired through herdr.integrations in the
config, vp doctor herdr diagnoses the whole chain, and
--no-herdr or herdr: false opts out.
Publish container ports
Agent containers can now publish ports to the host using
docker run -p syntax, validated up front:
agents:
claude:
ports:
- "8000:8000"
- "127.0.0.1:5173:5173"
That makes dev servers started by an agent reachable from the host browser without leaving the container's isolation model.
Jcode joins the agent matrix
Jcode is 1jehuang's resource-focused terminal coding agent written in Rust and
shipped as a single static binary. It talks to Anthropic, OpenAI (including the
Codex subscription), Gemini, GitHub Copilot, OpenRouter, Azure, Ollama, LM Studio,
and custom OpenAI-compatible endpoints. Start it with the full name or the new
vp j shortcut:
vp run jcode
vp j
vp run jcode -- login --provider claude
Credentials, configuration, MCP servers, and session history persist under
~/.config/vibepod/agents/jcode/ and survive container restarts.
OAuth logins support --no-browser for the containerized flow, and API
keys can be injected via agents.jcode.env.
Release details
- Added project overlays: committable
.vibepod/overlay/Dockerfile fragments, content-addressed builds,--no-overlay/--rebuild-overlay, automatic cleanup of superseded images. - Added herdr integration with automatic pane detection, live state reporting for six agents, data-driven custom integrations, and
vp doctor herdr. - Added per-agent
portsconfig withdocker run -psyntax and validation. - Added Jcode (
jcode, shortcutvp j, imagevibepod/jcode:latest, overrideVP_IMAGE_JCODE). - Added pre-commit with ruff, pyupgrade, and actionlint, enforced in CI.
- Bumped the package version to
0.19.0.