Skip to content

Resolution & pins

When you run pm-skills list or pull, the server returns the effective skill set for a project — one winner per skill name.

Precedence

text
project  >  organization  >  global (marketplace / installs)

If the same name exists at more than one tier, the higher-precedence tier shadows the others. list / status can surface shadow relationships so you know why an org skill is hidden.

Only active content

Draft and under-review versions never reach the CLI. Resolution serves the skill’s active version SHA (or an install pin — see below).

Install pins

A SkillInstall record pins a wider-tier skill (usually global) into a project or organization:

FieldMeaning
pinned_shaExact version served until updated
auto_updateIf true, follow the source skill’s active version

Pins are created and updated in the UI (Install to project / install management). The CLI does not create installs on the server.

Local lockfile

pm-skills.lock.json records what was last pulled:

json
{
  "version": 1,
  "project_id": "…",
  "skills": {
    "secure-coding-policy": {
      "sha": "77c2d8a1f0e3",
      "tier": "organization",
      "skill_id": "…"
    }
  },
  "synced_at": "…"
}
  • pull refreshes files + lockfile from current resolution (unless --frozen).
  • pull --frozen installs exactly the lockfile SHAs and fails if the server differs (CI reproducibility).
  • update advances local pins (and rewrites files) when a newer approved version exists — with a diff preview.

Drift states

pm-skills status compares lockfile, disk content hashes, and server resolution:

StateMeaning
in syncLocal matches pinned SHA
update availableServer resolution moved ahead
modified locallyOn-disk content ≠ lockfile hash
removed on serverIn lockfile, gone from resolution
new in resolutionOn server, not yet in lockfile

See Pull, status, update and CI.

Copyright © 2026 elsai foundry.