skills.json, locked in skills.lock, and enforced at runtime by the Tank sandbox.
Schema Overview
Permissions follow a deny-by-default security model. Skills can only access resources explicitly granted in their permission declarations.Root Fields
Network access permissions.See Network Permissions below.
Filesystem access permissions.See Filesystem Permissions below.
Allow spawning subprocesses.Default:
falseSecurity Note:- High-risk permission
- Grants access to arbitrary system commands
- Should only be granted to trusted skills
- Triggers security warnings during
tank install
trueNetwork Permissions
Controls outbound network access to specific domains.Allowed outbound domains with glob pattern support.Format:Security Note:
- Exact domains:
"api.example.com" - Wildcard subdomains:
"*.example.com" - All subdomains:
"**.example.com"
- Empty array or omitted = no network access
- Patterns are case-insensitive
- Ports are not supported (all ports allowed for matched domain)
- Avoid overly broad patterns like
"*"or"*.com" - Be specific about required APIs
- Each domain increases attack surface
Filesystem Permissions
Controls read and write access to files using glob patterns.Allowed read paths with glob pattern support.Format:Security Note:
- Patterns are relative to project root
- Supports standard glob syntax
**matches nested directories*matches single path segment
- Cannot read outside project root
- Paths are normalized (no
..traversal) - Symlinks are rejected during extraction
- Prefer specific patterns over broad matches
- Avoid
**/*unless necessary
Allowed write paths with glob pattern support.Format:Security Note:
- Same glob syntax as
read - Patterns are relative to project root
- Creates parent directories if needed
- Cannot write outside project root
- Write permission does NOT imply read permission
- Paths are normalized (no
..traversal)
- Write permissions are high-risk
- Can overwrite existing files
- Use narrowest patterns possible
Complete Examples
Minimal Permissions (Default)
Read-Only Data Processing
API Integration Skill
High-Privilege Build Tool
Permission Inheritance
Skills inherit permissions from their dependencies:- Union of permissions: If skill A depends on skill B, effective permissions are A ∪ B
- Transitive: Includes all transitive dependencies
- Visible during install:
tank installshows full permission tree - User approval required: New permissions trigger interactive prompt
Security Best Practices
For Skill Authors
- Principle of Least Privilege: Request minimum permissions needed
- Specific Patterns: Use narrow glob patterns, avoid wildcards
- Document Rationale: Explain why each permission is needed
- Avoid subprocess: Prefer native libraries over shelling out
- Minimize network: Only request required API domains
For Skill Users
- Review Permissions: Check before installing (
tank info <skill>) - Audit Changes: Review permission diffs during updates
- Question Broad Access: Scrutinize
subprocessor**/*patterns - Trust but Verify: Even trusted publishers can be compromised
- Use Lockfiles: Commit
skills.lockto track permission changes
Runtime Enforcement
Tank enforces permissions through:- Process Isolation: Skills run in sandboxed processes
- Filesystem Checks: I/O operations validated against patterns
- Network Filtering: Outbound requests validated against domain list
- Subprocess Blocking: Exec calls rejected if
subprocess: false - Audit Logging: Permission violations logged for review
Violation Behavior
When a skill violates permissions:- Error thrown: Operation fails immediately
- Logged: Violation recorded in audit log
- Exit code 1: Skill process terminates
- User notified: Clear error message with permission needed
Admin Permission Types
Additional permission types used in Tank registry administration:User role in the Tank registry.Values:
user: Standard user (default)admin: Platform administrator
User account status.Values:
active: Normal operation (default)suspended: Temporary restrictionbanned: Permanent restriction
Skill package status.Values:
active: Available for installation (default)deprecated: Still available, but not recommendedquarantined: Hidden from search, existing installs blockedremoved: Permanently deleted
Administrative actions for audit logging.Values:
user.ban,user.suspend,user.unban,user.promote,user.demoteskill.quarantine,skill.remove,skill.deprecate,skill.restore,skill.feature,skill.unfeatureorg.suspend,org.member.remove,org.delete
Related
- skills.json Schema - Declare permissions in manifest
- skills.lock Schema - Locked permissions in lockfile
- CLI: tank install - Review permissions during install
- CLI: tank audit - Audit skill security