You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I propose a .NET/NuGet convention for libraries and workloads to ship versioned, agent-readable skills alongside their assemblies.
When a package is referenced, its skills become discoverable to developers and supported agent hosts. They should not be silently loaded into an agent context. A developer, organization policy, or agent host must explicitly preview and enable them.
This would make the .NET ecosystem more agent-friendly while preserving developer control and supply-chain safety.
Motivation
Many .NET packages and workloads have conventions that a general-purpose agent cannot reliably infer from APIs alone: source generators, analyzers, AOT and trimming requirements, lifecycle constraints, platform-specific configuration, test execution, and integration patterns.
Today, each application repository must separately maintain framework guidance in files such as AGENTS.md or CLAUDE.md. That guidance can become stale and does not naturally match the exact resolved package version.
NuGet already provides a versioned dependency graph. This proposal adds a versioned guidance graph.
Design principles
Skills are immutable package assets, versioned with the package.
Discovery is automatic; activation is explicit.
Transitive packages never silently add instructions to an agent context.
Skills use an open, portable format such as SKILL.md.
The SDK/NuGet client exposes metadata; agent hosts decide how to consume enabled skills.
Skills use progressive disclosure: concise routing guidance with focused references and examples.
Package authors own compatibility and maintenance for their published skill.
I suggest a dedicated agents/ package folder rather than contentFiles: skills should remain immutable package assets for tools to discover, not files copied into the consuming project.
Direct package skills
Microsoft.Maui.Controls 10.0.0
Skill: dotnet-maui
Purpose: Build, debug, test, and publish .NET MAUI applications
Status: available, not enabled
IDEs and agent hosts could provide an equivalent UI: preview the content, inspect the package identity/version/source/hash, and enable it per project or workspace.
Trust and security model
Package-provided skills must be treated as untrusted content until explicitly enabled. Suggested defaults:
Discover skills only from direct PackageReference dependencies.
Do not auto-activate skills, including those from direct dependencies.
Never execute code merely because a skill is discovered or enabled.
Show package ID, version, feed, publisher, and content hash before enabling.
Respect lock files and signed-package verification.
Allow organization policy to allow-list package IDs, publishers, feeds, or signatures.
Support a checked-in approval file for reproducible CI behavior.
Keep the existing agent consent boundary for commands, secret access, infrastructure changes, and external actions.
Publishing, signing, trimming, Native AOT, and store deployment
This gives an agent the version-appropriate and platform-aware guidance it needs, instead of relying on generic .NET advice.
Proposed rollout
Phase 1: Specification
Define the agents/manifest.json schema and package layout.
Define discovery, direct/transitive semantics, and threat-model guidance.
Reuse or align with the open Agent Skills SKILL.md format.
Phase 2: NuGet/SDK support
Validate assets during dotnet pack.
Surface resolved agent assets through restore data or a discovery API.
Add dotnet agent skills list and preview.
Add explicit enable/export support.
Phase 3: Ecosystem integrations
IDE and coding-agent discovery of approved skills.
NuGet Gallery presentation of agent assets.
Organization policy and allow-lists.
Reference implementations for .NET MAUI, ASP.NET Core, Aspire, EF Core, and other major workloads.
Open questions
Should direct dependencies be the default discovery boundary?
Should approvals live in project configuration, a lock file, user settings, or all three?
How should signing and trusted publishers affect approval?
Should dotnet agent be a first-party CLI surface, or should the SDK only expose discovery APIs for agent hosts?
How should skill evaluations be packaged and validated without adding excessive complexity?
How can the system avoid overwhelming agent context when a project contains many packages?
I would welcome feedback on whether this belongs primarily in NuGet, the .NET SDK, Visual Studio/Copilot integration, or a cross-repository design effort.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Summary
I propose a .NET/NuGet convention for libraries and workloads to ship versioned, agent-readable skills alongside their assemblies.
When a package is referenced, its skills become discoverable to developers and supported agent hosts. They should not be silently loaded into an agent context. A developer, organization policy, or agent host must explicitly preview and enable them.
This would make the .NET ecosystem more agent-friendly while preserving developer control and supply-chain safety.
Motivation
Many .NET packages and workloads have conventions that a general-purpose agent cannot reliably infer from APIs alone: source generators, analyzers, AOT and trimming requirements, lifecycle constraints, platform-specific configuration, test execution, and integration patterns.
Today, each application repository must separately maintain framework guidance in files such as
AGENTS.mdorCLAUDE.md. That guidance can become stale and does not naturally match the exact resolved package version.NuGet already provides a versioned dependency graph. This proposal adds a versioned guidance graph.
Design principles
SKILL.md.Proposed package layout
Example
agents/manifest.json:{ "schemaVersion": 1, "skills": [ { "id": "dotnet-maui", "name": ".NET MAUI", "description": "Guidance for building, debugging, testing, and publishing .NET MAUI applications.", "entryPoint": "skills/dotnet-maui/SKILL.md", "appliesTo": { "languages": [ "C#" ], "projectCapabilities": [ "maui" ] } } ] }I suggest a dedicated
agents/package folder rather thancontentFiles: skills should remain immutable package assets for tools to discover, not files copied into the consuming project.SDK authoring experience
Package authors could opt in during packing:
dotnet packwould validate the manifest, asset paths, required skill metadata, size limits, and unsafe path constructs.Consumer and CLI experience
After restore, the SDK can discover agent assets from resolved packages:
Example output:
IDEs and agent hosts could provide an equivalent UI: preview the content, inspect the package identity/version/source/hash, and enable it per project or workspace.
Trust and security model
Package-provided skills must be treated as untrusted content until explicitly enabled. Suggested defaults:
PackageReferencedependencies.For example:
{ "version": 1, "approvedSkills": [ { "packageId": "Microsoft.Maui.Controls", "packageVersion": "10.0.0", "skillId": "dotnet-maui", "contentHash": "..." } ] }.NET MAUI example
A MAUI package or workload could ship one
dotnet-mauiskill covering:MauiProgramThis gives an agent the version-appropriate and platform-aware guidance it needs, instead of relying on generic .NET advice.
Proposed rollout
Phase 1: Specification
agents/manifest.jsonschema and package layout.SKILL.mdformat.Phase 2: NuGet/SDK support
dotnet pack.dotnet agent skills listandpreview.Phase 3: Ecosystem integrations
Open questions
dotnet agentbe a first-party CLI surface, or should the SDK only expose discovery APIs for agent hosts?I would welcome feedback on whether this belongs primarily in NuGet, the .NET SDK, Visual Studio/Copilot integration, or a cross-repository design effort.
All reactions