mdm skills update¶
Update installed skills to their latest versions.
Usage¶
Re-fetches each skill from its recorded source and ref in the lock file. Updated skills are scanned for hidden Unicode characters before files are copied or symlinked.
Alias: check
One fetch per repository¶
Skills that share a source repository and upgrade to the same tag are re-fetched together, in a single mdm skills add pass. A repository holding 28 skills is cloned once per update run, not once per skill - which matters most for private repos, where every clone is also a credential handshake.
The same batching applies to the up-to-date check: git ls-remote --tags runs once per repository for the whole run and the result is reused across every skill installed from it, in both scopes.
Checking alpha...
→ upgrading v1.2.0 → v1.3.0
Checking bravo...
→ upgrading v1.2.0 → v1.3.0
Fetching 2 skills from acme/skills#v1.3.0 in one pass...
Up-to-date detection¶
| Source | Method |
|---|---|
| GitHub / GitLab / other git | Semver tag comparison via git ls-remote --tags - no clone needed |
| Local path | Always skipped - local skills stay in sync with the source code they live alongside |
Skills cherry-picked into ./skills are recorded as local
sources for exactly this reason: they are your files, and mdm skills update
will never re-fetch over your edits. To take a newer upstream version of a fork,
cherry-pick it again with --force (or into a new name with --as).
Remote skills must be pinned to a semver tag (e.g. #v1.2.0) to use automatic update detection. mdm fetches all tags from the remote, finds the highest stable release, and upgrades if a newer one exists. Skills installed from a branch (e.g. main) are skipped with a prompt to pin to a tag instead.
Pre-release tags (e.g. v2.0.0-beta.1) are ignored by the update check. You can install a pre-release explicitly with mdm skills add <source>#v2.0.0-beta.1, but the update command only promotes to stable releases.
Pinning to a version¶
Install a specific version by appending a #tag fragment to the source:
When a newer stable tag is available, mdm skills update prints:
and re-installs from the new tag automatically.
Scope¶
Without --global or --project, a prompt asks which scope to update:
With --yes, both scopes are updated without prompting.
Flags¶
| Flag | Description |
|---|---|
--global, -g |
Update global skills only |
--project, -p |
Update project skills only |
--yes, -y |
Skip scope prompt, update both scopes |
--allow-hidden-chars |
Allow markdown files with hidden Unicode characters |
Examples¶
# Update all skills (both scopes, with prompt)
mdm skills update
# Update a specific skill
mdm skills update my-skill
# Update only global skills
mdm skills update -g
# Update both scopes without prompting
mdm skills update -y
# Update even if a skill intentionally contains hidden characters
mdm skills update -y --allow-hidden-chars