Named permission sets with read and write scopes — the authority behind every admin action.
Every account carries exactly one role, and the link can never dangle.
A role is a named bundle of permission scopes assigned to platform accounts — human accounts and MCP accounts (the AI agents' logins) alike. Every account points at exactly one role, and KeenAgents guarantees that link is always valid — an account can never reference a role that does not exist, and deleting a role never leaves accounts behind. A role carries a human-facing Title, a machine Slug derived automatically from the title, and two scope lists: what the role can read (view) and what it can write (modify). Both title and slug are unique across your organization.
Permission changes take effect right away: saving a role signs out everyone currently signed in under it — they see Your access changed — please sign in again. and get the new permissions when they sign back in. An MCP account holding the role picks the change up at its next authentication. There is nothing for you to trigger.
support_team. You never enter it directly. It is the role's stable identifier: what accounts reference and what integrations should store.admin ("Administrator"), owner ("Owner"), developer ("Developer") and default ("Default"). admin, owner and default cannot be edited at all; developer allows permission edits but keeps its title locked. default is additionally the landing role for accounts — human or MCP — whose role is deleted.A closed set of fourteen values — unknown scopes are refused outright.
Scopes come from a fixed catalog; a value outside it can never be granted. The fourteen values: roles, account, consumer, spaces, agents, api_keys, clients, certificates, contracts, webhooks, cache, logs, mcp_accounts, mcp_consumers. All fourteen appear on the admin permissions board:
| Scope | Surface | Read grants | Write grants |
|---|---|---|---|
account | Accounts — platform user management | View accounts | Create/edit/delete accounts, assign roles |
consumer | Consumers — end-user management | View consumers | Create/edit/delete consumer accounts, assign their contracts |
roles | Roles — permission management | View roles | Create/edit/delete role definitions and their permissions |
spaces | AI Spaces — workspace management | View spaces and their deployment tokens | Create/edit/delete the spaces where agents are deployed |
agents | Agents — AI agent management | View agents and their settings | Create/edit/delete agents within spaces |
api_keys | API Keys — application secret management | View issued keys and their bindings | Create/rotate/revoke keys |
clients | Clients — partner client credentials | View clients | Create/rotate/delete client id and secret pairs |
certificates | Certificates — signing certificates | View certificates and their public keys | Generate/rotate/delete certificate pairs |
contracts | Contracts — consumer contracts | View contracts, their spaces and policies | Create/edit/delete contracts and their assignments |
webhooks | Webhooks — partner webhook records | View webhook records | Create/edit/delete the name, origin and webhook bindings |
cache | Cache — platform cache administration | View cache status | Create or invalidate platform caches |
logs | Logs — platform activity and flow execution logs | View logs | Enable/disable log channels |
mcp_accounts | MCP Accounts — the AI agents' logins | View MCP accounts (an MCP account may do this too, to check one exists) | Create them, assign their role, enable or disable, rotate the secret, delete — humans only: an MCP account never gets these, whatever its role |
mcp_consumers | MCP Consumers — the consumers an AI agent creates for itself | View MCP consumers | Lets an MCP account create them, assign their contract and spaces, enable/disable, rotate, delete and mint their token through the MCP server; a human with this write level gets three console controls — the Enabled switch (Save), Rotate Secret and Delete — never Create or assign |
60 characters.admin, owner, developer or default, matched case-insensitively — is refused at create and update with "title cannot be or include "admin", "owner", "developer" or "default"". "Default Support" fails; "Support" passes. Why: custom roles must never masquerade as the built-in ones.support_team, and the second create is refused as a duplicate.admin/owner/default refuse any update; developer ignores title changes but accepts permission edits.Where roles live, and what happens on delete.
/roles — Role Management landing page with a create card and a list card./roles/list — Role List: a table with sortable Title, Slug, ID and Created At columns (click a header to cycle ascending → descending → off) and a Visit link per row, plus a filter panel with repeatable rows of type + operator + value — free text for title, slug and id (equal / not / like / not like / in / not in) and a date picker for created at (equal / not / greater / less — day-granular). Filters live in the URL — refresh, share and back/forward all preserve them — and Clear All resets the list./roles/create — Create Role: a single Title field (helper text: "Up to 60 characters. The slug is derived from the title."). Success toasts and redirects straight to the new role's detail page, where permissions can be assigned./roles/<id> — Role Details: Title field + Permissions board + Save + Delete. Save is dirty-gated (enabled only when values actually deviate from the loaded role); Delete is two-step (Delete → Confirm delete / Cancel).Deleting a role is one atomic operation — there is no path that leaves an account pointing at a role that no longer exists:
default and the role is removed — either both happen or neither does.default happens in the same step with no per-account confirmation of which accounts moved — MCP accounts included — and people working under the deleted role are signed out. Review who holds a role before deleting it.cache scope's write level separately gates the per-record Rebuild Resource Cache button on the Api Key, Client, Certificate, Contract, Webhook, Space and Agent detail pages: someone can hold a resource's own write scope and still not see Rebuild without cache:w — and, conversely, a cache manager can see Rebuild without holding that resource's write scope. (On an Api Key the button rebuilds only what is bound to that key — see Resource Cache.)mcp_consumers write gets exactly the Enabled switch, Rotate Secret and Delete. See MCP Accounts.You don't have permission to view this page — ask an administrator to grant the scope under Roles.Keen Agents 2026
Documentation
Release 15