access-log.read | Read tenant-wide API access-log metadata; an agent-scoped log can instead use agent.read on that agent | none | Admin only |
access-log-body.read | Read recorded API request bodies, separately from access-log metadata | none | Admin only |
agent.read | View an agent’s status, fields, and session. Discovery requires tenant, runtime, or workspace authority, not individual record grants | {provider}/{account}/w/{workspace}/{slug}[/{slug}…] | Member, subject to workspace access; workspace manager; a runtime over its own subtree and its owner’s peers in the same workspace (murmur-agent-peer-read) |
agent.create | Spawn an agent, with separate workspace.use and resource-admission checks | {provider}/{account}/w/{workspace}/{slug}[/{slug}…] | Member (own, murmur-member-self); runtime on its own subtree (murmur-agent-runtime); service-profile key (murmur-service-profile-self); MCP connector (murmur-mcp-connector) |
agent.edit | Runtime control: sleep, wake, follow-up, SSH, rekey, and task updates. Stopping a run requires agent.delete | {provider}/{account}/w/{workspace}/{slug}[/{slug}…] | Agent owner (murmur-agent-creator); runtime on its own subtree (murmur-agent-runtime); workspace manager; service-profile key; MCP connector |
agent.delete | Stop an agent and its subtree; distinct from permanently purging its data | {provider}/{account}/w/{workspace}/{slug}[/{slug}…] | Agent owner (murmur-agent-creator); runtime on its own subtree (murmur-agent-runtime); workspace manager; service-profile key; MCP connector |
agent.purge | Permanently destroy an agent, its descendants, and all their stored runs | {provider}/{account}/w/{workspace}/{slug}[/{slug}…] | Developer owner through murmur-agent-creator; not the runtime role |
agent-persona.read | Read an agent persona, and see it in listings | {name} | Member; service profiles + agent runtime VMs (murmur-shared-floor); MCP connector |
agent-persona.create | Create an agent persona | {name} | Workspace manager; admin only at tenant level |
agent-persona.edit | Edit an agent persona | {name} | Workspace manager; admin only at tenant level |
agent-persona.delete | Delete an agent persona | {name} | Workspace manager; admin only at tenant level |
analytics.read | Read tenant analytics and analytics agent drill-downs | none | Admin only |
alias.read | Read an alias, and see it in listings | {name} | Member |
alias.create | Create an alias | {name} | Member |
alias.edit | Edit an alias | {name} | Member |
alias.delete | Delete an alias | {name} | Member |
api-key.read | Read an API key, and see it in listings | {name} | Member |
api-key.create | Create an API key | {name} | Member |
api-key.edit | Edit an API key | {name} | Member |
api-key.delete | Delete an API key | {name} | Member |
actor-allowlist.read | Read an actor allowlist, and see it in listings | {name} | Admin only |
actor-allowlist.create | Create an actor allowlist | {name} | Admin only |
actor-allowlist.edit | Edit an actor allowlist | {name} | Admin only |
actor-allowlist.delete | Delete an actor allowlist | {name} | Admin only |
attachment.create | Stage a private file for a spawn or a follow-up, before any agent is named | none | Member + every service profile + agent runtime VMs (murmur-shared-floor) |
bake.create | Run or approve a bake, with separate profile assumption and cloud-identity admission checks | {workspace} for a scoped bake; none for a tenant-level bake | Workspace manager; admin only at tenant level |
canned-response.read | Read a canned response, and see it in listings | {name} | Member |
canned-response.create | Create a canned response | {name} | Workspace manager; admin only at tenant level |
canned-response.edit | Edit a canned response | {name} | Workspace manager; admin only at tenant level |
canned-response.delete | Delete a canned response | {name} | Workspace manager; admin only at tenant level |
change-request.create | Propose a change-request against any target | none | Member + every service profile + agent runtime VMs (murmur-shared-floor); the image-update service and its VMs (murmur-image-updater) |
change-request.read | Read a change-request (its proposed value also needs {target_kind}.read), and see it in the change-request queue listing | none | Member + every service profile + agent runtime VMs (murmur-shared-floor); the image-update service and its VMs (murmur-image-updater) |
change-request.endorse | Add / remove your thumbs-up (advisory: never authorizes a write) | none | Member + every service profile + agent runtime VMs (murmur-shared-floor); the image-update service and its VMs (murmur-image-updater) |
disk-type.read | Read a disk type, and see it in listings | {name} | Admin only |
disk-type.create | Create a disk type | {name} | Admin only |
disk-type.edit | Edit a disk type | {name} | Admin only |
disk-type.delete | Delete a disk type | {name} | Admin only |
developer.read | Read the tenant developer dropdown (ListDevelopers) | none | Member |
environment.read | Read an environment and see it in listings; also gates reading and listing bakes, in their workspace when scoped to one | {name} | Member |
environment.create | Create an environment | {name} | Workspace manager; admin only at tenant level |
environment.edit | Edit an environment | {name} | Workspace manager; admin only at tenant level |
environment.delete | Delete an environment | {name} | Workspace manager; admin only at tenant level |
event-delivery.read | Read tenant event-delivery outcomes | none | Admin only |
flight.read | Read a flight, and see it in listings | {name} | Member |
flight.create | Create a flight | {name} | Member |
flight.edit | Edit a flight | {name} | Member |
flight.delete | Delete a flight | {name} | Member |
github-app-installation.read | Read the GitHub App installation inventory, and see it in listings | default | Admin only |
github-role.read | Read a GitHub credential policy and see it in listings | {name} | Admin only |
github-role.create | Create a GitHub credential policy | {name} | Admin only |
github-role.edit | Edit a GitHub credential policy | {name} | Admin only |
github-role.delete | Delete a GitHub credential policy | {name} | Admin only |
github-request-log.read | Read GitHub request-log metadata; the own-log view is scoped to the caller’s owner namespace | {provider}/{account}/* for the own-log view; none for the tenant-wide log | Member (own, murmur-member-self); admin for the tenant-wide log |
github-request-log-body.read | Read recorded GitHub GraphQL request bodies | none | Admin only |
group.read | Read an RBAC group, and see it in listings | {name} | Admin only |
group.create | Create an RBAC group | {name} | Admin only |
group.edit | Edit an RBAC group | {name} | Admin only |
group.delete | Delete an RBAC group | {name} | Admin only |
image.read | Read an image, and see it in listings | {name} | Member; workspace user |
image.create | Create an image | {name} | Workspace manager; admin only at tenant level |
image.edit | Edit an image | {name} | Workspace manager; admin only at tenant level |
image.delete | Delete an image | {name} | Workspace manager; admin only at tenant level |
integration.create | Connect an MCP / connector integration (the connect RPC also requires token.create, tenant-binding.create, and service-profile.assume) | {connection_id} | Admin only |
integration.delete | Disconnect an integration (the disconnect RPC also requires token.delete and tenant-binding.delete) | {connection_id} | Admin only |
knowledge.read | Read a knowledge item and see it in listings | {name} | Member + service profiles + runtime VMs (murmur-shared-floor); workspace user |
knowledge.create | Create a knowledge item | {name} | Member + service profiles + runtime VMs (murmur-shared-floor); workspace manager |
knowledge.edit | Edit a knowledge item | {name} | Member + service profiles + runtime VMs (murmur-shared-floor); workspace manager |
knowledge.delete | Delete a knowledge item | {name} | Member + service profiles + runtime VMs (murmur-shared-floor); workspace manager |
knowledge-config.read | Read knowledge injection and culling settings | default | Admin only |
knowledge-config.create | Create knowledge settings | default | Admin only |
knowledge-config.edit | Edit knowledge settings | default | Admin only |
knowledge-config.delete | Delete knowledge settings | default | Admin only |
machine-type.read | Read a machine type, and see it in listings | {name} | Member + service profiles + runtime VMs (murmur-shared-floor) |
machine-type.create | Create a machine type | {name} | Admin only |
machine-type.edit | Edit a machine type | {name} | Admin only |
machine-type.delete | Delete a machine type | {name} | Admin only |
mailbox.read | Watch your own mailbox’s event stream (WatchEvents) | none | Ownership check: the mailbox owner only (caller’s provider + account must equal the mailbox’s); not RBAC-grantable, no role or builtin confers it |
mailbox.edit | Flush your own mailbox’s subscriptions (FlushSubscriptions) | none | Ownership check: the mailbox owner only; not RBAC-grantable, no role or builtin confers it |
placement.read | Read a placement, and see it in listings | {name} | Member |
placement.create | Create a placement | {name} | Admin only |
placement.edit | Edit a placement | {name} | Admin only |
placement.delete | Delete a placement | {name} | Admin only |
placement-sa.assume | Use a bound cloud identity for a tenant-level bake. Spawns and scoped bakes instead use workspace authority and binding admission | {service_account} (GCP service account email or AWS instance-profile ARN) | Principals named by the binding’s grants; tenant admin authority also applies |
pool-config.read | Read the pool config, and see it in listings | default | Member |
pool-config.edit | Tune the pool config | default | Member |
pool-config.create | Create the pool config | default | Admin only |
pool-config.delete | Delete the pool config | default | Admin only |
recipe.read | Read a recipe, and see it in listings | {name} | Workspace user; admin only at tenant level |
recipe.create | Create a recipe | {name} | Workspace manager; admin only at tenant level |
recipe.edit | Edit a recipe | {name} | Workspace manager; admin only at tenant level |
recipe.delete | Delete a recipe | {name} | Workspace manager; admin only at tenant level |
repo-config.read | Read a repo config, and see it in listings | {clone_url} | Admin only |
repo-config.create | Create a repo config | {clone_url} | Admin only |
repo-config.edit | Edit a repo config | {clone_url} | Admin only |
repo-config.delete | Delete a repo config | {clone_url} | Admin only |
role.read | Read an RBAC role, and see it in listings | {name} | Admin only |
role.create | Create an RBAC role | {name} | Admin only |
role.edit | Edit an RBAC role | {name} | Admin only |
role.delete | Delete an RBAC role | {name} | Admin only |
secret.read | Read secret metadata and see it in listings; never returns the value | {name} | Workspace user; admin only at tenant level |
secret.create | Create a secret | {name} | Workspace manager; admin only at tenant level |
secret.edit | Edit a secret | {name} | Workspace manager; admin only at tenant level |
secret.delete | Delete a secret | {name} | Workspace manager; admin only at tenant level |
service-profile.read | Read a service profile, and see it in listings | {name} | Admin only; every member on the image-update service’s own profile (murmur-image-updater-visible) |
service-profile.create | Create a service profile | {name} | Admin only |
service-profile.edit | Edit a service profile | {name} | Admin only |
service-profile.delete | Delete a service profile | {name} | Admin only |
service-profile.assume | Spawn an agent running under a profile | {name} | Admin only (or a grant attached to the profile) |
share-link.create | Create a dashboard share link | {provider}/{account}/w/{workspace}/{slug}[/{slug}…]/{key_id} | Member (own, murmur-member-self) |
share-link.read | Read a share link, and see it in listings | {provider}/{account}/w/{workspace}/{slug}[/{slug}…]/{key_id} | Member (own, murmur-member-self) |
share-link.delete | Delete a share link | {provider}/{account}/w/{workspace}/{slug}[/{slug}…]/{key_id} | Member (own, murmur-member-self) |
share-link.edit | Edit a share link | {provider}/{account}/w/{workspace}/{slug}[/{slug}…]/{key_id} | Admin only (the self-binding stops at create/read/delete) |
steering-policy.read | Read a steering policy, and see it in listings | {name} | Admin only |
steering-policy.create | Create a steering policy | {name} | Admin only |
steering-policy.edit | Edit a steering policy | {name} | Admin only |
steering-policy.delete | Delete a steering policy | {name} | Admin only |
tag.read | Read a dashboard tag, and see it in listings | {name} | Member |
tag.create | Create a dashboard tag | {name} | Member |
tag.edit | Edit a dashboard tag | {name} | Member |
tag.delete | Delete a dashboard tag | {name} | Member |
tenant.read | Read tenant config and flags (GetTenantFlags, ListRepos) | none | Member |
tenant.encrypt | Encrypt tenant secret material (the Encrypt RPC) | none | Member |
tenant.login | Enter a tenant as an authenticated developer | none | Member (murmur-member-login) |
tenant-binding.read | Read an RBAC tenant-binding, and see it in listings | {name} | Admin only |
tenant-binding.create | Create an RBAC tenant-binding | {name} | Admin only |
tenant-binding.edit | Edit an RBAC tenant-binding | {name} | Admin only |
tenant-binding.delete | Delete an RBAC tenant-binding | {name} | Admin only |
token.read | Read an integration token | {key_id} | Admin only |
token.create | Mint an integration token | {key_id} | Admin only |
token.delete | Delete an integration token | {key_id} | Admin only |
tool-link-policy.read | Read a tool-link policy and see it in listings | {name} | Workspace user; admin only at tenant level |
tool-link-policy.create | Create a tool-link policy | {name} | Workspace manager; admin only at tenant level |
tool-link-policy.edit | Edit a tool-link policy | {name} | Workspace manager; admin only at tenant level |
tool-link-policy.delete | Delete a tool-link policy | {name} | Workspace manager; admin only at tenant level |
user.read | Read your own user record, and see it in listings | {provider}/{username} | Member (own, murmur-member-user-record) |
user.create | Create your own user record | {provider}/{username} | Member (own, murmur-member-user-record) |
user.edit | Edit your own user record | {provider}/{username} | Member (own, murmur-member-user-record) |
user.delete | Delete a user record | {provider}/{username} | Admin only |
user-secret.read | Read your own user-secret metadata (name, description): secrets are write-only, the value is never returned, and see it in listings | {provider}/{username}/{name} | Member (own, murmur-member-self) |
user-secret.create | Create your own user-secrets | {provider}/{username}/{name} | Member (own, murmur-member-self) |
user-secret.edit | Edit your own user-secrets | {provider}/{username}/{name} | Member (own, murmur-member-self) |
user-secret.delete | Delete your own user-secrets | {provider}/{username}/{name} | Member (own, murmur-member-self) |
webhook-source.read | Read webhook-source metadata and see it in listings | {name} | Member |
webhook-source.create | Create a webhook source | {name} | Admin only |
webhook-source.edit | Edit a webhook source | {name} | Admin only |
webhook-source.delete | Delete a webhook source | {name} | Admin only |
workspace.read | Read a workspace’s configuration and see it in listings | {name} | Workspace users and managers through its grants; a runtime on its own workspace |
workspace.use | Access scoped contents and spawn into a workspace, alongside each kind permission | {name} | Workspace user and manager; a runtime on its own workspace |
workspace.create | Create a workspace | {name} | Member; creation defaults make the creator a manager |
workspace.edit | Edit a workspace | {name} | Workspace manager |
workspace.delete | Delete a workspace | {name} | Workspace manager |