Skip to content

v1.1.0

Latest

Choose a tag to compare

@mysticmind mysticmind released this 05 Nov 12:40
· 3 commits to main since this release

Package-level updates for every source type, a restore command, name-conflict aliases, version reporting, and fixes to how the lock files track scopes. Lock file formats stay compatible with vercel-labs/skills; the only additions are optional fields: originalName in both locks and sourceUrl in the project lock. The package still ships both net8.0 and net10.0 builds.

Behavior changes

These fix unsafe or surprising behavior; check them if you script the tool.

  • add -y stops on a name conflict instead of silently replacing a skill from another source. Nothing is installed and the exit code is 2. Pass --replace to overwrite, or --as <skill>=<new-name> to keep both.
  • check is now an alias of the read-only outdated command. It used to be an alias of update and could install updates.
  • Project installs no longer write to the global lock. Tools or scripts that read ~/.agents/.skill-lock.json to find project skills must read ./skills-lock.json instead.
  • --json output is new on list, outdated, update and version; scripts that parsed the tables should switch to it.

New

  • update works for every source type. NuGet and npm skills are checked against your feeds and registries (using your NuGet.config and .npmrc) and moved to the newest version. GitLab, generic git, well-known, and local sources are checked by fetching them and comparing the skill folder. Before, only global GitHub skills were checked; everything else was reported as skipped.
  • update and outdated accept packages and sources as targets, the same way list and remove do: update Contoso.AgentSkills, update @acme/skills, update anthropics/skills. update Contoso.AgentSkills@2.1.0 moves to exactly that version.
  • Reinstalls keep the original layout: same scope, same agents, and symlinked installs stay symlinked. Before, every update reinstalled in copy mode for whichever agents were detected.
  • New update options: -a/--agent, --force (reinstall even without a detected change), --prerelease, --version-lock none|major|minor (keep NuGet/npm updates on the installed major or major.minor version), --json, --exit-code (exit 1 when updates are available, 2 when a check failed), --nuget-source, --npm-registry.
  • outdated (alias check): the read-only report. check used to be an alias of update and could install updates.
  • restore: installs every skill in ./skills-lock.json at its locked version or ref, for fresh clones and CI. Skips skills already present (--force reinstalls), and --frozen fails when a source's content no longer matches the lock.
  • --version prints the tool version; version also shows the commit, runtime, OS, and lock file paths (--json available).
  • list --json and list -p/--project; remove -p/--project.
  • Name conflicts are detected and can be resolved with an alias. When add would install a skill whose name is already used in that scope by a skill from a different source (or by an untracked skill), it now stops before installing anything. Interactively it asks whether to install under another name (with a suggested name), replace, or skip. With -y or in CI it lists the conflicts with the commands that resolve them and exits 2. Before, the existing skill was silently overwritten. find asks the same question.
  • add --as <skill>=<new-name> installs a skill under another name; add --replace overwrites without asking. The installed SKILL.md gets the new name (the spec requires it to match the folder); the lock records originalName, so update, restore, and later adds of the same source keep the alias. list shows aliases.
  • Lock entries keep fields they don't recognize when rewritten, so additions by other tools aren't lost.
  • Private feeds and registries just for skills. feed add/list/remove manages NuGet feeds in .agents/nuget.config (project, committed) and ~/.agents/nuget.config (user, credentials); registry add/list/remove does the same for npm in .agents/.npmrc and ~/.agents/.npmrc. Standard nuget.config and .npmrc formats, layered on top of your normal configuration, which stays untouched. Credentials and tokens are refused in project files (--token-env writes a ${VAR} reference instead), and user files holding them are made owner-only on Linux and macOS.
  • --nuget-source accepts a configured feed's name, and keeps that feed's credentials.
  • skills-lock.json records each source's sourceUrl (feed, registry, or clone URL), so update and restore try the feed a package came from first, self-hosted GitLab sources restore from the right host, and skills added from a local package file restore from that file while it exists.
  • NuGet packages: skills/ at the package root is now the recommended layout, the same one NuGet's dotnet-package-skills reads, so one package works with both tools. The older contentFiles/any/any/skills/ layout is still read; when a package has both, skills/ wins. The authoring guide and samples/sample-nuget-package use the new layout, and a new docs page compares AgentSkills CLI with dotnet-package-skills.

Bug fixes

  • Project installs no longer write to the global lock. Each scope now writes only its own lock file. Before, a project install also added a global lock entry, so update -g could reinstall project skills globally. update reports the leftover entries as stale and removes them; outdated only lists them.
  • update never checked project-scope skills. Every project skill was reported as "Missing folder hash". Project skills are now compared against the hash in skills-lock.json.
  • remove and list respect scope when matching by package: removing a project package no longer touches a same-named global skill or its global lock entry, and list shows each row's source from its own scope's lock.
  • remove -a <agent> no longer breaks other agents. It used to delete the shared canonical copy and the lock entry even when other agents still used the skill (through a symlink).
  • Corrupt lock files are no longer silently discarded. An unparseable lock is backed up to <lock>.corrupt-<timestamp> with a warning. A lock written in a newer format is never overwritten, and lock writes are atomic.
  • NuGet package source mapping was ignored. Every feed was tried in order, so a same-named package on a public feed (possibly with a higher version) could be installed, or offered by outdated/update, in place of a private one: a dependency-confusion risk. Packages now only come from the feeds mapped to them, as with dotnet restore, and feed list shows the patterns.
  • The project's NuGet.config was ignored. NuGet settings were loaded without the project folder, so only user and machine-wide feeds were searched.
  • NuGet credential providers weren't used (for example the Azure Artifacts Credential Provider), although the docs said they were. They're now set up the way dotnet restore does.
  • --nuget-source with a URL dropped the credentials configured for that feed.
  • Unknown --agent names produce a one-line error instead of a stack trace.
  • remove lists every agent a skill was removed from. When several agents share .agents/skills, only the first one used to be named.
  • Docs said --copy was the default install mode; the default has always been symlink.
  • The git tree SHA recorded for a skill at the repository root is now the root tree SHA, which matches what the GitHub Trees API reports.

Build and platform

  • Builds were failing with NU1902 (Microsoft.Build.Tasks.Git 8.0.0, GHSA-23fw-v26w-5fgq) because warnings are errors. The explicit Microsoft.SourceLink.GitHub reference is removed; SourceLink is built into the .NET 8+ SDK, so packages keep their source links.
  • .NET 11: the tool already runs on .NET 11 and later through RollForward=LatestMajor; a new CI job tests the net10.0 build on the .NET 11 runtime. No net11.0 build is added (.NET 11 is an STS release).
  • .NET 8 stays supported: the package keeps its net8.0 build alongside net10.0.
  • New ci workflow: build and test on Linux, Windows, and macOS for every push and pull request.

Install or update: dotnet tool update --global agentskills-cli. Full history in CHANGELOG.md.