Files
dotfiles/.claude/skills/setup-skills/LOCKFILE.md

2.3 KiB

Skills Lockfile

.claude/skills-lock.yaml, at the root of a project, tracks which library skills (from ~/.claude/skills/library/) have been copied into that project's .claude/skills/, so setup-skills, update-skills, and remove-skills all agree on what's installed without re-deriving it from the filesystem.

Schema

A YAML list of entries, one per installed skill:

- name: nbdev
  hash: 3f2a9b8c1d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a
- name: terraform-conventions
  hash: 9c1d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a3f2a9b
  • name — matches both the skill's directory name in the library (skills/library/<name>) and its copied directory name in the project (.claude/skills/<name>).
  • hash — the output of hash-dir.sh run against that one skill's directory contents, recorded at the moment it was last copied or confirmed up to date. Never a hash of anything else — not the whole project, not the whole library, just that one skill's own directory tree.

What a mismatch means

To classify a skill's state, compare three values: the lockfile's stored hash, hash-dir.sh on the project's current copy (.claude/skills/<name>), and hash-dir.sh on the library's current source (~/.claude/skills/library/<name>).

stored vs. project copy stored vs. library source meaning
match match nothing to do
match differs library moved on — safe to update
differs match project customized on purpose — leave it
differs differs conflict — report, don't touch

Writing to the lockfile

  • Adding a skill: append a new {name, hash} entry.
  • Applying a safe update: overwrite that entry's hash in place with the library's current hash.
  • Removing a skill: delete its entry entirely.

Never reorder or restructure existing entries beyond what an add, update, or remove requires — this file is meant to diff cleanly in a project's git history.