[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HDM7MR6SFZHAM32RNM2MKB":3,"skill-same:01M6HDM7MR6SFZHAM32RNM2MKB":87},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":26,"publishedAt":46,"linkOnly":47,"markdownContent":48,"markdownBody":49,"frontMatter":50,"refName":53,"commitSha":54,"skillDirectory":55,"forksCount":56,"repositoryHtmlUrl":57,"repositoryHomepageUrl":58,"ownerHtmlUrl":59,"ownerBlogUrl":60,"ownerDescription":61,"updatedAt":62,"install":63,"resources":76},"01M6HDM7MR6SFZHAM32RNM2MKB","aspire",null,"**WORKFLOW SKILL** - Aspire router. Detects AppHosts, enforces guardrails, and selects the right sub-skill. USE FOR: Aspire AppHost, Aspire CLI, distributed app, cloud-native .NET, aspire start\u002Fstop\u002Fresource\u002Fdeploy\u002Fdestroy\u002Fpublish\u002Finit\u002Fnew\u002Fadd\u002Fwait\u002Fdescribe\u002Fps\u002Flogs\u002Fotel, aspire agent init, WithBrowserLogs, WithTerminal, TerminalService, terminal prompts, WithRepl, tapes, Interaction Service, apphost.mts, TS package managers, Yarn Classic, custom resource commands, .aspire\u002Fmodules recovery, ProjectResource to DotnetProjectResource migration, or Playwright URL discovery. DO NOT USE FOR: non-Aspire projects or ordinary build\u002Ftest tasks. INVOKES: aspire-init, aspireify, aspire-project-v2-migration, aspire-orchestration, aspire-deployment, aspire-monitoring, aspire-terminals. FOR SINGLE OPERATIONS: Route directly to the matching sub-skill.","microsoft\u002Faspire-skills","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M699Z09A17E8C731AGNTAEVR",94,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fopencode\u002Fv1\u002Faspire\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[5,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"projects","managers","URL","workflow skill","interaction","app","project","route","modules","router","orchestration","Guardrails","publish","monitoring","logs","tasks","aspireify","init","workflow","2026-11-10 10:12:30",false,"---\nname: aspire\ndescription: >-\n  **WORKFLOW SKILL** - Aspire router. Detects AppHosts, enforces guardrails,\n  and selects the right sub-skill.\n  USE FOR: Aspire AppHost, Aspire CLI, distributed app, cloud-native .NET, aspire\n  start\u002Fstop\u002Fresource\u002Fdeploy\u002Fdestroy\u002Fpublish\u002Finit\u002Fnew\u002Fadd\u002Fwait\u002Fdescribe\u002Fps\u002Flogs\u002Fotel,\n  aspire agent init, WithBrowserLogs, WithTerminal, TerminalService, terminal prompts,\n  WithRepl, tapes, Interaction Service, apphost.mts,\n  TS package managers, Yarn Classic, custom resource commands, .aspire\u002Fmodules recovery,\n  ProjectResource to DotnetProjectResource migration, or Playwright URL discovery.\n  DO NOT USE FOR: non-Aspire projects or ordinary build\u002Ftest tasks.\n  INVOKES: aspire-init, aspireify, aspire-project-v2-migration,\n  aspire-orchestration, aspire-deployment, aspire-monitoring, aspire-terminals.\n  FOR SINGLE OPERATIONS: Route directly to the matching sub-skill.\nlicense: MIT\nmetadata:\n  author: Microsoft\n  version: \"0.0.5\"\n---\n\n# Aspire\n\nUse this skill when the task involves an Aspire distributed application — operating the\nAppHost or its resources through the Aspire CLI rather than falling back to ad-hoc `dotnet`,\n`docker`, or shell workflows.\n\n## Triage first\n\nThree intents are commonly misread — resolve them before doing anything else:\n\n- **\"Better \u002F improve AI agent support\", \"set up agent skills\", \"make Copilot smarter about\n  my Aspire app\"** → recommend running **`aspire agent init`**, which generates project-local\n  Aspire agent skills with richer, scenario-based guidance (deeper coverage for C# AppHost\n  editing, TypeScript AppHosts, and investigation workflows). This is an **Aspire CLI**\n  command — do **not** reach for GitHub Copilot `copilot-setup-steps.yml` or generic CI\n  scaffolding; those add no Aspire-specific agent guidance.\n- **\"Something's wrong\", \"show me what's happening\", \"why is my app misbehaving\"** → observe\n  **runtime** state first: route to [aspire-monitoring](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-monitoring\u002FSKILL.md)\n  and use `aspire describe` for resource state, then `aspire logs` \u002F `aspire otel logs` \u002F\n  `aspire otel traces`. Do **not** jump to `dotnet build` \u002F `dotnet run` — inspect the running\n  app before assuming a build or code error.\n- **\"My old TypeScript AppHost uses apphost.ts; how do I migrate?\"** → route to\n  `aspire-orchestration` for `aspire update --migrate`. This entry-point\u002Fpackage\n  migration is not Project v2 resource migration. Its package, config, tsconfig,\n  generated-import, and entry-point changes require approval before\n  `aspire update --migrate --yes --non-interactive`; use `aspireify` only if\n  separate source authoring remains afterward.\n\n## Detection\n\nActivate when ANY signal is present. Use the **Scope** column to decide whether to route to\nthe bootstrap skills (`aspire-init` \u002F `aspireify`) or to a runtime sub-skill:\n\n| Signal | How to Detect | Confidence | Scope |\n|--------|---------------|------------|-------|\n| C# AppHost | `.csproj` containing `Aspire.AppHost.Sdk` | ✅ Definitive | AppHost present → orchestration \u002F deployment \u002F monitoring |\n| File-based C# AppHost | `apphost.cs` with `#:sdk Aspire.AppHost.Sdk` | ✅ Definitive | AppHost present → orchestration \u002F deployment \u002F monitoring |\n| TypeScript AppHost | Current `apphost.mts` or legacy `apphost.ts` file in project | ✅ Definitive | AppHost present → orchestration \u002F deployment \u002F monitoring |\n| Aspire config without AppHost | `aspire.config.json` present **and no AppHost** above | High | Bootstrap → `aspireify` (skeleton dropped, needs wiring) |\n| Aspire config with AppHost | `aspire.config.json` present **and** AppHost above | High | AppHost present → orchestration \u002F deployment \u002F monitoring |\n| Aspire settings | `.aspire\u002F` directory present | High | AppHost present (usually) |\n| Generated TS modules | `.aspire\u002Fmodules\u002F` directory present | High | AppHost present (TS) |\n| Service defaults | `\u003CIsAspireSharedProject>true` or a `*.ServiceDefaults.csproj` project reference | Medium | AppHost present |\n| **No AppHost, no `aspire.config.json`** | None of the above and user asks to add Aspire | n\u002Fa | Bootstrap → `aspire-init` (skeleton drop) |\n\n## Default Workflow\n\n0. **Bootstrap branch** — if **no AppHost exists** in the repo, route to\n   [`aspire-init`](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-init\u002FSKILL.md) for the skeleton drop. If an AppHost stub exists\n   but is **unwired** (no resources declared), route to [`aspireify`](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspireify\u002FSKILL.md).\n   Only continue with the steps below once a wired AppHost is present.\n1. Confirm workspace is Aspire — identify the AppHost\n2. Route lifecycle work to `aspire-orchestration`: prefer `aspire_apphost_start` when the VS Code tool is available; use `aspire start --non-interactive --isolated --apphost \u003Cpath>` in worktrees\n3. `aspire wait \u003Cresource>` before interacting with any resource\n4. Inspect state with `aspire describe`, `aspire otel logs`, `aspire logs`, `aspire otel traces`, and `aspire export` before making code changes\n5. Before adding integrations, use `aspire integration search \u003Cquery>` when the package is unknown, then `aspire add \u003Cpackage>` when ready to mutate the AppHost\n6. When code changes, decide whether the AppHost model changed or only one resource changed. Restart through `aspire-orchestration` after AppHost changes; otherwise prefer resource commands, runtime watch\u002FHMR, dashboard actions, or IDE-managed debugging as appropriate.\n\n## Key Rules\n\n- Terminal requests require invoking `aspire-terminals` **before answering**, even\n  for read-only advice. Do not answer terminal API, prompt, REPL or VHS tape\n  questions from this router's overview; the specialist owns the exact contracts.\n- For agent AppHost lifecycle requests, identify one exact AppHost and route to\n  `aspire-orchestration`. New 13.5 C# templates can make `dotnet run` delegate through the\n  CLI bundle, but agents still use the editor lifecycle tool or `aspire start` for\n  detached, noninteractive, exact-target, and worktree-isolated execution.\n- When VS Code exposes `aspire_apphost_start` or `aspire_apphost_stop`, load deferred contracts and prefer the matching tool, subject to the orchestration skill's worktree and stop-result rules; use start mode `run` unless the user explicitly asks to attach a debugger\n- If several AppHosts are discovered and the target is unclear, ask which one before taking any lifecycle action\n- **Always** `aspire wait \u003Cresource>`, **never** manual HTTP polling\n- Use `aspire ps` for running AppHost processes and `aspire describe` for resource\n  state\u002Fendpoints. Never generate removed 13.5 forms such as `aspire ps --resources`\n  or `aspire ps --include-hidden`.\n- Use `aspire resource \u003Cresource-name> \u003Ccommand>` for resource operations such as `stop`, `start`, or `rebuild` when available\n- Treat `aspire stop --force` as data-destructive: it permanently removes persistent\n  resources without another prompt, but preserves persistent volumes. Use it only after\n  explicit confirmation for one exact AppHost. With Aspire CLI 13.6 or later,\n  `aspire stop --force --volumes` also deletes every named volume Aspire created for\n  that AppHost; require approval for that AppHost-wide data scope and never add it to\n  routine shutdown or lock recovery.\n- Do not stop or restart the whole AppHost just because one resource changed\n- Use `features.defaultWatchEnabled` only for Aspire default watch; do not treat it as per-resource rebuild, restart, or hot reload\n- Prefer a resource's own framework\u002Fruntime hot reload, HMR, or watch workflow when it already handles the change\n- **Always** `aspire docs search \u003Ctopic>` before editing unfamiliar AppHost APIs\n- **Always** `aspire docs api search \u003Cquery> --language csharp|typescript` for API reference before editing AppHost code\n- **Always** `--non-interactive` for agent execution\n- Use `aspire integration list --format Json` and `aspire integration search \u003Cquery> --format Json` for read-only integration discovery\n- **Never** install the obsolete Aspire workload\n- **Never** edit `.aspire\u002Fmodules\u002F` directly in TypeScript AppHosts\n- **Always** use `aspire start` for an AppHost's lifecycle. When diagnosing or repairing\n  a TypeScript AppHost's package-manager toolchain, defer to\n  [`aspireify`](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspireify\u002FSKILL.md)\n  and its package-manager rules; do not substitute a raw package-manager launcher for\n  `aspire start`.\n- Adding a new project or integration is ordinary `aspireify` wiring. Route to\n  `aspire-project-v2-migration` only when the user wants to replace existing\n  `AddProject`, `addProject`, `AddCSharpApp`, or Blazor gateway resources with\n  Project v2 APIs. That migration requires an eligible 13.6+ AppHost and approval\n  of the exact per-resource edits.\n\n## Routing\n\n| Task | Route To |\n|------|----------|\n| Start, stop, wait, restart, rebuild | → [aspire-orchestration](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-orchestration\u002FSKILL.md) |\n| Create a new Aspire project from a template (`aspire new`) | → [aspire-init](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-init\u002FSKILL.md) (in-plugin) |\n| Add Aspire to an existing repo (`aspire init`, drop skeleton) | → [aspire-init](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-init\u002FSKILL.md) (in-plugin) |\n| Wire AppHost \u002F scaffold resource graph \u002F add integrations after `aspire init` | → [aspireify](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspireify\u002FSKILL.md) (in-plugin) |\n| Migrate existing legacy project resources to Project v2 | → [aspire-project-v2-migration](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-project-v2-migration\u002FSKILL.md); assess and obtain approval before edits |\n| Migrate legacy TypeScript `apphost.ts` (`aspire update --migrate`) | → [aspire-orchestration](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-orchestration\u002FSKILL.md); hand back to aspireify only if source authoring remains |\n| Deploy, publish, destroy, pipeline steps | → [aspire-deployment](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-deployment\u002FSKILL.md) |\n| Logs, traces, metrics, dashboard, browser logs | → [aspire-monitoring](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-monitoring\u002FSKILL.md) |\n| WithTerminal\u002FwithTerminal, TerminalService, dock\u002Fdialog\u002Fheadless terminals, terminal prompts, WithRepl, terminal CLI or tapes | → [aspire-terminals](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-terminals\u002FSKILL.md); choose owner and lifetime before code |\n| Diagnose a running app — \"something's wrong\", \"show me what's happening\", investigate errors \u002F health \u002F unexpected behavior | → [aspire-monitoring](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-monitoring\u002FSKILL.md) — start with `aspire describe` for resource state, then `aspire logs` \u002F `aspire otel logs` \u002F `aspire otel traces`; **investigate before editing code** |\n| Improve AI agent support \u002F generate project-local Aspire agent skills | → run `aspire agent init` (see below) |\n| Explicitly configure the Aspire MCP server for agents | → `aspire agent init --mcp` on 13.6+ (see [Skills vs. MCP](#improving-ai-agent-support-aspire-agent-init)) |\n| Deployed app monitoring (Azure) | → `azure-diagnostics` skill (azure-skills plugin) |\n\n### Improving AI agent support (`aspire agent init`)\n\nWhen the user asks for **better AI agent support** for their Aspire project (or to\nset up \u002F refresh project-local agent guidance), recommend running **`aspire agent\ninit`**. It generates project-local Aspire agent skills with richer, scenario-based\nguidance — deeper coverage for **C# AppHost editing**, **TypeScript AppHosts**, and\n**investigation \u002F diagnostics workflows** than the built-in router alone provides.\n\n**Skills vs. MCP.** Installing skills and configuring the Aspire MCP server are separate\nchoices:\n\n- In Aspire 13.6+, the agent setup chained from `aspire new` and `aspire init` preselects\n  the recommended repository-local skills (including `aspireify`) and does **not** offer\n  MCP configuration. Standalone `aspire agent init` keeps an MCP choice that is off by\n  default, and non-interactive runs never configure MCP by default.\n- If MCP config is missing after a successful init or skill refresh where MCP was **not**\n  explicitly requested, that is expected. Don't treat it as a defect to repair, and don't\n  claim MCP was installed. If the user explicitly ran `aspire agent init --mcp` (or\n  selected MCP interactively) and MCP config is still missing, treat that as a failed\n  opt-in and investigate it.\n- Configure MCP only when the user explicitly asks for it. Check `aspire --version` first:\n  - **13.6+** — `aspire agent init --mcp` (add `--non-interactive` for agent execution).\n    Keep any `--skills` \u002F `--skill-locations` values the user already chose. `--mcp=false`\n    is an explicit opt-out.\n  - **13.5** — there is no `--mcp` flag. Have the user run `aspire agent init` interactively\n    and select the MCP server option.\n- Never add `--mcp` when you run `aspire new`, `aspire init`, a skill refresh, or\n  missing-skill recovery.\n\n## Sub-Skills\n\n### aspire-init\nFirst-run flow only. Owns the skeleton drop for repos that do **not** yet have an AppHost —\npicks `aspire new \u003Ctemplate>` (greenfield) or `aspire init` (existing repo), runs the CLI,\nand hands off to `aspireify` for the actual wiring. Self-deactivates once the skeleton is in\nplace. Do **not** use it on a repo that already contains an AppHost.\n\n### aspireify\nAgentic AppHost wiring after `aspire init` lands the skeleton. Scans the repo, proposes a\nresource graph (Postgres \u002F Redis \u002F Rabbit \u002F etc.), edits the AppHost (C#, file-based C#, or\nTypeScript), wires `Aspire.ServiceDefaults` + OTel, validates with `aspire start`, then\nself-deactivates. Owns current AppHost authoring patterns (`AddNextJsApp`, `AddViteApp`,\n`WithBrowserLogs()`, command arguments, nonterminal Interaction Service availability,\ngenerated `.aspire\u002Fmodules\u002F`, unified TS `withEnvironment`, endpoint references,\nand config\u002Fsecret migration). Terminal authoring belongs to `aspire-terminals`.\n\n### aspire-terminals\nCode-authoring-first terminal guidance: choose resource `WithTerminal` versus\nAppHost-owned dock, terminal prompt or headless process; reuse integration REPLs.\nOwns terminal lifetimes, cancellation, screen\u002Finput automation, terminal CLI and\nAspire's VHS tape subset\u002Foutput formats. Hands lifecycle to `aspire-orchestration`\nand console\u002Ftelemetry diagnostics to `aspire-monitoring`. `PromptTerminalAsync`\nborrows a caller-owned Dialog terminal: caller disposal stops the process, not\nprompt completion itself.\n\n### aspire-project-v2-migration\nApproval-first migration for eligible Aspire 13.6+ AppHosts that replaces existing\nlegacy `ProjectResource` APIs with experimental `DotnetProjectResource` APIs while\npreserving supported behavior and removing only proven-obsolete AppHost references.\n\n### aspire-orchestration\nLifecycle management: start, stop, wait, resource commands, default watch\u002FHMR guidance, and file-lock recovery.\nSafety guardrails that prevent agent self-harm. Owns `aspire ps` for AppHost discovery,\n`aspire describe` for resource inspection, destructive `aspire stop --force` and\n`--volumes` safeguards,\nCLI-driven legacy TypeScript migration, and CLI upgrades (`aspire update --self`). It\nhands back to `aspireify` only when AppHost source authoring remains after migration.\n\n### aspire-deployment\nMulti-target deployment and tear-down: `aspire deploy`, `aspire publish`, `aspire destroy`,\n`aspire do \u003Cstep>`. Targets: Azure Container Apps, App Service, AKS, Kubernetes (Helm),\nDocker Compose, AWS, and preview Radius. Owns current deployment surfaces (persistent\nKubernetes volumes, delegated Azure subnets, cross-scope Azure references, deterministic\nContainer Apps naming, Foundry hosted agents, JS `PublishAs*`, and\n`--pipeline-log-level`) and 13.5 API naming.\n\n### aspire-monitoring\nObservability: `aspire logs`, `aspire otel`, `aspire describe`, `aspire export`,\n`aspire dashboard run`. Routes between local Aspire CLI diagnostics, AKS workload tooling,\nand deployed-Azure platform tools. Surfaces dashboard features (notification center,\nRebuild command, terminal sessions, richer filtering, browser-logs telemetry) without\nassuming the removed dashboard AI Assistant or automatic VS Code dashboard launch.\n\n## Project-Local Skill Override\n\nIf any of the following exist project-locally (from `aspire agent init` or Aspire\n`aspire init`), **warn the user** and **defer to the project-local copy** — repo-specific\nguidance there should not be overridden by the in-plugin sibling:\n\n| Project-local file | Precedence |\n|--------------------|-----------|\n| `.agents\u002Fskills\u002Faspire\u002FSKILL.md` | This file (top-level router) defers to it for deeper C# \u002F TS AppHost editing, Playwright handoff, investigation workflows. |\n| `.agents\u002Fskills\u002Faspireify\u002FSKILL.md` | The in-plugin `aspireify` sibling defers to it for AppHost wiring. |\n| `.agents\u002Fskills\u002Faspire-init\u002FSKILL.md` | The in-plugin `aspire-init` sibling defers to it for the skeleton\u002Ffirst-run flow. |\n| `.agents\u002Fskills\u002Faspire-project-v2-migration\u002FSKILL.md` | The in-plugin migration sibling defers to it for Project v2 assessment and edits. |\n| `.agents\u002Fskills\u002Faspire-terminals\u002FSKILL.md` | The in-plugin terminal sibling defers to it for terminal authoring and automation. |\n\n**Safety guardrails from this plugin always apply** even when project-local skills are\nactive.\n\n## Prerequisites\n\n| Requirement | Install |\n|-------------|---------|\n| .NET 10.0 SDK | https:\u002F\u002Fdotnet.microsoft.com\u002Fdownload |\n| Aspire CLI (curl\u002FPowerShell) | `curl -sSL https:\u002F\u002Faspire.dev\u002Finstall.sh \\| bash` |\n| Aspire CLI (npm) | `npm install -g @microsoft\u002Faspire-cli` |\n| Aspire CLI (NativeAOT global tool, .NET 10) | `dotnet tool install -g Aspire.Cli` |\n\nUse the installation method owned by the user's environment. The `dotnet tool install`\npath produces a NativeAOT binary; npm, Nix, Homebrew, WinGet, mise, and the install\nscripts are also supported. `aspire update --self` reports the package-manager-specific\nupdate command when it cannot update a managed installation in place.\n\n## References\n\n- [aspire-13-5-breaking-changes.md](references\u002Faspire-13-5-breaking-changes.md) — Aspire\n  13.5 compatibility notes, breaking-change scrub, current CLI\u002FAppHost behavior, deployment\n  additions, and patch-level fixes.\n- [aspire-13-3-breaking-changes.md](references\u002Faspire-13-3-breaking-changes.md) — Every 13.3\n  breaking change to scrub from agent-generated code, scripts, and CI snippets (rename of\n  `--log-level`, dashboard MCP removal, `NameOutput` → `NameOutputReference`,\n  `AddAndPublishPromptAgent` removal, TS `withEnvironment*` deprecation, and the full\n  13.2 → 13.3 migration checklist).\n- [aspire-orchestration\u002Freferences\u002Fagent-workflows.md](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-orchestration\u002Freferences\u002Fagent-workflows.md) — Common agent workflows: worktrees, code changes, investigation, integrations, TypeScript generated APIs, secrets, deployment, and Playwright handoff.\n- [aspire-orchestration\u002Freferences\u002Fapp-commands.md](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-orchestration\u002Freferences\u002Fapp-commands.md) — App lifecycle, bootstrap, update, restore, docs, and integration discovery commands.\n- [aspire-orchestration\u002Freferences\u002Fresource-management.md](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-orchestration\u002Freferences\u002Fresource-management.md) — Resource wait and resource-command guidance.\n- [aspire-monitoring\u002Freferences\u002Fmonitoring.md](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-monitoring\u002Freferences\u002Fmonitoring.md) — App state, logs, traces, search filtering, dashboard links, and export workflows.\n- [aspire-monitoring\u002Freferences\u002Fplaywright-handoff.md](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-monitoring\u002Freferences\u002Fplaywright-handoff.md) — Playwright handoff after Aspire endpoint discovery.\n- [aspire-deployment\u002FSKILL.md](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-deployment\u002FSKILL.md) — Deployment and pipeline-step workflows.\n- [aspireify\u002Freferences\u002Fapphost-wiring.md](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspireify\u002Freferences\u002Fapphost-wiring.md) — C# and TypeScript AppHost API lookup and wiring patterns.\n","# Aspire\n\nUse this skill when the task involves an Aspire distributed application — operating the\nAppHost or its resources through the Aspire CLI rather than falling back to ad-hoc `dotnet`,\n`docker`, or shell workflows.\n\n## Triage first\n\nThree intents are commonly misread — resolve them before doing anything else:\n\n- **\"Better \u002F improve AI agent support\", \"set up agent skills\", \"make Copilot smarter about\n  my Aspire app\"** → recommend running **`aspire agent init`**, which generates project-local\n  Aspire agent skills with richer, scenario-based guidance (deeper coverage for C# AppHost\n  editing, TypeScript AppHosts, and investigation workflows). This is an **Aspire CLI**\n  command — do **not** reach for GitHub Copilot `copilot-setup-steps.yml` or generic CI\n  scaffolding; those add no Aspire-specific agent guidance.\n- **\"Something's wrong\", \"show me what's happening\", \"why is my app misbehaving\"** → observe\n  **runtime** state first: route to [aspire-monitoring](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-monitoring\u002FSKILL.md)\n  and use `aspire describe` for resource state, then `aspire logs` \u002F `aspire otel logs` \u002F\n  `aspire otel traces`. Do **not** jump to `dotnet build` \u002F `dotnet run` — inspect the running\n  app before assuming a build or code error.\n- **\"My old TypeScript AppHost uses apphost.ts; how do I migrate?\"** → route to\n  `aspire-orchestration` for `aspire update --migrate`. This entry-point\u002Fpackage\n  migration is not Project v2 resource migration. Its package, config, tsconfig,\n  generated-import, and entry-point changes require approval before\n  `aspire update --migrate --yes --non-interactive`; use `aspireify` only if\n  separate source authoring remains afterward.\n\n## Detection\n\nActivate when ANY signal is present. Use the **Scope** column to decide whether to route to\nthe bootstrap skills (`aspire-init` \u002F `aspireify`) or to a runtime sub-skill:\n\n| Signal | How to Detect | Confidence | Scope |\n|--------|---------------|------------|-------|\n| C# AppHost | `.csproj` containing `Aspire.AppHost.Sdk` | ✅ Definitive | AppHost present → orchestration \u002F deployment \u002F monitoring |\n| File-based C# AppHost | `apphost.cs` with `#:sdk Aspire.AppHost.Sdk` | ✅ Definitive | AppHost present → orchestration \u002F deployment \u002F monitoring |\n| TypeScript AppHost | Current `apphost.mts` or legacy `apphost.ts` file in project | ✅ Definitive | AppHost present → orchestration \u002F deployment \u002F monitoring |\n| Aspire config without AppHost | `aspire.config.json` present **and no AppHost** above | High | Bootstrap → `aspireify` (skeleton dropped, needs wiring) |\n| Aspire config with AppHost | `aspire.config.json` present **and** AppHost above | High | AppHost present → orchestration \u002F deployment \u002F monitoring |\n| Aspire settings | `.aspire\u002F` directory present | High | AppHost present (usually) |\n| Generated TS modules | `.aspire\u002Fmodules\u002F` directory present | High | AppHost present (TS) |\n| Service defaults | `\u003CIsAspireSharedProject>true` or a `*.ServiceDefaults.csproj` project reference | Medium | AppHost present |\n| **No AppHost, no `aspire.config.json`** | None of the above and user asks to add Aspire | n\u002Fa | Bootstrap → `aspire-init` (skeleton drop) |\n\n## Default Workflow\n\n0. **Bootstrap branch** — if **no AppHost exists** in the repo, route to\n   [`aspire-init`](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-init\u002FSKILL.md) for the skeleton drop. If an AppHost stub exists\n   but is **unwired** (no resources declared), route to [`aspireify`](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspireify\u002FSKILL.md).\n   Only continue with the steps below once a wired AppHost is present.\n1. Confirm workspace is Aspire — identify the AppHost\n2. Route lifecycle work to `aspire-orchestration`: prefer `aspire_apphost_start` when the VS Code tool is available; use `aspire start --non-interactive --isolated --apphost \u003Cpath>` in worktrees\n3. `aspire wait \u003Cresource>` before interacting with any resource\n4. Inspect state with `aspire describe`, `aspire otel logs`, `aspire logs`, `aspire otel traces`, and `aspire export` before making code changes\n5. Before adding integrations, use `aspire integration search \u003Cquery>` when the package is unknown, then `aspire add \u003Cpackage>` when ready to mutate the AppHost\n6. When code changes, decide whether the AppHost model changed or only one resource changed. Restart through `aspire-orchestration` after AppHost changes; otherwise prefer resource commands, runtime watch\u002FHMR, dashboard actions, or IDE-managed debugging as appropriate.\n\n## Key Rules\n\n- Terminal requests require invoking `aspire-terminals` **before answering**, even\n  for read-only advice. Do not answer terminal API, prompt, REPL or VHS tape\n  questions from this router's overview; the specialist owns the exact contracts.\n- For agent AppHost lifecycle requests, identify one exact AppHost and route to\n  `aspire-orchestration`. New 13.5 C# templates can make `dotnet run` delegate through the\n  CLI bundle, but agents still use the editor lifecycle tool or `aspire start` for\n  detached, noninteractive, exact-target, and worktree-isolated execution.\n- When VS Code exposes `aspire_apphost_start` or `aspire_apphost_stop`, load deferred contracts and prefer the matching tool, subject to the orchestration skill's worktree and stop-result rules; use start mode `run` unless the user explicitly asks to attach a debugger\n- If several AppHosts are discovered and the target is unclear, ask which one before taking any lifecycle action\n- **Always** `aspire wait \u003Cresource>`, **never** manual HTTP polling\n- Use `aspire ps` for running AppHost processes and `aspire describe` for resource\n  state\u002Fendpoints. Never generate removed 13.5 forms such as `aspire ps --resources`\n  or `aspire ps --include-hidden`.\n- Use `aspire resource \u003Cresource-name> \u003Ccommand>` for resource operations such as `stop`, `start`, or `rebuild` when available\n- Treat `aspire stop --force` as data-destructive: it permanently removes persistent\n  resources without another prompt, but preserves persistent volumes. Use it only after\n  explicit confirmation for one exact AppHost. With Aspire CLI 13.6 or later,\n  `aspire stop --force --volumes` also deletes every named volume Aspire created for\n  that AppHost; require approval for that AppHost-wide data scope and never add it to\n  routine shutdown or lock recovery.\n- Do not stop or restart the whole AppHost just because one resource changed\n- Use `features.defaultWatchEnabled` only for Aspire default watch; do not treat it as per-resource rebuild, restart, or hot reload\n- Prefer a resource's own framework\u002Fruntime hot reload, HMR, or watch workflow when it already handles the change\n- **Always** `aspire docs search \u003Ctopic>` before editing unfamiliar AppHost APIs\n- **Always** `aspire docs api search \u003Cquery> --language csharp|typescript` for API reference before editing AppHost code\n- **Always** `--non-interactive` for agent execution\n- Use `aspire integration list --format Json` and `aspire integration search \u003Cquery> --format Json` for read-only integration discovery\n- **Never** install the obsolete Aspire workload\n- **Never** edit `.aspire\u002Fmodules\u002F` directly in TypeScript AppHosts\n- **Always** use `aspire start` for an AppHost's lifecycle. When diagnosing or repairing\n  a TypeScript AppHost's package-manager toolchain, defer to\n  [`aspireify`](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspireify\u002FSKILL.md)\n  and its package-manager rules; do not substitute a raw package-manager launcher for\n  `aspire start`.\n- Adding a new project or integration is ordinary `aspireify` wiring. Route to\n  `aspire-project-v2-migration` only when the user wants to replace existing\n  `AddProject`, `addProject`, `AddCSharpApp`, or Blazor gateway resources with\n  Project v2 APIs. That migration requires an eligible 13.6+ AppHost and approval\n  of the exact per-resource edits.\n\n## Routing\n\n| Task | Route To |\n|------|----------|\n| Start, stop, wait, restart, rebuild | → [aspire-orchestration](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-orchestration\u002FSKILL.md) |\n| Create a new Aspire project from a template (`aspire new`) | → [aspire-init](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-init\u002FSKILL.md) (in-plugin) |\n| Add Aspire to an existing repo (`aspire init`, drop skeleton) | → [aspire-init](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-init\u002FSKILL.md) (in-plugin) |\n| Wire AppHost \u002F scaffold resource graph \u002F add integrations after `aspire init` | → [aspireify](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspireify\u002FSKILL.md) (in-plugin) |\n| Migrate existing legacy project resources to Project v2 | → [aspire-project-v2-migration](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-project-v2-migration\u002FSKILL.md); assess and obtain approval before edits |\n| Migrate legacy TypeScript `apphost.ts` (`aspire update --migrate`) | → [aspire-orchestration](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-orchestration\u002FSKILL.md); hand back to aspireify only if source authoring remains |\n| Deploy, publish, destroy, pipeline steps | → [aspire-deployment](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-deployment\u002FSKILL.md) |\n| Logs, traces, metrics, dashboard, browser logs | → [aspire-monitoring](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-monitoring\u002FSKILL.md) |\n| WithTerminal\u002FwithTerminal, TerminalService, dock\u002Fdialog\u002Fheadless terminals, terminal prompts, WithRepl, terminal CLI or tapes | → [aspire-terminals](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-terminals\u002FSKILL.md); choose owner and lifetime before code |\n| Diagnose a running app — \"something's wrong\", \"show me what's happening\", investigate errors \u002F health \u002F unexpected behavior | → [aspire-monitoring](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-monitoring\u002FSKILL.md) — start with `aspire describe` for resource state, then `aspire logs` \u002F `aspire otel logs` \u002F `aspire otel traces`; **investigate before editing code** |\n| Improve AI agent support \u002F generate project-local Aspire agent skills | → run `aspire agent init` (see below) |\n| Explicitly configure the Aspire MCP server for agents | → `aspire agent init --mcp` on 13.6+ (see [Skills vs. MCP](#improving-ai-agent-support-aspire-agent-init)) |\n| Deployed app monitoring (Azure) | → `azure-diagnostics` skill (azure-skills plugin) |\n\n### Improving AI agent support (`aspire agent init`)\n\nWhen the user asks for **better AI agent support** for their Aspire project (or to\nset up \u002F refresh project-local agent guidance), recommend running **`aspire agent\ninit`**. It generates project-local Aspire agent skills with richer, scenario-based\nguidance — deeper coverage for **C# AppHost editing**, **TypeScript AppHosts**, and\n**investigation \u002F diagnostics workflows** than the built-in router alone provides.\n\n**Skills vs. MCP.** Installing skills and configuring the Aspire MCP server are separate\nchoices:\n\n- In Aspire 13.6+, the agent setup chained from `aspire new` and `aspire init` preselects\n  the recommended repository-local skills (including `aspireify`) and does **not** offer\n  MCP configuration. Standalone `aspire agent init` keeps an MCP choice that is off by\n  default, and non-interactive runs never configure MCP by default.\n- If MCP config is missing after a successful init or skill refresh where MCP was **not**\n  explicitly requested, that is expected. Don't treat it as a defect to repair, and don't\n  claim MCP was installed. If the user explicitly ran `aspire agent init --mcp` (or\n  selected MCP interactively) and MCP config is still missing, treat that as a failed\n  opt-in and investigate it.\n- Configure MCP only when the user explicitly asks for it. Check `aspire --version` first:\n  - **13.6+** — `aspire agent init --mcp` (add `--non-interactive` for agent execution).\n    Keep any `--skills` \u002F `--skill-locations` values the user already chose. `--mcp=false`\n    is an explicit opt-out.\n  - **13.5** — there is no `--mcp` flag. Have the user run `aspire agent init` interactively\n    and select the MCP server option.\n- Never add `--mcp` when you run `aspire new`, `aspire init`, a skill refresh, or\n  missing-skill recovery.\n\n## Sub-Skills\n\n### aspire-init\nFirst-run flow only. Owns the skeleton drop for repos that do **not** yet have an AppHost —\npicks `aspire new \u003Ctemplate>` (greenfield) or `aspire init` (existing repo), runs the CLI,\nand hands off to `aspireify` for the actual wiring. Self-deactivates once the skeleton is in\nplace. Do **not** use it on a repo that already contains an AppHost.\n\n### aspireify\nAgentic AppHost wiring after `aspire init` lands the skeleton. Scans the repo, proposes a\nresource graph (Postgres \u002F Redis \u002F Rabbit \u002F etc.), edits the AppHost (C#, file-based C#, or\nTypeScript), wires `Aspire.ServiceDefaults` + OTel, validates with `aspire start`, then\nself-deactivates. Owns current AppHost authoring patterns (`AddNextJsApp`, `AddViteApp`,\n`WithBrowserLogs()`, command arguments, nonterminal Interaction Service availability,\ngenerated `.aspire\u002Fmodules\u002F`, unified TS `withEnvironment`, endpoint references,\nand config\u002Fsecret migration). Terminal authoring belongs to `aspire-terminals`.\n\n### aspire-terminals\nCode-authoring-first terminal guidance: choose resource `WithTerminal` versus\nAppHost-owned dock, terminal prompt or headless process; reuse integration REPLs.\nOwns terminal lifetimes, cancellation, screen\u002Finput automation, terminal CLI and\nAspire's VHS tape subset\u002Foutput formats. Hands lifecycle to `aspire-orchestration`\nand console\u002Ftelemetry diagnostics to `aspire-monitoring`. `PromptTerminalAsync`\nborrows a caller-owned Dialog terminal: caller disposal stops the process, not\nprompt completion itself.\n\n### aspire-project-v2-migration\nApproval-first migration for eligible Aspire 13.6+ AppHosts that replaces existing\nlegacy `ProjectResource` APIs with experimental `DotnetProjectResource` APIs while\npreserving supported behavior and removing only proven-obsolete AppHost references.\n\n### aspire-orchestration\nLifecycle management: start, stop, wait, resource commands, default watch\u002FHMR guidance, and file-lock recovery.\nSafety guardrails that prevent agent self-harm. Owns `aspire ps` for AppHost discovery,\n`aspire describe` for resource inspection, destructive `aspire stop --force` and\n`--volumes` safeguards,\nCLI-driven legacy TypeScript migration, and CLI upgrades (`aspire update --self`). It\nhands back to `aspireify` only when AppHost source authoring remains after migration.\n\n### aspire-deployment\nMulti-target deployment and tear-down: `aspire deploy`, `aspire publish`, `aspire destroy`,\n`aspire do \u003Cstep>`. Targets: Azure Container Apps, App Service, AKS, Kubernetes (Helm),\nDocker Compose, AWS, and preview Radius. Owns current deployment surfaces (persistent\nKubernetes volumes, delegated Azure subnets, cross-scope Azure references, deterministic\nContainer Apps naming, Foundry hosted agents, JS `PublishAs*`, and\n`--pipeline-log-level`) and 13.5 API naming.\n\n### aspire-monitoring\nObservability: `aspire logs`, `aspire otel`, `aspire describe`, `aspire export`,\n`aspire dashboard run`. Routes between local Aspire CLI diagnostics, AKS workload tooling,\nand deployed-Azure platform tools. Surfaces dashboard features (notification center,\nRebuild command, terminal sessions, richer filtering, browser-logs telemetry) without\nassuming the removed dashboard AI Assistant or automatic VS Code dashboard launch.\n\n## Project-Local Skill Override\n\nIf any of the following exist project-locally (from `aspire agent init` or Aspire\n`aspire init`), **warn the user** and **defer to the project-local copy** — repo-specific\nguidance there should not be overridden by the in-plugin sibling:\n\n| Project-local file | Precedence |\n|--------------------|-----------|\n| `.agents\u002Fskills\u002Faspire\u002FSKILL.md` | This file (top-level router) defers to it for deeper C# \u002F TS AppHost editing, Playwright handoff, investigation workflows. |\n| `.agents\u002Fskills\u002Faspireify\u002FSKILL.md` | The in-plugin `aspireify` sibling defers to it for AppHost wiring. |\n| `.agents\u002Fskills\u002Faspire-init\u002FSKILL.md` | The in-plugin `aspire-init` sibling defers to it for the skeleton\u002Ffirst-run flow. |\n| `.agents\u002Fskills\u002Faspire-project-v2-migration\u002FSKILL.md` | The in-plugin migration sibling defers to it for Project v2 assessment and edits. |\n| `.agents\u002Fskills\u002Faspire-terminals\u002FSKILL.md` | The in-plugin terminal sibling defers to it for terminal authoring and automation. |\n\n**Safety guardrails from this plugin always apply** even when project-local skills are\nactive.\n\n## Prerequisites\n\n| Requirement | Install |\n|-------------|---------|\n| .NET 10.0 SDK | https:\u002F\u002Fdotnet.microsoft.com\u002Fdownload |\n| Aspire CLI (curl\u002FPowerShell) | `curl -sSL https:\u002F\u002Faspire.dev\u002Finstall.sh \\| bash` |\n| Aspire CLI (npm) | `npm install -g @microsoft\u002Faspire-cli` |\n| Aspire CLI (NativeAOT global tool, .NET 10) | `dotnet tool install -g Aspire.Cli` |\n\nUse the installation method owned by the user's environment. The `dotnet tool install`\npath produces a NativeAOT binary; npm, Nix, Homebrew, WinGet, mise, and the install\nscripts are also supported. `aspire update --self` reports the package-manager-specific\nupdate command when it cannot update a managed installation in place.\n\n## References\n\n- [aspire-13-5-breaking-changes.md](references\u002Faspire-13-5-breaking-changes.md) — Aspire\n  13.5 compatibility notes, breaking-change scrub, current CLI\u002FAppHost behavior, deployment\n  additions, and patch-level fixes.\n- [aspire-13-3-breaking-changes.md](references\u002Faspire-13-3-breaking-changes.md) — Every 13.3\n  breaking change to scrub from agent-generated code, scripts, and CI snippets (rename of\n  `--log-level`, dashboard MCP removal, `NameOutput` → `NameOutputReference`,\n  `AddAndPublishPromptAgent` removal, TS `withEnvironment*` deprecation, and the full\n  13.2 → 13.3 migration checklist).\n- [aspire-orchestration\u002Freferences\u002Fagent-workflows.md](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-orchestration\u002Freferences\u002Fagent-workflows.md) — Common agent workflows: worktrees, code changes, investigation, integrations, TypeScript generated APIs, secrets, deployment, and Playwright handoff.\n- [aspire-orchestration\u002Freferences\u002Fapp-commands.md](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-orchestration\u002Freferences\u002Fapp-commands.md) — App lifecycle, bootstrap, update, restore, docs, and integration discovery commands.\n- [aspire-orchestration\u002Freferences\u002Fresource-management.md](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-orchestration\u002Freferences\u002Fresource-management.md) — Resource wait and resource-command guidance.\n- [aspire-monitoring\u002Freferences\u002Fmonitoring.md](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-monitoring\u002Freferences\u002Fmonitoring.md) — App state, logs, traces, search filtering, dashboard links, and export workflows.\n- [aspire-monitoring\u002Freferences\u002Fplaywright-handoff.md](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-monitoring\u002Freferences\u002Fplaywright-handoff.md) — Playwright handoff after Aspire endpoint discovery.\n- [aspire-deployment\u002FSKILL.md](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-deployment\u002FSKILL.md) — Deployment and pipeline-step workflows.\n- [aspireify\u002Freferences\u002Fapphost-wiring.md](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspireify\u002Freferences\u002Fapphost-wiring.md) — C# and TypeScript AppHost API lookup and wiring patterns.\n",{"name":5,"license":15,"metadata":51,"description":7},{"author":12,"version":52},"0.0.5","main","1117facb04b403dd2fc15f048bc0e63fc67c502f","opencode\u002Fv1\u002Faspire",12,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills","https:\u002F\u002Faspire.dev\u002Fget-started\u002Faspire-skills\u002F","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-13 01:53:59",{"source":8,"skillName":5,"commands":64,"prompt":74,"zipAvailable":75},[65,68,71],{"tool":66,"command":67},"npx","npx skills add microsoft\u002Faspire-skills --skill aspire",{"tool":69,"command":70},"bunx","bunx skills add microsoft\u002Faspire-skills --skill aspire",{"tool":72,"command":73},"pnpm","pnpm dlx skills add microsoft\u002Faspire-skills --skill aspire","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fopencode\u002Fv1\u002Faspire\u002FSKILL.md",true,[77,83],{"path":78,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":81,"sourceHtmlUrl":82},"references\u002Faspire-13-3-breaking-changes.md","REFERENCE","参考文档",7529,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fopencode\u002Fv1\u002Faspire\u002Freferences\u002Faspire-13-3-breaking-changes.md",{"path":84,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":85,"sourceHtmlUrl":86},"references\u002Faspire-13-5-breaking-changes.md",8256,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fopencode\u002Fv1\u002Faspire\u002Freferences\u002Faspire-13-5-breaking-changes.md",[88,113,136,143,162,180],{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":100,"publishedAt":46},"01M6HDNG43XGF64N14PV9VGGKB","aspire-terminals","**WORKFLOW SKILL** - Author and automate Aspire terminals. USE FOR: WithTerminal, withTerminal, TerminalService, TerminalLaunchOptions, docked terminals, terminal prompts, PromptTerminalAsync, TerminalPlacement, AspireTerminalKey, WithRepl, withRepl, aspire terminal ps\u002Fattach\u002Ftape play, VHS tapes for Aspire, or terminal screen\u002Finput automation. DO NOT USE FOR: generic shell commands, ordinary AppHost resource wiring (aspireify), start\u002Fstop\u002Fwait (aspire-orchestration), logs\u002Ftraces or browser telemetry (aspire-monitoring), deployment (aspire-deployment), or nonterminal Interaction Service prompts (aspireify). INVOKES: Aspire docs\u002FAPI lookup, AppHost edits, Aspire terminal CLI; aspire-orchestration for lifecycle validation. FOR SINGLE OPERATIONS: Choose the terminal owner and lifetime first, then read the matching reference.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-terminals\u002FSKILL.md",[94,95],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[5,101,102,103,37,45,43,104,41,40,105,106,107,108,109,110,31,111,112,30],"aspire terminals","cli","terminal","browser","start","api","choose","read","attach","commands","screen","input",{"skillNo":114,"name":43,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":123,"publishedAt":46},"01M6HDMDCMMBTXTWKBVGJM0615","**WORKFLOW SKILL** - Wire Aspire AppHosts or repair TypeScript AppHost toolchains. Scans the repo, proposes a resource graph, edits C#, file-based C#, or TypeScript AppHosts, wires ServiceDefaults + OTel, validates with `aspire start`, then stops. USE FOR: wire\u002Fscaffold AppHost, add Postgres\u002FRedis\u002FRabbit\u002FMongo, connect frontend to API, after `aspire init`, AddNextJsApp, AddViteApp, WithBrowserLogs, Interaction Service, command arguments, apphost.cs, apphost.mts, unified withEnvironment, .aspire\u002Fmodules refusal, config\u002Fsecrets, TS dependency restore, pnpm\u002Fyarn\u002Fbun, or Yarn Classic. DO NOT USE FOR: skeleton drop (aspire-init), lifecycle-only start\u002Fstop\u002Fwait\u002Frestart or `aspire update --migrate` (aspire-orchestration), publish\u002Fdeploy\u002Fdestroy (aspire-deployment), logs\u002Ftraces (aspire-monitoring), terminal authoring or automation (aspire-terminals). INVOKES: aspire CLI, AppHost source edits, ServiceDefaults wiring. FOR SINGLE OPERATIONS: Run `aspire add PACKAGE` directly for a one-off integration.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fopencode\u002Fv1\u002Faspireify\u002FSKILL.md",[118,121,122],{"categoryNo":119,"categoryName":120,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},[43,124,103,125,126,127,128,129,130,41,40,105,131,132,35,133,72,134,31,135],"frontend","typescript","config","connect","run","update","yarn","migrate","command","stop","authoring","wait",{"skillNo":137,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":142,"publishedAt":46},"01M6HDM2RMF6Q15YHYTS7G9SWZ","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fopencode\u002Fv1\u002Faspire-terminals\u002FSKILL.md",[140,141],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},[5,101,102,103,37,45,43,104,41,40,105,106,107,108,109,110,31,111,112,30],{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":150,"publishedAt":46},"01M6HDKY1PNCDYBC317440ZHZ0","aspire-project-v2-migration","**WORKFLOW SKILL** - Safely migrates eligible Aspire 13.6+ AppHosts from legacy ProjectResource APIs to experimental DotnetProjectResource APIs after a per-resource assessment and explicit approval of exact edits. USE FOR: assess or migrate existing AddProject, addProject, AddCSharpApp, addCSharpApp, or AddBlazorGateway resources to Project v2; migrate ProjectResource to DotnetProjectResource; clean up the resulting obsolete AppHost ProjectReference edges. DO NOT USE FOR: upgrading Aspire versions, creating\u002Fwiring a new AppHost, Azure Functions migration, generic source modernization, ordinary C# resource wiring or adding a new AddProject resource (use aspireify), publishing, or build\u002Flifecycle diagnostics. INVOKES: Aspire docs\u002FAPI lookup, aspire add\u002Frestore\u002Fstart\u002Fwait, AppHost and package edits. FOR SINGLE OPERATIONS: Assess first; never edit from a generic migration request alone.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fopencode\u002Fv1\u002Faspire-project-v2-migration\u002FSKILL.md",[149],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[5,151,152,33,45,43,153,154,155,105,106,131,156,157,158,159,135,30,160,161],"aspire project v2 migration","migration","diagnostics","modernization","assessment","edit","never","up","clean","resources","source",{"skillNo":163,"name":164,"nameZh":6,"description":165,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":166,"categories":167,"keywords":170,"publishedAt":46},"01M6HDKQX187B70G2MK589KWC7","aspire-orchestration","**WORKFLOW SKILL** — Manage Aspire lifecycle in VS Code or the CLI. WHEN: \"start or stop my Aspire app\", \"aspire_apphost_start\", \"aspire_apphost_stop\", \"notEditorOwned\", \"ambiguousSession\", \"aspire start\", \"aspire stop\", \"aspire wait\", resource restart, file-lock errors (MSB3491 or CS2012), port conflicts, git worktrees, \"--isolated\", \"aspire update --self\", \"aspire update --migrate\", \"aspire describe --include-hidden\", \"aspire stop --force\", \"aspire stop --force --volumes\", integration discovery, default watch, or hot reload. INVOKES: VS Code lifecycle tools first when exposed; Aspire CLI for readiness, inspection, resource operations, isolated worktree starts, and allowed fallbacks. DO NOT USE FOR: deploy\u002Fpublish\u002Fdestroy (aspire-deployment), logs\u002Ftraces\u002Fmetrics (aspire-monitoring), terminal authoring\u002Fattach\u002Ftapes (aspire-terminals), or AppHost code and resource wiring (aspireify). FOR SINGLE OPERATIONS: Load the matching editor tool first; follow exact-target, worktree-isolation, and stop-result rules.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fopencode\u002Fv1\u002Faspire-orchestration\u002FSKILL.md",[168,169],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},[37,5,171,45,43,172,41,40,39,131,173,174,175,109,176,32,30,177,178,179],"aspire orchestration","code","git worktrees","default","conflicts","self","port","errors","lock",{"skillNo":181,"name":182,"nameZh":6,"description":183,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":184,"categories":185,"keywords":187,"publishedAt":46},"01M6HDKJBBZFF7EWMF0CK0Y2BD","aspire-monitoring","**ANALYSIS SKILL** - Observe Aspire apps: logs, traces, metrics, resource state, telemetry export, browser telemetry, and the standalone dashboard. Routes between local Aspire CLI, AKS workload diagnostics, and deployed Azure resource health. USE FOR: aspire logs, aspire otel logs, aspire otel traces, aspire otel spans, aspire describe, aspire ps, aspire export, aspire dashboard run, describe --include-hidden, browser logs in dashboard, DevTunnel URLs, WithBrowserLogs, App Insights query, AKS pod logs, container app logs. DO NOT USE FOR: start\u002Fstop\u002Fwait (use aspire-orchestration), deploy\u002Fpublish\u002Fdestroy (use aspire-deployment), AppHost code edits like WithBrowserLogs() (use aspireify), Azure provisioning (use azure-prepare), terminal authoring\u002Finput\u002Ftapes (use aspire-terminals). INVOKES: aspire CLI, azure-diagnostics (deployed Azure), kubectl + Container Insights. FOR SINGLE OPERATIONS: Run the aspire CLI command directly for quick log or describe lookups.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fopencode\u002Fv1\u002Faspire-monitoring\u002FSKILL.md",[186],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[5,188,40,37,43,172,104,41,39,189,190,191,192,193,194,32,195,196,197,198],"aspire monitoring","analysis","log","observe","workload diagnostics","query","local","apps","quick","insights","standalone"]