Skip to content

mdm skills update

Update installed skills to their latest versions.

Usage

mdm skills update [skills...]

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:

mdm skills add owner/repo#v1.2.0

When a newer stable tag is available, mdm skills update prints:

→ upgrading v1.2.0 → v1.3.0

and re-installs from the new tag automatically.

Scope

Without --global or --project, a prompt asks which scope to update:

? Update which scope?
  ● Both (project and global)
    Project
    Global

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