Expand description
§Tenuo Core
Task-scoped authorization for AI agents: the Rust core of Tenuo.
A warrant is a signed grant of which tools an agent may call, with which argument constraints, and for how long. Warrants are holder-bound, can only narrow when delegated, verify offline where the action runs, and produce signed receipts.
Unlike traditional IAM systems that answer “Who are you?”, Tenuo answers “Who delegated this authority, what task context does it carry, and is this action within the delegated bounds?”
§Key Concepts
- Warrant: A transferable token of authority containing tool name, constraints, TTL, and signature
- Attenuation: Capabilities can only shrink when delegated, never expand
- Constraints: Restrictions on argument values (Pattern, Exact, OneOf, Range, CEL)
§Example
use std::collections::HashMap;
use std::time::Duration;
use tenuo::{
Authorizer, Constraint, ConstraintSet, ConstraintValue, Pattern, SigningKey, Warrant,
};
let issuer_key = SigningKey::generate();
let holder_key = SigningKey::generate();
let mut constraints = ConstraintSet::new();
constraints.insert(
"path",
Constraint::Pattern(Pattern::new("/data/*").expect("pattern")),
);
let warrant = Warrant::builder()
.capability("read_file", constraints)
.holder(holder_key.public_key())
.ttl(Duration::from_secs(300))
.build(&issuer_key)
.expect("mint");
let mut authorizer = Authorizer::new();
authorizer.add_trusted_root(issuer_key.public_key());
let mut args = HashMap::new();
args.insert(
"path".into(),
ConstraintValue::String("/data/report.txt".into()),
);
let pop = warrant
.sign(&holder_key, "read_file", &args)
.expect("pop");
authorizer
.authorize_one(&warrant, "read_file", &args, Some(&pop), &[])
.expect("authorize");With the sdk feature, Runtime is the holder entry:
use std::collections::HashMap;
use std::time::Duration;
use tenuo::sdk::prelude::*;
use tenuo::{ConstraintSet, Warrant};
let issuer = SigningKey::generate();
let holder = SigningKey::generate();
let warrant = Warrant::builder()
.capability("read", ConstraintSet::new())
.holder(holder.public_key())
.ttl(Duration::from_secs(300))
.build(&issuer)
.expect("mint");
let runtime = Runtime::builder()
.holder(holder)
.trusted_root(issuer.public_key())
.ttl_fallback(Duration::from_secs(600))
.build()
.expect("runtime");
let session = runtime.session_from_warrant(warrant).expect("session");
let args = HashMap::new();
assert!(session
.diagnostics()
.why_denied(&Call::borrowed("write", &args))
.is_some());Re-exports§
pub use strict_json::parse_json_strict;pub use strict_json::StrictJsonError;pub use extraction::CompiledExtractionRule;pub use extraction::CompiledExtractionRules;pub use extraction::CompiledPath;pub use extraction::ExtractionRule;pub use extraction::ExtractionSource;pub use extraction::RequestContext;pub use gateway_config::CompiledGatewayConfig;pub use gateway_config::CompiledRoute;pub use gateway_config::GatewayConfig;pub use gateway_config::GatewaySettings;pub use gateway_config::MethodMask;pub use gateway_config::RouteConfig;pub use gateway_config::RouteMatch;pub use gateway_config::ToolConfig;pub use mcp::CompiledMcpConfig;pub use mcp::CompiledTool;pub use mcp::McpConfig;pub use mcp::McpSettings;pub use constraints::All;pub use constraints::Any;pub use constraints::AnyOf;pub use constraints::CelConstraint;pub use constraints::Cidr;pub use constraints::Constraint;pub use constraints::ConstraintDiagnostics;pub use constraints::ConstraintSet;pub use constraints::ConstraintValue;pub use constraints::ConstraintViolation;pub use constraints::ConstraintViolationKind;pub use constraints::Contains;pub use constraints::Exact;pub use constraints::Not;pub use constraints::NotOneOf;pub use constraints::OneOf;pub use constraints::Pattern;pub use constraints::Range;pub use constraints::RegexConstraint;pub use constraints::Subpath;pub use constraints::Subset;pub use constraints::UrlPattern;pub use constraints::Wildcard;pub use constraints::MAX_CONSTRAINT_DEPTH;pub use crypto::PublicKey;pub use crypto::Signature;pub use crypto::SigningKey;pub use error::Error;pub use error::ErrorCode;pub use error::Result;pub use planes::DataPlane;Deprecated pub use planes::Authorizer;pub use planes::AuthorizerBuilder;pub use planes::ChainStep;pub use planes::ChainVerificationResult;pub use planes::ControlPlane;pub use planes::VerifiedApproval;pub use planes::DEFAULT_CLOCK_TOLERANCE_SECS;pub use receipt::canonical_policy_bytes;pub use receipt::policy_commitment_digest;pub use receipt::srl_commitment_digest;pub use receipt::trusted_roots_digest;pub use receipt::Receipt;pub use receipt::ReceiptPayload;pub use revocation::RevocationRequest;pub use revocation::SignedRevocationList;pub use revocation::SrlBuilder;pub use revocation::MAX_REVOCATION_REQUEST_AGE_SECS;pub use revocation_manager::RevocationManager;pub use revocation_tracker::FileFloorStore;pub use revocation_tracker::InMemoryFloorStore;pub use revocation_tracker::RevocationError;pub use revocation_tracker::RevocationFloorStore;pub use revocation_tracker::RevocationTracker;pub use revocation_tracker::RevocationUpdate;pub use sdk::transport::TransportError;http-transportormcp-transportpub use sdk::FixedClock;test-utilspub use sdk::ApprovalError;sdkpub use sdk::ApprovalProvider;sdkpub use sdk::ArgumentShape;sdkpub use sdk::ArgumentShapePolicy;sdkpub use sdk::AuthorizationAttempt;sdkpub use sdk::AuthorizedCall;sdkpub use sdk::Call;sdkpub use sdk::Clock;sdkpub use sdk::Decision;sdkpub use sdk::DecisionMetadata;sdkpub use sdk::DelegationError;sdkpub use sdk::DelegationProfile;sdkpub use sdk::Denial;sdkpub use sdk::DenialReporting;sdkpub use sdk::Diagnostics;sdkpub use sdk::Guard;sdkpub use sdk::GuardBuildError;sdkpub use sdk::GuardError;sdkpub use sdk::HolderSigner;sdkpub use sdk::IdentityError;sdkpub use sdk::LocalApprovalSigner;sdkpub use sdk::LocalSigner;sdkpub use sdk::ObservationRecord;sdkpub use sdk::ObservationVerdict;sdkpub use sdk::ObserveBuildError;sdkpub use sdk::ObserveError;sdkpub use sdk::Observed;sdkpub use sdk::ObservedOutcome;sdkpub use sdk::ObservingGuard;sdkpub use sdk::ObservingGuardBuilder;sdkpub use sdk::OwnedReceivedAuthorization;sdkpub use sdk::PersistentIdentity;sdkpub use sdk::PresentedAuthority;sdkpub use sdk::PresentedRequest;sdkpub use sdk::ReceivedAuthorization;sdkpub use sdk::Retryability;sdkpub use sdk::RevocationMode;sdkpub use sdk::Runtime;sdkpub use sdk::RuntimeError;sdkpub use sdk::SdkDenialKind;sdkpub use sdk::Session;sdkpub use sdk::SessionWarrant;sdkpub use sdk::SystemClock;sdkpub use sdk::Tenuo;sdkpub use sdk::TenuoBuildError;sdkpub use sdk::ValueClass;sdkpub use sdk::VerifiedProjection;sdkpub use sdk::AsyncHolderSigner;asyncpub use sdk::AsyncRevocationProvider;asyncpub use sdk::AttemptControl;asyncpub use sdk::PresentedAsyncAuthority;asyncpub use sdk::EvidencePolicy;receiptspub use sdk::LocalReceiptSigner;receiptspub use sdk::MemoryReceiptSink;receiptspub use sdk::ReceiptRef;receiptspub use sdk::ReceiptSigner;receiptspub use sdk::ReceiptSignerError;receiptspub use sdk::ReceiptSigningRequest;receiptspub use sdk::ReceiptSink;receiptspub use sdk::ReceiptSinkError;receiptspub use verification::RevocationSnapshot;pub use verification::RevocationState;pub use verification::VerificationContext;pub use verification::VerificationInstant;pub use warrant::Clearance;pub use warrant::OwnedAttenuationBuilder;pub use warrant::OwnedIssuanceBuilder;pub use warrant::PreparedDelegation;pub use warrant::Warrant;pub use warrant::WarrantBuilder;pub use warrant::WarrantId;pub use warrant::WarrantType;pub use warrant::POP_MAX_WINDOWS;pub use warrant::POP_TIMESTAMP_WINDOW_SECS;pub use warrant::WARRANT_ID_PREFIX;pub use wire::MAX_WARRANT_SIZE;pub use approval_gate::approval_requirement;pub use approval_gate::encode_approval_gate_map;pub use approval_gate::evaluate_approval_gates;pub use approval_gate::inspect_approval_gate;pub use approval_gate::merge_approval_gate_maps;pub use approval_gate::normalize_approval_gate_message;pub use approval_gate::parse_approval_gate_map;pub use approval_gate::propagate_approval_gates;pub use approval_gate::resolve_approval_required_message;pub use approval_gate::ApprovalGateError;pub use approval_gate::ApprovalGateInspection;pub use approval_gate::ApprovalGateKind;pub use approval_gate::ApprovalGateMap;pub use approval_gate::ApprovalRequirement;pub use approval_gate::ArgApprovalGate;pub use approval_gate::ToolApprovalGate;pub use approval_gate::APPROVAL_GATE_MESSAGE_MAX_CHARS;pub use approval::ApprovalRequest;pub use approval_gate::APPROVAL_GATE_EXTENSION_KEY;pub use diff::ChangeType;pub use diff::ClearanceDiff;pub use diff::ConstraintDiff;pub use diff::DelegationDiff;pub use diff::DelegationReceipt;pub use diff::DepthDiff;pub use diff::ToolsDiff;pub use diff::TtlDiff;pub use domain::WARRANT_CONTEXT as SIGNATURE_CONTEXT;
Modules§
- approval
- Approval types for human-in-the-loop and multi-sig workflows.
- approval_
gate - Approval gate types for conditional approval requirements.
- audit
- Audit Logging infrastructure.
- cel
- CEL (Common Expression Language) evaluation for Tenuo constraints.
- connect_
token - Connect token support for streamlined onboarding.
- constraints
- Constraint types for Tenuo warrants.
- crypto
- Cryptographic primitives for Tenuo.
- diff
- Delegation diff computation for audit and preview.
- domain
- Domain separation constants for cryptographic signatures.
- error
- Error types for Tenuo.
- extraction
- Constraint Extraction System
- gateway_
config - Gateway Configuration Parser
- heartbeat
server - Heartbeat module for control plane integration.
- mcp
- MCP (Model Context Protocol) Integration Helpers
- meta_
envelope - One encoding of
_meta.tenuo. - payload
- planes
- Control Plane and Data Plane separation.
- python
python - Python bindings for Tenuo via PyO3.
- python_
control_ plane python-server - receipt
- Authorization receipts (v1).
- revocation
- Revocation System
- revocation_
manager - Revocation Manager
- revocation_
tracker - Enforcement-point revocation tracker: verify, freshness, and persistent floor.
- sdk
sdk - Framework-independent enforcement surface.
- shell_
words - POSIX shell tokenization for
crate::constraints::Shlex. - strict_
json - JSON text parsing that rejects a repeated key.
- verification
- Explicit verification time and revocation state for one authorization decision.
- warrant
- Warrant type - the core primitive of Tenuo.
- wire
- Wire format for Tenuo warrants.
Macros§
- args
sdk - Build an owned argument map. Infallible for
Into<ConstraintValue>values. - constraints
sdk - Build a
ConstraintSetfor one capability.
Constants§
- DEFAULT_
WARRANT_ TTL_ SECS - Default TTL when not specified (5 minutes).
- IDENTITY_
BINDING_ EXTENSION_ KEY - MAX_
DELEGATION_ DEPTH - Maximum delegation depth to prevent unbounded chains (protocol-level hard cap).
- MAX_
WARRANT_ TTL_ SECS - Protocol-level maximum TTL (90 days).
- WIRE_
VERSION - Current wire format version