Murmur is designed with the assumption that agent VMs are untrusted. Credentials are encrypted end-to-end, tenants are cryptographically isolated, and the platform enforces strict boundaries between what different components can access.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.
Trust zones
Murmur operates across three distinct trust zones, each with different security properties:Control plane (trusted)
The control plane runs on Google Kubernetes Engine (GKE) and is fully managed by the Murmur platform. It includes:- murmur-api — the gRPC API server
- Control workers — background processes that orchestrate agent lifecycles
- KMS access — encryption and decryption of tenant data
- Catalog storage — GCS-backed resource store
Agent VMs (untrusted)
Agent VMs run tenant code and AI agent sessions. They are treated as untrusted because:- They execute arbitrary code (the agent can run any Bash command)
- They interact with external services (GitHub, package registries, APIs)
- A compromised agent could attempt lateral movement
External events (verified)
External events come from GitHub webhooks, CI systems, and other third-party services. These are signature-verified before processing:- GitHub webhooks are validated using HMAC signatures
- GitHub Actions authenticate via OIDC + Workload Identity Federation
- All event payloads are validated before being routed to agents
Tenant isolation
Each tenant (GitHub organization) is cryptographically isolated from every other tenant:Per-tenant KMS scope
Every tenant has its own Cloud KMS encryption key. This key is used for:- Encrypting developer profiles during setup
- Encrypting tenant secrets at rest
- Binding additional authenticated data (AAD) to prevent cross-tenant reuse
Namespaced storage
All tenant data in GCS is stored under tenant-specific prefixes. Catalog resources, session data, and uploaded files are isolated by tenant namespace. There is no shared storage between tenants.Identity boundary
Tenant membership is derived from GitHub organization membership. The platform checks org membership on every API request. A user who is not a member of the GitHub org cannot access any tenant resources — they cannot list agents, read secrets, or spawn workloads.Zero secrets on disk
Your credentials are never written to any filesystem in the Murmur platform:- Encryption at setup —
murmur setupencrypts your credentials client-side using the tenant’s KMS key. The encrypted blob is stored inmurmur.local.yaml. - Transport — the encrypted profile travels through the control plane as an opaque payload. It is never decrypted during transport.
- Re-sealing — the control plane re-seals the profile with a per-VM ephemeral X25519 key pair using NaCl box encryption.
- VM decryption — the VM decrypts the profile in process memory only. The decrypted credentials are held in memory for the duration of the agent session.
- Destruction — when the agent session ends, the VM is destroyed. The ephemeral key pair and decrypted credentials are gone.
VM isolation
Agent VMs have no direct access to platform infrastructure:- No GCS access — cannot read other tenants’ data or platform internals
- No KMS access — cannot decrypt other profiles or secrets
- No Pub/Sub access — cannot inject events into other agents’ channels
- No Kubernetes access — cannot reach the control plane’s internal services
Blast radius
If an agent VM is compromised, the impact is contained:| What is exposed | What is NOT exposed |
|---|---|
| That agent’s decrypted credentials (in memory) | Other agents’ credentials |
| That agent’s GitHub token (scoped to repos it was configured to access) | Other tenants’ data |
| That agent’s workspace files | Platform infrastructure |
| Murmur API access scoped to the agent’s permissions | KMS keys |
| Other developers’ profiles | |
| Catalog secrets not assigned to that workspace |
Defense in depth
Murmur employs multiple overlapping security controls:- Encryption at rest — all sensitive data is KMS-encrypted in storage
- Encryption in transit — TLS for all API communications, NaCl box for credential transport
- Ephemeral infrastructure — VMs are created per-session and destroyed after use
- Short-lived credentials — GitHub tokens and service tokens have limited lifetimes
- Least privilege — agents only have access to repos and secrets configured for their workspace
- Signature verification — all external events are cryptographically verified
- Authorization enforcement — every API call is checked against the caller’s permissions
- Audit trail — catalog changes are versioned with author and timestamp
- Authentication — how identities are verified
- Authorization — how permissions are enforced
- Encryption — how data is protected at every stage