Skip to main content
A workspace is a catalog resource that brings together everything an agent needs to run: an image, an environment, a placement with the cloud identity VMs run as, zero or more repos, and optional secrets. When you spawn an agent, you specify a workspace and the platform uses it to provision the VM.

Fields

secret_refs is deprecated. A secret named there is not delivered to agent VMs. runtime_secret_mounts is the field that delivers one. To deliver a secret as an environment variable under its own name, declare it as a mount with mount_type: MOUNT_TYPE_ENV.

Access grants

The grants list controls access to this workspace. A grant names users or groups and supplies either a role or inline.permissions. It can also carry a name_pattern and extend_to_runtime_agents; see the grant fields. A workspace carries exactly the grants you save, on create and on update alike. An empty list grants nothing through the workspace: only tenant-bindings, such as a tenant admin binding, then decide who can use or manage it. The workspace creation defaults suggest three grants. The dashboard’s create form starts from them, and murmur defaults workspace prints them:
Remove or narrow any of them before you save; the workspace keeps only what you submit. Grants add authority; tenant-bindings still apply. Saving a workspace requires someone other than the image-update service to hold workspace.edit through its grants or a tenant-binding. An unpatterned tenant admin grant satisfies that requirement. Grants inherit onto agents in this workspace and catalog resources named {workspace}/{name}. The scoped kinds are recipe, image, environment, agent-persona, canned-response, knowledge, tool-link-policy, and secret. Reading secret metadata does not return its value. A grant on this workspace does not grant writes to tenant-level resources with bare names. Keep permissions checked against the bare workspace name (workspace.read, workspace.use, workspace.edit, workspace.delete, and bake.create) in a grant whose pattern matches that name. For example, use a separate unpatterned user grant alongside an agent.read grant patterned as github_oauth/alice/w/backend/*. extend_to_runtime_agents is evaluated live against the running agent’s acting identity. A grant on this workspace extends only to runtimes running here, not to runtimes in other workspaces.

Resource admission with workspace_use

Tenant-level resources of scoped kinds can be admitted to workspaces through their workspace_use policy. A placement’s service-account binding has its own policy of the same shape. Scoped resources are usable only within their own workspace. Platform builtins are usable in every workspace. Admission does not give a caller write permission. It also allows a running agent to receive extended read grants from its own workspace for an admitted tenant-level resource; direct reads otherwise use the caller’s grants. Changing workspace_use requires the resource kind’s edit permission through a tenant-binding, even when ordinary content edits are authorized by workspace grants. For a service-account binding, this permission is placement.edit on its placement.

Repo fields

Each entry in repos describes a repository the agent clones at startup.
Clone URLs (including base_clone_url and plugin clone_url) are canonicalized on write: https://github.com/acme/app.git becomes https://github.com/acme/app.

Secret mount fields

Each entry in runtime_secret_mounts declares how a secret is delivered to the agent VM.
File mount paths must be absolute and unique within a single workspace. Duplicate paths are rejected. Likewise, two environment mounts may not deliver the same environment variable: each mount’s env_name (or secret name, when env_name is empty) must be unique.

Port label fields

Each entry in ports maps a TCP port number to a human-readable label shown in the dashboard. Each entry in preview_link_rules selects links in this workspace’s PR and review comments and says how a matching link is presented. A coalescing rule’s entry is identified by its pattern, so renaming fixed_label keeps the entry an agent already shows, while editing pattern starts a new one. Rule edits are forward-looking. Changing a rule governs what agents record from then on; an agent already running keeps the entries it recorded under the previous configuration, and every agent started after the change shows only the new behavior.
The pattern is the whole filter. When authors is empty, preview links are harvested from every PR and review comment regardless of who wrote it. Preview bots are usually not on any allowlist, so any link matching the pattern is surfaced no matter who posted it. Set authors to restrict a rule to named commenters.Anchor the pattern to hosts you control. A shared hosting apex like \.vercel\.app/ matches any customer’s deploy, including those outside your account. That matters most with fixed_label and coalesce: the label you choose becomes the visible name for whatever URL last matched, and a coalescing rule replaces its entry’s URL rather than adding beside it, so a matching link from anyone can take over the entry you named. The full URL is always shown in the entry’s tooltip.
When an agent calls an MCP tool whose result contains links or identifiers, such as when creating a Linear issue, Jira ticket, or Notion page, matching links are captured as artifacts of that agent’s execution and shown alongside its uploads and preview links in the dashboard. Common MCP integrations are captured automatically: workspaces use the builtin murmur-tool-links policy by default (currently Linear issue writes, labeled by the issue identifier, e.g. MUR-123). To change what is captured, create your own tool link policy. Copy the builtin’s entries if you want to keep them, and set tool_link_policy to its name. A policy with an empty patterns list disables capture.

Validation

The platform validates cross-resource consistency when you create or update a workspace:

Examples

Minimal workspace

This workspace has no grants, so only tenant-bindings decide who can use or manage it. Start from murmur defaults workspace to include the suggested grants.

Workspace with secret mounts and port labels

Listing workspaces

The list prints one name per line.

Reading a single workspace

Errors