Capabilities
Capabilities are Storsko's fine-grained permission system for AI agents. Every action an agent wants to take — searching the web, sending an email, executing code, transferring money — must be declared as a capability, granted explicitly to the agent, and validated at runtime before execution.
Capabilities
Capabilities are Storsko's fine-grained permission system for AI agents. Every action an agent wants to take — searching the web, sending an email, executing code, transferring money — must be declared as a capability, granted explicitly to the agent, and validated at runtime before execution.
Think of capabilities as a combination of OAuth scopes and Linux capabilities: they define exactly what an agent is allowed to do, and the governance layer enforces those boundaries on every request.
Why Capabilities Matter
Without a capability system, an AI agent with access to your infrastructure can do anything its underlying tools allow. Storsko's capability model enforces least privilege at the agent level:
- An agent that should only read files cannot write them
- An agent that can make phone calls will always require human approval before doing so
- Capability grants are audited and can be revoked at any time
This is particularly important for multi-agent systems where agents spawn sub-agents (agent.spawn) or delegate tasks (agent.delegate) — the child agent inherits a subset of the parent's capabilities, never more.
Built-in Capabilities
Storsko ships a curated set of built-in capabilities covering common agent actions. Custom capabilities can be defined via the capability registry.
Communication
| Capability | Description | Default HITL Mode |
|---|---|---|
phone.call | Place outbound phone calls | escalate |
email.send | Send emails on behalf of the agent's owner | propose |
email.read | Read emails from a connected inbox | notify |
Finance
| Capability | Description | Default HITL Mode |
|---|---|---|
finance.transfer | Initiate financial transfers or payments | escalate |
finance.read | Read account balances and transaction history | notify |
File System
| Capability | Description | Default HITL Mode |
|---|---|---|
file.read | Read files from connected storage (local, S3, GCS, etc.) | auto |
file.write | Write or modify files in connected storage | notify |
file.delete | Permanently delete files | propose |
Web
| Capability | Description | Default HITL Mode |
|---|---|---|
web.search | Perform web searches via configured search provider | auto |
web.browse | Navigate web pages and extract content | auto |
web.post | Submit forms or POST data to external web endpoints | notify |
Calendar & Scheduling
| Capability | Description | Default HITL Mode |
|---|---|---|
calendar.read | Read calendar events and availability | auto |
calendar.write | Create, modify, or delete calendar events | propose |
Code & Data
| Capability | Description | Default HITL Mode |
|---|---|---|
code.execute | Execute code in a sandboxed environment | notify |
data.query | Query connected databases (read-only) | auto |
data.write | Write to connected databases | propose |
Agent Operations
| Capability | Description | Default HITL Mode |
|---|---|---|
agent.spawn | Spawn a new sub-agent with a subset of current capabilities | notify |
agent.delegate | Delegate a task to another registered agent | notify |
agent.terminate | Terminate a running agent session | propose |
High-Risk Capabilities
Two capabilities are hardcoded as high-risk and have special treatment that cannot be overridden by configuration:
| Capability | Reason |
|---|---|
phone.call | Real-world irreversible action; potential for fraud/harassment |
finance.transfer | Financial transactions are irreversible and directly harmful |
For these capabilities:
- The HITL mode is always
escalate, regardless of what is configured - Escalation targets the organization admin — not just the task owner
- Even if HITL is globally disabled (not recommended), these capabilities are still blocked and escalated
- They appear with a warning badge in the Storsko dashboard
You cannot configure `phone.call` or `finance.transfer` to use `auto` mode. Attempts to do so via the API will return `422 Unprocessable Entity`. This is a deliberate safety property.
Granting Capabilities to Agents
Capabilities are granted when an agent is created or updated. Grants are stored in the database and reflected in the agent's JWT.
At Creation Time
Adding Capabilities to an Existing Agent
Revoking Capabilities
Revoking a capability takes effect on the next JWT issuance. The current JWT remains valid until it expires. For immediate effect, also call the token invalidation endpoint: `POST /api/v1/agents/:id/invalidate-token`.
Listing an Agent's Capabilities
Response:
Capability Validation in the Execution Adapter
The packages/execution-adapter is the governance chokepoint where every execution request is validated. The flow is:
Execution Request Format
Success response (auto mode):
Pending response (propose mode):
Configuring HITL Mode Per Capability
You can override the default HITL mode for a specific capability on a specific agent:
You cannot set `hitl_mode` to `auto` for `phone.call` or `finance.transfer`. These capabilities always use `escalate`. The API will reject this with `422 Unprocessable Entity`.
Custom Capabilities
Beyond the built-in capabilities, you can define custom capabilities in the capability registry for domain-specific actions:
Custom capabilities follow the same grant, revoke, and HITL validation flow as built-in capabilities. They appear in the dashboard alongside built-in capabilities.
Capability Inheritance in Agent Delegation
When an agent delegates a task to another agent (agent.delegate), the target agent can only receive capabilities that the delegating agent already has. This prevents privilege escalation through delegation chains:
Similarly, when spawning a sub-agent (agent.spawn), the sub-agent's capability list must be a strict subset of the spawning agent's capabilities.
API Reference Summary
| Method | Endpoint | Description |
|---|---|---|
GET | /api/v1/agents/:id/capabilities | List capabilities for an agent |
POST | /api/v1/agents/:id/capabilities | Grant a capability to an agent |
DELETE | /api/v1/agents/:id/capabilities/:capability | Revoke a capability from an agent |
PATCH | /api/v1/agents/:id/capabilities/:capability | Update HITL mode for a capability |
GET | /api/v1/capabilities | List all defined capabilities |
POST | /api/v1/capabilities | Define a custom capability |
POST | /api/v1/executions | Execute a capability (agent-auth only) |
Related Pages
- Authentication — how agents prove their identity
- Human-in-the-Loop — the approval workflow for capability executions
- Audit Log — every capability execution is recorded
- Agents — agent registration and capability assignment
- Compliance — EU AI Act risk classification