Murmur provides secure access to agent VMs through IAP-tunneled SSH and port forwarding through the port-proxy service. No public IPs are exposed — all connectivity is authenticated and tunneled.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.
murmur ssh
SSH into an agent’s VM through an IAP (Identity-Aware Proxy) tunnel.Flags
| Flag | Type | Description |
|---|---|---|
--attach | bool | Attach to the agent’s tmux session (where Claude Code runs) |
-v | bool | Verbose mode — show SSH connection details and diagnostics |
-- | Separator for non-interactive commands (everything after -- is run on the VM) |
Interactive login
Open a shell on the agent’s VM:Attach to Claude’s tmux session
Attach directly to the tmux session where Claude Code is running. This lets you see Claude’s output in real time and interact with the terminal:Attaching to the tmux session is only available for agents spawned in interactive mode (
-i). Autonomous agents run headlessly without a tmux session.Ctrl+B then D.
Non-interactive commands
Run a command on the VM without opening an interactive session. Everything after-- is executed remotely:
Verbose mode
Use-v for SSH diagnostics when troubleshooting connection issues:
murmur port-forward
Tunnel local ports to the agent’s VM through the port-proxy service. This lets you access services running on the VM (web servers, databases, debug ports) from your local machine.Flags
| Flag | Type | Description |
|---|---|---|
--insecure | bool | Skip TLS verification for the tunnel (use for development only) |
Single port
http://localhost:3000 in your browser to access the service.
Multiple ports
Forward several ports at once:How port forwarding works
- The CLI opens a local listener on the specified port
- Connections are authenticated with a JWT and forwarded to the port-proxy service
- The port-proxy routes traffic to the correct VM via a bidirectional
PortTunnelgRPC stream - The VM’s agent process registers its tunneled ports at startup
murmur url
Get public URLs for accessing ports or agent dashboards.murmur url port
Get a public URL that tunnels to a port on the current VM. This command is only available from within a VM (agent context).- Share a preview URL in a PR description
- Expose a test server for integration testing
- Provide a link to a documentation preview
murmur url agent
Get the murmur-ui dashboard URL for an agent.Web terminal access
Agents spawned in interactive mode (-i) automatically start a ttyd web terminal. You can access it through:
- Dashboard: Click the terminal icon on the agent’s detail page
- Direct URL: Available in the
murmur statusoutput - SSH attach:
murmur ssh --attach <slug>(connects via IAP tunnel)
IAP tunneling
All SSH and port-forward connections use Google Cloud IAP (Identity-Aware Proxy) tunnels. This means:- No public IPs: VMs have no public IP addresses. All access is through IAP.
- Identity-based access: Connections are authenticated against your Google/GitHub identity.
- Audit logging: All tunnel connections are logged for security auditing.
- Encryption: Traffic is encrypted end-to-end through the IAP tunnel.
Troubleshooting
If SSH connections fail:| Symptom | Likely cause | Fix |
|---|---|---|
Connection refused | Agent is sleeping or terminated | murmur wake <slug> or check murmur status |
Permission denied | IAP access not configured | Re-run murmur setup or check IAP permissions |
Timeout | VM is booting or network issue | Wait and retry, or use -v for diagnostics |
Host key changed | New VM after sleep/wake cycle | Expected — the host key changes with each VM |
Port-proxy architecture
The port-proxy service (murmur-port-proxy) enables secure access to VM ports without exposing public IPs:
- When an agent VM starts, it opens a persistent bidirectional gRPC stream (
PortTunnel) to the port-proxy service - The port-proxy assigns a deterministic subdomain label based on the agent slug and port
- Incoming HTTP(S) requests to
{label}.port.murmur.aiare routed through the tunnel to the correct VM and port - The tunnel is authenticated with JWTs and encrypted with TLS
- VMs never need public IPs or firewall rules
- Port access is revoked instantly when the agent terminates
- Multiple ports per VM are supported (each gets a unique subdomain)
- WebSocket connections are supported through the tunnel