Skip to main content
Every permission is a {kind}.{verb} string. Wildcard forms (*, {kind}.*, *.read, *.list) are also valid — see Wildcards. For the model itself — how grants, roles, groups, and tenant-bindings combine and the order they are evaluated in — see Authorization. Columns: $permission · what it enables with no resource prefix · the resource prefix (name_pattern) a grant can scope it to · which builtin confers it by default.
Org admins (GitHub org owners) hold every permission via the murmur-root role (*), bound by murmur-org-admin-root. The Default grant column therefore describes the non-admin builtin. Cell shorthand:
  • Member — every authenticated member, tenant-wide (murmur-tenant-member).
  • Member (own) — every member, scoped to their own namespace by the named self-binding.
  • Admin only — no builtin; needs murmur-root or an explicit admin-created binding.
The resource prefix column shows the kind’s catalog-name shape, with {…} marking the name segments. A grant’s name_pattern is matched against that name — a trailing * is a prefix match, otherwise exact (e.g. a {provider}/{account}/* grant scopes an agent permission to one owner’s subtree). means the permission is tenant-wide, with no resource to scope.
PermissionEnables (no prefix)Resource prefix (name_pattern)Default grant (builtin)
agent.readView an agent’s status, fields, and session{provider}/{account}/w/{workspace}/{slug}[/{slug}…]Member
agent.listList / tree / watch agents{provider}/{account}/w/{workspace}/{slug}[/{slug}…]Member
agent.createSpawn an agent{provider}/{account}/w/{workspace}/{slug}[/{slug}…]Member (own, murmur-agent-create-self); service-profile key (murmur-agent-service-profile-self); MCP connector (murmur-mcp-connector)
agent.editAll agent lifecycle + runtime control (kill, sleep, wake, follow-up, SSH, rekey){provider}/{account}/w/{workspace}/{slug}[/{slug}…]Agent owner (murmur-agent-creator); the VM itself (murmur-agent-runtime); service-profile key; MCP connector
agent.deleteDelete / kill an agent and its subtree{provider}/{account}/w/{workspace}/{slug}[/{slug}…]Agent owner (murmur-agent-creator); a parent VM (murmur-agent-runtime); service-profile key; MCP connector
agent-persona.readRead an agent persona{name}Member; MCP connector
agent-persona.listList agent personas{name}Member; MCP connector
agent-persona.createCreate an agent persona{name}Member
agent-persona.editEdit an agent persona{name}Member
agent-persona.deleteDelete an agent persona{name}Member
alias.readRead an alias{name}Member
alias.listList aliases{name}Member
alias.createCreate an alias{name}Member
alias.editEdit an alias{name}Member
alias.deleteDelete an alias{name}Member
api-key.readRead an API key{name}Member
api-key.listList API keys{name}Member
api-key.createCreate an API key{name}Member
api-key.editEdit an API key{name}Member
api-key.deleteDelete an API key{name}Member
actor-allowlist.readRead an actor allowlist{name}Admin only
actor-allowlist.listList actor allowlists{name}Admin only
actor-allowlist.createCreate an actor allowlist{name}Admin only
actor-allowlist.editEdit an actor allowlist{name}Admin only
actor-allowlist.deleteDelete an actor allowlist{name}Admin only
builtin-config.readRead the builtin-disable policydefaultAdmin only
builtin-config.editEdit the builtin-disable policydefaultAdmin only
canned-response.readRead a canned response{name}Member
canned-response.listList canned responses{name}Member
canned-response.createCreate a canned response{name}Member
canned-response.editEdit a canned response{name}Member
canned-response.deleteDelete a canned response{name}Member
change-request.createPropose a change-request against any targetMember + every service profile (murmur-change-request-proposer)
change-request.listList the change-request queueMember + every service profile (murmur-change-request-proposer)
change-request.readRead a change-request (its proposed value also needs {target_kind}.read)Member + every service profile (murmur-change-request-proposer)
change-request.endorseAdd / remove your thumbs-up (advisory — never authorizes a write)Admin only (the proposer role stops at create/list/read)
disk-type.readRead a disk type{name}Admin only
disk-type.listList disk types{name}Admin only
disk-type.createCreate a disk type{name}Admin only
disk-type.editEdit a disk type{name}Admin only
disk-type.deleteDelete a disk type{name}Admin only
developer.listRead the tenant developer dropdown (ListDevelopers)Member
environment.readRead an environment (also gates GetBake){name}Member
environment.listList environments (also gates ListBakes){name}Member
environment.createCreate an environment{name}Member
environment.editEdit an environment{name}Member
environment.deleteDelete an environment{name}Member
flight.readRead a flight{name}Member
flight.listList flights{name}Member
flight.createCreate a flight{name}Member
flight.editEdit a flight{name}Member
flight.deleteDelete a flight{name}Member
github-app-installation.readRead the GitHub App installation inventorydefaultAdmin only
github-app-installation.listList GitHub App installationsdefaultAdmin only
group.readRead an RBAC group{name}Admin only
group.listList RBAC groups{name}Admin only
group.createCreate an RBAC group{name}Admin only
group.editEdit an RBAC group{name}Admin only
group.deleteDelete an RBAC group{name}Admin only
image.readRead an image{name}Member
image.listList images{name}Member
image.createCreate an image{name}Admin only
image.editEdit an image{name}Admin only
image.deleteDelete an image{name}Admin only
integration.createConnect an MCP / connector integration (the connect RPC also requires token.create, tenant-binding.create, and service-profile.assume){connection_id}Admin only
integration.deleteDisconnect an integration (the disconnect RPC also requires token.delete and tenant-binding.delete){connection_id}Admin only
machine-type.readRead a machine type{name}Admin only
machine-type.listList machine types{name}Admin only
machine-type.createCreate a machine type{name}Admin only
machine-type.editEdit a machine type{name}Admin only
machine-type.deleteDelete a machine type{name}Admin only
mailbox.readWatch your own mailbox’s event stream (WatchEvents)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.editFlush your own mailbox’s subscriptions (FlushSubscriptions)Ownership check — the mailbox owner only; not RBAC-grantable, no role or builtin confers it
placement.readRead a placement{name}Member
placement.listList placements{name}Member
placement.createCreate a placement{name}Admin only
placement.editEdit a placement{name}Admin only
placement.deleteDelete a placement{name}Admin only
placement-sa.assumeBind an agent to a placement’s cloud service account at spawn{service_account} (the bound GCP SA email / AWS instance-profile ARN)Member + service profiles on platform placements (their ServiceAccountBinding grants it to murmur-all-members + service-profile:*); customer placements scope it per-binding
pool-config.readRead the pool configdefaultMember
pool-config.listList the pool configdefaultMember
pool-config.editTune the pool configdefaultMember
pool-config.createCreate the pool configdefaultAdmin only
pool-config.deleteDelete the pool configdefaultAdmin only
recipe.readRead a recipe{name}Member
recipe.listList recipes{name}Member
recipe.createCreate a recipe{name}Member
recipe.editEdit a recipe{name}Member
recipe.deleteDelete a recipe{name}Member
repo-config.readRead a repo config{clone_url}Admin only
repo-config.listList repo configs{clone_url}Admin only
repo-config.createCreate a repo config{clone_url}Admin only
repo-config.editEdit a repo config{clone_url}Admin only
repo-config.deleteDelete a repo config{clone_url}Admin only
role.readRead an RBAC role{name}Admin only
role.listList RBAC roles{name}Admin only
role.createCreate an RBAC role{name}Admin only
role.editEdit an RBAC role{name}Admin only
role.deleteDelete an RBAC role{name}Admin only
secret.readRead a tenant secret’s metadata (name, description) — secrets are write-only, the value is never returned{name}Admin only
secret.listList tenant secrets{name}Admin only
secret.createCreate a tenant secret{name}Admin only
secret.editEdit a tenant secret{name}Admin only
secret.deleteDelete a tenant secret{name}Admin only
service-profile.readRead a service profile{name}Admin only
service-profile.listList service profiles{name}Admin only
service-profile.createCreate a service profile{name}Admin only
service-profile.editEdit a service profile{name}Admin only
service-profile.deleteDelete a service profile{name}Admin only
service-profile.assumeSpawn an agent running under a profile{name}Admin only (or a grant attached to the profile)
share-link.createCreate a dashboard share link{provider}/{account}/w/{workspace}/{slug}[/{slug}…]/{key_id}Member (own, murmur-share-link-self)
share-link.readRead a share link{provider}/{account}/w/{workspace}/{slug}[/{slug}…]/{key_id}Member (own, murmur-share-link-self)
share-link.listList share links{provider}/{account}/w/{workspace}/{slug}[/{slug}…]/{key_id}Member (own, murmur-share-link-self)
share-link.deleteDelete a share link{provider}/{account}/w/{workspace}/{slug}[/{slug}…]/{key_id}Member (own, murmur-share-link-self)
share-link.editEdit a share link{provider}/{account}/w/{workspace}/{slug}[/{slug}…]/{key_id}Admin only (the self-binding stops at create/read/list/delete)
steering-policy.readRead a steering policy{name}Admin only
steering-policy.listList steering policies{name}Admin only
steering-policy.createCreate a steering policy{name}Admin only
steering-policy.editEdit a steering policy{name}Admin only
steering-policy.deleteDelete a steering policy{name}Admin only
tag.readRead a dashboard tag{name}Admin only
tag.listList dashboard tags{name}Admin only
tag.createCreate a dashboard tag{name}Admin only
tag.editEdit a dashboard tag{name}Admin only
tag.deleteDelete a dashboard tag{name}Admin only
tenant.readRead tenant config and flags (GetTenantFlags, ListRepos)Member
tenant.encryptEncrypt tenant secret material (the Encrypt RPC)Member
tenant-binding.readRead an RBAC tenant-binding{name}Admin only
tenant-binding.listList RBAC tenant-bindings{name}Admin only
tenant-binding.createCreate an RBAC tenant-binding{name}Admin only
tenant-binding.editEdit an RBAC tenant-binding{name}Admin only
tenant-binding.deleteDelete an RBAC tenant-binding{name}Admin only
token.readRead an integration token{key_id}Admin only
token.createMint an integration token{key_id}Admin only
token.deleteDelete an integration token{key_id}Admin only
user.readRead your own user record{provider}/{username}Member (own, murmur-user-self)
user.createCreate your own user record{provider}/{username}Member (own, murmur-user-self)
user.editEdit your own user record{provider}/{username}Member (own, murmur-user-self)
user.listList user records{provider}/{username}Admin only
user.deleteDelete a user record{provider}/{username}Admin only
user-secret.readRead your own user-secret metadata (name, description) — secrets are write-only, the value is never returned{provider}/{username}/{name}Member (own, murmur-user-secrets-self)
user-secret.listList your own user-secrets{provider}/{username}/{name}Member (own, murmur-user-secrets-self)
user-secret.createCreate your own user-secrets{provider}/{username}/{name}Member (own, murmur-user-secrets-self)
user-secret.editEdit your own user-secrets{provider}/{username}/{name}Member (own, murmur-user-secrets-self)
user-secret.deleteDelete a user-secret{provider}/{username}/{name}Admin only (the self-binding stops at read/list/create/edit)
workspace.readRead a workspace{name}Member; MCP connector
workspace.listList workspaces{name}Member; MCP connector
workspace.createCreate a workspace{name}Admin only
workspace.editEdit a workspace{name}Admin only
workspace.deleteDelete a workspace{name}Admin only

TypePage
ConceptAuthorization — the full model and evaluation order
GuidePermissions Guide — grant / revoke admin
Referencerole · group · tenant-binding
Referencemurmur check-permissions