Skip to content

feat(cli): report outdated and unmanaged Skills - #116

Merged
harlan-zw merged 3 commits into
mainfrom
feat/cli-outdated
Aug 21, 2026
Merged

feat(cli): report outdated and unmanaged Skills#116
harlan-zw merged 3 commits into
mainfrom
feat/cli-outdated

Conversation

@harlan-zw

@harlan-zwharlan-zw commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds skilld outdated [--system] and extends skilld update --global.

  • skilld outdated reports each project Skill: Current, Outdated (with the exact skilld update <name> recovery), Unverified (with the --direct install command and locked Agent targets), Local, or the skilld-maintained Skill line.
  • skilld outdated --system adds the global scope and scans every registered Agent target directory. Skills found outside skilld management are reported as Unmanaged, linked to a Repository through skilld.dev search with its star count, and given a delete + install recovery path. Copies and links of the same Skill collapse into one line, and Agents sharing a directory (Codex and Amp on .agents/skills) are grouped. Store, source state, and search failures surface as lines instead of aborting the report.
  • skilld update --global updates global Skills through the new update pipeline so the reported recovery path is executable.

Notes

  • Merged with the new update command surface: recovery messages say skilld update, and upgrade stays a non-command.
  • outdated --system on a machine with v2-era ~/.skilld/skills/skilld-lock.yaml reports one store line per scope and continues; v2 to v3 lockfile migration is out of scope here.
  • Live skilld.dev search responses can exceed the strict description limit in parse_search_response; those surface as Skill search unavailable lines rather than failing the scan.
  • --json on outdated returns the existing UNSUPPORTED_OUTPUT gate, same as other line commands.

Testing

  • 13 tests in crates/skilld-command/tests/outdated.rs; full workspace suite, clippy, and fmt pass.
  • Smoke tested the built binary with an isolated HOME against unmanaged Skills in .claude/skills and .agents/skills, plus --plain and the --json gate.

- A corrupt or unreadable lockfile reports one line per scope and skips
that scope scan instead of aborting, so managed copies are never
advised for deletion.
- A source state network failure reports one line per Skill instead of
aborting the whole report.
- Agents sharing one directory, Codex and Amp on .agents/skills, are
grouped so recovery commands target every Agent that reads the Skill.
- Unverified recovery keeps the locked Agent targets.
- The bundled skilld Skill reports its own source line.
- Repository candidates show their star count, and an invalid candidate
selector reports a search failure instead of no match.
@harlan-zw

Copy link
Copy Markdown
CollaboratorAuthor

Adversarial review pass by the coding agent; fixes pushed in e36fa32.

Fixed

  1. Corrupt or v2 lockfile aborted the whole report with exit 2. Now one line per scope, scan continues for readable scopes. That scope's agent directories are skipped because managed copies cannot be told from unmanaged ones without the lockfile, so no wrong delete advice.
  2. First source_state network failure aborted the whole report. Now one line per Skill.
  3. Codex and Amp share .agents/skills; the root dedupe dropped Amp from recovery commands. Targets are now grouped by directory before scanning.
  4. Unverified recovery omitted --agent flags, so a rerun could retarget run-time detected Agents or fail with TARGET_REQUIRED. It now reuses the locked targets.
  5. Repository candidates are matched by Skill name alone before advising a delete and reinstall; the line now shows the star count as a trust signal.
  6. The bundled skilld Skill printed as Local Skill skilld.; it now prints skilld-maintained Skill skilld..
  7. An invalid candidate selector silently printed no match; it now reports a search failure line.

Considered, left alone

  • Exit code stays 0 when Skills are outdated; skilld verify is the strict gate for CI.
  • One search request per unmanaged Skill; acceptable at current counts, revisit if rate limits bite.

# Conflicts:
#	crates/skilld-command/src/lib.rs
#	crates/skilld-command/src/local_store.rs
#	crates/skilld-command/tests/remote.rs
@harlan-zw
harlan-zw merged commit 58a8159 into mainAug 21, 2026
14 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@harlan-zw