Governance and Permissions
Ema controls access with role-based access control (RBAC). Every user holds exactly one role per workspace, and each role bundles a fixed set of capabilities, fine-grained permissions such as workflow.create or user.invite. When a user takes an action, the platform checks whether their role grants the capability that the action requires. Roles and capabilities are defined by the platform; they are the same in every workspace.
This page is the reference for the role model. To assign roles to people, see User management.
Roles
A role is a named bundle of capabilities. Ema ships six assignable roles, ordered from most to least privileged:
| Role | Name | What it's for |
|---|---|---|
| System Admin | system_admin | Full administrative control over the workspace, users, integrations, SSO, and content. |
| Builder Admin | builder_admin | Full build and admin capability across users and content. |
| User Admin | user_admin | Manage users and memberships inside the workspace. |
| Builder | builder | Create and edit workflows, AI Employees, and knowledge bases. |
| User | user | Baseline end-user capabilities: run workflows, chat, and search. |
| No Access | no_access | Explicit deny: blocks all actions inside the workspace. |
About env_admin. A seventh system role, env_admin, exists internally for the platform's feature-flag service. It is never assignable through the product surface, never appears in role pickers, and is filtered out of the roles reference. You will not encounter it when administering a workspace.
Roles are cumulative along the build and admin tiers. builder includes everything user can do; user_admin is user plus user-management capabilities; builder_admin is the union of builder and user_admin plus admin extras; system_admin is builder_admin plus the top tier of tenant, SSO, API-key, and audit capabilities. no_access grants nothing.
Capabilities
A capability is a single permission, named <group>.<action> (for example knowledge_base.create). Capabilities are organized into groups. The capability is what an action actually checks for: a route that creates a workflow requires workflow.create, regardless of which role the caller holds.
The full taxonomy:
| Group | Capabilities |
|---|---|
| tenant | tenant.view, tenant.create_child, tenant.view_children, tenant.manage_settings, tenant.delete |
| user | user.invite, user.view, user.update, user.deactivate, user.delete, user.assign_role, user.revoke_membership |
| role | role.view, role.create, role.edit, role.delete |
| sso | sso.manage_config, sso.manage_domains |
| auth | auth.manage_api_keys |
| workflow | workflow.view, workflow.create, workflow.edit, workflow.delete, workflow.execute, workflow.view_runs, workflow.manage_access |
| agent | agent.view, agent.create, agent.edit, agent.delete, agent.execute, agent.test_execute |
| knowledge_base | knowledge_base.view, knowledge_base.search, knowledge_base.create, knowledge_base.edit, knowledge_base.delete, knowledge_base.add_document, knowledge_base.delete_document, knowledge_base.tag_document, knowledge_base.manage_connector, knowledge_base.manage_taxonomy |
| chat | chat.session, chat.view_own, chat.edit_own, chat.feedback, chat.view_all, chat.manage_channels |
| observability | audit.view, metrics.view, metrics.view_scoped, metrics.view_tenant_wide, metrics.manage, eval.view, eval.configure, eval.execute |
| feature_flag | feature_flag.view, feature_flag.manage |
| integration | integration.view, integration.install, integration.connect, integration.execute |
| memory | memory.view, memory.manage |
| resource | resource.share, resource.unshare |
Reserved capabilities. role.create, role.edit, and role.delete are declared for forward compatibility with custom roles but are not yet assignable. Role mutation is not available in this version.
Metrics capabilities. The metrics group contains three distinct capabilities. metrics.view_scoped is the analytics viewer tier: it lets a role see usage metrics for a named scope (one AI Employee or one group) and is held by every real role from user upward. metrics.view_tenant_wide allows reading tenant-wide usage metrics with no AI Employee scope, including user PII dimensions; it is held by system_admin alone. metrics.view is the general platform metrics key, also held by system_admin alone. Cross-workspace metrics access is fully workspace-scoped with no role carve-out: both X-Analytics-View-Tenant-ID: all and a specific-workspace UUID are bounded to the caller's own workspace plus its authorized sub-workspaces.
How roles map to capabilities
Each role grants a defined set of capabilities. The counts below are exact:
| Role | Capabilities granted |
|---|---|
no_access | 0 |
user | 20 |
user_admin | 26 |
builder | 34 |
builder_admin | 45 |
system_admin | 62 |
system_admin holds 62 of the 65 capabilities in the taxonomy. The three it does not hold are the reserved role-mutation capabilities (role.create, role.edit, role.delete), which are granted to no role in this version; see the reserved-capabilities note above.
User (baseline)
The user role grants the capabilities an end user needs to run and consume content others have built:
tenant.view, role.view, workflow.view, workflow.execute, workflow.view_runs, agent.view, agent.execute, knowledge_base.view, knowledge_base.search, knowledge_base.tag_document, chat.session, chat.view_own, chat.edit_own, chat.feedback, integration.view, integration.connect, integration.execute, feature_flag.view, memory.view, metrics.view_scoped.
Builder (build tier)
builder is user plus the capabilities to author content:
workflow.create, workflow.edit, workflow.delete, agent.create, agent.edit, agent.delete, agent.test_execute, knowledge_base.create, knowledge_base.edit, knowledge_base.delete, knowledge_base.add_document, knowledge_base.delete_document, eval.view, eval.configure.
User Admin (user-management tier)
user_admin is user plus the capabilities to manage people:
user.invite, user.view, user.update, user.deactivate, user.assign_role, user.revoke_membership.
Builder Admin (admin tier)
builder_admin is the union of builder and user_admin, plus:
workflow.manage_access, eval.execute, chat.view_all, memory.manage, knowledge_base.manage_taxonomy, metrics.manage.
System Admin (top tier)
system_admin is builder_admin plus the top-tier tenant, SSO, API-key, and audit capabilities: the full set needed to run the workspace (every capability except the three reserved role-mutation ones):
tenant.create_child, tenant.view_children, tenant.manage_settings, tenant.delete, sso.manage_config, sso.manage_domains, auth.manage_api_keys, audit.view, metrics.view, metrics.view_tenant_wide, feature_flag.manage, integration.install, knowledge_base.manage_connector, chat.manage_channels, user.delete, resource.share, resource.unshare.
How access is enforced
- Per-action checks. Each API route is gated on the capability it needs. For example, listing memberships requires
user.view; changing a role requiresuser.assign_role; viewing audit events requiresaudit.view. - No privilege escalation. When assigning or changing a role, the platform rejects any target role whose capability set is not a subset of your own effective capabilities. A
user_admin, for instance, cannot promote someone tobuilder_adminbecausebuilder_adminincludes build capabilities theuser_admindoes not hold. See User management. - Resource-level grants. Beyond role capabilities, specific resources can be granted to a user directly. For AI Employees, access resolves as the union of all containing scopes: the per-AI-Employee grant, the owning group's role, and the workspace role. A scope that contains the AI Employee grants access on its own; no other scope subtracts from it. This means a user granted Admin on one AI Employee can edit and manage it regardless of their workspace role, and the same grant is honoured on group-owned AI Employees. The one exception is the floor:
no_accessandexternal_chat_visitorare denied before any scope is consulted, so a deactivated user with a stale grant cannot regain access. AI Employee authors can share their own AI Employee with a group without needing a higher role. - Per-AI-Employee grants on voice AI Employees. A workspace user with only the base
userrole who holds an explicit per-AI-Employee grant on a voice AI Employee now has that grant correctly enforced. Previously, voice AI Employee routes applied a workspace-role floor ofbuilderor above before the per-AI-Employee gate was consulted, so the grant was silently ignored and the user received a 403. That floor has been removed from the read and test-call routes; the per-AI-Employee gate is the sole authority on those routes, matching how chat AI Employee access works. Edit, manage, and review routes (call transcripts, recordings, the generator surface) retain thebuilder-or-above floor, consistent with the grant tiers those actions require. - Audit visibility follows role. What a user sees in the audit log depends on their role:
system_adminanduser_adminsee all events;builder_adminandbuildersee build-resource events;usersees only their own actions;no_accesssees nothing. - Metrics access is workspace-scoped. Viewing scoped usage metrics (one AI Employee or one group) requires
metrics.view_scoped, held by every real role fromuserupward. Viewing tenant-wide metrics requiresmetrics.view_tenant_wideor a platform/workspace-admin role; cross-workspace visibility is bounded to the caller's own workspace plus its authorized sub-workspaces with no role carve-out. - Voice AI Employee publish requires Edit permission. Publishing a voice AI Employee (making a version the live call flow) requires Edit-tier permission, not Manage. A user granted the
builderrole or a per-AI-Employee builder grant can publish. The Manage tier covers delete/restore, the Permissions tab, and the public toggle.
Workspace Management settings
Workspace Management (accessible to system_admin users) includes two areas that affect platform-wide behavior beyond individual user roles.
Autopilot tab
The Autopilot tab in Workspace Management lets a system_admin configure a workspace-level default for the Autopilot assistant. Settings saved here apply to every unbound Autopilot session in the workspace, sessions not tied to a specific orchestrator AI Employee. Bound orchestrator sessions run on their own published profile and are unaffected.
Three settings are available:
- Instructions. Free-text instructions, up to 20,000 characters, appended to the Autopilot system prompt for every default session in the workspace. Use this to add workspace-specific guidance, terminology, or constraints without modifying individual AI Employee configurations.
- Skills. Workspace-global skills, uploaded as Markdown (
.md) files of up to 1 MB, visible to every default Autopilot session in the workspace. Skills added here are not visible to bound orchestrator AI Employees. - Web access. Enables or disables Autopilot's ability to search the web for all default Autopilot sessions in the workspace. Disabling web access also removes the Twitter/X search tool.
Changes take effect on the next turn of any affected session. There is no publish step and no session restart required.
Child workspace creation
Creating a child workspace under the current workspace is controlled by a per-workspace feature flag. The Create child workspace action in Workspace Management is only available when this flag is enabled for the workspace. Contact your Ema administrator to enable it.
Browsing roles and capabilities in the app
Open /admin/roles to browse the live role and capability reference. The page lists the system roles in a left column (the six above, in order from system_admin down to no_access; env_admin is hidden); selecting one shows its capabilities grouped by category, each with a description. A search box filters capabilities by name, description, or group. A badge marks whether a role is system-defined.
The data behind this page comes from three read-only endpoints on the auth service:
GET /roles: the assignable system roles.GET /roles/{id}/capabilities: the capabilities bundled into one role.GET /capabilities: the full capability taxonomy.
All three require the role.view capability, which every assignable role holds.
What's next
- User management: assign these roles to people.
- Audit log: see how role determines audit visibility.
- PII and data governance: the
system_admin-only PII controls.