Infra, Ops & WorkflowAttention6262/100
Aspire Integration (Microsoft)
Adds Aspire orchestration to an existing repository for inner-loop development and optional Azure deployment readiness. Use when asked to "aspirerify a project", "add Aspire to a solution", "integrate Aspire", "set up an AppHost", "add aspire init", or "orchestrate services with Aspire". Handles CLI setup, TFM compatibility gating, inter-service communication mapping, and delegates AppHost wiring to the Aspire CLI agent skills.
ou envoie-le directement à ton agent.
Installer dans ton projet
Ce skill a un score de sûreté moyen. Vérifie le rapport avant de l’installer.
$ curl -fsSL https://arboristhree.xyz/cli/install-skill.mjs -o /tmp/arboris-install-skill.mjs && node /tmp/arboris-install-skill.mjs aspire-integration__microsoft-upgrade-agent-plugins__plugins-upgrade-agent-extenders-upgrade-dotnet-upgrade-skills-scenarios-6d759f502ba3Microsoft
microsoft/upgrade-agent-plugins
Contenu à copier
---
name: aspire-integration
description: >
Adds Aspire orchestration to an existing repository for inner-loop development and optional Azure
deployment readiness. Use when asked to "aspirerify a project", "add Aspire to a solution",
"integrate Aspire", "set up an AppHost", "add aspire init", or "orchestrate services with Aspire".
Handles CLI setup, TFM compatibility gating, inter-service communication mapping, and delegates
AppHost wiring to the Aspire CLI agent skills.
requires-extension: upgrade-dotnet
metadata:
origin: Microsoft
discovery: scenario
importance: medium
weight: 9000
traits: .NET|CSharp|VisualBasic|DotNetCore
scenarioTraitsSet: [.NET]
---
# Aspire Integration Scenario
Add Aspire orchestration to an existing repository — unified inner-loop development with the Aspire Dashboard and optional Azure deployment readiness.
Do **not** write AppHost code, detect infrastructure dependencies, or wire services — those belong to the `aspireify` skill. This scenario's contributions are: environment gates, source control, inter-service communication mapping (context for aspireify), integration mode question, Azure publisher code, and scenario lifecycle.
## Workflow Overview
```
Phase 0 PRE-CHECK → TFM gate; detect existing Aspire artifacts; CLI/skills setup
Phase 1 WORKING BRANCH → Branch setup and source control hygiene
Phase 2 ANALYSIS → inter-service communication mapping
Phase 3 USER CONFIG → Single question: integration mode
Phase 4 PLANNING → Generate plan.md based on mode choice
Phase 5 EXECUTION → aspire init; delegate to aspireify; Azure publisher (if chosen)
Phase 6 COMPLETION → Surface final status, deferred items, next steps
```
---
## Phase 0: Pre-Check — Environment & Compatibility Gates
The cheap gates (TFM, existing artifacts) run first. CLI and skill installs only run if we're definitely continuing — so a user who hard-stops on incompatible TFM or chooses *Quit* on existing-artifact detection has nothing installed.
### 0.1: TFM Compatibility Gate
Scan every `.csproj` in the solution. For each, read `<TargetFramework>` and `<TargetFrameworks>`.
**Compatible TFMs:** `net8.0`, `net9.0`, `net10.0`, or any `net{X}.0` where X ≥ 8. Multi-targeted projects with at least one compatible TFM are compatible.
**Incompatible TFMs:** `net4*` (.NET Framework), `netstandard*`, `netcoreapp*`, `net5.0`, `net6.0`, `net7.0`.
| Result | Action |
|--------|--------|
| **All incompatible** | Hard stop — present message below. Link to .NET Version Upgrade scenario. End this scenario. |
| **Mixed** | Ask: proceed with compatible subset *(recommended)* or upgrade all first then re-run. If proceeding, carry the incompatible list as the aspireify "skip list". |
| **All compatible** | Continue silently. |
<response_template>
❌ **No Compatible Projects Found**
All projects target .NET versions that Aspire does not support (net8.0 or later required):
| Project | Current TFM |
|---------|------------|
| {project} | {tfm} |
**Options:**
1. Upgrade projects first using the **.NET Version Upgrade** scenario, then return here
2. Cancel this scenario
</response_template>
<response_template>
⚠️ **Mixed Compatibility Detected**
| Compatible (will be orchestrated by Aspire) | Incompatible (will be skipped) |
|------------------------------|-------------------------------|
| {project} ({tfm}) | {project} ({tfm} — requires net8.0+) |
**Options:**
1. **Proceed with compatible projects only** *(recommended)* — incompatible projects remain unchanged
2. **Upgrade all projects first** — use the .NET Version Upgrade scenario, then return here
</response_template>
---
### 0.2: Detect Existing Aspire Artifacts
Search for:
| Signal | Where to Look |
|--------|---------------|
| AppHost project | Any `.csproj` with `Sdk="Aspire.AppHost.Sdk"` or `#:sdk Aspire.AppHost.Sdk` in a `.cs` file |
| ServiceDefaults project | Any `.csproj` with `<IsAspireSharedProject>true</IsAspireSharedProject>` |
| Aspire hosting packages | `Aspire.Hosting.*` NuGet references in any project |
**If nothing found** → continue to 0.3. Set internal flag: `aspire_init_needed = true`.
**If artifacts found** → present options:
> **Existing Aspire support detected:**
> {list what was found with paths}
>
> **Options:**
> 1. **Quit** — no changes needed
> 2. **Fix / augment** — add missing resources or projects to the existing AppHost
> 3. **Add new AppHost** — create a separate AppHost for a different subset of projects
- **Quit** → end scenario
- **Fix/augment** → set `aspire_init_needed = false`; continue to 0.3
- **Add new AppHost** → set `aspire_init_needed = true`; continue to 0.3
---
**Load**: [aspire-cli.md](aspire-cli.md) — read before running any commands in the steps below. It defines which commands are agent-safe, which must never be run as an agent, and the correct flags for each.
### 0.3a: Verify / Install Aspire CLI
```bash
aspire --version
```
- **Present** → proceed to 0.3b.
- **Missing** → run `dotnet tool install -g aspire.cli`. If the command fails and cannot be retried automatically, **pause and ask the user to run it manually**:
> Before continuing, please run this in your terminal:
> ```
> dotnet tool install -g aspire.cli
> ```
> Reply when done.
**Hard gate**: do not proceed until `aspire --version` succeeds.
### 0.3b: Update Aspire CLI
```bash
dotnet tool update -g aspire.cli
```
Always run when CLI is present — idempotent. Ensures aspireify-required features (`--non-interactive`, `aspire init`, `aspire docs search`, `aspire list integrations`) are available.
If the command fails and cannot be retried automatically, **pause and ask the user to run it manually**:
> Please run this in your terminal:
> ```
> dotnet tool update -g aspire.cli
> ```
> Reply when done.
**Hard gate**: do not proceed with a stale CLI. The workflow depends on CLI features that may not exist in older versions.
### 0.3c: Ensure Aspire Skills Are Installed
Search the repository for existing skill files:
- `.github/skills/aspire/SKILL.md` (or `skill.md`, or any `*aspire*skill*` under `.github/skills/aspire/`)
- `.github/skills/aspireify/SKILL.md` (or `skill.md`, or any `*aspireify*skill*` under `.github/skills/aspireify/`)
- **Both found** → skills are already installed; proceed.
- **Either missing** → run:
```bash
aspire agent init --non-interactive --nologo --skills aspire,aspireify --skill-locations github
```
If the command succeeds, verify both files now exist at `.github/skills/aspire/SKILL.md` and `.github/skills/aspireify/SKILL.md`. Then read both to load the Aspire-specific context before continuing.
If the command fails and cannot be retried automatically, **pause and ask the user to run it manually**:
> Before continuing, please run this in your terminal:
> ```
> aspire agent init --non-interactive --nologo --skills aspire,aspireify --skill-locations github
> ```
> Reply when done.
**Hard gate**: do not proceed until both skill files are present. The aspireify skill is required for Phase 5 — the workflow cannot continue without it.
---
## Phase 1: Working Branch
### 1.1: Source Control Detection
Detect git repo, current branch, and pending changes. Handled during pre-initialization by the scenario-initializer worker.
### 1.2: Consolidated Pre-Init Prompt
Present branch strategy, commit approach, and flow mode in **one single prompt**. No multi-step wizard. User confirms or adjusts.
### 1.3: Apply Source Control
Commit or stash pending changes. Create/switch to working branch. The workspace must be clean and on the correct branch before analysis begins.
---
## Phase 2: Analysis
All steps in this phase are **read-only**. No file mutations.
**Load**: [assessment.md](assessment.md) — read completely before starting this phase.
The assessment file covers:
- TFM compatibility (reuse Phase 0.1 results)
- Inter-service communication mapping (unique value-add of this scenario)
- Assessment summary template
### Assessment Outputs
| Output | Used By |
|--------|---------|
| Compatible projects list (paths + TFMs) | aspireify delegation context |
| Incompatible projects skip list | aspireify delegation context |
| Inter-service communication graph | aspireify delegation context — guides `WithReference`/`WaitFor` wiring |
Present the assessment summary to the user before proceeding to Phase 3. Wait for confirmation.
---
## Phase 3: User Configuration
### 3.1: Integration Mode (single question)
> **Integration mode:**
> 1. **Inner-loop only** — AppHost for local development with Aspire Dashboard
> 2. **Inner-loop + Azure-ready** — Also configure Azure publishing so you can deploy when ready (deployment itself is not done during this scenario)
>
> *Recommended: {1 or 2}*
> - Default to **Azure-ready** if any compatible project is a Web API, Worker Service, Azure Functions, Blazor app, or gRPC service
> - Default to **inner-loop only** if all compatible projects are desktop apps or console tools
Wait for answer before proceeding.
---
## Phase 4: Planning
Follow the canonical plan.md format from your planning instructions.
### 4.1: Plan Shapes
**Inner-loop only (3 tasks):**
| Order | Task ID | Concern |
|-------|---------|---------|
| 1 | `01-environment-setup` | Verify CLI, create AppHost skeleton via `aspire init` |
| 2 | `02-aspireify` | Delegate full AppHost wiring to aspireify skill |
| 3 | `03-complete` | Surface dashboard URL, resource list, skipped projects, deferred items |
**Inner-loop + Azure-ready (4 tasks):**
| Order | Task ID | Concern |
|-------|---------|---------|
| 1 | `01-environment-setup` | Verify CLI, create AppHost skeleton via `aspire init` |
| 2 | `02-aspireify` | Delegate full AppHost wiring to aspireify skill |
| 3 | `03-azure-publisher` | Ask publisher type (ACA/AKS); add packages; write Publish* code; build AppHost |
| 4 | `04-complete` | Surface what was done + instructions to deploy when ready |
> **Completion task vs Phase 6:** The `*-complete` task generates the completion surface (templates in execution.md "Completion Surfaces") and is the last tracked unit of work in `plan.md`. Phase 6 is the scenario-lifecycle wrap-up that runs after the plan is fully done — it refreshes resource state if needed and hands off to a follow-up scenario. The completion *content* is owned by the task; Phase 6 owns the *lifecycle*.
### 4.2: Initialize Task Tracking
Initialize `tasks.md` and `scenario-instructions.md` using the standard `initialize_scenario` system skill.
### 4.3: Present Plan
Save `plan.md` and present it to the user. Wait for approval before starting execution.
---
## Phase 5: Execution
**Load**: [execution.md](execution.md) — read completely when entering this phase.
**Load**: [aspire-cli.md](aspire-cli.md) — CLI command reference.
Uses the executor's core task-execution steps for task lifecycle. The execution file supplements those steps — it does not replace them.
Execute the tasks listed in the approved `plan.md` (3 tasks for inner-loop only, 4 tasks for Azure-ready). For each task, use the matching reference section below — only the tasks present in `plan.md` should run.
| Task | Execution Reference Section | When |
|------|-----------------------------|------|
| `01-environment-setup` | Task 01: Environment Setup | Always |
| `02-aspireify` | Task 02: aspireify Delegation | Always |
| `03-azure-publisher` | Task 03: Azure Publisher Setup | Azure-ready path only |
| `03-complete` / `04-complete` | Completion Surfaces | Always (last task in plan) |
Mark each task done in `plan.md` as you complete it.
---
## Phase 6: Completion
1. Confirm all tasks in `plan.md` are marked done
2. Re-run `aspire describe` if the AppHost was stopped — get current resource status
3. Surface to the user:
- **Dashboard URL** (with full login token — from aspireify's completion summary; if missing, run `aspire start` and read the URL from its output — that is the canonical source)
- **Resource list** — name, type, status (Healthy / Skipped / Deferred)
- **Skipped incompatible projects** — each with actionable next step (link to .NET Version Upgrade)
- **Deferred items** from aspireify (e.g., OTel not wired for a service) — each with actionable next step
- *(Azure-ready path)* What was done (publisher packages + Publish* code). Instruction: *"Run `aspire deploy` in your terminal, use the Aspire CLI directly, or any preferred deployment tool when you're ready to deploy to Azure. First run will ask for Azure subscription, resource group, and region."*
4. Suggest next scenario: *"Run `aspire-version-upgrade` when you want to move to a newer Aspire version"*
---
## Build Warnings Policy
Only fix warnings introduced by Aspire integration (new AppHost code from Task 03, new package references). Do not fix pre-existing warnings in the user's projects — those are out of scope.
## Error Handling
| Problem | Resolution |
|---------|------------|
| No compatible projects (all < net8.0) | Phase 0.1 hard stop — link to .NET Version Upgrade scenario |
| Aspire CLI install fails | Check .NET SDK is installed; try `dotnet tool install -g aspire.cli --add-source https://api.nuget.org/v3/index.json` |
| `aspire agent init` fails | Check network; retry `aspire agent init --non-interactive --nologo --skills aspire,aspireify --skill-locations github` |
| `aspire init` fails | Check AppHost SDK version availability on NuGet; surface the CLI's error message to the user |
| aspireify reports an error | Read aspireify's error message; diagnose; do not retry without understanding the failure |
| Azure publisher build failure | Check package version conflicts between AppHost SDK and publisher packages; fix and rebuild |Colle ce Markdown dans ton agent ou utilise les boutons ci-dessus pour l’écrire dans ton projet.
Ce que fait Aspire Integration (Microsoft)
**Quit** → end scenario
**Fix/augment** → set `aspire_init_needed = false`; continue to 0.3
**Add new AppHost** → set `aspire_init_needed = true`; continue to 0.3
**Present** → proceed to 0.3b.
Comment utiliser Aspire Integration (Microsoft)
1
Copie le prompt
Un clic copie le prompt packagé (ou l'envoie à ton agent).
2
L'agent installe le skill
Il ajoute le SKILL.md et ses ressources à ton projet.
3
Activation automatique
Le skill s'active dès que le contexte correspond.
Déclencheurs pour Aspire Integration (Microsoft)
Dis simplement à ton agent quelque chose comme :
Applique le skill aspire-integration__microsoft-upgrade-agent-plugins__plugins-upgrade-agent-extenders-upgrade-dotnet-upgrade-skills-scenarios-6d759f502ba3 à cette tâche
Utilise aspire-integration__microsoft-upgrade-agent-plugins__plugins-upgrade-agent-extenders-upgrade-dotnet-upgrade-skills-scenarios-6d759f502ba3 pour améliorer cette implémentation
Passe en revue ce sujet avec aspire-integration__microsoft-upgrade-agent-plugins__plugins-upgrade-agent-extenders-upgrade-dotnet-upgrade-skills-scenarios-6d759f502ba3
Skills liés à Aspire Integration (Microsoft)
Add CLI Command (.NET)
Add or change a dotnet CLI command, subcommand, or option across the relevant CLI projects. USE FOR: adding or changing a dotnet CLI command/subcommand, adding a new Option<T> or Argument<T>, registering a subcommand in the command tree, changing an option's help description or a command's runtime message, wiring a command parser, or updating --help output.Add Dotnet Aot Command (.NET)
Add, enable, or review a dotnet CLI command or feature in the Native AOT CLI (src/Cli/dotnet-aot) and prove its compatibility. USE FOR: migrating a command or option to AOT, reviewing an AOT migration PR, defining conservative eligibility and managed fallback, changing AotSourceFiles.props or AotDependencies.props, validating AOT/managed parity, NativeAOT-publishing tests, checking binary-size impact, or using the dn harness and separated SDK layout. DO NOT USE FOR: resolving IL trim/AOT analyzer warnings alone (use dotnet-aot-compat), running dotnet.Tests incrementally (use incremental-test), or pure managed CLI work.Add Net Analyzer (.NET)
Add, port, or change a .NET code analysis rule (CA####) under src/Microsoft.CodeAnalysis.NetAnalyzers. USE FOR: implementing a new CA analyzer and its code fixer, porting a rule or PR from the retired dotnet/roslyn-analyzers repo, allocating a diagnostic ID from DiagnosticCategoryAndIdRanges.txt, choosing RuleLevel/severity/category, wiring resx + xlf strings, recording the rule in AnalyzerReleases.Unshipped.md, regenerating the analyzer documentation/sarif files, and writing MSTest analyzer/code-fix tests with the VerifyCS/VerifyVB harness. DO NOT USE FOR: NETSDK#### MSBuild diagnostics (src/Tasks), CS####/BC#### compiler diagnostics or IDE#### analyzers (dotnet/roslyn), or CONTAINER#### diagnostics (src/Containers).