[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-aspire-orchestration":3,"mdc-t8w5t5-key":45,"related-repo-microsoft-aspire-orchestration":2860,"related-org-microsoft-aspire-orchestration":2881},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":22,"repoUrl":23,"updatedAt":24,"license":25,"forks":26,"topics":27,"repo":40,"sourceUrl":43,"mdContent":44},"aspire-orchestration","manage .NET Aspire application lifecycle","**WORKFLOW SKILL** — Manage Aspire AppHost lifecycle and recover from file locks, port conflicts, and orphaned processes. WHEN: \"start my Aspire app\", \"aspire start\", \"aspire stop\", \"aspire wait\", \"restart the API service\", \"file lock error\", \"MSB3491\", \"CS2012\", \"port already in use\", \"upgrade Aspire CLI\", \"aspire update --self\", \"proxies missing in aspire ps\", \"--include-hidden\", \"aspire integration list\", \"aspire integration search\", \"default watch\", \"hot reload\". INVOKES: aspire CLI (start, stop, wait, ps, resource, integration, add, init, doctor, update, restore). DO NOT USE FOR: deploy \u002F publish \u002F destroy \u002F pipeline steps (use aspire-deployment), logs \u002F traces \u002F metrics \u002F dashboard run (use aspire-monitoring), AppHost code edits or resource wiring (use aspireify). FOR SINGLE OPERATIONS: Run the aspire CLI command directly.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"microsoft","Microsoft","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmicrosoft.png",[12,16,19],{"name":13,"slug":14,"type":15},"Operations","operations","tag",{"name":17,"slug":18,"type":15},".NET","net",{"name":20,"slug":21,"type":15},"Orchestration","orchestration",64,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills","2026-07-31T05:55:17.26473","MIT",6,[28,29,30,31,32,33,34,35,36,37,38,39],"ai","ai-agents","ai-coding-agents","ai-skills","ai-tools","aspire","coding-agents","developer-tools","distributed-applications","github-copilot","official","skills",{"repoUrl":23,"stars":22,"forks":26,"topics":41,"description":42},[28,29,30,31,32,33,34,35,36,37,38,39],"Official Aspire skills and plugins for AI coding agents to initialize, wire, orchestrate, monitor, and deploy distributed apps.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Ftree\u002FHEAD\u002Fskills\u002Faspire-orchestration","---\nname: aspire-orchestration\ndescription: >-\n  **WORKFLOW SKILL** — Manage Aspire AppHost lifecycle and recover from file locks,\n  port conflicts, and orphaned processes. WHEN: \"start my Aspire app\", \"aspire start\",\n  \"aspire stop\", \"aspire wait\", \"restart the API service\", \"file lock error\",\n  \"MSB3491\", \"CS2012\", \"port already in use\", \"upgrade Aspire CLI\", \"aspire update --self\",\n  \"proxies missing in aspire ps\", \"--include-hidden\", \"aspire integration list\",\n  \"aspire integration search\", \"default watch\", \"hot reload\". INVOKES: aspire CLI\n  (start, stop, wait, ps, resource, integration, add, init, doctor, update, restore).\n  DO NOT USE FOR: deploy \u002F publish \u002F destroy \u002F pipeline steps (use aspire-deployment),\n  logs \u002F traces \u002F metrics \u002F dashboard run (use aspire-monitoring), AppHost code edits or\n  resource wiring (use aspireify).\n  FOR SINGLE OPERATIONS: Run the aspire CLI command directly.\nlicense: MIT\nmetadata:\n  author: Microsoft\n  version: \"0.0.1\"\n---\n\n# Aspire Orchestration\n\n> **MANDATORY COMPLIANCE** — This skill prevents agent self-harm in Aspire projects.\n> Violating these rules causes file locks, orphaned processes, and user frustration ([#15801](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire\u002Fissues\u002F15801)).\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 (NativeAOT global tool, .NET 10) | `dotnet tool install -g Aspire.Cli` |\n\nEither install method works. The `dotnet tool install` path produces a NativeAOT binary\n(instant startup, no JIT warmup) and is the recommended option when .NET 10 is already present.\n\n## Detection\n\nActivate when ANY signal is present:\n\n| Signal | How to Detect | Confidence |\n|--------|---------------|------------|\n| C# AppHost | `.csproj` containing `Aspire.AppHost.Sdk` | ✅ Definitive |\n| File-based C# AppHost | `apphost.cs` or `.cs` file with `#:sdk Aspire.AppHost.Sdk` | ✅ Definitive |\n| TypeScript AppHost | `apphost.ts` file in project | ✅ Definitive |\n| Aspire config | `aspire.config.json` in project root | High |\n| Aspire settings | `.aspire\u002F` directory present | High |\n| Generated TS modules | `.aspire\u002Fmodules\u002F` directory present | High |\n| Service defaults | `Aspire.ServiceDefaults` in project references | Medium |\n\nSee [detection.md](references\u002Fdetection.md) for detailed fingerprinting.\n\n## Safety Guardrails\n\n| Situation | ✅ ALWAYS Do | ❌ NEVER Do |\n|-----------|-------------|------------|\n| Start an Aspire app | `aspire start` | `dotnet run` on AppHost |\n| Wait for resource ready | `aspire wait \u003Cresource>` | `curl` \u002F HTTP polling loops |\n| Code changed in a resource | Prefer resource commands, runtime watch\u002FHMR, dashboard actions, or IDE-managed debugging | `dotnet build` against locked files |\n| Task complete | `aspire stop` | Leave processes running |\n| Check resource status | `aspire describe` \u002F `aspire ps` | Manual process inspection |\n| Working in git worktree | `aspire start --isolated` | `aspire start` without isolation |\n| Running from AI agent | Add `--non-interactive` to all commands | Assuming interactive terminal |\n| Editing unfamiliar API | `aspire docs search \u003Ctopic>` then `aspire docs api search \u003Cquery>` for API reference | Guessing API shape |\n| C# AppHost API inspection | Use `dotnet-inspect` skill (if available) for local symbols | Guessing overloads or builder chains |\n| Adding custom dashboard\u002Fresource commands | `aspire docs search \"custom resource commands\"` first | Inventing `WithCommand` patterns without docs |\n| Installing Aspire support | Use `aspire add` or `aspire init` | ~~`dotnet workload install aspire`~~ (obsolete) |\n\nSee [safety-guardrails.md](references\u002Fsafety-guardrails.md) for detailed rules and recovery patterns.\n\n## Default Workflow\n\n1. Confirm workspace is Aspire — identify the AppHost\n2. `aspire start` (or `aspire start --isolated` in worktrees)\n3. `aspire wait \u003Cresource>` before interacting with any resource\n4. `aspire describe` to inspect state, then work\n5. If AppHost code changed, rerun `aspire start`; if only one resource changed, prefer the resource's commands\u002Fwatch\u002FHMR\u002Fdebug workflow\n6. `aspire stop` when cleanup is explicitly requested or needed to release locks\u002Fports\n\n## Quick Reference\n\n| Task | Command |\n|------|---------|\n| Start app (agents) | `aspire start` (background, preferred) |\n| Start app (human) | `aspire run` (foreground, dashboard) |\n| Stop app | `aspire stop` |\n| Wait for resource | `aspire wait \u003Cresource>` |\n| Check status | `aspire ps` or `aspire describe` |\n| Show hidden resources (proxies, helpers, migrations) | `aspire ps --include-hidden` \u002F `aspire describe --include-hidden` |\n| Resource operation | `aspire resource \u003Cresource-name> \u003Ccommand>` such as `stop`, `start`, or `rebuild` when exposed |\n| Create new project | `aspire new aspire-starter` |\n| Add Aspire to existing | `aspire init` (then hand off to `aspireify` skill for wiring) |\n| Add integration | `aspire add \u003Cpackage>` |\n| Discover integrations | `aspire integration list --format Json` \u002F `aspire integration search \u003Cquery> --format Json` |\n| Upgrade the CLI itself | `aspire update --self` |\n| Update project package refs | `aspire update` (modifies project files — get user approval) |\n| Restore generated files | `aspire restore` |\n| Environment maintenance | `aspire cache clear`, `aspire certs trust`, `aspire certs clean` |\n| Diagnose environment | `aspire doctor` |\n| Machine-readable output | `--format Json` (supported: `ps`, `describe`, `start`) |\n| Look up API reference | `aspire docs api search \u003Cquery> --language csharp\\|typescript` |\n| Browse API entries | `aspire docs api list \u003Cscope>` |\n| Get API detail | `aspire docs api get \u003Cid>` |\n\n## Error Handling\n\n| Symptom | Cause | Action |\n|---------|-------|--------|\n| **File lock errors during build (`MSB3491`, `CS2012`)** | **Aspire is running and holds locks on `bin\u002F`, `obj\u002F`, and assemblies.** | **Run `aspire stop` first**, then rebuild or `aspire start`. Do NOT conclude the project has a permanent build failure. |\n| \"Port already in use\" | Previous instance running | `aspire stop`, then `aspire start` |\n| Resource not found | App not started or name wrong | `aspire ps` to check |\n| Build errors in resource | Code error, not Aspire issue | Fix code, then use resource commands\u002Fwatch\u002FHMR\u002Fdebug workflow or rerun `aspire start` if AppHost code changed |\n| Environment issues | Missing SDK or tools | `aspire doctor` to diagnose |\n| JSON parse failure from `aspire start` | Mixed human\u002FJSON output ([#15843](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire\u002Fissues\u002F15843)) | Strip non-JSON lines before parsing |\n| `aspire wait` rejects name | Use `displayName` not `name` ([#15842](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire\u002Fissues\u002F15842)) | Use `displayName` from `aspire ps --format Json` |\n| `aspire ps` hangs | AppHost on breakpoint ([#15576](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire\u002Fissues\u002F15576)) | Use timeout, check AppHost process |\n| `aspire agent init` fails | Non-interactive terminal ([#16264](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire\u002Fissues\u002F16264)) | Run from standard terminal |\n| Docker daemon unavailable | Container-backed resources fail to start | Start Docker Desktop, then `aspire start` |\n| Multiple AppHosts detected | Wrong AppHost targeted | Use `--apphost \u003Cpath>` to specify explicitly |\n\n### 🔒 File-Lock Recovery (MSB3491 \u002F CS2012) — Always `aspire stop` First\n\nWhen a build fails with `error MSB3491: Could not write to output file ...` or\n`error CS2012: Cannot open ... for writing`, the project itself is healthy —\n**Aspire is running and holding file locks** on the resource's output assemblies.\nThe recovery is always the same:\n\n```bash\n# ✅ Correct recovery sequence\naspire stop              # release the locks\n# ... then either rebuild \u002F restart one resource if the resource exposes commands ...\naspire resource \u003Cname> rebuild   # example: C# project resource with rebuild command\n# ... or restart the whole AppHost ...\naspire start             # if AppHost code changed or Aspire was already stopped\n```\n\n| ❌ NEVER do | ✅ ALWAYS do |\n|------------|-------------|\n| Tell the user the project has a permanent build failure | Recognize the lock as Aspire holding outputs and run `aspire stop` |\n| `dotnet build` again with locks held | `aspire stop` first, then `dotnet build` (or prefer resource commands\u002Fwatch\u002FHMR\u002Fdebug workflow) |\n| Delete `bin\u002F` \u002F `obj\u002F` to \"fix\" the lock | `aspire stop` — deletion may succeed but the next build relocks |\n| `pkill dotnet` or `kill \u003CPID>` to free locks | `aspire stop` — clean shutdown via the CLI, no orphans |\n| Tell the user to \"reboot\" or \"restart your machine\" | `aspire stop` — single command, instant fix |\n\nThe same rule applies to any \"file in use\", \"cannot access the file\", or\n\"another process is using\" error during a build of an Aspire-managed resource.\n\n## Handoff Rules\n\n| Scenario | Route To |\n|----------|----------|\n| AppHost wiring after `aspire init` (scan repo, add resources, ServiceDefaults\u002FOTel) | → `aspireify` skill ([`aspireify\u002FSKILL.md`](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspireify\u002FSKILL.md)) or project-local `.agents\u002Fskills\u002Faspireify\u002FSKILL.md` |\n| Browser logs (`Aspire.Hosting.Browsers` \u002F `WithBrowserLogs()`) and dashboard authoring | → `aspireify` skill (code edits) and `aspire-monitoring` (discovery) |\n| Custom resource commands (`WithCommand`, `ExecuteCommandResult`, `HttpCommandResultMode`) | → `aspireify` skill |\n| Lifecycle hooks (`SubscribeBeforeStart`, `SubscribeAfterResourcesCreated`, BeforeStart pipeline phase) | → `aspireify` skill |\n| Endpoint authoring (`WithEndpoint` updates, `ExcludeReferenceEndpoint` flag) | → `aspireify` skill |\n| Deploy, publish, pipeline steps, `aspire destroy` | → `aspire-deployment` skill |\n| Logs, traces, metrics, dashboard, `aspire dashboard run` | → `aspire-monitoring` skill |\n| Deployed app diagnostics | → `azure-diagnostics` skill (azure-skills) |\n\n## Runtime Settings And Environment\n\n| Variable | Default | Purpose |\n|----------|---------|---------|\n| `ASPIRE_ENABLE_CONTAINER_TUNNEL` | `true` | Container tunnel provides uniform host connectivity across Docker Desktop, Docker Engine, and Podman. Set to `false` to opt out. |\n| `ASPIRE_ENVIRONMENT` | unset | Selects the environment-specific config profile — controls which `appsettings.{environment}.json` is loaded and which environment is reported in dashboard telemetry. |\n| `ASPIRE_DCP_USE_DEVELOPER_CERTIFICATE` | `true` | The Aspire trusted developer certificate is used by DCP on Windows. Set to `false` to opt out. |\n| `features.defaultWatchEnabled` | false unless configured | Enables Aspire default watch for supported C# and TypeScript AppHosts. Do not treat this as per-resource rebuild, restart, or hot reload for resource source changes. |\n\n## TypeScript AppHost Note\n\nDetection covers TS AppHosts (`apphost.ts`), but **all TS AppHost authoring is delegated to `aspireify`**.\nCurrent rules to apply when handing off:\n\n| Rule | Why |\n|------|-----|\n| Prefer unified `withEnvironment(name, value)` over deprecated per-kind helpers (`withEnvironmentEndpoint`, `withEnvironmentParameter`, `withEnvironmentConnectionString`, `withEnvironmentExpression`, `withEnvironmentFromOutput`, `withEnvironmentFromKeyVaultSecret`) | Per-kind helpers are deprecated — single API now handles all value types |\n| Never edit `.aspire\u002Fmodules\u002F` directly | Generated; use `aspire add \u003Cpackage>` to regenerate and `aspire restore` to recover missing files |\n| Use `aspire docs api search \u003Cquery> --language typescript` for API lookup | TS surface differs from C# |\n\n## Skill Routing — In-Plugin Sibling Skills\n\nAfter `aspire init` drops a skeleton AppHost + `aspire.config.json`, route AppHost wiring\n(scan repo → propose resource graph → edit AppHost → wire `Aspire.ServiceDefaults` \u002F OTel →\nvalidate via `aspire start`) to the in-plugin **aspireify** skill: [`aspireify\u002FSKILL.md`](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspireify\u002FSKILL.md).\nFor first-run flows that only need the skeleton drop, see the in-plugin **aspire-init** skill:\n[`aspire-init\u002FSKILL.md`](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-init\u002FSKILL.md). This orchestration skill stays focused\non lifecycle (start\u002Fstop\u002Fwait\u002Frestart) and never edits AppHost code itself.\n\n## Project-Local Skill Precedence\n\nIf `.agents\u002Fskills\u002Faspire\u002FSKILL.md` exists (from `aspire agent init`), defer to it for:\nC# AppHost editing, TS AppHost editing, Playwright handoff, investigation workflows.\nSafety guardrails from this plugin ALWAYS apply.\n\nIf `.agents\u002Fskills\u002Faspireify\u002FSKILL.md` exists project-locally (installed by `aspire init` in\ncurrent Aspire), **warn the user** that a project-local aspireify skill is present and **defer to it**\nfor AppHost wiring instead of the in-plugin sibling. Same precedence rule as the project-local\n`aspire` skill above: project-local wins, plugin guardrails still apply.\n\n## References\n\n- [safety-guardrails.md](references\u002Fsafety-guardrails.md) — Detailed rules and recovery patterns\n- [detection.md](references\u002Fdetection.md) — Project fingerprinting\n- [app-commands.md](references\u002Fapp-commands.md) — App lifecycle and bootstrap commands\n- [resource-management.md](references\u002Fresource-management.md) — Resource wait, restart, and operations\n- [agent-workflows.md](references\u002Fagent-workflows.md) — Common agent investigation, integration, TypeScript, and handoff workflows\n",{"data":46,"body":49},{"name":4,"description":6,"license":25,"metadata":47},{"author":9,"version":48},"0.0.1",{"type":50,"children":51},"root",[52,60,87,94,174,187,193,198,408,421,427,769,781,787,856,862,1318,1324,1722,1736,1764,1887,2037,2042,2048,2333,2339,2483,2489,2513,2652,2658,2728,2734,2754,2793,2799,2854],{"type":53,"tag":54,"props":55,"children":56},"element","h1",{"id":4},[57],{"type":58,"value":59},"text","Aspire Orchestration",{"type":53,"tag":61,"props":62,"children":63},"blockquote",{},[64],{"type":53,"tag":65,"props":66,"children":67},"p",{},[68,74,76,85],{"type":53,"tag":69,"props":70,"children":71},"strong",{},[72],{"type":58,"value":73},"MANDATORY COMPLIANCE",{"type":58,"value":75}," — This skill prevents agent self-harm in Aspire projects.\nViolating these rules causes file locks, orphaned processes, and user frustration (",{"type":53,"tag":77,"props":78,"children":82},"a",{"href":79,"rel":80},"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire\u002Fissues\u002F15801",[81],"nofollow",[83],{"type":58,"value":84},"#15801",{"type":58,"value":86},").",{"type":53,"tag":88,"props":89,"children":91},"h2",{"id":90},"prerequisites",[92],{"type":58,"value":93},"Prerequisites",{"type":53,"tag":95,"props":96,"children":97},"table",{},[98,117],{"type":53,"tag":99,"props":100,"children":101},"thead",{},[102],{"type":53,"tag":103,"props":104,"children":105},"tr",{},[106,112],{"type":53,"tag":107,"props":108,"children":109},"th",{},[110],{"type":58,"value":111},"Requirement",{"type":53,"tag":107,"props":113,"children":114},{},[115],{"type":58,"value":116},"Install",{"type":53,"tag":118,"props":119,"children":120},"tbody",{},[121,139,157],{"type":53,"tag":103,"props":122,"children":123},{},[124,130],{"type":53,"tag":125,"props":126,"children":127},"td",{},[128],{"type":58,"value":129},".NET 10.0 SDK",{"type":53,"tag":125,"props":131,"children":132},{},[133],{"type":53,"tag":77,"props":134,"children":137},{"href":135,"rel":136},"https:\u002F\u002Fdotnet.microsoft.com\u002Fdownload",[81],[138],{"type":58,"value":135},{"type":53,"tag":103,"props":140,"children":141},{},[142,147],{"type":53,"tag":125,"props":143,"children":144},{},[145],{"type":58,"value":146},"Aspire CLI (curl\u002FPowerShell)",{"type":53,"tag":125,"props":148,"children":149},{},[150],{"type":53,"tag":151,"props":152,"children":154},"code",{"className":153},[],[155],{"type":58,"value":156},"curl -sSL https:\u002F\u002Faspire.dev\u002Finstall.sh | bash",{"type":53,"tag":103,"props":158,"children":159},{},[160,165],{"type":53,"tag":125,"props":161,"children":162},{},[163],{"type":58,"value":164},"Aspire CLI (NativeAOT global tool, .NET 10)",{"type":53,"tag":125,"props":166,"children":167},{},[168],{"type":53,"tag":151,"props":169,"children":171},{"className":170},[],[172],{"type":58,"value":173},"dotnet tool install -g Aspire.Cli",{"type":53,"tag":65,"props":175,"children":176},{},[177,179,185],{"type":58,"value":178},"Either install method works. The ",{"type":53,"tag":151,"props":180,"children":182},{"className":181},[],[183],{"type":58,"value":184},"dotnet tool install",{"type":58,"value":186}," path produces a NativeAOT binary\n(instant startup, no JIT warmup) and is the recommended option when .NET 10 is already present.",{"type":53,"tag":88,"props":188,"children":190},{"id":189},"detection",[191],{"type":58,"value":192},"Detection",{"type":53,"tag":65,"props":194,"children":195},{},[196],{"type":58,"value":197},"Activate when ANY signal is present:",{"type":53,"tag":95,"props":199,"children":200},{},[201,222],{"type":53,"tag":99,"props":202,"children":203},{},[204],{"type":53,"tag":103,"props":205,"children":206},{},[207,212,217],{"type":53,"tag":107,"props":208,"children":209},{},[210],{"type":58,"value":211},"Signal",{"type":53,"tag":107,"props":213,"children":214},{},[215],{"type":58,"value":216},"How to Detect",{"type":53,"tag":107,"props":218,"children":219},{},[220],{"type":58,"value":221},"Confidence",{"type":53,"tag":118,"props":223,"children":224},{},[225,255,292,315,339,362,384],{"type":53,"tag":103,"props":226,"children":227},{},[228,233,250],{"type":53,"tag":125,"props":229,"children":230},{},[231],{"type":58,"value":232},"C# AppHost",{"type":53,"tag":125,"props":234,"children":235},{},[236,242,244],{"type":53,"tag":151,"props":237,"children":239},{"className":238},[],[240],{"type":58,"value":241},".csproj",{"type":58,"value":243}," containing ",{"type":53,"tag":151,"props":245,"children":247},{"className":246},[],[248],{"type":58,"value":249},"Aspire.AppHost.Sdk",{"type":53,"tag":125,"props":251,"children":252},{},[253],{"type":58,"value":254},"✅ Definitive",{"type":53,"tag":103,"props":256,"children":257},{},[258,263,288],{"type":53,"tag":125,"props":259,"children":260},{},[261],{"type":58,"value":262},"File-based C# AppHost",{"type":53,"tag":125,"props":264,"children":265},{},[266,272,274,280,282],{"type":53,"tag":151,"props":267,"children":269},{"className":268},[],[270],{"type":58,"value":271},"apphost.cs",{"type":58,"value":273}," or ",{"type":53,"tag":151,"props":275,"children":277},{"className":276},[],[278],{"type":58,"value":279},".cs",{"type":58,"value":281}," file with ",{"type":53,"tag":151,"props":283,"children":285},{"className":284},[],[286],{"type":58,"value":287},"#:sdk Aspire.AppHost.Sdk",{"type":53,"tag":125,"props":289,"children":290},{},[291],{"type":58,"value":254},{"type":53,"tag":103,"props":293,"children":294},{},[295,300,311],{"type":53,"tag":125,"props":296,"children":297},{},[298],{"type":58,"value":299},"TypeScript AppHost",{"type":53,"tag":125,"props":301,"children":302},{},[303,309],{"type":53,"tag":151,"props":304,"children":306},{"className":305},[],[307],{"type":58,"value":308},"apphost.ts",{"type":58,"value":310}," file in project",{"type":53,"tag":125,"props":312,"children":313},{},[314],{"type":58,"value":254},{"type":53,"tag":103,"props":316,"children":317},{},[318,323,334],{"type":53,"tag":125,"props":319,"children":320},{},[321],{"type":58,"value":322},"Aspire config",{"type":53,"tag":125,"props":324,"children":325},{},[326,332],{"type":53,"tag":151,"props":327,"children":329},{"className":328},[],[330],{"type":58,"value":331},"aspire.config.json",{"type":58,"value":333}," in project root",{"type":53,"tag":125,"props":335,"children":336},{},[337],{"type":58,"value":338},"High",{"type":53,"tag":103,"props":340,"children":341},{},[342,347,358],{"type":53,"tag":125,"props":343,"children":344},{},[345],{"type":58,"value":346},"Aspire settings",{"type":53,"tag":125,"props":348,"children":349},{},[350,356],{"type":53,"tag":151,"props":351,"children":353},{"className":352},[],[354],{"type":58,"value":355},".aspire\u002F",{"type":58,"value":357}," directory present",{"type":53,"tag":125,"props":359,"children":360},{},[361],{"type":58,"value":338},{"type":53,"tag":103,"props":363,"children":364},{},[365,370,380],{"type":53,"tag":125,"props":366,"children":367},{},[368],{"type":58,"value":369},"Generated TS modules",{"type":53,"tag":125,"props":371,"children":372},{},[373,379],{"type":53,"tag":151,"props":374,"children":376},{"className":375},[],[377],{"type":58,"value":378},".aspire\u002Fmodules\u002F",{"type":58,"value":357},{"type":53,"tag":125,"props":381,"children":382},{},[383],{"type":58,"value":338},{"type":53,"tag":103,"props":385,"children":386},{},[387,392,403],{"type":53,"tag":125,"props":388,"children":389},{},[390],{"type":58,"value":391},"Service defaults",{"type":53,"tag":125,"props":393,"children":394},{},[395,401],{"type":53,"tag":151,"props":396,"children":398},{"className":397},[],[399],{"type":58,"value":400},"Aspire.ServiceDefaults",{"type":58,"value":402}," in project references",{"type":53,"tag":125,"props":404,"children":405},{},[406],{"type":58,"value":407},"Medium",{"type":53,"tag":65,"props":409,"children":410},{},[411,413,419],{"type":58,"value":412},"See ",{"type":53,"tag":77,"props":414,"children":416},{"href":415},"references\u002Fdetection.md",[417],{"type":58,"value":418},"detection.md",{"type":58,"value":420}," for detailed fingerprinting.",{"type":53,"tag":88,"props":422,"children":424},{"id":423},"safety-guardrails",[425],{"type":58,"value":426},"Safety Guardrails",{"type":53,"tag":95,"props":428,"children":429},{},[430,451],{"type":53,"tag":99,"props":431,"children":432},{},[433],{"type":53,"tag":103,"props":434,"children":435},{},[436,441,446],{"type":53,"tag":107,"props":437,"children":438},{},[439],{"type":58,"value":440},"Situation",{"type":53,"tag":107,"props":442,"children":443},{},[444],{"type":58,"value":445},"✅ ALWAYS Do",{"type":53,"tag":107,"props":447,"children":448},{},[449],{"type":58,"value":450},"❌ NEVER Do",{"type":53,"tag":118,"props":452,"children":453},{},[454,482,510,534,556,586,613,639,671,697,729],{"type":53,"tag":103,"props":455,"children":456},{},[457,462,471],{"type":53,"tag":125,"props":458,"children":459},{},[460],{"type":58,"value":461},"Start an Aspire app",{"type":53,"tag":125,"props":463,"children":464},{},[465],{"type":53,"tag":151,"props":466,"children":468},{"className":467},[],[469],{"type":58,"value":470},"aspire start",{"type":53,"tag":125,"props":472,"children":473},{},[474,480],{"type":53,"tag":151,"props":475,"children":477},{"className":476},[],[478],{"type":58,"value":479},"dotnet run",{"type":58,"value":481}," on AppHost",{"type":53,"tag":103,"props":483,"children":484},{},[485,490,499],{"type":53,"tag":125,"props":486,"children":487},{},[488],{"type":58,"value":489},"Wait for resource ready",{"type":53,"tag":125,"props":491,"children":492},{},[493],{"type":53,"tag":151,"props":494,"children":496},{"className":495},[],[497],{"type":58,"value":498},"aspire wait \u003Cresource>",{"type":53,"tag":125,"props":500,"children":501},{},[502,508],{"type":53,"tag":151,"props":503,"children":505},{"className":504},[],[506],{"type":58,"value":507},"curl",{"type":58,"value":509}," \u002F HTTP polling loops",{"type":53,"tag":103,"props":511,"children":512},{},[513,518,523],{"type":53,"tag":125,"props":514,"children":515},{},[516],{"type":58,"value":517},"Code changed in a resource",{"type":53,"tag":125,"props":519,"children":520},{},[521],{"type":58,"value":522},"Prefer resource commands, runtime watch\u002FHMR, dashboard actions, or IDE-managed debugging",{"type":53,"tag":125,"props":524,"children":525},{},[526,532],{"type":53,"tag":151,"props":527,"children":529},{"className":528},[],[530],{"type":58,"value":531},"dotnet build",{"type":58,"value":533}," against locked files",{"type":53,"tag":103,"props":535,"children":536},{},[537,542,551],{"type":53,"tag":125,"props":538,"children":539},{},[540],{"type":58,"value":541},"Task complete",{"type":53,"tag":125,"props":543,"children":544},{},[545],{"type":53,"tag":151,"props":546,"children":548},{"className":547},[],[549],{"type":58,"value":550},"aspire stop",{"type":53,"tag":125,"props":552,"children":553},{},[554],{"type":58,"value":555},"Leave processes running",{"type":53,"tag":103,"props":557,"children":558},{},[559,564,581],{"type":53,"tag":125,"props":560,"children":561},{},[562],{"type":58,"value":563},"Check resource status",{"type":53,"tag":125,"props":565,"children":566},{},[567,573,575],{"type":53,"tag":151,"props":568,"children":570},{"className":569},[],[571],{"type":58,"value":572},"aspire describe",{"type":58,"value":574}," \u002F ",{"type":53,"tag":151,"props":576,"children":578},{"className":577},[],[579],{"type":58,"value":580},"aspire ps",{"type":53,"tag":125,"props":582,"children":583},{},[584],{"type":58,"value":585},"Manual process inspection",{"type":53,"tag":103,"props":587,"children":588},{},[589,594,603],{"type":53,"tag":125,"props":590,"children":591},{},[592],{"type":58,"value":593},"Working in git worktree",{"type":53,"tag":125,"props":595,"children":596},{},[597],{"type":53,"tag":151,"props":598,"children":600},{"className":599},[],[601],{"type":58,"value":602},"aspire start --isolated",{"type":53,"tag":125,"props":604,"children":605},{},[606,611],{"type":53,"tag":151,"props":607,"children":609},{"className":608},[],[610],{"type":58,"value":470},{"type":58,"value":612}," without isolation",{"type":53,"tag":103,"props":614,"children":615},{},[616,621,634],{"type":53,"tag":125,"props":617,"children":618},{},[619],{"type":58,"value":620},"Running from AI agent",{"type":53,"tag":125,"props":622,"children":623},{},[624,626,632],{"type":58,"value":625},"Add ",{"type":53,"tag":151,"props":627,"children":629},{"className":628},[],[630],{"type":58,"value":631},"--non-interactive",{"type":58,"value":633}," to all commands",{"type":53,"tag":125,"props":635,"children":636},{},[637],{"type":58,"value":638},"Assuming interactive terminal",{"type":53,"tag":103,"props":640,"children":641},{},[642,647,666],{"type":53,"tag":125,"props":643,"children":644},{},[645],{"type":58,"value":646},"Editing unfamiliar API",{"type":53,"tag":125,"props":648,"children":649},{},[650,656,658,664],{"type":53,"tag":151,"props":651,"children":653},{"className":652},[],[654],{"type":58,"value":655},"aspire docs search \u003Ctopic>",{"type":58,"value":657}," then ",{"type":53,"tag":151,"props":659,"children":661},{"className":660},[],[662],{"type":58,"value":663},"aspire docs api search \u003Cquery>",{"type":58,"value":665}," for API reference",{"type":53,"tag":125,"props":667,"children":668},{},[669],{"type":58,"value":670},"Guessing API shape",{"type":53,"tag":103,"props":672,"children":673},{},[674,679,692],{"type":53,"tag":125,"props":675,"children":676},{},[677],{"type":58,"value":678},"C# AppHost API inspection",{"type":53,"tag":125,"props":680,"children":681},{},[682,684,690],{"type":58,"value":683},"Use ",{"type":53,"tag":151,"props":685,"children":687},{"className":686},[],[688],{"type":58,"value":689},"dotnet-inspect",{"type":58,"value":691}," skill (if available) for local symbols",{"type":53,"tag":125,"props":693,"children":694},{},[695],{"type":58,"value":696},"Guessing overloads or builder chains",{"type":53,"tag":103,"props":698,"children":699},{},[700,705,716],{"type":53,"tag":125,"props":701,"children":702},{},[703],{"type":58,"value":704},"Adding custom dashboard\u002Fresource commands",{"type":53,"tag":125,"props":706,"children":707},{},[708,714],{"type":53,"tag":151,"props":709,"children":711},{"className":710},[],[712],{"type":58,"value":713},"aspire docs search \"custom resource commands\"",{"type":58,"value":715}," first",{"type":53,"tag":125,"props":717,"children":718},{},[719,721,727],{"type":58,"value":720},"Inventing ",{"type":53,"tag":151,"props":722,"children":724},{"className":723},[],[725],{"type":58,"value":726},"WithCommand",{"type":58,"value":728}," patterns without docs",{"type":53,"tag":103,"props":730,"children":731},{},[732,737,754],{"type":53,"tag":125,"props":733,"children":734},{},[735],{"type":58,"value":736},"Installing Aspire support",{"type":53,"tag":125,"props":738,"children":739},{},[740,741,747,748],{"type":58,"value":683},{"type":53,"tag":151,"props":742,"children":744},{"className":743},[],[745],{"type":58,"value":746},"aspire add",{"type":58,"value":273},{"type":53,"tag":151,"props":749,"children":751},{"className":750},[],[752],{"type":58,"value":753},"aspire init",{"type":53,"tag":125,"props":755,"children":756},{},[757,767],{"type":53,"tag":758,"props":759,"children":760},"del",{},[761],{"type":53,"tag":151,"props":762,"children":764},{"className":763},[],[765],{"type":58,"value":766},"dotnet workload install aspire",{"type":58,"value":768}," (obsolete)",{"type":53,"tag":65,"props":770,"children":771},{},[772,773,779],{"type":58,"value":412},{"type":53,"tag":77,"props":774,"children":776},{"href":775},"references\u002Fsafety-guardrails.md",[777],{"type":58,"value":778},"safety-guardrails.md",{"type":58,"value":780}," for detailed rules and recovery patterns.",{"type":53,"tag":88,"props":782,"children":784},{"id":783},"default-workflow",[785],{"type":58,"value":786},"Default Workflow",{"type":53,"tag":788,"props":789,"children":790},"ol",{},[791,797,814,824,834,846],{"type":53,"tag":792,"props":793,"children":794},"li",{},[795],{"type":58,"value":796},"Confirm workspace is Aspire — identify the AppHost",{"type":53,"tag":792,"props":798,"children":799},{},[800,805,807,812],{"type":53,"tag":151,"props":801,"children":803},{"className":802},[],[804],{"type":58,"value":470},{"type":58,"value":806}," (or ",{"type":53,"tag":151,"props":808,"children":810},{"className":809},[],[811],{"type":58,"value":602},{"type":58,"value":813}," in worktrees)",{"type":53,"tag":792,"props":815,"children":816},{},[817,822],{"type":53,"tag":151,"props":818,"children":820},{"className":819},[],[821],{"type":58,"value":498},{"type":58,"value":823}," before interacting with any resource",{"type":53,"tag":792,"props":825,"children":826},{},[827,832],{"type":53,"tag":151,"props":828,"children":830},{"className":829},[],[831],{"type":58,"value":572},{"type":58,"value":833}," to inspect state, then work",{"type":53,"tag":792,"props":835,"children":836},{},[837,839,844],{"type":58,"value":838},"If AppHost code changed, rerun ",{"type":53,"tag":151,"props":840,"children":842},{"className":841},[],[843],{"type":58,"value":470},{"type":58,"value":845},"; if only one resource changed, prefer the resource's commands\u002Fwatch\u002FHMR\u002Fdebug workflow",{"type":53,"tag":792,"props":847,"children":848},{},[849,854],{"type":53,"tag":151,"props":850,"children":852},{"className":851},[],[853],{"type":58,"value":550},{"type":58,"value":855}," when cleanup is explicitly requested or needed to release locks\u002Fports",{"type":53,"tag":88,"props":857,"children":859},{"id":858},"quick-reference",[860],{"type":58,"value":861},"Quick Reference",{"type":53,"tag":95,"props":863,"children":864},{},[865,881],{"type":53,"tag":99,"props":866,"children":867},{},[868],{"type":53,"tag":103,"props":869,"children":870},{},[871,876],{"type":53,"tag":107,"props":872,"children":873},{},[874],{"type":58,"value":875},"Task",{"type":53,"tag":107,"props":877,"children":878},{},[879],{"type":58,"value":880},"Command",{"type":53,"tag":118,"props":882,"children":883},{},[884,902,921,937,953,975,999,1042,1059,1085,1102,1126,1143,1162,1179,1210,1227,1267,1284,1301],{"type":53,"tag":103,"props":885,"children":886},{},[887,892],{"type":53,"tag":125,"props":888,"children":889},{},[890],{"type":58,"value":891},"Start app (agents)",{"type":53,"tag":125,"props":893,"children":894},{},[895,900],{"type":53,"tag":151,"props":896,"children":898},{"className":897},[],[899],{"type":58,"value":470},{"type":58,"value":901}," (background, preferred)",{"type":53,"tag":103,"props":903,"children":904},{},[905,910],{"type":53,"tag":125,"props":906,"children":907},{},[908],{"type":58,"value":909},"Start app (human)",{"type":53,"tag":125,"props":911,"children":912},{},[913,919],{"type":53,"tag":151,"props":914,"children":916},{"className":915},[],[917],{"type":58,"value":918},"aspire run",{"type":58,"value":920}," (foreground, dashboard)",{"type":53,"tag":103,"props":922,"children":923},{},[924,929],{"type":53,"tag":125,"props":925,"children":926},{},[927],{"type":58,"value":928},"Stop app",{"type":53,"tag":125,"props":930,"children":931},{},[932],{"type":53,"tag":151,"props":933,"children":935},{"className":934},[],[936],{"type":58,"value":550},{"type":53,"tag":103,"props":938,"children":939},{},[940,945],{"type":53,"tag":125,"props":941,"children":942},{},[943],{"type":58,"value":944},"Wait for resource",{"type":53,"tag":125,"props":946,"children":947},{},[948],{"type":53,"tag":151,"props":949,"children":951},{"className":950},[],[952],{"type":58,"value":498},{"type":53,"tag":103,"props":954,"children":955},{},[956,961],{"type":53,"tag":125,"props":957,"children":958},{},[959],{"type":58,"value":960},"Check status",{"type":53,"tag":125,"props":962,"children":963},{},[964,969,970],{"type":53,"tag":151,"props":965,"children":967},{"className":966},[],[968],{"type":58,"value":580},{"type":58,"value":273},{"type":53,"tag":151,"props":971,"children":973},{"className":972},[],[974],{"type":58,"value":572},{"type":53,"tag":103,"props":976,"children":977},{},[978,983],{"type":53,"tag":125,"props":979,"children":980},{},[981],{"type":58,"value":982},"Show hidden resources (proxies, helpers, migrations)",{"type":53,"tag":125,"props":984,"children":985},{},[986,992,993],{"type":53,"tag":151,"props":987,"children":989},{"className":988},[],[990],{"type":58,"value":991},"aspire ps --include-hidden",{"type":58,"value":574},{"type":53,"tag":151,"props":994,"children":996},{"className":995},[],[997],{"type":58,"value":998},"aspire describe --include-hidden",{"type":53,"tag":103,"props":1000,"children":1001},{},[1002,1007],{"type":53,"tag":125,"props":1003,"children":1004},{},[1005],{"type":58,"value":1006},"Resource operation",{"type":53,"tag":125,"props":1008,"children":1009},{},[1010,1016,1018,1024,1026,1032,1034,1040],{"type":53,"tag":151,"props":1011,"children":1013},{"className":1012},[],[1014],{"type":58,"value":1015},"aspire resource \u003Cresource-name> \u003Ccommand>",{"type":58,"value":1017}," such as ",{"type":53,"tag":151,"props":1019,"children":1021},{"className":1020},[],[1022],{"type":58,"value":1023},"stop",{"type":58,"value":1025},", ",{"type":53,"tag":151,"props":1027,"children":1029},{"className":1028},[],[1030],{"type":58,"value":1031},"start",{"type":58,"value":1033},", or ",{"type":53,"tag":151,"props":1035,"children":1037},{"className":1036},[],[1038],{"type":58,"value":1039},"rebuild",{"type":58,"value":1041}," when exposed",{"type":53,"tag":103,"props":1043,"children":1044},{},[1045,1050],{"type":53,"tag":125,"props":1046,"children":1047},{},[1048],{"type":58,"value":1049},"Create new project",{"type":53,"tag":125,"props":1051,"children":1052},{},[1053],{"type":53,"tag":151,"props":1054,"children":1056},{"className":1055},[],[1057],{"type":58,"value":1058},"aspire new aspire-starter",{"type":53,"tag":103,"props":1060,"children":1061},{},[1062,1067],{"type":53,"tag":125,"props":1063,"children":1064},{},[1065],{"type":58,"value":1066},"Add Aspire to existing",{"type":53,"tag":125,"props":1068,"children":1069},{},[1070,1075,1077,1083],{"type":53,"tag":151,"props":1071,"children":1073},{"className":1072},[],[1074],{"type":58,"value":753},{"type":58,"value":1076}," (then hand off to ",{"type":53,"tag":151,"props":1078,"children":1080},{"className":1079},[],[1081],{"type":58,"value":1082},"aspireify",{"type":58,"value":1084}," skill for wiring)",{"type":53,"tag":103,"props":1086,"children":1087},{},[1088,1093],{"type":53,"tag":125,"props":1089,"children":1090},{},[1091],{"type":58,"value":1092},"Add integration",{"type":53,"tag":125,"props":1094,"children":1095},{},[1096],{"type":53,"tag":151,"props":1097,"children":1099},{"className":1098},[],[1100],{"type":58,"value":1101},"aspire add \u003Cpackage>",{"type":53,"tag":103,"props":1103,"children":1104},{},[1105,1110],{"type":53,"tag":125,"props":1106,"children":1107},{},[1108],{"type":58,"value":1109},"Discover integrations",{"type":53,"tag":125,"props":1111,"children":1112},{},[1113,1119,1120],{"type":53,"tag":151,"props":1114,"children":1116},{"className":1115},[],[1117],{"type":58,"value":1118},"aspire integration list --format Json",{"type":58,"value":574},{"type":53,"tag":151,"props":1121,"children":1123},{"className":1122},[],[1124],{"type":58,"value":1125},"aspire integration search \u003Cquery> --format Json",{"type":53,"tag":103,"props":1127,"children":1128},{},[1129,1134],{"type":53,"tag":125,"props":1130,"children":1131},{},[1132],{"type":58,"value":1133},"Upgrade the CLI itself",{"type":53,"tag":125,"props":1135,"children":1136},{},[1137],{"type":53,"tag":151,"props":1138,"children":1140},{"className":1139},[],[1141],{"type":58,"value":1142},"aspire update --self",{"type":53,"tag":103,"props":1144,"children":1145},{},[1146,1151],{"type":53,"tag":125,"props":1147,"children":1148},{},[1149],{"type":58,"value":1150},"Update project package refs",{"type":53,"tag":125,"props":1152,"children":1153},{},[1154,1160],{"type":53,"tag":151,"props":1155,"children":1157},{"className":1156},[],[1158],{"type":58,"value":1159},"aspire update",{"type":58,"value":1161}," (modifies project files — get user approval)",{"type":53,"tag":103,"props":1163,"children":1164},{},[1165,1170],{"type":53,"tag":125,"props":1166,"children":1167},{},[1168],{"type":58,"value":1169},"Restore generated files",{"type":53,"tag":125,"props":1171,"children":1172},{},[1173],{"type":53,"tag":151,"props":1174,"children":1176},{"className":1175},[],[1177],{"type":58,"value":1178},"aspire restore",{"type":53,"tag":103,"props":1180,"children":1181},{},[1182,1187],{"type":53,"tag":125,"props":1183,"children":1184},{},[1185],{"type":58,"value":1186},"Environment maintenance",{"type":53,"tag":125,"props":1188,"children":1189},{},[1190,1196,1197,1203,1204],{"type":53,"tag":151,"props":1191,"children":1193},{"className":1192},[],[1194],{"type":58,"value":1195},"aspire cache clear",{"type":58,"value":1025},{"type":53,"tag":151,"props":1198,"children":1200},{"className":1199},[],[1201],{"type":58,"value":1202},"aspire certs trust",{"type":58,"value":1025},{"type":53,"tag":151,"props":1205,"children":1207},{"className":1206},[],[1208],{"type":58,"value":1209},"aspire certs clean",{"type":53,"tag":103,"props":1211,"children":1212},{},[1213,1218],{"type":53,"tag":125,"props":1214,"children":1215},{},[1216],{"type":58,"value":1217},"Diagnose environment",{"type":53,"tag":125,"props":1219,"children":1220},{},[1221],{"type":53,"tag":151,"props":1222,"children":1224},{"className":1223},[],[1225],{"type":58,"value":1226},"aspire doctor",{"type":53,"tag":103,"props":1228,"children":1229},{},[1230,1235],{"type":53,"tag":125,"props":1231,"children":1232},{},[1233],{"type":58,"value":1234},"Machine-readable output",{"type":53,"tag":125,"props":1236,"children":1237},{},[1238,1244,1246,1252,1253,1259,1260,1265],{"type":53,"tag":151,"props":1239,"children":1241},{"className":1240},[],[1242],{"type":58,"value":1243},"--format Json",{"type":58,"value":1245}," (supported: ",{"type":53,"tag":151,"props":1247,"children":1249},{"className":1248},[],[1250],{"type":58,"value":1251},"ps",{"type":58,"value":1025},{"type":53,"tag":151,"props":1254,"children":1256},{"className":1255},[],[1257],{"type":58,"value":1258},"describe",{"type":58,"value":1025},{"type":53,"tag":151,"props":1261,"children":1263},{"className":1262},[],[1264],{"type":58,"value":1031},{"type":58,"value":1266},")",{"type":53,"tag":103,"props":1268,"children":1269},{},[1270,1275],{"type":53,"tag":125,"props":1271,"children":1272},{},[1273],{"type":58,"value":1274},"Look up API reference",{"type":53,"tag":125,"props":1276,"children":1277},{},[1278],{"type":53,"tag":151,"props":1279,"children":1281},{"className":1280},[],[1282],{"type":58,"value":1283},"aspire docs api search \u003Cquery> --language csharp|typescript",{"type":53,"tag":103,"props":1285,"children":1286},{},[1287,1292],{"type":53,"tag":125,"props":1288,"children":1289},{},[1290],{"type":58,"value":1291},"Browse API entries",{"type":53,"tag":125,"props":1293,"children":1294},{},[1295],{"type":53,"tag":151,"props":1296,"children":1298},{"className":1297},[],[1299],{"type":58,"value":1300},"aspire docs api list \u003Cscope>",{"type":53,"tag":103,"props":1302,"children":1303},{},[1304,1309],{"type":53,"tag":125,"props":1305,"children":1306},{},[1307],{"type":58,"value":1308},"Get API detail",{"type":53,"tag":125,"props":1310,"children":1311},{},[1312],{"type":53,"tag":151,"props":1313,"children":1315},{"className":1314},[],[1316],{"type":58,"value":1317},"aspire docs api get \u003Cid>",{"type":53,"tag":88,"props":1319,"children":1321},{"id":1320},"error-handling",[1322],{"type":58,"value":1323},"Error Handling",{"type":53,"tag":95,"props":1325,"children":1326},{},[1327,1348],{"type":53,"tag":99,"props":1328,"children":1329},{},[1330],{"type":53,"tag":103,"props":1331,"children":1332},{},[1333,1338,1343],{"type":53,"tag":107,"props":1334,"children":1335},{},[1336],{"type":58,"value":1337},"Symptom",{"type":53,"tag":107,"props":1339,"children":1340},{},[1341],{"type":58,"value":1342},"Cause",{"type":53,"tag":107,"props":1344,"children":1345},{},[1346],{"type":58,"value":1347},"Action",{"type":53,"tag":118,"props":1349,"children":1350},{},[1351,1422,1450,1473,1498,1521,1552,1611,1642,1674,1697],{"type":53,"tag":103,"props":1352,"children":1353},{},[1354,1376,1399],{"type":53,"tag":125,"props":1355,"children":1356},{},[1357],{"type":53,"tag":69,"props":1358,"children":1359},{},[1360,1362,1368,1369,1375],{"type":58,"value":1361},"File lock errors during build (",{"type":53,"tag":151,"props":1363,"children":1365},{"className":1364},[],[1366],{"type":58,"value":1367},"MSB3491",{"type":58,"value":1025},{"type":53,"tag":151,"props":1370,"children":1372},{"className":1371},[],[1373],{"type":58,"value":1374},"CS2012",{"type":58,"value":1266},{"type":53,"tag":125,"props":1377,"children":1378},{},[1379],{"type":53,"tag":69,"props":1380,"children":1381},{},[1382,1384,1390,1391,1397],{"type":58,"value":1383},"Aspire is running and holds locks on ",{"type":53,"tag":151,"props":1385,"children":1387},{"className":1386},[],[1388],{"type":58,"value":1389},"bin\u002F",{"type":58,"value":1025},{"type":53,"tag":151,"props":1392,"children":1394},{"className":1393},[],[1395],{"type":58,"value":1396},"obj\u002F",{"type":58,"value":1398},", and assemblies.",{"type":53,"tag":125,"props":1400,"children":1401},{},[1402,1413,1415,1420],{"type":53,"tag":69,"props":1403,"children":1404},{},[1405,1407,1412],{"type":58,"value":1406},"Run ",{"type":53,"tag":151,"props":1408,"children":1410},{"className":1409},[],[1411],{"type":58,"value":550},{"type":58,"value":715},{"type":58,"value":1414},", then rebuild or ",{"type":53,"tag":151,"props":1416,"children":1418},{"className":1417},[],[1419],{"type":58,"value":470},{"type":58,"value":1421},". Do NOT conclude the project has a permanent build failure.",{"type":53,"tag":103,"props":1423,"children":1424},{},[1425,1430,1435],{"type":53,"tag":125,"props":1426,"children":1427},{},[1428],{"type":58,"value":1429},"\"Port already in use\"",{"type":53,"tag":125,"props":1431,"children":1432},{},[1433],{"type":58,"value":1434},"Previous instance running",{"type":53,"tag":125,"props":1436,"children":1437},{},[1438,1443,1445],{"type":53,"tag":151,"props":1439,"children":1441},{"className":1440},[],[1442],{"type":58,"value":550},{"type":58,"value":1444},", then ",{"type":53,"tag":151,"props":1446,"children":1448},{"className":1447},[],[1449],{"type":58,"value":470},{"type":53,"tag":103,"props":1451,"children":1452},{},[1453,1458,1463],{"type":53,"tag":125,"props":1454,"children":1455},{},[1456],{"type":58,"value":1457},"Resource not found",{"type":53,"tag":125,"props":1459,"children":1460},{},[1461],{"type":58,"value":1462},"App not started or name wrong",{"type":53,"tag":125,"props":1464,"children":1465},{},[1466,1471],{"type":53,"tag":151,"props":1467,"children":1469},{"className":1468},[],[1470],{"type":58,"value":580},{"type":58,"value":1472}," to check",{"type":53,"tag":103,"props":1474,"children":1475},{},[1476,1481,1486],{"type":53,"tag":125,"props":1477,"children":1478},{},[1479],{"type":58,"value":1480},"Build errors in resource",{"type":53,"tag":125,"props":1482,"children":1483},{},[1484],{"type":58,"value":1485},"Code error, not Aspire issue",{"type":53,"tag":125,"props":1487,"children":1488},{},[1489,1491,1496],{"type":58,"value":1490},"Fix code, then use resource commands\u002Fwatch\u002FHMR\u002Fdebug workflow or rerun ",{"type":53,"tag":151,"props":1492,"children":1494},{"className":1493},[],[1495],{"type":58,"value":470},{"type":58,"value":1497}," if AppHost code changed",{"type":53,"tag":103,"props":1499,"children":1500},{},[1501,1506,1511],{"type":53,"tag":125,"props":1502,"children":1503},{},[1504],{"type":58,"value":1505},"Environment issues",{"type":53,"tag":125,"props":1507,"children":1508},{},[1509],{"type":58,"value":1510},"Missing SDK or tools",{"type":53,"tag":125,"props":1512,"children":1513},{},[1514,1519],{"type":53,"tag":151,"props":1515,"children":1517},{"className":1516},[],[1518],{"type":58,"value":1226},{"type":58,"value":1520}," to diagnose",{"type":53,"tag":103,"props":1522,"children":1523},{},[1524,1534,1547],{"type":53,"tag":125,"props":1525,"children":1526},{},[1527,1529],{"type":58,"value":1528},"JSON parse failure from ",{"type":53,"tag":151,"props":1530,"children":1532},{"className":1531},[],[1533],{"type":58,"value":470},{"type":53,"tag":125,"props":1535,"children":1536},{},[1537,1539,1546],{"type":58,"value":1538},"Mixed human\u002FJSON output (",{"type":53,"tag":77,"props":1540,"children":1543},{"href":1541,"rel":1542},"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire\u002Fissues\u002F15843",[81],[1544],{"type":58,"value":1545},"#15843",{"type":58,"value":1266},{"type":53,"tag":125,"props":1548,"children":1549},{},[1550],{"type":58,"value":1551},"Strip non-JSON lines before parsing",{"type":53,"tag":103,"props":1553,"children":1554},{},[1555,1566,1594],{"type":53,"tag":125,"props":1556,"children":1557},{},[1558,1564],{"type":53,"tag":151,"props":1559,"children":1561},{"className":1560},[],[1562],{"type":58,"value":1563},"aspire wait",{"type":58,"value":1565}," rejects name",{"type":53,"tag":125,"props":1567,"children":1568},{},[1569,1570,1576,1578,1584,1586,1593],{"type":58,"value":683},{"type":53,"tag":151,"props":1571,"children":1573},{"className":1572},[],[1574],{"type":58,"value":1575},"displayName",{"type":58,"value":1577}," not ",{"type":53,"tag":151,"props":1579,"children":1581},{"className":1580},[],[1582],{"type":58,"value":1583},"name",{"type":58,"value":1585}," (",{"type":53,"tag":77,"props":1587,"children":1590},{"href":1588,"rel":1589},"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire\u002Fissues\u002F15842",[81],[1591],{"type":58,"value":1592},"#15842",{"type":58,"value":1266},{"type":53,"tag":125,"props":1595,"children":1596},{},[1597,1598,1603,1605],{"type":58,"value":683},{"type":53,"tag":151,"props":1599,"children":1601},{"className":1600},[],[1602],{"type":58,"value":1575},{"type":58,"value":1604}," from ",{"type":53,"tag":151,"props":1606,"children":1608},{"className":1607},[],[1609],{"type":58,"value":1610},"aspire ps --format Json",{"type":53,"tag":103,"props":1612,"children":1613},{},[1614,1624,1637],{"type":53,"tag":125,"props":1615,"children":1616},{},[1617,1622],{"type":53,"tag":151,"props":1618,"children":1620},{"className":1619},[],[1621],{"type":58,"value":580},{"type":58,"value":1623}," hangs",{"type":53,"tag":125,"props":1625,"children":1626},{},[1627,1629,1636],{"type":58,"value":1628},"AppHost on breakpoint (",{"type":53,"tag":77,"props":1630,"children":1633},{"href":1631,"rel":1632},"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire\u002Fissues\u002F15576",[81],[1634],{"type":58,"value":1635},"#15576",{"type":58,"value":1266},{"type":53,"tag":125,"props":1638,"children":1639},{},[1640],{"type":58,"value":1641},"Use timeout, check AppHost process",{"type":53,"tag":103,"props":1643,"children":1644},{},[1645,1656,1669],{"type":53,"tag":125,"props":1646,"children":1647},{},[1648,1654],{"type":53,"tag":151,"props":1649,"children":1651},{"className":1650},[],[1652],{"type":58,"value":1653},"aspire agent init",{"type":58,"value":1655}," fails",{"type":53,"tag":125,"props":1657,"children":1658},{},[1659,1661,1668],{"type":58,"value":1660},"Non-interactive terminal (",{"type":53,"tag":77,"props":1662,"children":1665},{"href":1663,"rel":1664},"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire\u002Fissues\u002F16264",[81],[1666],{"type":58,"value":1667},"#16264",{"type":58,"value":1266},{"type":53,"tag":125,"props":1670,"children":1671},{},[1672],{"type":58,"value":1673},"Run from standard terminal",{"type":53,"tag":103,"props":1675,"children":1676},{},[1677,1682,1687],{"type":53,"tag":125,"props":1678,"children":1679},{},[1680],{"type":58,"value":1681},"Docker daemon unavailable",{"type":53,"tag":125,"props":1683,"children":1684},{},[1685],{"type":58,"value":1686},"Container-backed resources fail to start",{"type":53,"tag":125,"props":1688,"children":1689},{},[1690,1692],{"type":58,"value":1691},"Start Docker Desktop, then ",{"type":53,"tag":151,"props":1693,"children":1695},{"className":1694},[],[1696],{"type":58,"value":470},{"type":53,"tag":103,"props":1698,"children":1699},{},[1700,1705,1710],{"type":53,"tag":125,"props":1701,"children":1702},{},[1703],{"type":58,"value":1704},"Multiple AppHosts detected",{"type":53,"tag":125,"props":1706,"children":1707},{},[1708],{"type":58,"value":1709},"Wrong AppHost targeted",{"type":53,"tag":125,"props":1711,"children":1712},{},[1713,1714,1720],{"type":58,"value":683},{"type":53,"tag":151,"props":1715,"children":1717},{"className":1716},[],[1718],{"type":58,"value":1719},"--apphost \u003Cpath>",{"type":58,"value":1721}," to specify explicitly",{"type":53,"tag":1723,"props":1724,"children":1726},"h3",{"id":1725},"file-lock-recovery-msb3491-cs2012-always-aspire-stop-first",[1727,1729,1734],{"type":58,"value":1728},"🔒 File-Lock Recovery (MSB3491 \u002F CS2012) — Always ",{"type":53,"tag":151,"props":1730,"children":1732},{"className":1731},[],[1733],{"type":58,"value":550},{"type":58,"value":1735}," First",{"type":53,"tag":65,"props":1737,"children":1738},{},[1739,1741,1747,1749,1755,1757,1762],{"type":58,"value":1740},"When a build fails with ",{"type":53,"tag":151,"props":1742,"children":1744},{"className":1743},[],[1745],{"type":58,"value":1746},"error MSB3491: Could not write to output file ...",{"type":58,"value":1748}," or\n",{"type":53,"tag":151,"props":1750,"children":1752},{"className":1751},[],[1753],{"type":58,"value":1754},"error CS2012: Cannot open ... for writing",{"type":58,"value":1756},", the project itself is healthy —\n",{"type":53,"tag":69,"props":1758,"children":1759},{},[1760],{"type":58,"value":1761},"Aspire is running and holding file locks",{"type":58,"value":1763}," on the resource's output assemblies.\nThe recovery is always the same:",{"type":53,"tag":1765,"props":1766,"children":1771},"pre",{"className":1767,"code":1768,"language":1769,"meta":1770,"style":1770},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# ✅ Correct recovery sequence\naspire stop              # release the locks\n# ... then either rebuild \u002F restart one resource if the resource exposes commands ...\naspire resource \u003Cname> rebuild   # example: C# project resource with rebuild command\n# ... or restart the whole AppHost ...\naspire start             # if AppHost code changed or Aspire was already stopped\n","bash","",[1772],{"type":53,"tag":151,"props":1773,"children":1774},{"__ignoreMap":1770},[1775,1787,1807,1816,1861,1870],{"type":53,"tag":1776,"props":1777,"children":1780},"span",{"class":1778,"line":1779},"line",1,[1781],{"type":53,"tag":1776,"props":1782,"children":1784},{"style":1783},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1785],{"type":58,"value":1786},"# ✅ Correct recovery sequence\n",{"type":53,"tag":1776,"props":1788,"children":1790},{"class":1778,"line":1789},2,[1791,1796,1802],{"type":53,"tag":1776,"props":1792,"children":1794},{"style":1793},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1795],{"type":58,"value":33},{"type":53,"tag":1776,"props":1797,"children":1799},{"style":1798},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1800],{"type":58,"value":1801}," stop",{"type":53,"tag":1776,"props":1803,"children":1804},{"style":1783},[1805],{"type":58,"value":1806},"              # release the locks\n",{"type":53,"tag":1776,"props":1808,"children":1810},{"class":1778,"line":1809},3,[1811],{"type":53,"tag":1776,"props":1812,"children":1813},{"style":1783},[1814],{"type":58,"value":1815},"# ... then either rebuild \u002F restart one resource if the resource exposes commands ...\n",{"type":53,"tag":1776,"props":1817,"children":1819},{"class":1778,"line":1818},4,[1820,1824,1829,1835,1840,1846,1851,1856],{"type":53,"tag":1776,"props":1821,"children":1822},{"style":1793},[1823],{"type":58,"value":33},{"type":53,"tag":1776,"props":1825,"children":1826},{"style":1798},[1827],{"type":58,"value":1828}," resource",{"type":53,"tag":1776,"props":1830,"children":1832},{"style":1831},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1833],{"type":58,"value":1834}," \u003C",{"type":53,"tag":1776,"props":1836,"children":1837},{"style":1798},[1838],{"type":58,"value":1839},"nam",{"type":53,"tag":1776,"props":1841,"children":1843},{"style":1842},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1844],{"type":58,"value":1845},"e",{"type":53,"tag":1776,"props":1847,"children":1848},{"style":1831},[1849],{"type":58,"value":1850},">",{"type":53,"tag":1776,"props":1852,"children":1853},{"style":1798},[1854],{"type":58,"value":1855}," rebuild",{"type":53,"tag":1776,"props":1857,"children":1858},{"style":1783},[1859],{"type":58,"value":1860},"   # example: C# project resource with rebuild command\n",{"type":53,"tag":1776,"props":1862,"children":1864},{"class":1778,"line":1863},5,[1865],{"type":53,"tag":1776,"props":1866,"children":1867},{"style":1783},[1868],{"type":58,"value":1869},"# ... or restart the whole AppHost ...\n",{"type":53,"tag":1776,"props":1871,"children":1872},{"class":1778,"line":26},[1873,1877,1882],{"type":53,"tag":1776,"props":1874,"children":1875},{"style":1793},[1876],{"type":58,"value":33},{"type":53,"tag":1776,"props":1878,"children":1879},{"style":1798},[1880],{"type":58,"value":1881}," start",{"type":53,"tag":1776,"props":1883,"children":1884},{"style":1783},[1885],{"type":58,"value":1886},"             # if AppHost code changed or Aspire was already stopped\n",{"type":53,"tag":95,"props":1888,"children":1889},{},[1890,1906],{"type":53,"tag":99,"props":1891,"children":1892},{},[1893],{"type":53,"tag":103,"props":1894,"children":1895},{},[1896,1901],{"type":53,"tag":107,"props":1897,"children":1898},{},[1899],{"type":58,"value":1900},"❌ NEVER do",{"type":53,"tag":107,"props":1902,"children":1903},{},[1904],{"type":58,"value":1905},"✅ ALWAYS do",{"type":53,"tag":118,"props":1907,"children":1908},{},[1909,1927,1957,1988,2019],{"type":53,"tag":103,"props":1910,"children":1911},{},[1912,1917],{"type":53,"tag":125,"props":1913,"children":1914},{},[1915],{"type":58,"value":1916},"Tell the user the project has a permanent build failure",{"type":53,"tag":125,"props":1918,"children":1919},{},[1920,1922],{"type":58,"value":1921},"Recognize the lock as Aspire holding outputs and run ",{"type":53,"tag":151,"props":1923,"children":1925},{"className":1924},[],[1926],{"type":58,"value":550},{"type":53,"tag":103,"props":1928,"children":1929},{},[1930,1940],{"type":53,"tag":125,"props":1931,"children":1932},{},[1933,1938],{"type":53,"tag":151,"props":1934,"children":1936},{"className":1935},[],[1937],{"type":58,"value":531},{"type":58,"value":1939}," again with locks held",{"type":53,"tag":125,"props":1941,"children":1942},{},[1943,1948,1950,1955],{"type":53,"tag":151,"props":1944,"children":1946},{"className":1945},[],[1947],{"type":58,"value":550},{"type":58,"value":1949}," first, then ",{"type":53,"tag":151,"props":1951,"children":1953},{"className":1952},[],[1954],{"type":58,"value":531},{"type":58,"value":1956}," (or prefer resource commands\u002Fwatch\u002FHMR\u002Fdebug workflow)",{"type":53,"tag":103,"props":1958,"children":1959},{},[1960,1978],{"type":53,"tag":125,"props":1961,"children":1962},{},[1963,1965,1970,1971,1976],{"type":58,"value":1964},"Delete ",{"type":53,"tag":151,"props":1966,"children":1968},{"className":1967},[],[1969],{"type":58,"value":1389},{"type":58,"value":574},{"type":53,"tag":151,"props":1972,"children":1974},{"className":1973},[],[1975],{"type":58,"value":1396},{"type":58,"value":1977}," to \"fix\" the lock",{"type":53,"tag":125,"props":1979,"children":1980},{},[1981,1986],{"type":53,"tag":151,"props":1982,"children":1984},{"className":1983},[],[1985],{"type":58,"value":550},{"type":58,"value":1987}," — deletion may succeed but the next build relocks",{"type":53,"tag":103,"props":1989,"children":1990},{},[1991,2009],{"type":53,"tag":125,"props":1992,"children":1993},{},[1994,2000,2001,2007],{"type":53,"tag":151,"props":1995,"children":1997},{"className":1996},[],[1998],{"type":58,"value":1999},"pkill dotnet",{"type":58,"value":273},{"type":53,"tag":151,"props":2002,"children":2004},{"className":2003},[],[2005],{"type":58,"value":2006},"kill \u003CPID>",{"type":58,"value":2008}," to free locks",{"type":53,"tag":125,"props":2010,"children":2011},{},[2012,2017],{"type":53,"tag":151,"props":2013,"children":2015},{"className":2014},[],[2016],{"type":58,"value":550},{"type":58,"value":2018}," — clean shutdown via the CLI, no orphans",{"type":53,"tag":103,"props":2020,"children":2021},{},[2022,2027],{"type":53,"tag":125,"props":2023,"children":2024},{},[2025],{"type":58,"value":2026},"Tell the user to \"reboot\" or \"restart your machine\"",{"type":53,"tag":125,"props":2028,"children":2029},{},[2030,2035],{"type":53,"tag":151,"props":2031,"children":2033},{"className":2032},[],[2034],{"type":58,"value":550},{"type":58,"value":2036}," — single command, instant fix",{"type":53,"tag":65,"props":2038,"children":2039},{},[2040],{"type":58,"value":2041},"The same rule applies to any \"file in use\", \"cannot access the file\", or\n\"another process is using\" error during a build of an Aspire-managed resource.",{"type":53,"tag":88,"props":2043,"children":2045},{"id":2044},"handoff-rules",[2046],{"type":58,"value":2047},"Handoff Rules",{"type":53,"tag":95,"props":2049,"children":2050},{},[2051,2067],{"type":53,"tag":99,"props":2052,"children":2053},{},[2054],{"type":53,"tag":103,"props":2055,"children":2056},{},[2057,2062],{"type":53,"tag":107,"props":2058,"children":2059},{},[2060],{"type":58,"value":2061},"Scenario",{"type":53,"tag":107,"props":2063,"children":2064},{},[2065],{"type":58,"value":2066},"Route To",{"type":53,"tag":118,"props":2068,"children":2069},{},[2070,2116,2158,2197,2230,2264,2289,2313],{"type":53,"tag":103,"props":2071,"children":2072},{},[2073,2085],{"type":53,"tag":125,"props":2074,"children":2075},{},[2076,2078,2083],{"type":58,"value":2077},"AppHost wiring after ",{"type":53,"tag":151,"props":2079,"children":2081},{"className":2080},[],[2082],{"type":58,"value":753},{"type":58,"value":2084}," (scan repo, add resources, ServiceDefaults\u002FOTel)",{"type":53,"tag":125,"props":2086,"children":2087},{},[2088,2090,2095,2097,2108,2110],{"type":58,"value":2089},"→ ",{"type":53,"tag":151,"props":2091,"children":2093},{"className":2092},[],[2094],{"type":58,"value":1082},{"type":58,"value":2096}," skill (",{"type":53,"tag":77,"props":2098,"children":2101},{"href":2099,"rel":2100},"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspireify\u002FSKILL.md",[81],[2102],{"type":53,"tag":151,"props":2103,"children":2105},{"className":2104},[],[2106],{"type":58,"value":2107},"aspireify\u002FSKILL.md",{"type":58,"value":2109},") or project-local ",{"type":53,"tag":151,"props":2111,"children":2113},{"className":2112},[],[2114],{"type":58,"value":2115},".agents\u002Fskills\u002Faspireify\u002FSKILL.md",{"type":53,"tag":103,"props":2117,"children":2118},{},[2119,2139],{"type":53,"tag":125,"props":2120,"children":2121},{},[2122,2124,2130,2131,2137],{"type":58,"value":2123},"Browser logs (",{"type":53,"tag":151,"props":2125,"children":2127},{"className":2126},[],[2128],{"type":58,"value":2129},"Aspire.Hosting.Browsers",{"type":58,"value":574},{"type":53,"tag":151,"props":2132,"children":2134},{"className":2133},[],[2135],{"type":58,"value":2136},"WithBrowserLogs()",{"type":58,"value":2138},") and dashboard authoring",{"type":53,"tag":125,"props":2140,"children":2141},{},[2142,2143,2148,2150,2156],{"type":58,"value":2089},{"type":53,"tag":151,"props":2144,"children":2146},{"className":2145},[],[2147],{"type":58,"value":1082},{"type":58,"value":2149}," skill (code edits) and ",{"type":53,"tag":151,"props":2151,"children":2153},{"className":2152},[],[2154],{"type":58,"value":2155},"aspire-monitoring",{"type":58,"value":2157}," (discovery)",{"type":53,"tag":103,"props":2159,"children":2160},{},[2161,2186],{"type":53,"tag":125,"props":2162,"children":2163},{},[2164,2166,2171,2172,2178,2179,2185],{"type":58,"value":2165},"Custom resource commands (",{"type":53,"tag":151,"props":2167,"children":2169},{"className":2168},[],[2170],{"type":58,"value":726},{"type":58,"value":1025},{"type":53,"tag":151,"props":2173,"children":2175},{"className":2174},[],[2176],{"type":58,"value":2177},"ExecuteCommandResult",{"type":58,"value":1025},{"type":53,"tag":151,"props":2180,"children":2182},{"className":2181},[],[2183],{"type":58,"value":2184},"HttpCommandResultMode",{"type":58,"value":1266},{"type":53,"tag":125,"props":2187,"children":2188},{},[2189,2190,2195],{"type":58,"value":2089},{"type":53,"tag":151,"props":2191,"children":2193},{"className":2192},[],[2194],{"type":58,"value":1082},{"type":58,"value":2196}," skill",{"type":53,"tag":103,"props":2198,"children":2199},{},[2200,2220],{"type":53,"tag":125,"props":2201,"children":2202},{},[2203,2205,2211,2212,2218],{"type":58,"value":2204},"Lifecycle hooks (",{"type":53,"tag":151,"props":2206,"children":2208},{"className":2207},[],[2209],{"type":58,"value":2210},"SubscribeBeforeStart",{"type":58,"value":1025},{"type":53,"tag":151,"props":2213,"children":2215},{"className":2214},[],[2216],{"type":58,"value":2217},"SubscribeAfterResourcesCreated",{"type":58,"value":2219},", BeforeStart pipeline phase)",{"type":53,"tag":125,"props":2221,"children":2222},{},[2223,2224,2229],{"type":58,"value":2089},{"type":53,"tag":151,"props":2225,"children":2227},{"className":2226},[],[2228],{"type":58,"value":1082},{"type":58,"value":2196},{"type":53,"tag":103,"props":2231,"children":2232},{},[2233,2254],{"type":53,"tag":125,"props":2234,"children":2235},{},[2236,2238,2244,2246,2252],{"type":58,"value":2237},"Endpoint authoring (",{"type":53,"tag":151,"props":2239,"children":2241},{"className":2240},[],[2242],{"type":58,"value":2243},"WithEndpoint",{"type":58,"value":2245}," updates, ",{"type":53,"tag":151,"props":2247,"children":2249},{"className":2248},[],[2250],{"type":58,"value":2251},"ExcludeReferenceEndpoint",{"type":58,"value":2253}," flag)",{"type":53,"tag":125,"props":2255,"children":2256},{},[2257,2258,2263],{"type":58,"value":2089},{"type":53,"tag":151,"props":2259,"children":2261},{"className":2260},[],[2262],{"type":58,"value":1082},{"type":58,"value":2196},{"type":53,"tag":103,"props":2265,"children":2266},{},[2267,2278],{"type":53,"tag":125,"props":2268,"children":2269},{},[2270,2272],{"type":58,"value":2271},"Deploy, publish, pipeline steps, ",{"type":53,"tag":151,"props":2273,"children":2275},{"className":2274},[],[2276],{"type":58,"value":2277},"aspire destroy",{"type":53,"tag":125,"props":2279,"children":2280},{},[2281,2282,2288],{"type":58,"value":2089},{"type":53,"tag":151,"props":2283,"children":2285},{"className":2284},[],[2286],{"type":58,"value":2287},"aspire-deployment",{"type":58,"value":2196},{"type":53,"tag":103,"props":2290,"children":2291},{},[2292,2303],{"type":53,"tag":125,"props":2293,"children":2294},{},[2295,2297],{"type":58,"value":2296},"Logs, traces, metrics, dashboard, ",{"type":53,"tag":151,"props":2298,"children":2300},{"className":2299},[],[2301],{"type":58,"value":2302},"aspire dashboard run",{"type":53,"tag":125,"props":2304,"children":2305},{},[2306,2307,2312],{"type":58,"value":2089},{"type":53,"tag":151,"props":2308,"children":2310},{"className":2309},[],[2311],{"type":58,"value":2155},{"type":58,"value":2196},{"type":53,"tag":103,"props":2314,"children":2315},{},[2316,2321],{"type":53,"tag":125,"props":2317,"children":2318},{},[2319],{"type":58,"value":2320},"Deployed app diagnostics",{"type":53,"tag":125,"props":2322,"children":2323},{},[2324,2325,2331],{"type":58,"value":2089},{"type":53,"tag":151,"props":2326,"children":2328},{"className":2327},[],[2329],{"type":58,"value":2330},"azure-diagnostics",{"type":58,"value":2332}," skill (azure-skills)",{"type":53,"tag":88,"props":2334,"children":2336},{"id":2335},"runtime-settings-and-environment",[2337],{"type":58,"value":2338},"Runtime Settings And Environment",{"type":53,"tag":95,"props":2340,"children":2341},{},[2342,2363],{"type":53,"tag":99,"props":2343,"children":2344},{},[2345],{"type":53,"tag":103,"props":2346,"children":2347},{},[2348,2353,2358],{"type":53,"tag":107,"props":2349,"children":2350},{},[2351],{"type":58,"value":2352},"Variable",{"type":53,"tag":107,"props":2354,"children":2355},{},[2356],{"type":58,"value":2357},"Default",{"type":53,"tag":107,"props":2359,"children":2360},{},[2361],{"type":58,"value":2362},"Purpose",{"type":53,"tag":118,"props":2364,"children":2365},{},[2366,2400,2430,2461],{"type":53,"tag":103,"props":2367,"children":2368},{},[2369,2378,2387],{"type":53,"tag":125,"props":2370,"children":2371},{},[2372],{"type":53,"tag":151,"props":2373,"children":2375},{"className":2374},[],[2376],{"type":58,"value":2377},"ASPIRE_ENABLE_CONTAINER_TUNNEL",{"type":53,"tag":125,"props":2379,"children":2380},{},[2381],{"type":53,"tag":151,"props":2382,"children":2384},{"className":2383},[],[2385],{"type":58,"value":2386},"true",{"type":53,"tag":125,"props":2388,"children":2389},{},[2390,2392,2398],{"type":58,"value":2391},"Container tunnel provides uniform host connectivity across Docker Desktop, Docker Engine, and Podman. Set to ",{"type":53,"tag":151,"props":2393,"children":2395},{"className":2394},[],[2396],{"type":58,"value":2397},"false",{"type":58,"value":2399}," to opt out.",{"type":53,"tag":103,"props":2401,"children":2402},{},[2403,2412,2417],{"type":53,"tag":125,"props":2404,"children":2405},{},[2406],{"type":53,"tag":151,"props":2407,"children":2409},{"className":2408},[],[2410],{"type":58,"value":2411},"ASPIRE_ENVIRONMENT",{"type":53,"tag":125,"props":2413,"children":2414},{},[2415],{"type":58,"value":2416},"unset",{"type":53,"tag":125,"props":2418,"children":2419},{},[2420,2422,2428],{"type":58,"value":2421},"Selects the environment-specific config profile — controls which ",{"type":53,"tag":151,"props":2423,"children":2425},{"className":2424},[],[2426],{"type":58,"value":2427},"appsettings.{environment}.json",{"type":58,"value":2429}," is loaded and which environment is reported in dashboard telemetry.",{"type":53,"tag":103,"props":2431,"children":2432},{},[2433,2442,2450],{"type":53,"tag":125,"props":2434,"children":2435},{},[2436],{"type":53,"tag":151,"props":2437,"children":2439},{"className":2438},[],[2440],{"type":58,"value":2441},"ASPIRE_DCP_USE_DEVELOPER_CERTIFICATE",{"type":53,"tag":125,"props":2443,"children":2444},{},[2445],{"type":53,"tag":151,"props":2446,"children":2448},{"className":2447},[],[2449],{"type":58,"value":2386},{"type":53,"tag":125,"props":2451,"children":2452},{},[2453,2455,2460],{"type":58,"value":2454},"The Aspire trusted developer certificate is used by DCP on Windows. Set to ",{"type":53,"tag":151,"props":2456,"children":2458},{"className":2457},[],[2459],{"type":58,"value":2397},{"type":58,"value":2399},{"type":53,"tag":103,"props":2462,"children":2463},{},[2464,2473,2478],{"type":53,"tag":125,"props":2465,"children":2466},{},[2467],{"type":53,"tag":151,"props":2468,"children":2470},{"className":2469},[],[2471],{"type":58,"value":2472},"features.defaultWatchEnabled",{"type":53,"tag":125,"props":2474,"children":2475},{},[2476],{"type":58,"value":2477},"false unless configured",{"type":53,"tag":125,"props":2479,"children":2480},{},[2481],{"type":58,"value":2482},"Enables Aspire default watch for supported C# and TypeScript AppHosts. Do not treat this as per-resource rebuild, restart, or hot reload for resource source changes.",{"type":53,"tag":88,"props":2484,"children":2486},{"id":2485},"typescript-apphost-note",[2487],{"type":58,"value":2488},"TypeScript AppHost Note",{"type":53,"tag":65,"props":2490,"children":2491},{},[2492,2494,2499,2501,2511],{"type":58,"value":2493},"Detection covers TS AppHosts (",{"type":53,"tag":151,"props":2495,"children":2497},{"className":2496},[],[2498],{"type":58,"value":308},{"type":58,"value":2500},"), but ",{"type":53,"tag":69,"props":2502,"children":2503},{},[2504,2506],{"type":58,"value":2505},"all TS AppHost authoring is delegated to ",{"type":53,"tag":151,"props":2507,"children":2509},{"className":2508},[],[2510],{"type":58,"value":1082},{"type":58,"value":2512},".\nCurrent rules to apply when handing off:",{"type":53,"tag":95,"props":2514,"children":2515},{},[2516,2532],{"type":53,"tag":99,"props":2517,"children":2518},{},[2519],{"type":53,"tag":103,"props":2520,"children":2521},{},[2522,2527],{"type":53,"tag":107,"props":2523,"children":2524},{},[2525],{"type":58,"value":2526},"Rule",{"type":53,"tag":107,"props":2528,"children":2529},{},[2530],{"type":58,"value":2531},"Why",{"type":53,"tag":118,"props":2533,"children":2534},{},[2535,2598,2632],{"type":53,"tag":103,"props":2536,"children":2537},{},[2538,2593],{"type":53,"tag":125,"props":2539,"children":2540},{},[2541,2543,2549,2551,2557,2558,2564,2565,2571,2572,2578,2579,2585,2586,2592],{"type":58,"value":2542},"Prefer unified ",{"type":53,"tag":151,"props":2544,"children":2546},{"className":2545},[],[2547],{"type":58,"value":2548},"withEnvironment(name, value)",{"type":58,"value":2550}," over deprecated per-kind helpers (",{"type":53,"tag":151,"props":2552,"children":2554},{"className":2553},[],[2555],{"type":58,"value":2556},"withEnvironmentEndpoint",{"type":58,"value":1025},{"type":53,"tag":151,"props":2559,"children":2561},{"className":2560},[],[2562],{"type":58,"value":2563},"withEnvironmentParameter",{"type":58,"value":1025},{"type":53,"tag":151,"props":2566,"children":2568},{"className":2567},[],[2569],{"type":58,"value":2570},"withEnvironmentConnectionString",{"type":58,"value":1025},{"type":53,"tag":151,"props":2573,"children":2575},{"className":2574},[],[2576],{"type":58,"value":2577},"withEnvironmentExpression",{"type":58,"value":1025},{"type":53,"tag":151,"props":2580,"children":2582},{"className":2581},[],[2583],{"type":58,"value":2584},"withEnvironmentFromOutput",{"type":58,"value":1025},{"type":53,"tag":151,"props":2587,"children":2589},{"className":2588},[],[2590],{"type":58,"value":2591},"withEnvironmentFromKeyVaultSecret",{"type":58,"value":1266},{"type":53,"tag":125,"props":2594,"children":2595},{},[2596],{"type":58,"value":2597},"Per-kind helpers are deprecated — single API now handles all value types",{"type":53,"tag":103,"props":2599,"children":2600},{},[2601,2613],{"type":53,"tag":125,"props":2602,"children":2603},{},[2604,2606,2611],{"type":58,"value":2605},"Never edit ",{"type":53,"tag":151,"props":2607,"children":2609},{"className":2608},[],[2610],{"type":58,"value":378},{"type":58,"value":2612}," directly",{"type":53,"tag":125,"props":2614,"children":2615},{},[2616,2618,2623,2625,2630],{"type":58,"value":2617},"Generated; use ",{"type":53,"tag":151,"props":2619,"children":2621},{"className":2620},[],[2622],{"type":58,"value":1101},{"type":58,"value":2624}," to regenerate and ",{"type":53,"tag":151,"props":2626,"children":2628},{"className":2627},[],[2629],{"type":58,"value":1178},{"type":58,"value":2631}," to recover missing files",{"type":53,"tag":103,"props":2633,"children":2634},{},[2635,2647],{"type":53,"tag":125,"props":2636,"children":2637},{},[2638,2639,2645],{"type":58,"value":683},{"type":53,"tag":151,"props":2640,"children":2642},{"className":2641},[],[2643],{"type":58,"value":2644},"aspire docs api search \u003Cquery> --language typescript",{"type":58,"value":2646}," for API lookup",{"type":53,"tag":125,"props":2648,"children":2649},{},[2650],{"type":58,"value":2651},"TS surface differs from C#",{"type":53,"tag":88,"props":2653,"children":2655},{"id":2654},"skill-routing-in-plugin-sibling-skills",[2656],{"type":58,"value":2657},"Skill Routing — In-Plugin Sibling Skills",{"type":53,"tag":65,"props":2659,"children":2660},{},[2661,2663,2668,2670,2675,2677,2682,2684,2689,2691,2695,2697,2706,2708,2713,2715,2726],{"type":58,"value":2662},"After ",{"type":53,"tag":151,"props":2664,"children":2666},{"className":2665},[],[2667],{"type":58,"value":753},{"type":58,"value":2669}," drops a skeleton AppHost + ",{"type":53,"tag":151,"props":2671,"children":2673},{"className":2672},[],[2674],{"type":58,"value":331},{"type":58,"value":2676},", route AppHost wiring\n(scan repo → propose resource graph → edit AppHost → wire ",{"type":53,"tag":151,"props":2678,"children":2680},{"className":2679},[],[2681],{"type":58,"value":400},{"type":58,"value":2683}," \u002F OTel →\nvalidate via ",{"type":53,"tag":151,"props":2685,"children":2687},{"className":2686},[],[2688],{"type":58,"value":470},{"type":58,"value":2690},") to the in-plugin ",{"type":53,"tag":69,"props":2692,"children":2693},{},[2694],{"type":58,"value":1082},{"type":58,"value":2696}," skill: ",{"type":53,"tag":77,"props":2698,"children":2700},{"href":2099,"rel":2699},[81],[2701],{"type":53,"tag":151,"props":2702,"children":2704},{"className":2703},[],[2705],{"type":58,"value":2107},{"type":58,"value":2707},".\nFor first-run flows that only need the skeleton drop, see the in-plugin ",{"type":53,"tag":69,"props":2709,"children":2710},{},[2711],{"type":58,"value":2712},"aspire-init",{"type":58,"value":2714}," skill:\n",{"type":53,"tag":77,"props":2716,"children":2719},{"href":2717,"rel":2718},"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Faspire-skills\u002Fblob\u002Fmain\u002Fskills\u002Faspire-init\u002FSKILL.md",[81],[2720],{"type":53,"tag":151,"props":2721,"children":2723},{"className":2722},[],[2724],{"type":58,"value":2725},"aspire-init\u002FSKILL.md",{"type":58,"value":2727},". This orchestration skill stays focused\non lifecycle (start\u002Fstop\u002Fwait\u002Frestart) and never edits AppHost code itself.",{"type":53,"tag":88,"props":2729,"children":2731},{"id":2730},"project-local-skill-precedence",[2732],{"type":58,"value":2733},"Project-Local Skill Precedence",{"type":53,"tag":65,"props":2735,"children":2736},{},[2737,2739,2745,2747,2752],{"type":58,"value":2738},"If ",{"type":53,"tag":151,"props":2740,"children":2742},{"className":2741},[],[2743],{"type":58,"value":2744},".agents\u002Fskills\u002Faspire\u002FSKILL.md",{"type":58,"value":2746}," exists (from ",{"type":53,"tag":151,"props":2748,"children":2750},{"className":2749},[],[2751],{"type":58,"value":1653},{"type":58,"value":2753},"), defer to it for:\nC# AppHost editing, TS AppHost editing, Playwright handoff, investigation workflows.\nSafety guardrails from this plugin ALWAYS apply.",{"type":53,"tag":65,"props":2755,"children":2756},{},[2757,2758,2763,2765,2770,2772,2777,2779,2784,2786,2791],{"type":58,"value":2738},{"type":53,"tag":151,"props":2759,"children":2761},{"className":2760},[],[2762],{"type":58,"value":2115},{"type":58,"value":2764}," exists project-locally (installed by ",{"type":53,"tag":151,"props":2766,"children":2768},{"className":2767},[],[2769],{"type":58,"value":753},{"type":58,"value":2771}," in\ncurrent Aspire), ",{"type":53,"tag":69,"props":2773,"children":2774},{},[2775],{"type":58,"value":2776},"warn the user",{"type":58,"value":2778}," that a project-local aspireify skill is present and ",{"type":53,"tag":69,"props":2780,"children":2781},{},[2782],{"type":58,"value":2783},"defer to it",{"type":58,"value":2785},"\nfor AppHost wiring instead of the in-plugin sibling. Same precedence rule as the project-local\n",{"type":53,"tag":151,"props":2787,"children":2789},{"className":2788},[],[2790],{"type":58,"value":33},{"type":58,"value":2792}," skill above: project-local wins, plugin guardrails still apply.",{"type":53,"tag":88,"props":2794,"children":2796},{"id":2795},"references",[2797],{"type":58,"value":2798},"References",{"type":53,"tag":2800,"props":2801,"children":2802},"ul",{},[2803,2812,2821,2832,2843],{"type":53,"tag":792,"props":2804,"children":2805},{},[2806,2810],{"type":53,"tag":77,"props":2807,"children":2808},{"href":775},[2809],{"type":58,"value":778},{"type":58,"value":2811}," — Detailed rules and recovery patterns",{"type":53,"tag":792,"props":2813,"children":2814},{},[2815,2819],{"type":53,"tag":77,"props":2816,"children":2817},{"href":415},[2818],{"type":58,"value":418},{"type":58,"value":2820}," — Project fingerprinting",{"type":53,"tag":792,"props":2822,"children":2823},{},[2824,2830],{"type":53,"tag":77,"props":2825,"children":2827},{"href":2826},"references\u002Fapp-commands.md",[2828],{"type":58,"value":2829},"app-commands.md",{"type":58,"value":2831}," — App lifecycle and bootstrap commands",{"type":53,"tag":792,"props":2833,"children":2834},{},[2835,2841],{"type":53,"tag":77,"props":2836,"children":2838},{"href":2837},"references\u002Fresource-management.md",[2839],{"type":58,"value":2840},"resource-management.md",{"type":58,"value":2842}," — Resource wait, restart, and operations",{"type":53,"tag":792,"props":2844,"children":2845},{},[2846,2852],{"type":53,"tag":77,"props":2847,"children":2849},{"href":2848},"references\u002Fagent-workflows.md",[2850],{"type":58,"value":2851},"agent-workflows.md",{"type":58,"value":2853}," — Common agent investigation, integration, TypeScript, and handoff workflows",{"type":53,"tag":2855,"props":2856,"children":2857},"style",{},[2858],{"type":58,"value":2859},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2861,"total":1789},[2862,2875],{"slug":2712,"name":2712,"fn":2863,"description":2864,"org":2865,"tags":2866,"stars":22,"repoUrl":23,"updatedAt":2874},"initialize .NET Aspire in projects","**WORKFLOW SKILL** - First-run flow for adding Aspire to a repo. Picks `aspire new` (greenfield) or `aspire init` (existing repo), drops the AppHost skeleton, then hands off to `aspireify` for resource wiring. USE FOR: aspire init, aspire new, aspire-starter, aspire-ts-starter, aspire-py-starter, add Aspire to existing repo, scaffold Aspire app, bootstrap Aspire, no AppHost detected, install aspireify, generated .aspire\u002Fmodules. DO NOT USE FOR: AppHost wiring on an existing AppHost (use aspireify), start\u002Fstop\u002Fwait (use aspire-orchestration), deploy\u002Fpublish (use aspire-deployment), logs\u002Ftraces (use aspire-monitoring), repo that already has an AppHost. INVOKES: aspire CLI (init, new, doctor), aspireify (handoff after skeleton drop). FOR SINGLE OPERATIONS: Run `aspire init` or `aspire new TEMPLATE` directly.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2867,2868,2871],{"name":17,"slug":18,"type":15},{"name":2869,"slug":2870,"type":15},"Architecture","architecture",{"name":2872,"slug":2873,"type":15},"Deployment","deployment","2026-07-03T16:32:19.726602",{"slug":4,"name":4,"fn":5,"description":6,"org":2876,"tags":2877,"stars":22,"repoUrl":23,"updatedAt":24},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2878,2879,2880],{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},{"items":2882,"total":3075},[2883,2905,2924,2945,2960,2977,2988,3001,3016,3031,3050,3063],{"slug":2884,"name":2884,"fn":2885,"description":2886,"org":2887,"tags":2888,"stars":2902,"repoUrl":2903,"updatedAt":2904},"rushstack-best-practices","manage Rush monorepos with best practices","Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2889,2892,2895,2896,2899],{"name":2890,"slug":2891,"type":15},"Engineering","engineering",{"name":2893,"slug":2894,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":2897,"slug":2898,"type":15},"Project Management","project-management",{"name":2900,"slug":2901,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":2906,"name":2906,"fn":2907,"description":2908,"org":2909,"tags":2910,"stars":2921,"repoUrl":2922,"updatedAt":2923},"azure-ai-agents-persistent-dotnet","build AI agents with Azure .NET SDK","Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: \"PersistentAgentsClient\", \"persistent agents\", \"agent threads\", \"agent runs\", \"streaming agents\", \"function calling agents .NET\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2911,2912,2915,2918],{"name":17,"slug":18,"type":15},{"name":2913,"slug":2914,"type":15},"Agents","agents",{"name":2916,"slug":2917,"type":15},"Azure","azure",{"name":2919,"slug":2920,"type":15},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":2925,"name":2925,"fn":2926,"description":2927,"org":2928,"tags":2929,"stars":2921,"repoUrl":2922,"updatedAt":2944},"azure-ai-anomalydetector-java","build anomaly detection applications with Java","Build anomaly detection applications with Azure AI Anomaly Detector SDK for Java. Use when implementing univariate\u002Fmultivariate anomaly detection, time-series analysis, or AI-powered monitoring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2930,2933,2934,2937,2940,2941],{"name":2931,"slug":2932,"type":15},"Analytics","analytics",{"name":2916,"slug":2917,"type":15},{"name":2935,"slug":2936,"type":15},"Data Analysis","data-analysis",{"name":2938,"slug":2939,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":2942,"slug":2943,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":2946,"name":2946,"fn":2947,"description":2948,"org":2949,"tags":2950,"stars":2921,"repoUrl":2922,"updatedAt":2959},"azure-ai-contentsafety-java","build content moderation applications with Azure AI","Build content moderation applications with Azure AI Content Safety SDK for Java. Use when implementing text\u002Fimage analysis, blocklist management, or harm detection for hate, violence, sexual content, and self-harm.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2951,2954,2955,2956],{"name":2952,"slug":2953,"type":15},"AI Infrastructure","ai-infrastructure",{"name":2916,"slug":2917,"type":15},{"name":2938,"slug":2939,"type":15},{"name":2957,"slug":2958,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":2961,"name":2961,"fn":2962,"description":2963,"org":2964,"tags":2965,"stars":2921,"repoUrl":2922,"updatedAt":2976},"azure-ai-contentsafety-py","detect harmful content with Azure AI Content Safety","Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.\nTriggers: \"azure-ai-contentsafety\", \"ContentSafetyClient\", \"content moderation\", \"harmful content\", \"text analysis\", \"image analysis\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2966,2967,2970,2971,2972,2975],{"name":2916,"slug":2917,"type":15},{"name":2968,"slug":2969,"type":15},"Compliance","compliance",{"name":2919,"slug":2920,"type":15},{"name":9,"slug":8,"type":15},{"name":2973,"slug":2974,"type":15},"Python","python",{"name":2957,"slug":2958,"type":15},"2026-07-18T05:14:23.017504",{"slug":2978,"name":2978,"fn":2979,"description":2980,"org":2981,"tags":2982,"stars":2921,"repoUrl":2922,"updatedAt":2987},"azure-ai-language-conversations-py","implement conversational language understanding with Python","Implement Conversational Language Understanding (CLU) using the azure-ai-language-conversations Python SDK. Use when working with ConversationAnalysisClient to analyze conversation intent and entities, building NLP features, or integrating language understanding into applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2983,2984,2985,2986],{"name":2931,"slug":2932,"type":15},{"name":2916,"slug":2917,"type":15},{"name":2919,"slug":2920,"type":15},{"name":2973,"slug":2974,"type":15},"2026-07-31T05:54:29.068751",{"slug":2989,"name":2989,"fn":2990,"description":2991,"org":2992,"tags":2993,"stars":2921,"repoUrl":2922,"updatedAt":3000},"azure-ai-translation-text-py","translate text using Azure AI services","Azure AI Text Translation SDK for real-time text translation, transliteration, language detection, and dictionary lookup. Use for translating text content in applications.\nTriggers: \"text translation\", \"translator\", \"translate text\", \"transliterate\", \"TextTranslationClient\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2994,2997,2998,2999],{"name":2995,"slug":2996,"type":15},"API Development","api-development",{"name":2916,"slug":2917,"type":15},{"name":9,"slug":8,"type":15},{"name":2973,"slug":2974,"type":15},"2026-07-18T05:14:16.988376",{"slug":3002,"name":3002,"fn":3003,"description":3004,"org":3005,"tags":3006,"stars":2921,"repoUrl":2922,"updatedAt":3015},"azure-ai-vision-imageanalysis-py","analyze images with Azure AI Vision","Azure AI Vision Image Analysis SDK for captions, tags, objects, OCR, people detection, and smart cropping. Use for computer vision and image understanding tasks.\nTriggers: \"image analysis\", \"computer vision\", \"OCR\", \"object detection\", \"ImageAnalysisClient\", \"image caption\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3007,3008,3011,3014],{"name":2916,"slug":2917,"type":15},{"name":3009,"slug":3010,"type":15},"Computer Vision","computer-vision",{"name":3012,"slug":3013,"type":15},"Images","images",{"name":2973,"slug":2974,"type":15},"2026-07-18T05:14:18.007737",{"slug":3017,"name":3017,"fn":3018,"description":3019,"org":3020,"tags":3021,"stars":2921,"repoUrl":2922,"updatedAt":3030},"azure-appconfiguration-java","manage configuration with Azure App Configuration","Azure App Configuration SDK for Java. Centralized application configuration management with key-value settings, feature flags, and snapshots.\nTriggers: \"ConfigurationClient java\", \"app configuration java\", \"feature flag java\", \"configuration setting java\", \"azure config java\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3022,3023,3026,3029],{"name":2916,"slug":2917,"type":15},{"name":3024,"slug":3025,"type":15},"Configuration","configuration",{"name":3027,"slug":3028,"type":15},"Feature Flags","feature-flags",{"name":2938,"slug":2939,"type":15},"2026-07-03T16:32:01.278468",{"slug":3032,"name":3032,"fn":3033,"description":3034,"org":3035,"tags":3036,"stars":2921,"repoUrl":2922,"updatedAt":3049},"azure-cosmos-rust","build applications with Azure Cosmos DB","Azure Cosmos DB library for Rust (NoSQL API). Document CRUD, containers, and globally distributed data.\nTriggers: \"cosmos db rust\", \"CosmosClient rust\", \"document crud rust\", \"NoSQL rust\", \"partition key rust\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3037,3040,3043,3046],{"name":3038,"slug":3039,"type":15},"Cosmos DB","cosmos-db",{"name":3041,"slug":3042,"type":15},"Database","database",{"name":3044,"slug":3045,"type":15},"NoSQL","nosql",{"name":3047,"slug":3048,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":3051,"name":3051,"fn":3033,"description":3052,"org":3053,"tags":3054,"stars":2921,"repoUrl":2922,"updatedAt":3062},"azure-cosmos-ts","Azure Cosmos DB JavaScript\u002FTypeScript SDK (@azure\u002Fcosmos) for data plane operations. Use for CRUD operations on documents, queries, bulk operations, and container management. Triggers: \"Cosmos DB\", \"@azure\u002Fcosmos\", \"CosmosClient\", \"document CRUD\", \"NoSQL queries\", \"bulk operations\", \"partition key\", \"container.items\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3055,3056,3057,3058,3059],{"name":3038,"slug":3039,"type":15},{"name":3041,"slug":3042,"type":15},{"name":9,"slug":8,"type":15},{"name":3044,"slug":3045,"type":15},{"name":3060,"slug":3061,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":3064,"name":3064,"fn":3065,"description":3066,"org":3067,"tags":3068,"stars":2921,"repoUrl":2922,"updatedAt":3074},"azure-data-tables-java","build table storage applications with Java","Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3069,3070,3071,3072,3073],{"name":2916,"slug":2917,"type":15},{"name":3038,"slug":3039,"type":15},{"name":3041,"slug":3042,"type":15},{"name":2938,"slug":2939,"type":15},{"name":3044,"slug":3045,"type":15},"2026-05-13T06:14:17.582229",267]