Manifest and lockfile
skills-package-manager uses two files to describe and lock the installed state of skills.
skills.json
skills.json is a declarative manifest that describes which skills a project needs and where they should be installed.
Field descriptions:
installDir: The directory where materialized skills are written.linkTargets: A list of target directories where symbolic links should be created.skills: A mapping from skill name to specifier.
skills-lock.yaml
skills-lock.yaml locks resolved results so installations produce consistent content across different machines and points in time.
It typically contains:
- The resolved source type:
gitorfile - A specific commit or local content digest
- The skill path
- The final content digest
Why both exist
skills.jsoncaptures the team-maintained intent.skills-lock.yamlcaptures the installer-resolved result.
The former is suitable for review; the latter is suitable for reproducibility.
Recommended practices
- Always commit both
skills.jsonandskills-lock.yaml - Standardize
installDirandlinkTargetsacross the team - Prefer explicit GitHub specifiers with
path:for external skills - When using local skills for internal development, keep the lockfile as well to track digest changes
Specifier Compatibility
When comparing manifest and lockfile specifiers (e.g., with spm install --frozen-lockfile), the following rules apply:
- Source must match: The git URL or file path must be identical
- Path must match: The skill path within the repository must be identical
- Ref compatibility:
- Manifest without ref → compatible with any lock ref (use lock version)
- Manifest with ref → must match lock ref exactly
This means you can omit the commit SHA in skills.json:
And the lockfile will pin the exact version:
The --frozen-lockfile flag will accept this combination because the manifest specifier (without ref) is satisfied by the lockfile specifier (with resolved commit).