Task-scoped authorization for Claude Code. Constrain files, commands, web access, MCP tools, and subagents, with signed evidence of what was allowed or denied.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio counts 3 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
delete_deployment
-
list_directory
-
read_file
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 3bad1b6 · analyzer v33 · 2d ago
skills & prompt files 1
danger signals2
- suspicious endpoint 169.254.169.254 (cloud metadata) tenuo-ai-tenuo-claude-code-3bad1b6/demo/tenuo_demo.py :46
("WebFetch", {"url": "http://169.254.169.254/latest/meta-data/"}, "cloud metadata (SSRF)"), - suspicious endpoint 169.254.169.254 (cloud metadata) tenuo-ai-tenuo-claude-code-3bad1b6/src/tenuo_claude_code/verify.py :34
("metadata", "http://169.254.169.254/latest/meta-data/", False),
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 29
filesystem 11
- fs tenuo-ai-tenuo-claude-code-3bad1b6/demo/ops_server.py :18
from pathlib import Path - fs tenuo-ai-tenuo-claude-code-3bad1b6/src/tenuo_claude_code/admin.py :32
from pathlib import Path - fs tenuo-ai-tenuo-claude-code-3bad1b6/src/tenuo_claude_code/authorizer_runtime.py :9
import shutil - fs tenuo-ai-tenuo-claude-code-3bad1b6/src/tenuo_claude_code/cli.py :35
import shutil - fs tenuo-ai-tenuo-claude-code-3bad1b6/src/tenuo_claude_code/packs.py :12
from pathlib import Path - fs tenuo-ai-tenuo-claude-code-3bad1b6/src/tenuo_claude_code/paths.py :7
from pathlib import Path - fs tenuo-ai-tenuo-claude-code-3bad1b6/src/tenuo_claude_code/verify.py :8
from pathlib import Path - fs (weak) tenuo-ai-tenuo-claude-code-3bad1b6/tests/test_authorizer_runtime.py :7
from pathlib import Path - fs (weak) tenuo-ai-tenuo-claude-code-3bad1b6/tests/test_dx_improvements.py :315
# at a *directory*, so open("a") raises but `.receipt_write_failed` (same parent) - fs (weak) tenuo-ai-tenuo-claude-code-3bad1b6/tests/test_ipc_transport.py :19
import shutil - fs (weak) tenuo-ai-tenuo-claude-code-3bad1b6/tests/test_posture.py :10
from pathlib import Path
shell / exec 5
- shell tenuo-ai-tenuo-claude-code-3bad1b6/src/tenuo_claude_code/authorizer_runtime.py :14
import subprocess - shell tenuo-ai-tenuo-claude-code-3bad1b6/src/tenuo_claude_code/cli.py :37
import subprocess - shell (weak) tenuo-ai-tenuo-claude-code-3bad1b6/tests/test_check.py :8
import subprocess - shell (weak) tenuo-ai-tenuo-claude-code-3bad1b6/tests/test_managed_template.py :11
import subprocess - shell (weak) tenuo-ai-tenuo-claude-code-3bad1b6/tests/test_scaffold.py :7
import subprocess
network 4
- net tenuo-ai-tenuo-claude-code-3bad1b6/src/tenuo_claude_code/admin.py :30
import socket - net tenuo-ai-tenuo-claude-code-3bad1b6/src/tenuo_claude_code/authorizer_runtime.py :11
import socket - net tenuo-ai-tenuo-claude-code-3bad1b6/src/tenuo_claude_code/cli.py :41
import urllib.error - net (weak) tenuo-ai-tenuo-claude-code-3bad1b6/tests/test_ipc_transport.py :20
import socket
secrets 2
- secrets tenuo-ai-tenuo-claude-code-3bad1b6/src/tenuo_claude_code/admin.py :28
import getpass - secrets tenuo-ai-tenuo-claude-code-3bad1b6/src/tenuo_claude_code/cli.py :3058
key = os.environ.get("TENUO_ADMIN_KEY") or os.environ.get("TENUO_ADMIN_API_KEY")
tool registrations 3
- read_file tenuo-ai-tenuo-claude-code-3bad1b6/demo/ops_server.py :35
- list_directory tenuo-ai-tenuo-claude-code-3bad1b6/demo/ops_server.py :47
- delete_deployment tenuo-ai-tenuo-claude-code-3bad1b6/demo/ops_server.py :56
declared dependencies 5
- mcp@>=1.0,<2
- tenuo@>=0.3.0,<0.4
- PyYAML@>=6.0
- certifi@>=2024.0
- cryptography@>=42.0