Skip to content

Permissions

CommandChain checks two different kinds of permission, and knowing which one an error is about saves a lot of hunting.

KindLooks likeDecides
Registry keytasks:editWhat a person may do. Held per person, ticked in the roles grid, and named in API errors
Route gatemanage_integrationsWhether a page renders at all. Read by the app before it draws a route

Registry keys are the ones you assign. Route gates follow from whether someone is a workspace admin, so they are not separately assignable: see create a role for how the two meet in practice.

These are the rows of the permission grid on the Roles page. The three columns on the right are the starting bundles the grid offers: Administrator, Team Member, and Viewer. They are templates you tick and untick from, not roles. The workspace owner holds every key regardless.

The Agent column marks a key an agent may hold only with human approval behind it.

KeyGrantsAgentAdminMemberViewer
agent:runExecute agent tasksyesyes
agent:view_metricsView agent execution metrics and statisticsyesyesyes
agent:approve_high_riskApprove high-risk agent operationsapprovalyes
agent:approve_low_riskApprove low-risk agent operationsyesyes
agent:view_tasksView agent task history and statusyesyesyes
agent:cancel_tasksCancel running agent tasksapprovalyes
KeyGrantsAgentAdminMemberViewer
agents:viewView agent profiles and configurationsyesyesyes
agents:manageCreate, update, and delete agent profilesapprovalyes
KeyGrantsAgentAdminMemberViewer
org:manage_rolesCreate and modify rolesapprovalyes
org:manage_membersInvite, remove, and manage membersapprovalyes
org:view_membersView the member listyesyesyes
org:view_settingsView workspace settingsyesyesyes
org:edit_settingsModify workspace settingsapprovalyes
KeyGrantsAgentAdminMemberViewer
models:viewView available AI modelsyesyesyes
models:editConfigure AI model settingsapprovalyes
models:view_usageView AI model usage statisticsyesyesyes
KeyGrantsAgentAdminMemberViewer
teams:manageCreate, update, and delete teamsapprovalyes
teams:viewView team informationyesyesyes
teams:assign_membersAdd or remove team membersapprovalyes
KeyGrantsAgentAdminMemberViewer
governance:view_auditView the audit trailyesyes
governance:manage_policiesCreate and modify governance policiesapprovalyes
governance:manage_tokensCreate and revoke permission tokensapproval
KeyGrantsAgentAdminMemberViewer
meetings:createCreate new meetingsyesyes
meetings:manageUpdate and delete meetingsapprovalyes
meetings:viewView meeting details and historyyesyesyes
meetings:chatSend messages in meetingsyesyes
KeyGrantsAgentAdminMemberViewer
tasks:createCreate new tasksyesyes
tasks:viewView task details and statusyesyesyes
tasks:editUpdate task detailsyes
KeyGrantsAgentAdminMemberViewer
mcp:servers:viewView MCP server configurationsyesyesyes
mcp:servers:createRegister new MCP serversapprovalyes
mcp:servers:updateModify MCP server configurationsapprovalyes
mcp:servers:deleteRemove MCP serversapprovalyes
mcp:servers:discoverRun tool discovery on an MCP serveryes
mcp:usage:viewView MCP usage metrics and audit logsyesyes
KeyGrantsAgentAdminMemberViewer
tenant.profile.readView the company profile, its versions, proposals, references, and audityesyesyes
tenant.profile.editApprove or reject proposals, restore versions, edit directly, approve referencesapprovalyes
KeyGrantsAgentAdminMemberViewer
marketing:manage_campaignsCreate and manage campaigns, content assets, and workflows
marketing:publish_approveApprove externally visible publish actionsapproval
marketing:manage_autonomyView and change autonomy levels per action classapproval
integrations:manage_bindingsPropose, verify, activate, and disable integration category bindingsapproval

These decide whether a page draws. They are not ticked anywhere: everyone gets the first group, and workspace admins get the second.

KeyHeld byGates
view_tasksEveryoneNothing today. Task pages are open to every member
create_taskEveryoneNothing today
view_meetingsEveryoneNothing today
view_personal_assistantEveryoneThe Eva assistant page
view_reviewsEveryoneNothing today
view_approvalsEveryoneNothing today
view_notificationsEveryoneThe notifications page
view_agentsEveryoneNothing today
manage_org_rolesWorkspace adminsRoles, users, rubrics
manage_integrationsWorkspace adminsIntegrations, GitHub, Slack, MCP servers, agents, the runner fleet, and runner pairing
manage_tokensWorkspace adminsPermission tokens
manage_router_policyWorkspace adminsRouter policy
manage_model_policyWorkspace adminsAI runtime, model catalog, budgets
manage_tool_policyWorkspace adminsNothing today
manage_skill_graphsWorkspace adminsSkill Graph Studio and skill authoring with Eva
manage_task_gatesWorkspace adminsThe Approve and Deny buttons on a paused run, rather than a page
view_policy_learningWorkspace adminsPolicy learning
view_audit_logWorkspace adminsThe audit log

“Nothing today” means exactly that: the key exists and always answers yes for the group that holds it, and no page consults it. It is listed so that finding it in a stack trace does not send you looking for a screen it hides.

An API answer names the registry key it wanted:

{ "code": "FORBIDDEN", "message": "Missing required permission: tasks:edit" }

That string is a row in the grid above. Find it on the Roles page, tick it for the role in question, and the same request succeeds. A missing route gate never produces this: the page redirects to the access-denied screen before a request is made.