Administration Members & access Custom roles

Custom roles

A custom role is a named set of permissions from a fixed catalog. It replaces a member's system role. A custom-role member is ranked as viewer for any role-only check, but inherits nothing from viewer: they can reach only what the role's permissions grant.

Creating a custom role from the permission catalog, then assigning it to a member

The permission catalog

Permissions are named resource:aspect. Most resources have view and manage (or write). Agents, Tool Registry, MCP Servers, Alerts, Members & Roles and API keys also have a separate delete, so a role can edit an agent without being able to purge one.

Connectors, Workspaces and Org Settings aren't in the catalog. Only admins and owners can use them.

Agents

PermissionNameWhat it allows
agents:viewView agentsSee agent inventory, config, and ownership.
agents:writeCreate & edit agentsRegister, edit, reassign owner, bind/unbind tools, run, or deploy an agent.
agents:assign_ownerAssign agent ownersRegister an agent in another member's name, or reassign an agent to someone else. Without it, a member can only own the agents they create.
agents:deleteDelete agentsPurge an agent, or a purged tool binding. Permanent.

Guardrails

PermissionNameWhat it allows
guardrails:viewView guardrailsSee inbound + outbound policy, findings, activity feed.
guardrails:writeEdit guardrailsEdit inbound/outbound policy, autopause rules, denylist terms, and the per-agent on/off switch.

Tool & MCP governance

PermissionNameWhat it allows
tools:viewView tool registrySee the tool registry and agent bindings.
tools:writeCreate & edit tool registryRegister, edit, enable/disable, or bind/unbind a tool.
tools:deleteDelete tool registryPermanently delete an already-disabled tool.
mcp:viewView MCP serversSee registered MCP servers and their tools.
mcp:writeCreate & edit MCP serversRegister, edit, revoke, or enable/disable a server's tools.
mcp:deleteDelete MCP serversPermanently delete an already-revoked MCP server.

Audit & observability

PermissionNameWhat it allows
audit:readRead audit logRead the hash-chained audit ledger.
observability:viewView observabilityOperational views and personal traces; does not grant other members’ call content.
traces:read:workspaceRead all workspace call contentEvery member’s and agent’s prompts, responses, tool arguments/results, audit payloads and trace spans, including future members.

Session Insights

PermissionNameWhat it allows
sessions:viewView team Session InsightsSee the cross-member Session Insights team roster, per-person profiles, and team comparisons.

sessions:view discloses one person's numbers to another, so Viewer and Builder never get it by default; only an explicit grant does. The checkbox appears only on plans that include Session Insights.

Billing & budgets

PermissionNameWhat it allows
billing:readView billingView invoices, plan, usage, and budget/rate-limit posture. There is no write permission here — changing a budget cap or rate limit stays admin/owner only.

Alerts

PermissionNameWhat it allows
alerts:viewView alert channelsSee configured budget-threshold alert channels.
alerts:writeCreate & edit alert channelsAdd, edit, or test-fire an alert channel.
alerts:deleteDelete alert channelsPermanently remove an alert channel.

Members & roles

PermissionNameWhat it allows
members:viewView membersSee the member, invite, and role list.
members:writeManage membersInvite/resend, change role/scopes, deactivate/reactivate, assign a custom role, and create/edit custom roles.
members:deleteDelete members & rolesRevoke a pending invite, or permanently delete a custom role.

Identity & access infra

PermissionNameWhat it allows
keys:viewView API keysSee a workspace's API keys and their last-used time.
keys:writeCreate & edit API keysCreate, edit or rotate your own developer keys. These keys can call any allowed model (the chat:write scope) and spend money, so set caps on them. Through a custom role this covers only keys you own: creating a key for someone else, reassigning one, or rotating another member's key is refused.
keys:deleteRevoke API keysPermanently revoke a developer key.
identity_config:viewView SSO/SCIM configSee the SSO / SCIM configuration status.
identity_config:writeManage SSO/SCIM configConfigure SSO connection and SCIM provisioning. Owner-only — no custom role can hold this.

