Give agents authority for the task, not the lifetime of the process.
AI agents can authenticate correctly, stay inside IAM policy and still take an action that does not belong to the task in front of them. Tenuo adds that missing boundary.
The gap between access and intent
Existing controls answer important questions. Identity proves who is acting. IAM and RBAC set the maximum that principal may do. Guardrails shape model behavior. Gateways decide which tools are reachable.
None of those controls, by itself, says what this agent may do for this task.
Consider a remediation agent handling incident INC-812. Its service account may be allowed to write every incident. The task only needs to update the severity and assign an owner on one incident for the next fifteen minutes. Both statements can be true:
- The principal is permitted to make the call.
- The call does not belong to this task.
That gap is where an incorrect plan, prompt injection or an over-broad delegation becomes a production action.
Why teams hold agents back
The practical response is rational: keep agents read-only, add a human before every consequential step, or do not ship the workflow at all. The underlying authority is often:
- Broader than the task. One customer record requires access to a table, or one deployment requires permission across a service.
- Longer-lived than the task. A credential used for a fifteen-minute job remains valid after the job ends.
- Passed downstream whole. When one agent delegates, the next agent inherits the same access even when it needs less.
Tenuo does not ask teams to replace those controls. It uses them as the ceiling and narrows authority to the work being performed.
What a warrant changes
A warrant is a signed, task-scoped authorization object. It names the permitted tools and arguments, who may use it, how long it lasts and whether it may be delegated.
- task
- INC-812 remediation
- holder
- svc-remediation-agent
key 4f2a…9c1e - may
- incident.update_severity
incident.assign_owner - expires
- in 14m 38s
- depth
- 0 · max 2
Five properties make the boundary useful in production:
- Task-bound: only the actions, resources, limits and lifetime the task requires.
- Holder-bound: bound to the intended agent’s key, so copying the warrant is not enough to use it.
- Delegation-safe: downstream authority can narrow, but it cannot widen.
- Independently verifiable: checked where the action runs without trusting the agent that requested it.
- Auditable by default: every authorization decision can produce a signed receipt.
The agent keeps its long-lived identity. Authority arrives with the task and expires with it.
How each action is checked
- A trusted issuer creates a warrant for the task.
- The agent presents it when calling a tool.
- Tenuo verifies the signature, expiration, holder proof, tool permission and argument constraints locally.
- An allowed call reaches the tool. Anything outside the warrant is denied before execution.
Verification is local and stateless, so the Tenuo Cloud control plane is not in the path of an action. When work moves to another agent, delegation creates a narrower child warrant with a cryptographically verifiable lineage.
How Tenuo fits with existing controls
Tenuo does not replace identity, IAM, policy engines or the credentials used to reach a target system. Those controls establish who is acting, the maximum authority available and how access is delivered. Tenuo narrows that authority to the task.
| Existing control | What it answers | How Tenuo works with it |
|---|---|---|
| Identity and authentication | Who is acting? | Binds task authority to its intended holder, so a copied warrant is not enough to use it. |
| IAM, RBAC and application authorization | What may this principal do at most? | Issues narrower, task-specific authority within that ceiling without changing the principal’s permissions. |
| Policy engines | Under what conditions should authority be available? | Keeps policy as the ceiling and carries the task’s authority to the enforcement point. |
| OAuth, JIT and short-lived credentials | How does this principal reach the target system? | Keeps that access path and adds task provenance, holder binding and narrowing delegation. |
For deployment boundaries and bypass resistance, see Enforcement architecture.
A real failure of task authority
In April 2026, a coding agent at PocketOS was working in staging when it found a token with blanket authority across its hosting provider’s API. It chose volume deletion as a fix for a credential error. Nine seconds later, the production database and every backup were gone.
The agent was authenticated, and the token permitted the call. The missing boundary was the task: managing a staging credential did not require deleting a production volume.
Read the incident, control by control →
Core invariants
Tenuo enforces these invariants:
- Mandatory proof of possession: warrant use requires proof that the caller holds the corresponding private key.
- Task-scoped authority: authority is carried by warrants, not inherited from process identity.
- Stateless verification: checks run locally at authorization time.
- Monotonic attenuation: child scope is a subset of parent scope.
- Self-contained tokens: warrants carry the data needed for verification.
- Fail-closed constraints: unknown constraint types are rejected; unknown arguments are rejected in constrained mode unless explicitly allowed.
Threat Model
What Tenuo Protects Against
- Prompt injection impact via least privilege
- Confused deputy behavior (tool misuse outside scope)
- Warrant theft without private key (PoP binding)
- Stale authority (TTL expiration)
- Privilege escalation in delegation chains
- Replay outside the PoP validity window
What Tenuo Does Not Protect Against
These are threats that Tenuo’s authorization layer alone does not cover. Each one has a deployment-level mitigation:
| Threat | In-Process | Sidecar/Gateway | Mitigation |
|---|---|---|---|
| Agent process compromise (RCE) | Not covered (attacker shares the trust boundary) | Covered (enforcement runs in a separate process; compromised agent cannot bypass it) | Deploy sidecar or gateway enforcement |
| Malicious tool implementation | Not covered at any layer (Tenuo verifies authorization, not tool correctness) | Same | Code review, sandboxing, tool isolation |
| Compromised root issuer | Not covered (a compromised issuer can mint arbitrary warrants) | Same | Secure the control plane; rotate keys; use short-lived root warrants |
| Traffic bypassing enforcement | Not covered if raw tool endpoints are exposed | Covered (network policy routes all traffic through the sidecar/gateway) | Network controls, service mesh, deny direct tool access |
The in-process model is sufficient for trusted single-process deployments. For stronger isolation, add a sidecar or gateway so that enforcement survives agent compromise. See Enforcement Architecture for deployment patterns.
Key Concepts
Warrants
A warrant is a self-contained capability token specifying tools, argument constraints, holder, expiration, and signatures.
WARRANT
id: "wrt_abc123" (display format; wire is UUID)
tools: ["search", "read_file"]
constraints:
path: Pattern("/data/project-alpha/*")
max_results: Range(min=1, max=100)
ttl_seconds: 300
holder: <public_key>
signature: <issuer_signature>
Proof-of-Possession (PoP)
Warrants are bound to keypairs. A stolen warrant token alone is insufficient; the caller must produce a valid PoP signature with the holder private key.
Warrant Types
| Type | Can Execute? | Can Delegate? | Typical Use |
|---|---|---|---|
| Execution | Yes | Yes (if depth < max_depth) |
Workers, execution nodes |
| Issuer | No | Yes (if depth < max_depth) |
Planners, orchestrators, issuer services |
When depth >= max_depth, the warrant is terminal and cannot delegate further.
Monotonic Attenuation
Delegation can only narrow:
| Dimension | Rule |
|---|---|
| Tools | Child tools must be a subset of parent tools |
| Constraints | Child constraints must be tighter or equivalent |
| TTL | Child cannot outlive parent |
| Depth | max_depth can only decrease |
Stateless Verification
Authorization is performed where the action is requested. No central online decision service is required at request time.
Zero-Touch Provisioning
Verifiers do not need per-worker onboarding. They trust one or more configured root issuer public keys and validate warrant chains from those roots.
- Authorizer config: needs trusted root issuer public key(s)
- Worker identity: carried in the warrant holder field
- Trust flow: root issuer trusts delegator, delegator trusts worker
This supports elastic worker scaling without provisioning each worker identity into the verifier.
Deployment Models
Tenuo can enforce at multiple points, and every model verifies the same warrant semantics.
| Model | Where It Runs | Additional Coverage | Trust Boundary |
|---|---|---|---|
| In-Process | Inside agent runtime | Fastest integration, framework-native checks | Agent process |
| Sidecar | Separate container in same pod | Agent process compromise (RCE) | Pod network |
| Gateway | Ingress or service mesh (ext_authz) |
Centralized multi-service policy | Gateway |
| MCP Proxy | Between agent and MCP server | Unauthorized MCP tool access | Proxy |
| A2A | Between agents | Bounded inter-agent delegation | Receiving agent |
Models compose for defense in depth. For deployment diagrams and operational guidance, see Enforcement Architecture.
Constraint Layer
Warrants constrain arguments, not only tool names:
url = UrlSafe(allow_domains=["api.github.com"], deny_domains=["*.evil.com"])
path = Subpath("/data/reports")
cmd = Shlex(allow=["npm", "docker"])
model = OneOf(["gpt-4o", "gpt-4o-mini"])
max_tokens = Range(0, 1000)
Built-in constraints cover values, ranges, paths, URLs, shells, CIDRs, regex, and composable logic (All, AnyOf, Not). Delegation must tighten constraints, and unrecognized constraint types fail closed.
See Constraints for the complete reference.
How Tenuo compares
| Tenuo | Token-Based IAM | LLM Guardrails | |
|---|---|---|---|
| Granularity | Per-tool and per-argument | Per-identity | Per-prompt |
| Delegation | Monotonic, cryptographically chained | Static roles | Not applicable |
| Authorization latency | Local and stateless | Auth service dependency | LLM inference dependency |
| Tamper resistance | Signature + PoP | Bearer-token style risk | No cryptographic enforcement |
| Auditability | Cryptographic delegation lineage | Log-based | Limited |
| Runtime targets | Native and WASM | Usually server-only | Usually server-only |
Stateless verification improves horizontal scalability. Shared Rust core plus WASM support enables consistent behavior across server, edge, and browser-capable runtimes.
Relationship to CaMeL
Tenuo implements the capability enforcement primitive described in Defeating Prompt Injections by Design (CaMeL).
| CaMeL Concept | Tenuo Implementation |
|---|---|
| Capability token | Warrant |
| Interpreter check | Authorizer |
| Planner-issued authority | Issuer or root warrant |
| Worker-held authority | Execution warrant |
CaMeL is the architecture; Tenuo is the authorization primitive.
See Related Work for comparisons with FIDES, Biscuit, Macaroons, UCAN, and delegation-focused work.
Relationship to IETF AATs
The Attenuating Authorization Tokens Internet-Draft standardizes OAuth-oriented task-scoped tokens, holder-driven attenuation, and offline chain verification for agent delegation. The approach is conceptually aligned with warrants (tool constraints, monotonic narrowing, PoP at enforcement). For a readable walkthrough and mapping to agent-security gaps, see the AAT draft summary.
Scope Boundaries
Tenuo Owns
- Warrant format and verification
- Constraint evaluation
- Attenuation enforcement
- Delegation chain validation
- PoP verification
Tenuo Does Not Own
- Task decomposition or orchestration strategy
- Data-flow/taint tracking
- Authentication and user identity systems
- Business logic inside tools
- Prompt attack detection models
Summary
Tenuo binds authority to tasks, verifies warrants locally, requires proof-of-possession, and enforces monotonic attenuation across delegation chains. It limits the blast radius of prompt injection and confused deputy failures by making unauthorized tool actions cryptographically non-executable.
Identity is long-lived; authority is short-lived and task-scoped.
Next Steps
- Quick Start: Installation, first warrant, choosing your integration
- AI Agent Patterns: P-LLM/Q-LLM, prompt injection containment
- Enforcement Architecture: Deployment models and proxy configurations
- Constraints: Full constraint catalog, argument extraction, gateway config
- Security: Operational security, key management, best practices
- API Reference: Python SDK, CLI, and performance benchmarks
- Protocol Specification: Wire format and verification semantics
- Related Work: Research context and comparisons
- AAT draft summary: IETF attenuating OAuth tokens for agents (vs. warrants)