Pre-installed tools
Every agent VM starts from a base image built on Debian 12 (Bookworm) with the following tools pre-installed:
Language runtimes (Go, Python, Node.js, Ruby, Rust, etc.) are not installed — they belong in a custom image baked from your recipe.
The base image is maintained by the Murmur platform and updated regularly with security patches.
Because agents have passwordless sudo, anything missing can be installed at runtime —
sudo apt-get install just works, and on an image whose recipe adds Node.js, so does npx playwright install --with-deps chromium. Runtime installs cost time on every spawn, though: bake anything stable into a custom image. Orgs that want a non-root agent can remove /etc/sudoers.d/murmur in their recipe’s provisioning script; see Agent VM controls for why root on the VM isn’t an isolation boundary.
The base image provisioning script
The exact script that builds the base image, for reference when deciding what your recipe still needs to install:provision.sh
provision.sh
Startup scripts
Startup scripts run before the agent session starts, making them the right place for environment customization that needs to happen on every boot. Configure a startup script in your environment resource:What startup scripts are good for
- Installing packages with
apt-get - Installing language-specific tools (
pip install,npm install -g,go install) - Writing configuration files (
.npmrc,.env, tool configs) - Downloading test fixtures or seed data
- Running database migrations or setup scripts
- Setting up SSH keys for private package registries
Execution details
- Scripts run as root before the agent session starts
- The working directory is
/ - The agent’s repos have already been cloned when the script runs
- Scripts must exit 0; a non-zero exit fails the provisioning
- stdout and stderr are captured in provisioning logs
Custom images
For larger or more complex environments, bake a custom image instead of relying on startup scripts. Custom images use recipes andmurmur bake to produce VM images with your toolchain pre-installed.
Recipes
A recipe defines how to build a custom image:Baking an image
When the image is used
Custom images replace the base image entirely. When a VM boots with a custom image, it already has all your tools installed — no startup script delay.Environment variables on VMs
Agent VMs have several environment variables available:Tenant secrets
Secrets stored in the catalog are decrypted and injected as environment variables with theMURMUR_SECRET_ prefix:
Claude Code configuration
The Claude Codesettings.json is written at VM boot time by the Murmur control plane. It configures:
- Model selection — set from the workspace config or per-agent override
- Fast mode — enabled if
fast_mode: truein the workspace config - MCP server — the
murmurMCP server entry, enabling agent orchestration tools - Permissions — tool permissions appropriate for autonomous operation
settings.json directly. To customize Claude Code behavior, use append_system_prompt in the spawn configuration or define an agent persona.
Scripts vs. baked images
Use this decision table to choose between startup scripts and custom images:Rules of thumb
- If the install takes under 30 seconds, use a startup script.
- If the install takes over 2 minutes, bake it into an image.
- If you are iterating frequently on the environment, start with a startup script and bake once it stabilizes.
- If you need GPU drivers or CUDA, always use a custom image — these installations are too large and slow for startup scripts.
- If a tool is needed rarely or unpredictably, skip both — agents have passwordless sudo and can install it themselves when a task actually needs it.