scopes claim, or the stored scopes of a service account token. When authorization is enabled, protected routes compare these scopes with their permission requirements. Requests with insufficient scopes return 403 Forbidden.
Scope Format
Scopes are hierarchical:Scope Reference
Scopes are enforced at two layers. Control plane scopes are enforced by the AgentOS control plane atos.agno.com. AgentOS scopes are enforced by your deployed AgentOS service on protected API requests.
The tables below summarize the built-in mappings for public AgentOS routes in Agno 2.7.4. Interfaces, custom routes, and custom prefixes can add mappings. Check /openapi.json on your deployed AgentOS for its active route list.
The agents:read, agents:run, teams:read, teams:run, workflows:read, and workflows:run scopes also accept a resource:<id>:action form. For example, agents:web-agent:run grants run access only to the web-agent. Use * as the ID (agents:*:run) to match every resource of that type. See Scope Format.
Per-resource scoping applies to
agents, teams, and workflows only. All other resource types (sessions, memories, knowledge, traces, etc.) use global scopes only. The resource:<id>:action form is not honored for them.agent_os:admin scope satisfies every required AgentOS scope below.
AgentOS Control Plane Scopes
AgentOS Scopes
- Config
- Registry
- Components
- Agents, Teams, Workflows
- Sessions
- Memories
- Learnings
- Knowledge
- Metrics
- Evals
- Traces
- Service Accounts
- Schedules
- Approvals
- Interfaces (A2A)
Legacy
system:read and system:write scopes are accepted as aliases for config:read and config:write, so tokens issued before the rename keep working. Use config:* in new tokens.Access Prerequisites
A few scopes gate access in the control plane. Without them, finer-grained scopes have no effect because the user cannot reach the resources they apply to.Custom Scope Mappings
Customize or extend the default scope mappings using the JWT middleware:Built-in routes preserve their native resource namespace. Handlers for
/agents, /teams, and /workflows re-check scopes against their native namespace (agents:, teams:, workflows:). Mapping GET /agents to custom:read won’t grant access because the handler still requires agents:read. Full freedom applies only to new routes you define yourself.