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
Thegrants 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:
- Every member and service profile may use the workspace.
- The image-update service maintains the workspace’s environment automatically. See Automatic recipe updates.
- You manage the workspace.
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 inrepos 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 inruntime_secret_mounts declares how a secret is delivered to the agent VM.
Port label fields
Each entry inports maps a TCP port number to a human-readable label shown in the dashboard.
Preview link rule fields
Each entry inpreview_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.
Tool link capture
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 builtinmurmur-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:- The image and placement must target the same cloud provider. An image built for one provider cannot run on a placement configured for another.
- For AWS placements, the image must be available in the placement region.
- The image architecture must match the machine type architecture specified by the environment.
- The environment cloud provider must match the placement cloud provider.
- The machine type referenced by the environment must be available in the placement region.
- For GCP and AWS placements,
service_accountmust match a service account binding on the placement. - You cannot remove a repo from a workspace if a flight trigger still references that repo.
Examples
Minimal workspace
This workspace has nogrants, 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
Reading a single workspace
Errors
Related
- Workspaces: concept overview
- Placements: the placement resource a workspace references
- Environments and placements: concept overview for environments
- Images: the image resource a workspace references
- Secrets: secrets referenced by
runtime_secret_mounts - Flights: flights that reference a workspace
murmur set: CLI command for creating and updating catalog resourcesmurmur get: CLI command for reading catalog resources