The examples use Claude and a project at ~/my-project. Every other
supported agent works the same way.
1. Install and check the container runtime
Install VibePod with pip or Homebrew. Other methods, such as conda and pixi, are listed in the Quickstart.
# pip
pip install vibepod
# Homebrew
brew install vibepod/vibepod/vibepod
The package installs two equivalent commands, vp and
vibepod. This tutorial uses vp.
Check that VibePod can reach Docker or Podman:
vp version
The output shows the VibePod and Python versions, plus the container runtime it found. Illustrative output:
VibePod CLI: 0.x.y
Python: 3.12.3
Runtime: Docker 27.3.1
If the runtime line says unavailable, start Docker or Podman first.
Podman users should read
Using Podman instead of Docker
for the socket and DNS setup. To see every command, run vp --help.
Each command has its own help, for example vp run --help.
2. Start your first agent
Go to the project you want to work on and start an agent:
cd ~/my-project
vp run claude
The first time you run an agent in a directory, VibePod asks whether to allow it:
'/home/you/my-project' is not allowed for `vp run`. Would you like to allow it?
Answer yes, and VibePod remembers the directory. VibePod refuses to run in your
home directory or in /, so always start from a project directory. You
can manage the list with vp config allow-dir,
vp config list-allowed-dirs, and vp config remove-dir.
Then VibePod:
- Pulls the agent image (
vibepod/claude:latest) if it is missing or outdated. By default it checks for a newer image on every run; see Auto-pulling the latest image to turn that off. - Creates the
vibepod-networknetwork and starts thevibepod-proxycontainer, which records the agent's outgoing HTTP(S) requests for the dashboard you will open in step 5. - Mounts your project at
/workspaceinside the container. The agent sees and edits your real files. To mount more host paths, see Mounting volumes. - Mounts the agent's config directory from
~/.config/vibepod/agents/claude/. Logins, settings and the agent's own session history live there, so they survive the container. - Starts the agent and attaches your terminal to it.
Log in once
On the first run the agent is not logged in yet. Use its normal login flow
(browser OAuth, an API key, or a device code, depending on the agent). The
credentials land in the mounted config directory, so the next
vp run claude starts logged in. Some agents have extra options, such as
a long-lived token for Claude; see
Agents: individual agents.
Shortcuts
Most agents have a short alias. These three commands do the same thing:
vp run claude
vp claude
vp c
The full list is in the supported agents table.
3. Leave the session and come back
Work with the agent as you normally would. Your keystrokes, including Ctrl+C, go
to the agent, so quit it with its own exit command or shortcut. When the agent
process exits, its container stops and is removed (the auto_remove
default). Agents keep their session history in the config directory, and for
several agents VibePod prints the command to resume the session afterwards (see
Resume hints).
Closing the terminal window is different: it does not stop the agent. The container keeps running in the background. Find it and reattach:
vp list --running # running VibePod containers
vp attach <container> # rejoin the session
If only one VibePod container is running, vp attach without a name is
enough.
Start in the background
To start an agent without attaching your terminal, use -d:
vp run claude -d
vp attach <container> # attach when you are ready
Sessions started with -d are not written to the session log, because
VibePod does not see their terminal I/O. See
Detached mode.
Stop agents
vp stop claude # every container of the claude agent
vp stop <container> # one container from `vp list`
vp stop --all # every VibePod container, including the proxy
4. Try another agent
Switching agents is the same command with another name. Your project is mounted the same way, and each agent has its own config directory and its own login:
vp run codex # or: vp x
vp run gemini # or: vp g
To pass arguments to the agent itself, put them after -- so VibePod
does not read them as its own options:
vp run claude -- --help
Skipping permission prompts with --ikwid
Agents normally ask before they edit files or run commands. --ikwid
("I know what I'm doing") adds the agent's own auto-approval flag, for example
--dangerously-skip-permissions for Claude:
vp run claude --ikwid
The trade-off: the agent then acts without asking. The container limits what it
sees to what VibePod mounts, but it can still change or delete anything in
/workspace and send data over the network. Use it on work that is
committed or otherwise easy to restore. Not every agent has such a flag; see
IKWID mode for the list.
5. Look at what happened
VibePod keeps two local databases while agents run: a session log with what you type into interactive sessions, and the proxy's record of every HTTP(S) request. Open them in the dashboard:
vp logs start
This starts a Datasette container and opens http://localhost:8001 in
your browser, where you can browse the agents' traffic and, for Claude Code, token
usage. Use --port to pick another port and --no-open to
skip opening the browser. All data stays on your machine.
When you are done:
vp logs stop
vp logs status shows whether the dashboard is running.
6. Make your settings stick
VibePod merges its configuration from built-in defaults, a global file, a project file, and environment variables. Print the files in use:
vp config path
Illustrative output:
Config: /home/you/.config/vibepod
Global: /home/you/.config/vibepod/config.yaml
Project: /home/you/my-project/.vibepod/config.yaml
Logs: /home/you/.config/vibepod/logs.db
Proxy: /home/you/.config/vibepod/proxy/proxy.db
Settings that are only yours belong in the global file. Settings for one project go in the project file, which you create with:
vp config init
This writes .vibepod/config.yaml with version: 1. Add
the keys you want to change. For example, start Codex when you run
vp run without an agent name, and publish the port of a dev server the
agent starts in its container:
# .vibepod/config.yaml
version: 1
default_agent: codex
agents:
codex:
ports:
- "127.0.0.1:3000:3000"
VibePod reads the project file from the current directory, so
run vp from the project root. Check the merged result with
vp config show.
vp config init <agent> copies your
merged settings. vp config init claude adds a full
agents.claude block to the project file. It copies the
effective settings: the built-in defaults merged with your global config.
If your global config holds personal values for that agent, such as an API key in
env, they end up in the project file. Trim the block before you commit
the file, and keep secrets in the global config instead.
See Configuration for every key and environment variable.
7. Clean up
At the end of the day, stop everything VibePod started:
vp stop --all # agents, the proxy, and the dashboard
Your logins, settings and logs stay in ~/.config/vibepod/, so the
next vp run picks up where you left off.
Next steps
- Agents: per-agent login notes, task mode for headless runs, and image customization.
- Credential profiles: keep several logins per agent, such as a personal subscription and a work API key.
- Project overlays: install extra tools into the agent image for one project.
- Model providers: run agents against a local or hosted model server.
- Skills: add reusable prompts and recipes to agents.