Overview
Users are assigned to roles, and roles define permissions. A user’s effective permissions are the union of all permissions from all their roles (OR logic). Permissions are loaded from the database on every request — changes take effect immediately.Default Roles
Permission Format
Permission Matching Rules
Scope hierarchy::all automatically grants :own. A user with sinas.agents.read:all passes any check for sinas.agents.read:own.
Wildcards can be used at any level:
Namespaced resource permissions use slashes in the resource path:
Custom Permissions
The permission system is not limited tosinas.*. You can define permissions with any service prefix for your own applications:
Checking Permissions from External Services
Use thePOST /auth/check-permissions endpoint to verify whether the current user (identified by their Bearer token or API key) has specific permissions:
logic: "AND"— User must have ALL listed permissions (default)logic: "OR"— User must have AT LEAST ONE of the listed permissions
Managing Roles
Agent Execution & Permissions
Agents define which tools are available (viaenabled_* fields), but the user’s role permissions are checked at execution time. Both conditions must be met:
- Agent declares the tool — the resource is in the agent’s
enabledFunctions,enabledQueries,enabledStores,enabledCollections, orenabledAgents - User has the permission — checked when the tool is actually called
Connectors are the exception — they have no independent API and can only be accessed through an agent, so the agent’s
enabledConnectors (with per-operation filtering) is the sole access control.
Namespace wildcards make this manageable. Grant sinas.functions/sales/*.execute:own once on a role, and all functions in the sales/ namespace are accessible.