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.
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
| Permission | Name | What it allows |
|---|---|---|
agents:view | View agents | See agent inventory, config, and ownership. |
agents:write | Create & edit agents | Register, edit, reassign owner, bind/unbind tools, run, or deploy an agent. |
agents:assign_owner | Assign agent owners | Register 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:delete | Delete agents | Purge an agent, or a purged tool binding. Permanent. |
Guardrails
| Permission | Name | What it allows |
|---|---|---|
guardrails:view | View guardrails | See inbound + outbound policy, findings, activity feed. |
guardrails:write | Edit guardrails | Edit inbound/outbound policy, autopause rules, denylist terms, and the per-agent on/off switch. |
Tool & MCP governance
| Permission | Name | What it allows |
|---|---|---|
tools:view | View tool registry | See the tool registry and agent bindings. |
tools:write | Create & edit tool registry | Register, edit, enable/disable, or bind/unbind a tool. |
tools:delete | Delete tool registry | Permanently delete an already-disabled tool. |
mcp:view | View MCP servers | See registered MCP servers and their tools. |
mcp:write | Create & edit MCP servers | Register, edit, revoke, or enable/disable a server's tools. |
mcp:delete | Delete MCP servers | Permanently delete an already-revoked MCP server. |
Audit & observability
| Permission | Name | What it allows |
|---|---|---|
audit:read | Read audit log | Read the hash-chained audit ledger. |
observability:view | View observability | Operational views and personal traces; does not grant other members’ call content. |
traces:read:workspace | Read all workspace call content | Every member’s and agent’s prompts, responses, tool arguments/results, audit payloads and trace spans, including future members. |
Session Insights
| Permission | Name | What it allows |
|---|---|---|
sessions:view | View team Session Insights | See 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
| Permission | Name | What it allows |
|---|---|---|
billing:read | View billing | View 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
| Permission | Name | What it allows |
|---|---|---|
alerts:view | View alert channels | See configured budget-threshold alert channels. |
alerts:write | Create & edit alert channels | Add, edit, or test-fire an alert channel. |
alerts:delete | Delete alert channels | Permanently remove an alert channel. |
Members & roles
| Permission | Name | What it allows |
|---|---|---|
members:view | View members | See the member, invite, and role list. |
members:write | Manage members | Invite/resend, change role/scopes, deactivate/reactivate, assign a custom role, and create/edit custom roles. |
members:delete | Delete members & roles | Revoke a pending invite, or permanently delete a custom role. |
Identity & access infra
| Permission | Name | What it allows |
|---|---|---|
keys:view | View API keys | See a workspace's API keys and their last-used time. |
keys:write | Create & edit API keys | Create, 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:delete | Revoke API keys | Permanently revoke a developer key. |
identity_config:view | View SSO/SCIM config | See the SSO / SCIM configuration status. |
identity_config:write | Manage SSO/SCIM config | Configure SSO connection and SCIM provisioning. Owner-only — no custom role can hold this. |
Model & provider config
| Permission | Name | What it allows |
|---|---|---|
models:view | View model catalog | See the served model catalog and live gateway configuration. |
routing:view | View routing | See routing config, benchmarks, the routing model catalog, dry-run a routing plan, and past routing decisions. |
routing:write | Send routing requests | Execute a routing request. This dispatches a real, billable call to a model. |
routing:evaluate | Evaluate routing quality | Label paired routing trials, run the LLM judge, and choose an observation window's judge model. |
secrets:view | View provider secrets | See 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
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.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.
Create role
A permission outside the catalog is rejected. The role starts with no members.
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.
Open Members → Roles
Open the row menu on Builder or Viewer and choose Edit.
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.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.
| Role | Default permissions |
|---|---|
| Viewer | audit:read |
| Builder | audit: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:writestill 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:readandtraces: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
System roles and invites.
Access requestsRequests to join and the approval queue.
Errors & refusalsHow to read a 403.
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.

