For Skill Authors
Building secure skills protects both your users and your reputation. Follow these guidelines to create trustworthy, high-scoring skills.1. Declare All Permissions
Always explicitly declare required capabilities in yourSKILL.md manifest.
Bad:
Good:
- Users see what your skill can access
- Stage 2 (Static Analysis) cross-checks code vs declared permissions
- Missing permissions → Check 3 fails → lose 1 point on audit score
- Undeclared network/filesystem access → High severity finding
2. Principle of Least Privilege
Request only the permissions you need. Avoid wildcards.Bad:
Good:
- Reduces attack surface if your skill is compromised
- Builds user trust (users are cautious of wildcard permissions)
- Easier to review and audit
3. Never Hardcode Secrets
Do not commit API keys, tokens, or credentials to your skill.Bad:
Good:
- Stage 4 (Secrets) will flag hardcoded credentials as CRITICAL
- Verdict = FAIL (cannot publish)
- Exposed secrets can be stolen and abused
- Use environment variables (
os.getenv(),process.env) - Document required env vars in README
- Provide
.env.example(not.env)
4. Avoid Dangerous APIs
Do not useeval(), exec(), or shell injection patterns unless absolutely necessary.
Bad:
Good:
- Stage 2 (Static Analysis) flags
eval,exec,os.systemas CRITICAL - Bandit linter also detects these (B102, B307)
- Users will see “Critical findings” warning at install time
- If your skill genuinely needs code execution (e.g., a REPL skill), document WHY in README and expect lower audit scores
5. Pin Dependencies
Always pin exact versions inrequirements.txt or package.json.
Bad:
Good:
- Stage 5 (Supply Chain) flags unpinned dependencies as MEDIUM
- Unpinned deps = unpredictable behavior across installs
- Security risk: malicious version could be published between your test and user install
6. Check for Typosquatting
Be careful when typing dependency names. A single typo can pull in a malicious package.Examples of Typosquats:
reqeusts(notrequests)numppy(notnumpy)python-dateutilvspython-datutil
- Stage 5 (Supply Chain) compares your dependencies against top 1000 popular packages
- Levenshtein distance check (flags if distance = 1-2)
- High severity finding if potential typosquat detected
- Copy package names from official docs (don’t type manually)
- Use IDE autocomplete
- Review
requirements.txt/package.jsonbefore publish
7. Explain Permission Needs in README
Document why your skill needs each permission.Good README:
- Install skill:
.tankignore
node_modules/ .git/ .vscode/ *.pyc pycache/ tests/ *.test.ts *.spec.ts docs/ examples/ .env .DS_StoreGood:
- Stage 3 (Injection Detection) scans markdown for manipulation patterns
- Hidden HTML comments, bidirectional overrides, role hijacking = CRITICAL findings
- Users will see “Prompt injection detected” warning
12. Use Allowed Dotfiles Only
Only include standard config files, not arbitrary dotfiles.Allowed:
.gitignore.editorconfig.prettierrc,.eslintrc.env.example(not.env)
Flagged:
.env(should be.env.example).git/directories.my-custom-config
- Stage 1 (Structure) flags unexpected dotfiles as LOW severity
- Reduces confusion for reviewers
.envwith values = HIGH severity (Stage 4)
13. Respond to Security Findings
If the security scanner flags your code, investigate and fix.What to Do:
-
Review the finding:
-
Determine if it’s a false positive:
- Is the code actually making a network request?
- If yes → add permission to manifest
- If no → report false positive to Tank team
-
Fix the issue:
-
Re-publish:
- Ignore findings and hope users don’t notice
- Obfuscate code to evade scanner (will be caught by Stage 2 obfuscation detection)
14. Review Dependencies
Audit your dependencies for vulnerabilities before publishing.How:
- Stage 5 (Supply Chain) queries OSV.dev for known vulnerabilities
- Critical CVE in a dependency = CRITICAL finding
- Verdict may be FAIL if vulnerability is severe
15. Sign Your Commits (Future)
Use GPG to sign commits (planned feature for Tank v2.0).How:
- Proves you (not an attacker) authored the code
- Builds trust with users
- Future Tank versions will display “Verified Author” badge
For Skill Consumers
Installing skills from the internet requires caution. Here’s how to stay safe.1. Review Security Score
Check the audit score before installing.- 10/10 or 9/10: Excellent, likely safe
- 8/10 or 7/10: Good, review warnings
- 6/10 or below: Caution, read security findings carefully
2. Read Permission Requests
Understand what the skill can access.network.outbound: ["*"]— why does it need all domains?filesystem.read: [".env", ".ssh"]— credential theft risksubprocess: true— can run arbitrary commands
- Specific domains (
api.github.com) - Limited filesystem access (
src/**/*.ts) - No subprocess permission
3. Review Security Findings
Read the scanner output before confirming.- Any CRITICAL findings
- HIGH findings related to credentials or network exfiltration
- Skill author has low reputation or 0 downloads
- Only LOW or MEDIUM findings
- Findings are explained in README
- Skill has many downloads and good reviews
4. Check Author Reputation (Future)
Look for verified authors and community reviews (planned feature). Future UI:5. Browse Source Code
Review the skill’s code in the registry UI before installing. Tank registry displays:- File tree
- Syntax-highlighted source
- Security findings per file
- Obfuscated code (base64, hex strings)
- Suspicious network requests
- Credential theft patterns
6. Use Lockfiles
Always commitskills.lock to your project.
- Ensures all team members install the same versions
- SHA-512 integrity verification prevents tampering
- Prevents dependency confusion attacks
7. Report Suspicious Skills
If you find a malicious skill, report it immediately.How:
- Click “Report” button in registry UI
- Or email: [email protected]
- Include:
- Skill name and version
- What you found (code snippet, behavior)
- Your assessment (credential theft, prompt injection, etc.)
- Tank team investigates within 24 hours
- Skill is quarantined if confirmed malicious
- Author is banned if intentional
- All users are notified of the security incident
Secure Development Checklist
Use this checklist before publishing: Manifest:-
SKILL.mdhas valid frontmatter -
descriptionfield is non-empty - All required permissions declared in
permissions - Permissions are specific (no
["*"]wildcards)
- No hardcoded secrets (API keys, tokens)
- No
eval(),exec(), oros.system()unless necessary - Dependencies are pinned to exact versions
- No typos in dependency names
- Tests included (optional but recommended)
-
README.mdexplains what the skill does - Permission requirements documented
- Setup instructions included
- No prompt injection patterns in markdown
-
.tankignoreexcludes unnecessary files - Total file count < 100
- Tarball size < 5 MB
- No binary executables (
.exe,.so,.dll)
- Run
tank scan ./locally to catch issues - Fix all CRITICAL and HIGH findings
- Review MEDIUM findings (fix if possible)
- Bump version correctly (major if permissions changed)
Additional Resources
Security Pipeline
Understand what the scanner checks
Permissions
Learn the permission system
Audit Score
Maximize your 0-10 score
Security Overview
Tank’s security philosophy