Repository navigation
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 -ystops on a name conflict instead of silently replacing a skill from another source. Nothing is installed and the exit code is2. Pass--replaceto overwrite, or--as <skill>=<new-name>to keep both.checkis now an alias of the read-onlyoutdatedcommand. It used to be an alias ofupdateand could install updates.- Project installs no longer write to the global lock. Tools or scripts that read
~/.agents/.skill-lock.jsonto find project skills must read./skills-lock.jsoninstead. --jsonoutput is new onlist,outdated,updateandversion; scripts that parsed the tables should switch to it.
New
updateworks for every source type. NuGet and npm skills are checked against your feeds and registries (using yourNuGet.configand.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.updateandoutdatedaccept packages and sources as targets, the same waylistandremovedo:update Contoso.AgentSkills,update @acme/skills,update anthropics/skills.update Contoso.AgentSkills@2.1.0moves 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
updateoptions:-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(aliascheck): the read-only report.checkused to be an alias ofupdateand could install updates.restore: installs every skill in./skills-lock.jsonat its locked version or ref, for fresh clones and CI. Skips skills already present (--forcereinstalls), and--frozenfails when a source's content no longer matches the lock.--versionprints the tool version;versionalso shows the commit, runtime, OS, and lock file paths (--jsonavailable).list --jsonandlist -p/--project;remove -p/--project.- Name conflicts are detected and can be resolved with an alias. When
addwould 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-yor in CI it lists the conflicts with the commands that resolve them and exits2. Before, the existing skill was silently overwritten.findasks the same question. add --as <skill>=<new-name>installs a skill under another name;add --replaceoverwrites without asking. The installedSKILL.mdgets the newname(the spec requires it to match the folder); the lock recordsoriginalName, soupdate,restore, and lateradds of the same source keep the alias.listshows 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/removemanages NuGet feeds in.agents/nuget.config(project, committed) and~/.agents/nuget.config(user, credentials);registry add/list/removedoes the same for npm in.agents/.npmrcand~/.agents/.npmrc. Standardnuget.configand.npmrcformats, layered on top of your normal configuration, which stays untouched. Credentials and tokens are refused in project files (--token-envwrites a${VAR}reference instead), and user files holding them are made owner-only on Linux and macOS. --nuget-sourceaccepts a configured feed's name, and keeps that feed's credentials.skills-lock.jsonrecords each source'ssourceUrl(feed, registry, or clone URL), soupdateandrestoretry 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'sdotnet-package-skillsreads, so one package works with both tools. The oldercontentFiles/any/any/skills/layout is still read; when a package has both,skills/wins. The authoring guide andsamples/sample-nuget-packageuse the new layout, and a new docs page compares AgentSkills CLI withdotnet-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 -gcould reinstall project skills globally.updatereports the leftover entries as stale and removes them;outdatedonly lists them. updatenever checked project-scope skills. Every project skill was reported as "Missing folder hash". Project skills are now compared against the hash inskills-lock.json.removeandlistrespect scope when matching by package: removing a project package no longer touches a same-named global skill or its global lock entry, andlistshows 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 withdotnet restore, andfeed listshows the patterns. - The project's
NuGet.configwas 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 restoredoes. --nuget-sourcewith a URL dropped the credentials configured for that feed.- Unknown
--agentnames produce a one-line error instead of a stack trace. removelists every agent a skill was removed from. When several agents share.agents/skills, only the first one used to be named.- Docs said
--copywas 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.Git8.0.0, GHSA-23fw-v26w-5fgq) because warnings are errors. The explicitMicrosoft.SourceLink.GitHubreference 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 thenet10.0build on the .NET 11 runtime. Nonet11.0build is added (.NET 11 is an STS release). - .NET 8 stays supported: the package keeps its
net8.0build alongsidenet10.0. - New
ciworkflow: 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.