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. 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 across the whole platform right away — there is no propagation step for you to trigger and no per-surface re-sync. Assign a role, save its permissions, and every gated surface honors the new state.
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 whose role is deleted.A closed set of twelve values — unknown scopes are refused outright.
Scopes come from a fixed catalog; a value outside it can never be granted. The twelve values: roles, account, consumer, spaces, agents, api_keys, clients, certificates, contracts, webhooks, cache, logs. All twelve 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 |
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 Title, Slug, ID and a Visit link per row, plus a filter panel with repeatable rows of type + operator + value — free text for title, slug and id (equals / not / like / not like / in / not in) and a date picker for created date (on / not on / after / before). 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 — and users 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 Spaces, Agents and API Keys 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.Keen Agents 2026
Documentation
Release 15