SmartSkills.Core
0.1.0-preview
See the version list below for details.
dotnet add package SmartSkills.Core --version 0.1.0-preview
NuGet\Install-Package SmartSkills.Core -Version 0.1.0-preview
<PackageReference Include="SmartSkills.Core" Version="0.1.0-preview" />
<PackageVersion Include="SmartSkills.Core" Version="0.1.0-preview" />
<PackageReference Include="SmartSkills.Core" />
paket add SmartSkills.Core --version 0.1.0-preview
#r "nuget: SmartSkills.Core, 0.1.0-preview"
#:package SmartSkills.Core@0.1.0-preview
#addin nuget:?package=SmartSkills.Core&version=0.1.0-preview&prerelease
#tool nuget:?package=SmartSkills.Core&version=0.1.0-preview&prerelease
SmartSkills
Automatically discover and install agent skills based on your project's dependencies. Supports .NET (NuGet) and Node.js (npm/yarn/pnpm) ecosystems. Available as both a CLI tool and MSBuild integration.
Overview
SmartSkills scans your project for installed packages and matches them against a remote skill registry to find relevant agent skills. Skills follow the Agent Skills specification and are downloaded, validated, and installed locally.
Key features:
- Scan projects and solutions for NuGet and npm dependencies
- Auto-detect project type (.NET, Node.js) in a directory
- Match packages against skill registries using exact and glob patterns
- Fetch skills from GitHub and Azure DevOps repositories
- Commit-SHA-based caching to skip unchanged skills
- Configurable multi-source registries with priority ordering
Installation
CLI Tool
dotnet tool install -g SmartSkills.Cli
MSBuild Integration
Add the NuGet package to your project:
<PackageReference Include="SmartSkills.MSBuild" Version="1.0.0" PrivateAssets="all" />
CLI Usage
Scan for Dependencies
# Scan current directory (auto-detects .sln or .csproj)
smart-skills scan
# Scan a specific project
smart-skills scan --project ./src/MyProject/MyProject.csproj
# Output as JSON
smart-skills scan --project ./src/MyProject --json
Install Skills
# Install skills based on detected packages
smart-skills install
# Install for a specific project
smart-skills install --project ./src/MyProject
# Preview without installing
smart-skills install --dry-run
List Installed Skills
smart-skills list
smart-skills list --json
Check Status
smart-skills status
smart-skills status --project ./src/MyProject
Restore Skills from Lock File
# Restore all skills to their exact locked versions
smart-skills restore
# Restore for a specific project
smart-skills restore --project ./src/MyProject
Uninstall a Skill
smart-skills uninstall my-skill-name
Global Options
| Option | Description |
|---|---|
-v, --verbose |
Enable verbose logging |
--dry-run |
Preview changes without executing |
Skills Lock File
SmartSkills uses a lock file (smart-skills.lock.json) to track the exact state of installed skills. It serves as the single source of truth for reproducible installations — analogous to packages.lock.json (NuGet) or yarn.lock (npm).
How It Works
When you run smart-skills install, the lock file records:
- Remote URL and skill path — where the skill was fetched from
- Commit SHA — the exact commit used for this version of the skill
- Content hash — a SHA256 hash of all installed files for local edit detection
On subsequent installs, SmartSkills compares the remote commit SHA and local content hash to determine whether a skill needs updating, is up-to-date, or has been locally modified.
Example Lock File
{
"version": 1,
"skills": {
"azure-identity-dotnet": {
"remoteUrl": "https://github.com/microsoft/skills",
"skillPath": "skills/azure-identity-dotnet",
"language": "dotnet",
"commitSha": "abc123def456...",
"localContentHash": "sha256:e3b0c44298fc1c14..."
}
}
}
Workflows
| Command | Behavior |
|---|---|
smart-skills install |
Fetches latest skills, updates lock file with new commit SHAs and content hashes |
smart-skills install --force |
Overwrites locally modified skills |
smart-skills restore |
Downloads skills at the exact commit SHAs recorded in the lock file |
smart-skills status |
Shows which skills are up-to-date, modified, or missing |
smart-skills status --check-remote |
Also checks if newer versions are available upstream |
smart-skills uninstall <name> |
Removes the skill directory and its lock file entry |
Version Control
The lock file should be committed to your repository. This ensures that all team members and CI pipelines restore the same skill versions. The file uses deterministic JSON formatting (sorted keys, consistent indentation) to produce clean diffs.
MSBuild Integration
Basic Setup
Add the package reference:
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<PackageReference Include="SmartSkills.MSBuild" Version="1.0.0" PrivateAssets="all" />
</ItemGroup>
</Project>
Skills are automatically resolved and installed during build.
Configuration Properties
| Property | Default | Description |
|---|---|---|
SmartSkillsEnabled |
true |
Enable/disable skill acquisition |
SmartSkillsOutputDirectory |
$(MSBuildProjectDirectory)\.agents\skills |
Local install directory |
Disabling for Specific Builds
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<SmartSkillsEnabled>false</SmartSkillsEnabled>
</PropertyGroup>
Skill Registry
SmartSkills ships with a built-in registry of curated skills that is embedded in the core library. When your project references a matching NuGet package, the corresponding skill is automatically discovered — no configuration needed.
Built-in Skills
The embedded registry includes skills from microsoft/skills and redis/agent-skills:
| NuGet Package(s) | Skill | Source |
|---|---|---|
Azure.Messaging.ServiceBus |
azure-servicebus-dotnet | microsoft/skills |
Azure.AI.OpenAI |
azure-ai-openai-dotnet | microsoft/skills |
Azure.Identity, Azure.Identity.* |
azure-identity-dotnet | microsoft/skills |
Azure.Messaging.EventGrid, Azure.Messaging.EventGrid.* |
azure-eventgrid-dotnet | microsoft/skills |
Azure.Messaging.EventHubs, Azure.Messaging.EventHubs.* |
azure-eventhub-dotnet | microsoft/skills |
Azure.Search.Documents |
azure-search-documents-dotnet | microsoft/skills |
Azure.Security.KeyVault.Keys |
azure-security-keyvault-keys-dotnet | microsoft/skills |
Azure.AI.DocumentIntelligence |
azure-ai-document-intelligence-dotnet | microsoft/skills |
Azure.AI.Projects, Azure.AI.Projects.* |
azure-ai-projects-dotnet | microsoft/skills |
Azure.AI.VoiceLive |
azure-ai-voicelive-dotnet | microsoft/skills |
Azure.Maps.Search, Azure.Maps.Routing, Azure.Maps.Rendering, Azure.Maps.Geolocation, Azure.Maps.TimeZones |
azure-maps-search-dotnet | microsoft/skills |
Azure.AI.Agents.Persistent |
azure-ai-agents-persistent-dotnet | microsoft/skills |
Microsoft.Agents.Builder, Microsoft.Agents.Hosting.AspNetCore, Microsoft.Agents.* |
m365-agents-dotnet | microsoft/skills |
Microsoft.Azure.WebJobs.Extensions.AuthenticationEvents |
microsoft-azure-webjobs-extensions-authentication-events-dotnet | microsoft/skills |
Azure.ResourceManager.AppContainers |
azure-mgmt-appcontainers-dotnet | microsoft/skills |
Azure.ResourceManager.AppService |
azure-mgmt-appservice-dotnet | microsoft/skills |
Azure.ResourceManager.Compute |
azure-mgmt-compute-dotnet | microsoft/skills |
Azure.ResourceManager.ContainerRegistry |
azure-mgmt-containerregistry-dotnet | microsoft/skills |
Azure.ResourceManager.ContainerService |
azure-mgmt-containerservice-dotnet | microsoft/skills |
Azure.ResourceManager.CosmosDB |
azure-mgmt-cosmosdb-dotnet | microsoft/skills |
Azure.ResourceManager.KeyVault |
azure-mgmt-keyvault-dotnet | microsoft/skills |
Azure.ResourceManager.Network |
azure-mgmt-network-dotnet | microsoft/skills |
Azure.ResourceManager.Playwright |
azure-mgmt-playwright-dotnet | microsoft/skills |
Azure.ResourceManager.Sql |
azure-resource-manager-sql-dotnet | microsoft/skills |
GitHub.Copilot.SDK |
copilot-sdk | microsoft/skills |
StackExchange.Redis, StackExchange.Redis.*, NRedisStack, Microsoft.Extensions.Caching.StackExchangeRedis, Redis.OM |
redis-development | redis/agent-skills |
Adding Custom Registries
You can extend the built-in registry by providing additional JSON files. These are merged with the embedded registry at runtime — your custom entries are appended alongside the built-in ones.
Programmatic Usage
using SmartSkills.Core.Registry;
// Load only the built-in embedded registry
var entries = RegistryIndexParser.LoadEmbedded();
// Merge built-in + your custom registries
var entries = RegistryIndexParser.LoadMerged(new[]
{
"path/to/my-team-skills.json",
"path/to/project-skills.json"
});
// Parse a standalone registry file
var entries = RegistryIndexParser.Parse(jsonString);
Registry JSON Format
A skill registry is a JSON file that maps packages to skill locations:
{
"repoUrl": "https://github.com/my-org/my-skills",
"skills": [
{
"packagePatterns": ["Microsoft.EntityFrameworkCore", "Microsoft.EntityFrameworkCore.*"],
"skillPath": "skills/ef-core",
"language": "dotnet"
},
{
"packagePatterns": ["@azure/cosmos"],
"skillPath": "skills/azure-cosmos-ts",
"language": "javascript"
},
{
"packagePatterns": ["SomePackage"],
"skillPath": "skills/some-skill",
"repoUrl": "https://github.com/other-org/other-repo"
}
]
}
| Field | Required | Description |
|---|---|---|
repoUrl (top-level) |
No | Default repository URL inherited by all skills in the file |
language (top-level) |
No | Default ecosystem filter inherited by all skills ("dotnet", "javascript", or omit for any) |
skills[].packagePatterns |
Yes | Array of package names or glob patterns to match |
skills[].skillPath |
Yes | Path to the skill directory within the repository |
skills[].repoUrl |
No | Per-skill repository URL override (takes precedence over the top-level value) |
skills[].language |
No | Per-skill ecosystem filter override (takes precedence over the top-level value) |
Package Patterns
Patterns support exact match and glob syntax:
Microsoft.EntityFrameworkCore— matches exactlyMicrosoft.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.*— matches any package starting withMicrosoft.EntityFrameworkCore.Azure.Storage.*— matchesAzure.Storage.Blobs,Azure.Storage.Queues, etc.
Authentication
- GitHub: Public repositories only — no authentication required.
- Azure DevOps: Uses
DefaultAzureCredentialfrom Azure.Identity. This automatically picks up credentials from Azure CLI (az login), environment variables, managed identity, etc.
Error Codes
| Code | Description | Remediation |
|---|---|---|
| SS001 | Network error | Check internet connection and proxy settings |
| SS002 | Authentication failed | Run az login for ADO access |
| SS003 | .NET SDK not found | Install from https://dot.net/download |
| SS004 | Skill validation failed | Check SKILL.md frontmatter format |
| SS005 | Registry not found | Verify registry URL |
| SS006 | Skill not found | Check skill path in registry index |
| SS007 | Installation failed | Check file permissions and disk space |
Project Structure
src/
SmartSkills.Core/ # Shared library (scanning, matching, fetching, installation)
SmartSkills.Cli/ # CLI tool (System.CommandLine)
SmartSkills.MSBuild/ # MSBuild tasks + props/targets
tests/
SmartSkills.Core.Tests/ # Unit tests
SmartSkills.Cli.Tests/ # E2E CLI tests
SmartSkills.MSBuild.Tests/ # MSBuild task tests
Development
# Build
dotnet build
# Test
dotnet test
# Pack CLI tool
dotnet pack src/SmartSkills.Cli -o ./artifacts
# Pack MSBuild package
dotnet pack src/SmartSkills.MSBuild -o ./artifacts
License
MIT
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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
- Azure.Identity (>= 1.17.1)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.3)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.3)
- Microsoft.Extensions.Options (>= 10.0.3)
- Microsoft.VisualStudio.SolutionPersistence (>= 1.0.52)
- Tomlyn (>= 0.20.0)
- YamlDotNet (>= 16.3.0)
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 |
|---|---|---|
| 0.1.0-preview2 | 51 | 2/14/2026 |
| 0.1.0-preview | 49 | 2/12/2026 |