tenuo-ai/tenuo/tenuo-audit
Claude Code and agent skill by tenuo-ai/tenuo
- community
Checking that the SKILL.md file is still in the repository.
Audit, explain, or compare existing Tenuo warrants and delegation chains. Use for review-only requests about effective authority, blast radius, chain validity, or authorization risk. Do not use to implement enforcement in an application or tool boundary (use tenuo-agent-authorization).
Install
npx vskill@latest install tenuo-ai/tenuo/tenuo-auditSKILL.md
Tenuo Warrant Auditor
Help security engineers and CISOs understand what tenuo warrants authorize, assess blast radius, review delegation chains, and flag security risks — all explained in the access control language they already know.
Announce at start: "I'm using the tenuo-audit skill to review your warrants and assess authorization risk."
How Warrants Map to Familiar Concepts
Warrants are tenuo's authorization primitive — capability tokens with cryptographic delegation chains. If you're coming from traditional access control, here's the translation:
| Tenuo | IAM | RBAC | OAuth | |
|---|---|---|---|---|
| Warrant | Session-scoped IAM policy | Role binding with TTL | Access token with scopes | |
| Capability | IAM action (s3:GetObject) | Permission | Scope (files:read) | |
| Constraint | IAM condition (StringLike) | N/A (RBAC lacks this) | N/A (OAuth lacks this) | |
| Attenuation | Cannot escalate (no privilege widening) | Cannot add permissions to inherited role | Cannot widen scopes on refresh | |
| Proof-of-Possession | Like mTLS — token bound to key | N/A (RBAC is bearer) | DPoP (RFC 9449) | |
| TTL | Session duration | N/A (roles are permanent) | Token expiry | |
| Delegation chain | AssumeRole chain | Role inheritance | Token exchange (RFC 8693) | |
| Closed-world mode | Default deny policy | Implicit deny | N/A |
The key difference: warrants carry semantic constraints on arguments (e.g., "files under /data" with path traversal protection), not just action labels. And delegation is monotonically attenuating — each hop in the chain can only narrow permissions, never widen them. This is enforced cryptographically, not by policy.
Flow
Phase 1: Context Discovery
Scan the codebase for tenuo usage:
- Search for Python and TypeScript usage:
import tenuo,from tenuo,@tenuo/core,Warrant,mint_builder,grant_builder,createTenuo,session,narrow,@guard - Check for
tenuo_cloudimports ortc_env vars (indicates cloud deployment) - Look for warrant serialization patterns (base64 strings,
warrant.serialize(),Warrant(...)deserialization)
Phase 2: Persona Check
Ask: "Before we start — are you a developer building agent integrations, a platform engineer setting up infrastructure, or a security engineer reviewing permissions?"
- Security engineer / CISO → continue with this skill
- Developer creating or delegating authority → suggest
tenuo-warrant. - Developer integrating enforcement into an application or tool boundary → suggest
tenuo-agent-authorization. - Developer with a denied call to make work → suggest
tenuo-denial-triage. - Platform engineer → continue, adjusting framing for infrastructure review
Phase 3: Source Selection
Ask: "What would you like to audit?"
- a) A warrant string — they'll paste a base64-encoded warrant for you to decode and explain
- b) Warrants in the codebase — find all
mint_builder,grant_builder,GuardBuilder,mint(),grant()calls and analyze them - c) A delegation chain — multiple warrants showing parent → child relationships
- d) Cloud audit trail ☁️ (Tenuo Cloud only) — connect to tenuo cloud API for issuance receipts, approval history, revocation status
Phase 4: Decode and Analyze
For each warrant found, extract and present:
Structural properties:
- Issuer public key (who created it)
- Holder public key (who can use it)
- Current depth and max_depth
- TTL / expiration time
- Parent hash (chain link to parent warrant)
Authorization surface:
- List of capabilities (tools/actions granted)
- Constraints on each capability's arguments
- Closed-world status (are unconstrained arguments rejected?)
Use the resolved SDK's diagnostics before reconstructing these facts by hand. For the current TypeScript SDK, import the warrant into a trusted verifier, then use session.inspect() for depth, maxDepth, terminal, expiry, canAuthorize, tools, and approval gates. Use tenuo.explain(session, tool, args) for representative calls and per-field satisfaction. These APIs are diagnostic only; they do not replace verification at the effect boundary. For other runtimes, use their equivalent only after verifying it in the installed package.
Phase 5: Plain-Language Explanation
Present what the warrant authorizes in security review format:
Phase 6: Familiar Framework Mapping
Translate the warrant into equivalent policies the security engineer is used to reviewing:
Phase 7: Delegation Chain Verification
For delegation chains (multiple warrants showing parent → child):
Verify invariants I1-I5 statically:
- I1:
child.issuer == parent.holder(delegation comes from the right entity) - I2:
child.depth == parent.depth + 1(depth increments correctly) - I3:
child.expires_at <= parent.expires_at(child can't outlive parent) - I4:
child.capabilities ⊆ parent.capabilities(capabilities only narrow) - I5:
child.parent_hash == SHA256(parent.payload)(chain integrity)
I6 (PoP signature) is a runtime property — it cannot be verified from static warrant inspection. Instead, check whether PoP enforcement is configured in the codebase. If not, flag as HIGH risk.
Visualize attenuation:
Flag violations clearly:
- "VIOLATION I3: Child warrant expires at 16:00 but parent expires at 15:30 — child outlives parent"
- "VIOLATION I4: Child has
write_filecapability but parent does not — privilege escalation"
Phase 8: Risk Assessment
Assess each warrant against this risk framework:
| Finding | Severity | What it means | |
|---|---|---|---|
_allow_unknown=True | HIGH | Closed-world disabled. Any argument value passes through — the constraint system is effectively bypassed. Like an IAM policy with "Resource": "*". Only the Python SDK can set it, but the flag travels on the wire and the core still honours it, so a TypeScript codebase can be running under it after sessionFromWire(). No TypeScript diagnostic surfaces it: audit the minting side rather than reporting it absent. | |
| PoP not enforced | HIGH | Warrant is a bearer token. If stolen, attacker can use it without the holder's private key. Like an API key vs. mTLS. | |
| UrlSafe missing on network capability | HIGH | Agent can hit internal services, cloud metadata endpoints (169.254.169.254). SSRF risk. | |
| No TTL or TTL > 1 hour | MEDIUM | Long-lived credential. Increases the blast radius time window. Like a non-expiring session token. | |
| max_depth >> actual chain depth | MEDIUM | Warrant allows 64 delegation hops but chain only goes 3 deep. Unnecessary headroom increases lateral movement risk if warrant is compromised. | |
| CEL constraint without review | MEDIUM | Custom evaluation logic. Could contain subtle bugs or overly permissive expressions. Needs human verification — like a custom OPA policy. | |
| Capability not narrowed across hop | LOW | Parent and child have identical capabilities. Not a vulnerability, but a missed opportunity to apply least-privilege at delegation boundaries. | |
| Regex constraint on delegated warrant | LOW | Regex constraints cannot be narrowed during further delegation — only kept identical or replaced with Exact. May limit attenuation flexibility downstream. |
Present findings with severity and remediation:
Phase 9: Cloud Audit Trail ☁️ (Tenuo Cloud only)
This phase only applies if Tenuo Cloud is configured — look fortenuo_cloudimports ortc_env vars. Skip entirely for open-source deployments.
Ask: "Want me to pull the audit trail from tenuo cloud for this warrant?"
If yes, check:
- Issuance receipts — cryptographic proof of when and why the warrant was issued
- Approval history — which approval gates were triggered, who approved
- Revocation status — is this warrant on the Signed Revocation List (SRL)?
- Template source — which policy template was used to generate this warrant
Present: "This warrant was issued via trigger trg_abc123 at 2026-03-13T14:00:00Z. Approved by admin@example.com. Not revoked. Last SRL sync: 3 seconds ago."
Output Formats
Offer the appropriate format based on context:
- Summary — One paragraph, shareable with stakeholders who don't need technical detail
- Detailed — Full constraint-by-constraint analysis with analogies and risk ratings (default)
- Comparison — Side-by-side diff of two warrants (useful for before/after attenuation review, or comparing two versions of a policy)
After completing, suggest: "Want to create a tighter replacement warrant? Use /tenuo-warrant to build one from scratch with the right constraints."
Key Tenuo Concepts for Security Review
Monotonic attenuation: Every delegation can only narrow permissions. This is enforced cryptographically via parent hashes and capability subset checks. Unlike IAM role assumption, there is no mechanism to escalate privileges through delegation — the math prevents it.
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/tenuo-audit/SKILL.md
Popularity
- Repository stars
- 91
- Repository forks
- 13
- 7-day trend score
- 23
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 10 Sep 2026, a month ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/tenuo-ai/tenuo/tenuo-audit)