Agent VMs come with a base image containing Debian 12, Node.js, Claude Code, Git, and common tools. If your agents need additional tools — Go, Python, Docker, CUDA, your internal SDKs — you have two options: startup scripts (fast iteration) and baked images (production).Documentation Index
Fetch the complete documentation index at: https://docs.murmur.dev/llms.txt
Use this file to discover all available pages before exploring further.
What’s pre-installed
The platform base image includes:| Tool | Notes |
|---|---|
| Debian 12 | Base OS |
| Git | Version control |
| Node.js | Pinned version |
| Claude Code | @anthropic-ai/claude-code |
GitHub CLI (gh) | Authenticated automatically |
| ttyd | Web terminal server |
| jq, curl, tmux | Common utilities |
Recipes and murmur bake
Bake your toolchain into a custom VM image. The image is cached — VMs boot instantly with everything pre-installed.
Good for: large installs (Go, Python, Docker, CUDA), stable toolchains.
Create a recipe
Trigger the bake
Use the image
Reference the resulting image in your workspace:Image identity
Baked images have a deterministic identity —SHA-256(base_image + script + architecture). If you change the recipe, a new bake produces a new image. If nothing changed, the existing image is reused.
Choosing a strategy
| Strategy | Build time | Boot time | Best for |
|---|---|---|---|
| Startup script | None | Adds install time | Small packages, config files, rapid iteration |
| Baked image | 5-15 min (one-time) | Instant | Go, Python, Docker, CUDA, large SDKs |
The murmur user contract
Recipe provisioning scripts run as root, but agents run as the unprivileged murmur user (/home/murmur). Everything your recipe installs — binaries, config files, dotfiles, environment — must be readable and executable by murmur at runtime. Files that only root can access will cause silent failures when the agent tries to use them.
Idioms
Install to system paths (already inmurmur’s $PATH):
murmur when the tool writes to the home directory:
murmur’s home:
$PATH if your install path isn’t in the default PATH: