Skip to main content
Scopes are permission strings carried by the caller’s credential: the JWT 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 at os.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.
The agent_os:admin scope satisfies every required AgentOS scope below.

AgentOS Control Plane Scopes

AgentOS Scopes

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:
Custom scope mappings are additive to the defaults. To override a default, specify the same route pattern with your custom scopes.
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.

Next Steps