Manifest (skills.json)
Every skill package requires askills.json manifest file. This file declares metadata, dependencies, permissions, and other critical information about your skill.
Schema
The manifest is validated using Zod. Here’s the complete schema frompackages/shared/src/schemas/skills-json.ts:
Required Fields
name
Type:string
Pattern: @org/skill-name
Rules:
- Must be scoped (start with
@org/) - Lowercase alphanumeric characters and hyphens only
- 1-214 characters
- Unique across the registry
version
Type:string
Format: Semantic Versioning (semver)
Rules:
- Must match pattern:
MAJOR.MINOR.PATCH[-prerelease][+build] - Examples:
1.0.0,2.1.3-beta.1,1.0.0+20231201
Tank enforces strict semver. Use
tank version commands to bump versions correctly:tank version patch— Bug fixes (1.0.0 → 1.0.1)tank version minor— New features (1.0.0 → 1.1.0)tank version major— Breaking changes (1.0.0 → 2.0.0)
Optional Fields
description
Type:string (optional)
Max length: 500 characters
A brief description of what the skill does. This appears in search results and on the registry website.
Example:
skills (dependencies)
Type:Record<string, string> (optional)
Dependencies on other skills, with semver range specifiers.
Supported range formats:
- Exact:
1.2.3 - Caret (compatible):
^1.2.3— allows>=1.2.3 <2.0.0 - Tilde (patch):
~1.2.3— allows>=1.2.3 <1.3.0 - Range:
>=1.0.0 <2.0.0
permissions
Type:Permissions (optional)
Declares what system resources the skill needs access to. See Permissions for detailed documentation.
Example:
repository
Type:string (URL, optional)
Link to the skill’s source code repository (GitHub, GitLab, etc.).
Example:
visibility
Type:"public" | "private" (optional, defaults to "public")
Controls who can discover and install the skill:
public— Anyone can search, view, and installprivate— Only organization members can access
audit
Type:object (optional)
Configures minimum security audit score requirements.
Fields:
min_score— Minimum audit score (0-10) required for this skill’s dependencies
Audit scores are computed from the 6-stage security scan. A score below your
min_score will cause tank install to fail for that dependency.Complete Example
Here’s a completeskills.json for a production skill:
Validation
Tank validates your manifest in several scenarios:tank init— Creates a valid templatetank publish— Validates before publishingtank install— Validates downloaded packages
Common Validation Errors
| Error | Cause | Fix |
|---|---|---|
Name must be scoped | Missing @org/ prefix | Rename to @yourorg/skill-name |
Version must be valid semver | Invalid version format | Use 1.2.3 format |
Description must be 500 characters or fewer | Description too long | Shorten description |
Repository must be a valid URL | Invalid URL format | Use full URL: https://github.com/... |
Unknown property | Extra field in manifest | Remove unrecognized fields (strict mode) |
Semver Resolution
Tank uses a custom semver resolver (packages/shared/src/lib/resolver.ts) to resolve dependency ranges:
Resolution Examples
FAQ: Should I use ^ or ~ for dependencies?
FAQ: Should I use ^ or ~ for dependencies?
Use
^ (caret) by default — it allows minor and patch updates, which usually include bug fixes and new features without breaking changes.Use ~ (tilde) for stability — it only allows patch updates, useful when you need strict control over which features are available.Use exact versions for critical dependencies — when you need absolute reproducibility (rare).Next Steps
- Lockfile — How Tank ensures reproducible installs
- Permissions — Permission schema and enforcement
- Security Scanning — How Tank validates skills before publishing