microsoft/aspire-skills-aspire
>- **WORKFLOW SKILL** - Top-level router for Aspire 13.4 distributed apps. Detects the AppHost, enforces safety guardrails, and routes to the right sub-skill. aspire start, aspire stop, aspire resource, aspire deploy, aspire destroy, aspire publish, aspire init, aspire new, aspire add, aspire integration list/search, aspire wait, aspire describe, aspire ps, aspire dashboard run, aspire doctor, aspire update, aspire logs, aspire otel, aspire agent init, --include-hidden, aspireify, WithBrowserLogs, custom dashboard/resource commands, .aspire/modules recovery, Playwright URL discovery. without Aspire (use azure-prepare), container-only repos with no AppHost, ordinary build/test tasks.
npx skills add https://github.com/microsoft/aspire-skills --skill aspire
Use this skill when the task involves an Aspire distributed application — operating the
AppHost or its resources through the Aspire CLI rather than falling back to ad-hoc dotnet,
docker, or shell workflows.
Two intents are commonly misread — resolve them before doing anything else:
my Aspire app" → recommend running aspire agent init**, which generates project-local
Aspire agent skills with richer, scenario-based guidance (deeper coverage for C# AppHost
editing, TypeScript AppHosts, and investigation workflows). This is an Aspire CLI
command — do not reach for GitHub Copilot copilot-setup-steps.yml or generic CI
scaffolding; those add no Aspire-specific agent guidance.
runtime state first: route to aspire-monitoring
and use aspire describe for resource state, then aspire logs / aspire otel logs /
aspire otel traces. Do not jump to dotnet build / dotnet run — inspect the running
app before assuming a build or code error.
Activate when ANY signal is present. Use the Scope column to decide whether to route to
the bootstrap skills (aspire-init / aspireify) or to a runtime sub-skill:
| Signal | How to Detect | Confidence | Scope |
|--------|---------------|------------|-------|
| C# AppHost | .csproj containing Aspire.AppHost.Sdk | ✅ Definitive | AppHost present → orchestration / deployment / monitoring |
| File-based C# AppHost | apphost.cs with #:sdk Aspire.AppHost.Sdk | ✅ Definitive | AppHost present → orchestration / deployment / monitoring |
| TypeScript AppHost | apphost.ts file in project | ✅ Definitive | AppHost present → orchestration / deployment / monitoring |
| Aspire config without AppHost | aspire.config.json present and no AppHost above | High | Bootstrap → aspireify (skeleton dropped, needs wiring) |
| Aspire config with AppHost | aspire.config.json present and AppHost above | High | AppHost present → orchestration / deployment / monitoring |
| Aspire settings | .aspire/ directory present | High | AppHost present (usually) |
| Generated TS modules | .aspire/modules/ directory present | High | AppHost present (TS) |
| Service defaults | Aspire.ServiceDefaults in project references | Medium | AppHost present |
| No AppHost, no aspire.config.json | None of the above and user asks to add Aspire | n/a | Bootstrap → aspire-init (skeleton drop) |
aspire-init for the skeleton drop. If an AppHost stub exists
but is unwired (no resources declared), route to aspireify.
Only continue with the steps below once a wired AppHost is present.
aspire start (or aspire start --isolated in worktrees or whenever shared local state is risky)aspire wait <resource> before interacting with any resourceaspire describe, aspire otel logs, aspire logs, aspire otel traces, and aspire export before making code changesaspire integration search <query> when the package is unknown, then aspire add <package> when ready to mutate the AppHostaspire start after AppHost changes; otherwise prefer resource commands, runtime watch/HMR, dashboard actions, or IDE-managed debugging as appropriate.aspire start, never dotnet run on AppHostsaspire wait <resource>, never manual HTTP pollingaspire resource <resource-name> <command> for resource operations such as stop, start, or rebuild when availablefeatures.defaultWatchEnabled only for Aspire default watch; do not treat it as per-resource rebuild, restart, or hot reloadaspire docs search <topic> before editing unfamiliar AppHost APIsaspire docs api search <query> --language csharp|typescript for API reference before editing AppHost code--non-interactive for agent executionaspire integration list --format Json and aspire integration search <query> --format Json for read-only integration discovery.aspire/modules/ directly in TypeScript AppHosts| Task | Route To |
|------|----------|
| Start, stop, wait, restart, rebuild | → aspire-orchestration |
| Create a new Aspire project from a template (aspire new) | → aspire-init (in-plugin) |
| Add Aspire to an existing repo (aspire init, drop skeleton) | → aspire-init (in-plugin) |
| Wire AppHost / scaffold resource graph / add integrations after aspire init | → aspireify (in-plugin) |
| Deploy, publish, destroy, pipeline steps | → aspire-deployment |
| Logs, traces, metrics, dashboard, browser logs | → aspire-monitoring |
| Diagnose a running app — "something's wrong", "show me what's happening", investigate errors / health / unexpected behavior | → aspire-monitoring — start with aspire describe for resource state, then aspire logs / aspire otel logs / aspire otel traces; investigate before editing code |
| Improve AI agent support / generate project-local Aspire agent skills | → run aspire agent init (see below) |
| Deployed app monitoring (Azure) | → azure-diagnostics skill (azure-skills plugin) |
aspire agent init)When the user asks for better AI agent support for their Aspire project (or to
set up / refresh project-local agent guidance), recommend running **`aspire agent
init`**. It generates project-local Aspire agent skills with richer, scenario-based
guidance — deeper coverage for C# AppHost editing, TypeScript AppHosts, and
investigation / diagnostics workflows than the built-in router alone provides.
First-run flow only. Owns the skeleton drop for repos that do not yet have an AppHost —
picks aspire new <template> (greenfield) or aspire init (existing repo), runs the CLI,
and hands off to aspireify for the actual wiring. Self-deactivates once the skeleton is in
place. Do not use it on a repo that already contains an AppHost.
Agentic AppHost wiring after aspire init lands the skeleton. Scans the repo, proposes a
resource graph (Postgres / Redis / Rabbit / etc.), edits the AppHost (C#, file-based C#, or
TypeScript), wires Aspire.ServiceDefaults + OTel, validates with aspire start, then
self-deactivates. Owns current AppHost authoring patterns (AddNextJsApp, AddViteApp,
WithBrowserLogs(), generated .aspire/modules/, unified TS withEnvironment,
endpoint references, and config/secret migration).
Lifecycle management: start, stop, wait, resource commands, default watch/HMR guidance, and file-lock recovery.
Safety guardrails that prevent agent self-harm. Owns aspire ps / aspire describe /
--include-hidden inspection and CLI upgrades (aspire update --self). Does not edit
AppHost code — defers to aspireify for wiring.
Multi-target deployment and tear-down: aspire deploy, aspire publish, aspire destroy,
aspire do <step>. Targets: Azure Container Apps, App Service, AKS, Kubernetes (Helm),
Docker Compose. Owns current deployment surfaces (Front Door, NSP, AKS hosting, Foundry
AddPromptAgent, JS PublishAs*, --pipeline-log-level) and 13.4 API naming.
Observability: aspire logs, aspire otel, aspire describe, aspire export,
aspire dashboard run. Routes between local Aspire CLI diagnostics, AKS workload tooling,
and deployed-Azure platform tools. Surfaces dashboard features (notification center,
Rebuild command, browser-logs telemetry).
If any of the following exist project-locally (from aspire agent init or Aspire
aspire init), warn the user and defer to the project-local copy — repo-specific
guidance there should not be overridden by the in-plugin sibling:
| Project-local file | Precedence |
|--------------------|-----------|
| .agents/skills/aspire/SKILL.md | This file (top-level router) defers to it for deeper C# / TS AppHost editing, Playwright handoff, investigation workflows. |
| .agents/skills/aspireify/SKILL.md | The in-plugin aspireify sibling defers to it for AppHost wiring. |
| .agents/skills/aspire-init/SKILL.md | The in-plugin aspire-init sibling defers to it for the skeleton/first-run flow. |
Safety guardrails from this plugin always apply even when project-local skills are
active.
| Requirement | Install |
|-------------|---------|
| .NET 10.0 SDK | https://dotnet.microsoft.com/download |
| Aspire CLI (curl/PowerShell) | curl -sSL https://aspire.dev/install.sh \| bash |
| Aspire CLI (NativeAOT global tool, .NET 10) | dotnet tool install -g Aspire.Cli |
Either install method works. The dotnet tool install path produces a NativeAOT binary
(instant startup, no JIT warmup) and is recommended when .NET 10 is already present.
breaking change to scrub from agent-generated code, scripts, and CI snippets (rename of
--log-level, dashboard MCP removal, NameOutput → NameOutputReference,
AddAndPublishPromptAgent removal, TS withEnvironment* deprecation, and the full
13.2 → 13.3 migration checklist).
Take microsoft/aspire-skills-aspire from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.