quay update

Update installed skills to the latest hub version.

Usage

quay update [OPTIONS] [SKILL]

Omit SKILL to update every installed skill that has a newer version on the hub. Inside a TTY this auto-opens a checkbox picker of outdated skills; pass --all to bypass the picker, or --dry-run to preview.

Examples

quay update                          # TTY: opens picker of outdated. Non-TTY: updates all.
quay update hello                    # just this one
quay update --all                    # all outdated, no picker
quay update --dry-run                # show what would change
quay update -i                       # explicit picker

Flags

FlagEffect
--dry-runShow what would change without writing.
-i, --interactiveOpen the picker.
--allSkip the TTY auto-picker; update everything outdated.
--keep-extraKeep local files the new version does not contain, without prompting or printing the note.
--delete-extraDelete local files the new version does not contain, without prompting.
--profile, --user-config, --project, --jsonStandard globals.

When to use this vs …

  • quay outdated — list-only sibling; identical detection logic without writing anything.
  • quay add <skill> --force — overwrites local drift even when versions match.

Caveats

  • "Outdated" uses semver comparison on the frontmatter version field. Skills without frontmatter (SlashCommand / Freestyle) never show as outdated by version — they're compared by SHA-on-fly instead.
  • update overwrites the installed copy with the hub's. Edits you made to files the hub also ships are replaced; check quay diff <skill> first if you may have local changes. Files the hub doesn't ship are handled as below.
  • Copy-strategy mirrors are refreshed after each update, so they don't keep the old version or a file the update deleted. A mirror you changed by hand — any file, dotfiles included — is left alone with a warning (on stderr, under --json too); quay link --force overwrites it. A copy mirror made before 0.16 is picked up automatically the first time quay sees it matching canonical; one that already differs needs a single quay link --force.
  • If a skill fails partway through a multi-skill run, the skills already updated are still reported (and in --json, with their deleted_extras) before the error.
  • Cancelling a prompt (Ctrl-C) stops the run and exits non-zero, so a wrapping script does not mistake a partial update for success.
  • --dry-run does not query CLI tools (gh / glab); pure diff against hub clone.

Local files the new version doesn't have

A skill is a directory, and yours may hold files the hub's copy does not — notes you wrote, or a file the hub has since deleted. quay cannot tell those two apart: the lockfile records a content hash, not a file list, so nothing on disk says what the previous install put there.

So it asks. When an update finds files the new version does not contain, it lists them and offers to keep them, delete them, pick individually, or keep these and every remaining skill's without asking again.

csv-parse: 2 files not in the new version
  refs/legacy.md
  notes.md

Without a terminal — CI, a pipe, or --json — nothing is deleted. quay keeps the files and says so:

note: csv-parse — kept 2 files not in the new version
      (refs/legacy.md, notes.md). Pass --delete-extra to remove them.
FlagEffect
--keep-extraKeep them, no prompt, and no note either — this is the only way to suppress it.
--delete-extraDelete them, no prompt. Works without a terminal, and names on stderr what it removed.
note: csv-parse — deleting 2 files not in the new version
      (refs/legacy.md, notes.md). Pass --keep-extra to keep them.

Note that the bare unattended default (no flag, no terminal) also keeps everything — --keep-extra only changes whether the note is printed.

Dotfiles, dot-directories and symlinks are never offered and never deleted. They are outside the set quay manages, and one of them — .quay-mirror — is what marks a copy mirror as quay-managed.

The "not in the new version" set is derived from the hub's registry.json files list for that skill, not from the actual fetched tree. A hub whose registry has gone stale — edited by hand without a quay rebuild-registry — can therefore list a file as missing when it still exists upstream. An interactive prompt shows the filename, so a human can recognize and keep it; --delete-extra in an unattended run has no such backstop and will delete it — it does name every file it removed on stderr, so a CI log keeps the record.

With --json, each updated skill also carries deleted_extras — the files the update removed, [] when it kept everything. (Picker runs — -i, or a bare quay update in a terminal — print no JSON; pass a skill name or --all.)

[{ "name": "csv-parse", "available": "2.0.0", "deleted_extras": ["refs/legacy.md"], "...": "..." }]

Files whose names are not valid UTF-8 are never offered and never deleted, like dotfiles: quay cannot name them exactly, so it does not manage them.

--help

Update installed skills to the latest available version

Usage: quay update [OPTIONS] [SKILL]

Arguments:
  [SKILL]  Update only this skill; if omitted, updates every installed skill

Options:
      --dry-run                    Show what would change without writing to disk
      --project <PROJECT>          Project root (defaults to current directory)
  -i, --interactive                Open an interactive checkbox list of outdated skills to update. Mutually exclusive with the positional skill argument
      --user-config <USER_CONFIG>  Override user config path (defaults to ~/.config/quay/config.toml)
      --all                        Update every installed skill without opening the picker, even in a terminal. Explicit bypass for the TTY auto-trigger
      --profile <PROFILE>          Override the active profile for this invocation
      --json                       Output JSON instead of human-readable text
      --keep-extra                 Keep local files the new version does not contain (the default when there is no terminal)
      --delete-extra               Delete local files the new version does not contain
  -h, --help                       Print help