Andy.Skills.Tools
2026.7.21-rc.17
dotnet add package Andy.Skills.Tools --version 2026.7.21-rc.17
NuGet\Install-Package Andy.Skills.Tools -Version 2026.7.21-rc.17
<PackageReference Include="Andy.Skills.Tools" Version="2026.7.21-rc.17" />
<PackageVersion Include="Andy.Skills.Tools" Version="2026.7.21-rc.17" />
<PackageReference Include="Andy.Skills.Tools" />
paket add Andy.Skills.Tools --version 2026.7.21-rc.17
#r "nuget: Andy.Skills.Tools, 2026.7.21-rc.17"
#:package Andy.Skills.Tools@2026.7.21-rc.17
#addin nuget:?package=Andy.Skills.Tools&version=2026.7.21-rc.17&prerelease
#tool nuget:?package=Andy.Skills.Tools&version=2026.7.21-rc.17&prerelease
Andy.Skills
⚠️ ALPHA — APIs may change without notice. Not for production use.
Agent Skills for .NET: discovery, parsing, and prompt composition for SKILL.md skill packages,
following the Agent Skills convention with lazy
disclosure — only skill names and descriptions go into the system prompt; a skill's full
instructions are read from disk when the agent decides the skill is relevant.
Part of the Andy ecosystem (Andy Engine, Andy CLI) but usable independently.
What's in the box
SkillParser— parsesSKILL.mdmanifests (YAML frontmatter + markdown body). No YAML dependency. Handles the frontmatter shapes real skills use: quoted scalars, inline ([a, b]) and block (- item) lists — including block sequences at the same indent as their key — folded (>) / literal (|) scalars, unmarked multi-line plain scalars and multi-line quoted scalars (a wrappeddescription:), and a one-levelmetadata:map. Extension structures it doesn't model (embedded JSON flow-maps, nested lists/maps) are tolerated, not rejected. Only a manifest that can't yield a skill throws (no frontmatter, missingname/description, unclosed block); spec-limit lints (an over-long / non-conformingnameordescription) come back as non-fatal warnings viaParseWithWarnings. Validated against 80,000+ real skills from the skills.sh catalog (~2,400 repos): 98%+ parse.SkillDiscovery— scans skill roots (<root>/<skill-dir>/SKILL.md), with precedence (project skills override user skills) and non-fatal diagnostics for invalid manifests. Conventional roots:<workspace>/.andy/skills, then~/.andy/skills.SkillPromptComposer— renders the lazy-disclosure summary block for a system prompt.Skill.GetBodyAsync()— loads a skill's full instructions on demand.
Skill layout
.andy/skills/
pdf-forms/
SKILL.md # frontmatter: name, description, [license, allowed-tools, metadata]
scripts/ # optional resources referenced by the body
references/
Usage
using Andy.Skills;
var result = await SkillDiscovery.DiscoverAsync(SkillDiscovery.DefaultRoots(workspaceDir));
// Inject one-line summaries into the system prompt (lazy disclosure).
var promptBlock = SkillPromptComposer.Compose(result.Skills);
// Later, when the agent activates a skill:
var body = await result.Skills[0].GetBodyAsync();
Example
A runnable end-to-end demo (discover → compose → activate) lives under
examples/Andy.Skills.Examples, with a sample skill tree at
examples/Andy.Skills.Examples/skills/pdf-forms/:
dotnet run --project examples/Andy.Skills.Examples
Building
Requires the .NET 10 SDK (the library multi-targets net8.0 and net10.0).
dotnet build
dotnet test
Conformance
SkillParser is validated against the full skills.sh catalog (~80k manifests).
The check is committed and re-runnable — run it after any parser change:
conformance/run.sh --limit 0 --max-error-rate 0.5 # full catalog, gate on regressions
conformance/run.sh --limit 300 # quick sample, ~1 min
See conformance/README.md and
docs/skills-sh-catalog-report.md.
Andy.Tools integration
The Andy.Skills.Tools package plugs skills into Andy.Tools
/ Andy.Engine as two tools: skill — the agent calls it to pull a skill's body on demand (lazy
disclosure) — and skill_file, read-only access to a skill's own bundled resources (scripts/,
references/, …) confined to that skill's directory. Register them after AddAndyTools:
using Andy.Skills;
using Andy.Skills.Tools;
services
.AddAndyTools()
.AddAndySkills(SkillDiscovery.DefaultRoots(workspaceDir).ToArray());
// Compose the one-line summaries into your system prompt so the model knows what's available:
var catalog = provider.GetRequiredService<ISkillCatalog>();
var promptBlock = SkillPromptComposer.Compose(await catalog.GetSkillsAsync());
AddAndySkills registers an ISkillCatalog (discovers + caches the skill list; bodies stay fresh)
and the skill + skill_file tools. The core Andy.Skills package stays dependency-free — only
Andy.Skills.Tools takes the Andy.Tools dependency.
Roadmap
AGENTS.mdinstruction-file loading (hierarchical), sharing the discovery machinery.
See docs/design.md for the full design and integration plan.
License
Apache-2.0
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Andy.Skills (>= 2026.7.21-rc.17)
- Andy.Tools (>= 2026.6.27-rc.80)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 8.0.2)
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.2)
-
net8.0
- Andy.Skills (>= 2026.7.21-rc.17)
- Andy.Tools (>= 2026.6.27-rc.80)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 8.0.2)
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2026.7.21-rc.17 | 597 | 7/21/2026 |
| 2026.7.8-rc.15 | 92 | 7/8/2026 |