Model & provider config

PermissionNameWhat it allows
models:viewView model catalogSee the served model catalog and live gateway configuration.
routing:viewView routingSee routing config, benchmarks, the routing model catalog, dry-run a routing plan, and past routing decisions.
routing:writeSend routing requestsExecute a routing request. This dispatches a real, billable call to a model.
routing:evaluateEvaluate routing qualityLabel paired routing trials, run the LLM judge, and choose an observation window's judge model.
secrets:viewView provider secretsSee which providers are configured, not the key values. There is no secrets:write/delete key — provider secrets stay admin/owner only, non-delegable.

Create and assign a role

  1. Open Members → Roles

    Needs admin, owner, or a custom role with members:view. The tab lists every role with its Type (System, System (edited) or Custom), Permissions count and Members count.

  2. New role: name it and pick permissions

    Tick permissions from the permission catalog. To start from an existing role, choose Clone from its row menu.

  3. Create role

    A permission outside the catalog is rejected. The role starts with no members.

  4. Assign it

    On the Members tab, open a member's ⋮ menu and choose Change role. Custom roles appear alongside the system roles. You can also pick one when sending an invite.

To delete a role that still has members, pick a role to reassign them to in the same step.

Editing Builder and Viewer

Each workspace decides which catalog permissions Builder and Viewer carry. Owner and Admin can't be edited.

  1. Open Members → Roles

    Open the row menu on Builder or Viewer and choose Edit.

  2. Tick the permissions the role should carry

    Any catalog permission can be added, and the list can be empty. You can only grant permissions you hold, so only an owner can add identity_config:write. A built-in role's name and tags can't be changed.

  3. Save changes

    The change applies to everyone with that role, including people who join later. The row's type changes to System (edited).

To undo, choose Reset to default from the same menu. It appears only on an edited role.

RoleDefault permissions
Vieweraudit:read
Builderaudit:read, models:view, Agents and Tools view/write, MCP view/write, Guardrails view, Routing view/write.

Neither default includes observability:view or traces:read:workspace. Builders retain personal trace access for their own calls and currently owned agents through traces:read. Only an explicit workspace-content grant or an administrator role allows other members’ call content. The Roles editor asks for acknowledgement when adding workspace call-content access, including when cloning a role.

How this differs from a custom role:

  • A builder or viewer with a permission such as agents:write still acts only on what they own. Changing another member's agent or key needs Admin, or a custom role with that permission.
  • Access outside the catalog, such as calling models through the gateway, stays with the role whatever you tick.

If a workspace's auto-join role is Builder, anything you add to Builder also reaches people who auto-join.

Permissions that depend on others

Guardrails, Tool Registry and MCP Servers load the agent list, so they're locked to whatever the Agents permission allows. API Keys needs models:view for its model picker, so Keys access is locked to that too. billing:read isn't needed for API Keys; without it, only the per-key spend column is empty.

Read scopes

A member can also hold the read scopes audit:read and traces:read on top of their role. They're set automatically when a member is invited or changes role, unless the member already has customized scopes:

  • Viewer: audit:read.
  • Builder: audit:read and traces:read (their own traces only).
  • Admin and owner need none; they already read everything.

How a request is checked

Each endpoint requires a minimum role, a specific permission, or either. A custom-role member never passes a role-only check, because their rank is viewer. A builder or viewer is decided by permission alone wherever a member-level permission applies (agents, tools, MCP, guardrails view, audit, models, routing).

A blocked request returns 403 naming the role or permission that would have let it through. See Errors and refusals.

Next

Existing saved observability:view grants are not converted into workspace call-content grants automatically. Review intended broad access and explicitly grant traces:read:workspace; save dates do not establish an administrator’s intent. Unbound service keys also need the explicit workspace scope for project-wide reads.

Cookie settings

Our Cookie Policy lists every cookie and what it does.