[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-perf-optimization":3,"mdc--am56dw-key":32,"related-repo-microsoft-perf-optimization":1186,"related-org-microsoft-perf-optimization":1211},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":22,"repoUrl":23,"updatedAt":24,"license":25,"forks":22,"topics":26,"repo":27,"sourceUrl":30,"mdContent":31},"perf-optimization","analyze and optimize application performance","Guide for analyzing performance issues based on profiler and code optimizations, including CPU, latency, and throughput. Use this when asked to investigate performance bottlenecks or optimize application performance.",{"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},"Performance","performance","tag",{"name":17,"slug":18,"type":15},"Engineering","engineering",{"name":20,"slug":21,"type":15},"Debugging","debugging",2,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fcode-optimizations-skills","2026-07-07T06:53:42.045028",null,[],{"repoUrl":23,"stars":22,"forks":22,"topics":28,"description":29},[],"GitHub Copilot CLI skill plugin for code optimizations based on Profiler and Telemtries.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fcode-optimizations-skills\u002Ftree\u002FHEAD\u002Fskills\u002Fperf-optimization","---\nname: perf-optimization\ncategory: exploring\ndescription: Guide for analyzing performance issues based on profiler and code optimizations, including CPU, latency, and throughput. Use this when asked to investigate performance bottlenecks or optimize application performance.\n---\n\n# Analysis\n\nWhen asked to analyze performance issues based on profiler data, follow these steps:\n\n1. **Check investigation notes and gather inputs** — Follow the [Standard Skill Preamble](..\u002Fshared\u002Fstandard-skill-preamble.md) to check for existing investigation context and gather inputs.\n\n2. **Identify the Application Insights resource** — If the investigation notes didn't have the resource or the user wants a different one, follow the steps in [Identify Application Insights Resource](references\u002Fidentify-appinsights-resource.md). After the resource is confirmed, **write or update `investigation-notes.md`** with the confirmed values. If only a resource ID is available, resolve the app ID using [resolve-app-id.md](..\u002Fshared\u002Fresolve-app-id.md).\n\n3. **Query for slow requests with profiler traces** — Start by querying Application Insights for recent slow requests, especially those with `ServiceProfilerSample` events associated. Run the script in [query-slow-requests.md](scripts\u002Fquery-slow-requests.md) to find the slowest requests that have profiler trace coverage. This gives you a concrete picture of what's slow and what has profiler data available for deeper analysis. The default lookback is 24 hours — adjust the `$lookbackHours` parameter to widen or narrow the window as needed.\n\n   > **Why start here**: This step surfaces real slow requests with profiler traces attached, so you can prioritize which operations to investigate. Use the results to guide the Code Optimization and hot path analysis steps that follow.\n\n   > **⚠️ CLI query pitfalls**: The `az monitor app-insights query` CLI has known issues that cause silent failures. Before running or modifying the query script, read [az CLI query pitfalls](..\u002Fshared\u002Faz-cli-query-pitfalls.md). Key points: (1) `--offset` is **mandatory** — without it the CLI applies a 1-hour server-side filter that overrides KQL `ago()`, (2) always use `--output json` — `--output table` silently drops results for join queries, (3) flatten KQL to a single line to avoid here-string truncation.\n\n   > **⚠️ No profiler data?** If this query returns zero results, check for profiler activity by counting both `ServiceProfilerIndex` (session-level) and `ServiceProfilerSample` (request-level) events:\n   > - **Neither event type exists** → before recommending the `enable-profiler` skill, **check local source code for an existing profiler configuration**. Search for profiler NuGet packages (`Microsoft.ApplicationInsights.Profiler.AspNetCore` or `Azure.Monitor.OpenTelemetry.Profiler` in `*.csproj`) and registration calls (`AddServiceProfiler` or `AddAzureMonitorProfiler` in `Program.cs`\u002F`Startup.cs`). If profiler code IS present, run [check-connection-string-match.md](..\u002Fshared\u002Fcheck-connection-string-match.md) to verify the app's connection string points to the target resource. A **mismatch in source code** is a troubleshooting signal — note that connection strings are often overridden at deployment time via environment variables, App Service settings, or CI\u002FCD, so a source-code mismatch does not definitively mean the app is sending data elsewhere. Present the finding to the user and ask them to confirm which scenario applies (see guidance in `check-connection-string-match.md`). Only recommend the `enable-profiler` skill if the profiler is genuinely not configured in the source code, or if connection strings match (or the mismatch is confirmed as a non-issue) but no events exist.\n   > - **`ServiceProfilerIndex` exists but no `ServiceProfilerSample`** → the profiler IS running sessions but captured zero request-level samples (e.g., low traffic, no requests during profiling windows). Skip steps 5 and 6 (Code Optimizations and hot path both require request-level samples), but do NOT recommend enabling the profiler — it is already enabled. Instead, suggest the user generate more traffic and wait for the next profiling cycle.\n   > - In either case, you may still analyze request telemetry (durations, error rates, operation names) from the `requests` table to give the user a high-level picture of what's slow, but without `ServiceProfilerSample` data, method-level analysis is not possible.\n\n4. **Present findings and let the user choose** — After collecting slow request results from step 3, present the findings to the user with investigation recommendations. Do not proceed automatically — let the user decide which request(s) to investigate.\n\n   **How to present the results:**\n   - Summarize the slow requests in a clear, ranked list.\n   - For the top candidates (typically 2–3), provide a short rationale explaining **why** each is worth investigating. Consider factors such as:\n     - **Duration** — the slowest requests are often the highest-impact targets.\n     - **Frequency** — an operation that appears multiple times suggests a systemic issue rather than a one-off spike.\n     - **Error codes** — non-200 status codes combined with high latency may indicate a different class of problem (e.g., retries, timeouts).\n     - **Operation name** — if a known critical endpoint appears, call that out.\n   - Explicitly recommend which request(s) you would investigate first, and why.\n   - Ask the user which request(s) they would like to proceed with.\n\n   > **Why ask the user**: The user may have domain context you don't — they may know that a particular endpoint is low-priority, or that a specific operation is already being worked on. Letting them choose avoids wasting time on the wrong target.\n\n   > **If only one result**: If the query returned a single slow request, still present it with context and confirm with the user before proceeding.\n\n5. **Query Code Optimizations data** — Run the script in [get-code-optimizations.md](scripts\u002Fget-code-optimizations.md) to fetch AI-powered recommendations from the profiler dataplane API. This is cheap and fast — it often points directly to the right methods without needing deeper analysis.\n\n   > **⚠️ Skip this step if no request-level profiler data exists**: Code Optimizations are generated from profiler trace data. If no `ServiceProfilerSample` events were found (regardless of whether `ServiceProfilerIndex` sessions exist), skip this step — the API will return empty results. If no `ServiceProfilerIndex` events exist either, recommend the `enable-profiler` skill.\n\n   > **If no recommendations are found** (but profiler data does exist): This may happen when the profiler hasn't collected enough data yet. Try these fallback steps:\n   > 1. **Widen the time range** — increase `$startTime` to cover the last 7 or 30 days instead of 24 hours.\n   > 2. **Verify the profiler is active** — check that Application Insights Profiler is enabled and has recent profiling sessions. If step 3 returned no results either, the profiler may not be enabled.\n   > 3. **Fall back to manual trace analysis** — skip to step 6 and invoke the `get-profile-hotpath` skill directly. Use the slow request IDs from step 3 (if available) to analyze the most expensive operations without Code Optimization guidance.\n\n6. **Fetch profiler hot path for targeted operations** — Once you've identified the most impactful operations from steps 3–5, use the `get-profile-hotpath` skill to retrieve the call tree and hot path for specific traces. This is an expensive operation — only invoke it for operations that warrant deep investigation. See [Leveraging Profiler Hot Path Data](#leveraging-profiler-hot-path-data) for details.\n\n   > **Bridging request IDs to trace location IDs**: The slow requests from step 3 return request IDs, but the `get-profile-hotpath` skill requires a `ServiceProfilerContent` trace location ID. To look up trace location IDs for specific request IDs, query Application Insights `customEvents` filtering by `customDimensions.RequestId`:\n   >\n   > ```kql\n   > customEvents | where name == 'ServiceProfilerSample' | extend reqId = tostring(customDimensions['RequestId']) | where reqId in ('REQUEST_ID_1', 'REQUEST_ID_2') | project timestamp, tostring(customDimensions['ServiceProfilerContent']), reqId\n   > ```\n   >\n   > Run this using the same `az monitor app-insights query` pattern from step 3 (with `--offset` and `--output json`). The `ServiceProfilerContent` value from the results is the trace location ID needed for the hot path skill.\n\n   > **Set user expectations**: The hot path fetch involves multiple API steps (trigger analysis → poll for completion → fetch root tree → expand child nodes) and typically takes **1–2 minutes** for fresh analyses. Inform the user upfront that this will take some time. For previously analyzed traces, results are cached and return in seconds.\n\n7. **Putting data together to identify performance improvement opportunities** — Correlate the hot path bottlenecks with code optimization recommendations to prioritize fixes.\n\n8. **Try provide code edits to optimize the performance** — When source code is available, suggest concrete code changes targeting the methods identified in the hot path.\n\n## Leveraging Profiler Hot Path Data\n\nThe `get-profile-hotpath` skill provides method-level profiler trace data. Invoke it to get the hot path call tree for a specific profiler trace, then use the results here for deeper analysis.\n\n### When to use the hot path data\n\n- Fetch the hot path only **after** code optimization recommendations have identified specific operations worth investigating, or after step 3 has surfaced specific slow requests with profiler traces — it is an expensive operation per request.\n- Use it to get method-level detail on **targeted** slow operations already surfaced by telemetry.\n- Cross-reference hot path methods with Code Optimization recommendations for actionable fixes.\n\n### How to use the hot path results\n\nThe `get-profile-hotpath` skill returns a call tree with timing data. Use it as follows:\n\n1. **Identify the dominant method**: The hot path highlights the most expensive execution path. Focus optimization efforts on the methods consuming the most inclusive time (highest `Values.Metric`).\n2. **Classify the bottleneck type**: Check `TotalCpuTime`, `TotalAwaitTime`, and `TotalBlockedTime` from the root tree to determine if the issue is CPU-bound, I\u002FO-bound, or contention-bound.\n3. **Match with Code Optimization recommendations**: Cross-reference the hot path methods with the recommendations from [get-code-optimizations.md](scripts\u002Fget-code-optimizations.md) for prioritized, data-backed fixes.\n4. **Target code changes**: If source code is available, navigate to the methods identified in the hot path and apply targeted optimizations.\n\n> **Note on log queries**: If you need to query Application Insights logs (requests, dependencies, performanceCounters tables) for additional context beyond what [query-slow-requests.md](scripts\u002Fquery-slow-requests.md) provides, use the Azure portal, Azure CLI (`az monitor app-insights query`), or the Azure Monitor REST API directly. This skill focuses on profiler-based analysis via the dataplane API.\n\n### Example workflow\n\n```\n1. Check investigation-notes.md for previously identified App Insights resource\n2. If found, confirm with user; if not, identify and write to investigation notes\n3. Resolve app ID from resource ID if needed\n4. Query for slow requests with profiler traces (query-slow-requests.md)\n5. If zero profiler events (no ServiceProfilerIndex):\n   a. Check local source for profiler NuGet packages and registration calls\n   b. If profiler code found → run check-connection-string-match.md\n   c. If mismatch in source → present as troubleshooting signal (may be overridden at deploy time), ask user to confirm → stop or continue based on user response\n   d. If no profiler code, or strings match, or mismatch confirmed as non-issue → recommend enable-profiler skill → stop\n   If ServiceProfilerIndex exists but no ServiceProfilerSample: profiler is running but no request samples → advise on traffic\u002Ftriggers → stop\n6. Present ranked results with rationales; ask user which request(s) to investigate\n7. Run get-code-optimizations.md to fetch Code Optimization recommendations\n8. Identify the top operations worth deep-diving (from steps 6–7)\n9. Invoke get-profile-hotpath skill with the app ID and trace location ID\n10. Receive hot path call tree (e.g., WeatherForecastController.Get → 70% in ToList lambda)\n11. Combine hot path + recommendations into prioritized action plan\n12. Suggest code changes targeting the hot path bottleneck methods\n```\n\n## Tips\n\n- Always confirm the Application Insights resource with the user before proceeding with analysis.\n- The app ID (GUID) is required for all dataplane API calls. If only a resource ID is available, resolve it with [resolve-app-id.md](..\u002Fshared\u002Fresolve-app-id.md).\n- When a profiler trace is available for a slow operation, invoke the `get-profile-hotpath` skill to get method-level bottleneck data — but only after Code Optimization recommendations have confirmed the operation is worth investigating.\n- Cross-reference hot path methods with Code Optimization recommendations for the highest-confidence optimization suggestions.\n- When suggesting code optimizations, target the specific methods identified in the hot path and consider the bottleneck type (CPU, I\u002FO, contention).\n- **Distributed trace analysis**: If a slow operation involves calls to downstream services (visible in the `dependencies` table or hot path), and those services have their own App Insights resources, suggest the `deep-analysis` skill. The user can provide the operation ID to get a unified cross-resource timeline showing where time was spent across all services.\n\n## References\n\nFor the investigation notes format and read\u002Fwrite protocol, see:\n- [Investigation Notes](..\u002Fshared\u002Finvestigation-notes.md)\n\nFor known `az monitor app-insights query` CLI issues, see:\n- [az CLI Query Pitfalls](..\u002Fshared\u002Faz-cli-query-pitfalls.md)\n\nFor detailed guidance on finding application insights resource, see:\n- [Identify Application Insights Resource](references\u002Fidentify-appinsights-resource.md)\n\nFor detailed guidance on analyzing Application Insights Profiler traces, see:\n- [Profiler Analysis Guide](references\u002Fprofiler-analysis-guide.md)\n\nFor fetching and interpreting profiler hot path call trees, see:\n- [Get Profile Hot Path skill](..\u002Fget-profile-hotpath\u002FSKILL.md)\n",{"data":33,"body":35},{"name":4,"category":34,"description":6},"exploring",{"type":36,"children":37},"root",[38,47,53,816,822,834,841,873,879,890,971,997,1003,1013,1019,1085,1091,1096,1108,1120,1131,1136,1146,1151,1163,1168,1180],{"type":39,"tag":40,"props":41,"children":43},"element","h1",{"id":42},"analysis",[44],{"type":45,"value":46},"text","Analysis",{"type":39,"tag":48,"props":49,"children":50},"p",{},[51],{"type":45,"value":52},"When asked to analyze performance issues based on profiler data, follow these steps:",{"type":39,"tag":54,"props":55,"children":56},"ol",{},[57,78,118,414,532,653,796,806],{"type":39,"tag":58,"props":59,"children":60},"li",{},[61,67,69,76],{"type":39,"tag":62,"props":63,"children":64},"strong",{},[65],{"type":45,"value":66},"Check investigation notes and gather inputs",{"type":45,"value":68}," — Follow the ",{"type":39,"tag":70,"props":71,"children":73},"a",{"href":72},"..\u002Fshared\u002Fstandard-skill-preamble.md",[74],{"type":45,"value":75},"Standard Skill Preamble",{"type":45,"value":77}," to check for existing investigation context and gather inputs.",{"type":39,"tag":58,"props":79,"children":80},{},[81,86,88,94,96,108,110,116],{"type":39,"tag":62,"props":82,"children":83},{},[84],{"type":45,"value":85},"Identify the Application Insights resource",{"type":45,"value":87}," — If the investigation notes didn't have the resource or the user wants a different one, follow the steps in ",{"type":39,"tag":70,"props":89,"children":91},{"href":90},"references\u002Fidentify-appinsights-resource.md",[92],{"type":45,"value":93},"Identify Application Insights Resource",{"type":45,"value":95},". After the resource is confirmed, ",{"type":39,"tag":62,"props":97,"children":98},{},[99,101],{"type":45,"value":100},"write or update ",{"type":39,"tag":102,"props":103,"children":105},"code",{"className":104},[],[106],{"type":45,"value":107},"investigation-notes.md",{"type":45,"value":109}," with the confirmed values. If only a resource ID is available, resolve the app ID using ",{"type":39,"tag":70,"props":111,"children":113},{"href":112},"..\u002Fshared\u002Fresolve-app-id.md",[114],{"type":45,"value":115},"resolve-app-id.md",{"type":45,"value":117},".",{"type":39,"tag":58,"props":119,"children":120},{},[121,126,128,134,136,142,144,150,152,166,234],{"type":39,"tag":62,"props":122,"children":123},{},[124],{"type":45,"value":125},"Query for slow requests with profiler traces",{"type":45,"value":127}," — Start by querying Application Insights for recent slow requests, especially those with ",{"type":39,"tag":102,"props":129,"children":131},{"className":130},[],[132],{"type":45,"value":133},"ServiceProfilerSample",{"type":45,"value":135}," events associated. Run the script in ",{"type":39,"tag":70,"props":137,"children":139},{"href":138},"scripts\u002Fquery-slow-requests.md",[140],{"type":45,"value":141},"query-slow-requests.md",{"type":45,"value":143}," to find the slowest requests that have profiler trace coverage. This gives you a concrete picture of what's slow and what has profiler data available for deeper analysis. The default lookback is 24 hours — adjust the ",{"type":39,"tag":102,"props":145,"children":147},{"className":146},[],[148],{"type":45,"value":149},"$lookbackHours",{"type":45,"value":151}," parameter to widen or narrow the window as needed.",{"type":39,"tag":153,"props":154,"children":155},"blockquote",{},[156],{"type":39,"tag":48,"props":157,"children":158},{},[159,164],{"type":39,"tag":62,"props":160,"children":161},{},[162],{"type":45,"value":163},"Why start here",{"type":45,"value":165},": This step surfaces real slow requests with profiler traces attached, so you can prioritize which operations to investigate. Use the results to guide the Code Optimization and hot path analysis steps that follow.",{"type":39,"tag":153,"props":167,"children":168},{},[169],{"type":39,"tag":48,"props":170,"children":171},{},[172,177,179,185,187,193,195,201,203,208,210,216,218,224,226,232],{"type":39,"tag":62,"props":173,"children":174},{},[175],{"type":45,"value":176},"⚠️ CLI query pitfalls",{"type":45,"value":178},": The ",{"type":39,"tag":102,"props":180,"children":182},{"className":181},[],[183],{"type":45,"value":184},"az monitor app-insights query",{"type":45,"value":186}," CLI has known issues that cause silent failures. Before running or modifying the query script, read ",{"type":39,"tag":70,"props":188,"children":190},{"href":189},"..\u002Fshared\u002Faz-cli-query-pitfalls.md",[191],{"type":45,"value":192},"az CLI query pitfalls",{"type":45,"value":194},". Key points: (1) ",{"type":39,"tag":102,"props":196,"children":198},{"className":197},[],[199],{"type":45,"value":200},"--offset",{"type":45,"value":202}," is ",{"type":39,"tag":62,"props":204,"children":205},{},[206],{"type":45,"value":207},"mandatory",{"type":45,"value":209}," — without it the CLI applies a 1-hour server-side filter that overrides KQL ",{"type":39,"tag":102,"props":211,"children":213},{"className":212},[],[214],{"type":45,"value":215},"ago()",{"type":45,"value":217},", (2) always use ",{"type":39,"tag":102,"props":219,"children":221},{"className":220},[],[222],{"type":45,"value":223},"--output json",{"type":45,"value":225}," — ",{"type":39,"tag":102,"props":227,"children":229},{"className":228},[],[230],{"type":45,"value":231},"--output table",{"type":45,"value":233}," silently drops results for join queries, (3) flatten KQL to a single line to avoid here-string truncation.",{"type":39,"tag":153,"props":235,"children":236},{},[237,262],{"type":39,"tag":48,"props":238,"children":239},{},[240,245,247,253,255,260],{"type":39,"tag":62,"props":241,"children":242},{},[243],{"type":45,"value":244},"⚠️ No profiler data?",{"type":45,"value":246}," If this query returns zero results, check for profiler activity by counting both ",{"type":39,"tag":102,"props":248,"children":250},{"className":249},[],[251],{"type":45,"value":252},"ServiceProfilerIndex",{"type":45,"value":254}," (session-level) and ",{"type":39,"tag":102,"props":256,"children":258},{"className":257},[],[259],{"type":45,"value":133},{"type":45,"value":261}," (request-level) events:",{"type":39,"tag":263,"props":264,"children":265},"ul",{},[266,374,394],{"type":39,"tag":58,"props":267,"children":268},{},[269,274,276,282,284,289,291,297,299,305,307,313,315,321,322,328,329,335,337,343,345,351,353,358,360,365,367,372],{"type":39,"tag":62,"props":270,"children":271},{},[272],{"type":45,"value":273},"Neither event type exists",{"type":45,"value":275}," → before recommending the ",{"type":39,"tag":102,"props":277,"children":279},{"className":278},[],[280],{"type":45,"value":281},"enable-profiler",{"type":45,"value":283}," skill, ",{"type":39,"tag":62,"props":285,"children":286},{},[287],{"type":45,"value":288},"check local source code for an existing profiler configuration",{"type":45,"value":290},". Search for profiler NuGet packages (",{"type":39,"tag":102,"props":292,"children":294},{"className":293},[],[295],{"type":45,"value":296},"Microsoft.ApplicationInsights.Profiler.AspNetCore",{"type":45,"value":298}," or ",{"type":39,"tag":102,"props":300,"children":302},{"className":301},[],[303],{"type":45,"value":304},"Azure.Monitor.OpenTelemetry.Profiler",{"type":45,"value":306}," in ",{"type":39,"tag":102,"props":308,"children":310},{"className":309},[],[311],{"type":45,"value":312},"*.csproj",{"type":45,"value":314},") and registration calls (",{"type":39,"tag":102,"props":316,"children":318},{"className":317},[],[319],{"type":45,"value":320},"AddServiceProfiler",{"type":45,"value":298},{"type":39,"tag":102,"props":323,"children":325},{"className":324},[],[326],{"type":45,"value":327},"AddAzureMonitorProfiler",{"type":45,"value":306},{"type":39,"tag":102,"props":330,"children":332},{"className":331},[],[333],{"type":45,"value":334},"Program.cs",{"type":45,"value":336},"\u002F",{"type":39,"tag":102,"props":338,"children":340},{"className":339},[],[341],{"type":45,"value":342},"Startup.cs",{"type":45,"value":344},"). If profiler code IS present, run ",{"type":39,"tag":70,"props":346,"children":348},{"href":347},"..\u002Fshared\u002Fcheck-connection-string-match.md",[349],{"type":45,"value":350},"check-connection-string-match.md",{"type":45,"value":352}," to verify the app's connection string points to the target resource. A ",{"type":39,"tag":62,"props":354,"children":355},{},[356],{"type":45,"value":357},"mismatch in source code",{"type":45,"value":359}," is a troubleshooting signal — note that connection strings are often overridden at deployment time via environment variables, App Service settings, or CI\u002FCD, so a source-code mismatch does not definitively mean the app is sending data elsewhere. Present the finding to the user and ask them to confirm which scenario applies (see guidance in ",{"type":39,"tag":102,"props":361,"children":363},{"className":362},[],[364],{"type":45,"value":350},{"type":45,"value":366},"). Only recommend the ",{"type":39,"tag":102,"props":368,"children":370},{"className":369},[],[371],{"type":45,"value":281},{"type":45,"value":373}," skill if the profiler is genuinely not configured in the source code, or if connection strings match (or the mismatch is confirmed as a non-issue) but no events exist.",{"type":39,"tag":58,"props":375,"children":376},{},[377,392],{"type":39,"tag":62,"props":378,"children":379},{},[380,385,387],{"type":39,"tag":102,"props":381,"children":383},{"className":382},[],[384],{"type":45,"value":252},{"type":45,"value":386}," exists but no ",{"type":39,"tag":102,"props":388,"children":390},{"className":389},[],[391],{"type":45,"value":133},{"type":45,"value":393}," → the profiler IS running sessions but captured zero request-level samples (e.g., low traffic, no requests during profiling windows). Skip steps 5 and 6 (Code Optimizations and hot path both require request-level samples), but do NOT recommend enabling the profiler — it is already enabled. Instead, suggest the user generate more traffic and wait for the next profiling cycle.",{"type":39,"tag":58,"props":395,"children":396},{},[397,399,405,407,412],{"type":45,"value":398},"In either case, you may still analyze request telemetry (durations, error rates, operation names) from the ",{"type":39,"tag":102,"props":400,"children":402},{"className":401},[],[403],{"type":45,"value":404},"requests",{"type":45,"value":406}," table to give the user a high-level picture of what's slow, but without ",{"type":39,"tag":102,"props":408,"children":410},{"className":409},[],[411],{"type":45,"value":133},{"type":45,"value":413}," data, method-level analysis is not possible.",{"type":39,"tag":58,"props":415,"children":416},{},[417,422,424,428,433,506,519],{"type":39,"tag":62,"props":418,"children":419},{},[420],{"type":45,"value":421},"Present findings and let the user choose",{"type":45,"value":423}," — After collecting slow request results from step 3, present the findings to the user with investigation recommendations. Do not proceed automatically — let the user decide which request(s) to investigate.",{"type":39,"tag":425,"props":426,"children":427},"br",{},[],{"type":39,"tag":62,"props":429,"children":430},{},[431],{"type":45,"value":432},"How to present the results:",{"type":39,"tag":263,"props":434,"children":435},{},[436,441,496,501],{"type":39,"tag":58,"props":437,"children":438},{},[439],{"type":45,"value":440},"Summarize the slow requests in a clear, ranked list.",{"type":39,"tag":58,"props":442,"children":443},{},[444,446,451,453],{"type":45,"value":445},"For the top candidates (typically 2–3), provide a short rationale explaining ",{"type":39,"tag":62,"props":447,"children":448},{},[449],{"type":45,"value":450},"why",{"type":45,"value":452}," each is worth investigating. Consider factors such as:\n",{"type":39,"tag":263,"props":454,"children":455},{},[456,466,476,486],{"type":39,"tag":58,"props":457,"children":458},{},[459,464],{"type":39,"tag":62,"props":460,"children":461},{},[462],{"type":45,"value":463},"Duration",{"type":45,"value":465}," — the slowest requests are often the highest-impact targets.",{"type":39,"tag":58,"props":467,"children":468},{},[469,474],{"type":39,"tag":62,"props":470,"children":471},{},[472],{"type":45,"value":473},"Frequency",{"type":45,"value":475}," — an operation that appears multiple times suggests a systemic issue rather than a one-off spike.",{"type":39,"tag":58,"props":477,"children":478},{},[479,484],{"type":39,"tag":62,"props":480,"children":481},{},[482],{"type":45,"value":483},"Error codes",{"type":45,"value":485}," — non-200 status codes combined with high latency may indicate a different class of problem (e.g., retries, timeouts).",{"type":39,"tag":58,"props":487,"children":488},{},[489,494],{"type":39,"tag":62,"props":490,"children":491},{},[492],{"type":45,"value":493},"Operation name",{"type":45,"value":495}," — if a known critical endpoint appears, call that out.",{"type":39,"tag":58,"props":497,"children":498},{},[499],{"type":45,"value":500},"Explicitly recommend which request(s) you would investigate first, and why.",{"type":39,"tag":58,"props":502,"children":503},{},[504],{"type":45,"value":505},"Ask the user which request(s) they would like to proceed with.",{"type":39,"tag":153,"props":507,"children":508},{},[509],{"type":39,"tag":48,"props":510,"children":511},{},[512,517],{"type":39,"tag":62,"props":513,"children":514},{},[515],{"type":45,"value":516},"Why ask the user",{"type":45,"value":518},": The user may have domain context you don't — they may know that a particular endpoint is low-priority, or that a specific operation is already being worked on. Letting them choose avoids wasting time on the wrong target.",{"type":39,"tag":153,"props":520,"children":521},{},[522],{"type":39,"tag":48,"props":523,"children":524},{},[525,530],{"type":39,"tag":62,"props":526,"children":527},{},[528],{"type":45,"value":529},"If only one result",{"type":45,"value":531},": If the query returned a single slow request, still present it with context and confirm with the user before proceeding.",{"type":39,"tag":58,"props":533,"children":534},{},[535,540,542,548,550,591],{"type":39,"tag":62,"props":536,"children":537},{},[538],{"type":45,"value":539},"Query Code Optimizations data",{"type":45,"value":541}," — Run the script in ",{"type":39,"tag":70,"props":543,"children":545},{"href":544},"scripts\u002Fget-code-optimizations.md",[546],{"type":45,"value":547},"get-code-optimizations.md",{"type":45,"value":549}," to fetch AI-powered recommendations from the profiler dataplane API. This is cheap and fast — it often points directly to the right methods without needing deeper analysis.",{"type":39,"tag":153,"props":551,"children":552},{},[553],{"type":39,"tag":48,"props":554,"children":555},{},[556,561,563,568,570,575,577,582,584,589],{"type":39,"tag":62,"props":557,"children":558},{},[559],{"type":45,"value":560},"⚠️ Skip this step if no request-level profiler data exists",{"type":45,"value":562},": Code Optimizations are generated from profiler trace data. If no ",{"type":39,"tag":102,"props":564,"children":566},{"className":565},[],[567],{"type":45,"value":133},{"type":45,"value":569}," events were found (regardless of whether ",{"type":39,"tag":102,"props":571,"children":573},{"className":572},[],[574],{"type":45,"value":252},{"type":45,"value":576}," sessions exist), skip this step — the API will return empty results. If no ",{"type":39,"tag":102,"props":578,"children":580},{"className":579},[],[581],{"type":45,"value":252},{"type":45,"value":583}," events exist either, recommend the ",{"type":39,"tag":102,"props":585,"children":587},{"className":586},[],[588],{"type":45,"value":281},{"type":45,"value":590}," skill.",{"type":39,"tag":153,"props":592,"children":593},{},[594,604],{"type":39,"tag":48,"props":595,"children":596},{},[597,602],{"type":39,"tag":62,"props":598,"children":599},{},[600],{"type":45,"value":601},"If no recommendations are found",{"type":45,"value":603}," (but profiler data does exist): This may happen when the profiler hasn't collected enough data yet. Try these fallback steps:",{"type":39,"tag":54,"props":605,"children":606},{},[607,625,635],{"type":39,"tag":58,"props":608,"children":609},{},[610,615,617,623],{"type":39,"tag":62,"props":611,"children":612},{},[613],{"type":45,"value":614},"Widen the time range",{"type":45,"value":616}," — increase ",{"type":39,"tag":102,"props":618,"children":620},{"className":619},[],[621],{"type":45,"value":622},"$startTime",{"type":45,"value":624}," to cover the last 7 or 30 days instead of 24 hours.",{"type":39,"tag":58,"props":626,"children":627},{},[628,633],{"type":39,"tag":62,"props":629,"children":630},{},[631],{"type":45,"value":632},"Verify the profiler is active",{"type":45,"value":634}," — check that Application Insights Profiler is enabled and has recent profiling sessions. If step 3 returned no results either, the profiler may not be enabled.",{"type":39,"tag":58,"props":636,"children":637},{},[638,643,645,651],{"type":39,"tag":62,"props":639,"children":640},{},[641],{"type":45,"value":642},"Fall back to manual trace analysis",{"type":45,"value":644}," — skip to step 6 and invoke the ",{"type":39,"tag":102,"props":646,"children":648},{"className":647},[],[649],{"type":45,"value":650},"get-profile-hotpath",{"type":45,"value":652}," skill directly. Use the slow request IDs from step 3 (if available) to analyze the most expensive operations without Code Optimization guidance.",{"type":39,"tag":58,"props":654,"children":655},{},[656,661,663,668,670,676,678,776],{"type":39,"tag":62,"props":657,"children":658},{},[659],{"type":45,"value":660},"Fetch profiler hot path for targeted operations",{"type":45,"value":662}," — Once you've identified the most impactful operations from steps 3–5, use the ",{"type":39,"tag":102,"props":664,"children":666},{"className":665},[],[667],{"type":45,"value":650},{"type":45,"value":669}," skill to retrieve the call tree and hot path for specific traces. This is an expensive operation — only invoke it for operations that warrant deep investigation. See ",{"type":39,"tag":70,"props":671,"children":673},{"href":672},"#leveraging-profiler-hot-path-data",[674],{"type":45,"value":675},"Leveraging Profiler Hot Path Data",{"type":45,"value":677}," for details.",{"type":39,"tag":153,"props":679,"children":680},{},[681,722,743],{"type":39,"tag":48,"props":682,"children":683},{},[684,689,691,696,698,704,706,712,714,720],{"type":39,"tag":62,"props":685,"children":686},{},[687],{"type":45,"value":688},"Bridging request IDs to trace location IDs",{"type":45,"value":690},": The slow requests from step 3 return request IDs, but the ",{"type":39,"tag":102,"props":692,"children":694},{"className":693},[],[695],{"type":45,"value":650},{"type":45,"value":697}," skill requires a ",{"type":39,"tag":102,"props":699,"children":701},{"className":700},[],[702],{"type":45,"value":703},"ServiceProfilerContent",{"type":45,"value":705}," trace location ID. To look up trace location IDs for specific request IDs, query Application Insights ",{"type":39,"tag":102,"props":707,"children":709},{"className":708},[],[710],{"type":45,"value":711},"customEvents",{"type":45,"value":713}," filtering by ",{"type":39,"tag":102,"props":715,"children":717},{"className":716},[],[718],{"type":45,"value":719},"customDimensions.RequestId",{"type":45,"value":721},":",{"type":39,"tag":723,"props":724,"children":729},"pre",{"className":725,"code":726,"language":727,"meta":728,"style":728},"language-kql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","customEvents | where name == 'ServiceProfilerSample' | extend reqId = tostring(customDimensions['RequestId']) | where reqId in ('REQUEST_ID_1', 'REQUEST_ID_2') | project timestamp, tostring(customDimensions['ServiceProfilerContent']), reqId\n","kql","",[730],{"type":39,"tag":102,"props":731,"children":732},{"__ignoreMap":728},[733],{"type":39,"tag":734,"props":735,"children":738},"span",{"class":736,"line":737},"line",1,[739],{"type":39,"tag":734,"props":740,"children":741},{},[742],{"type":45,"value":726},{"type":39,"tag":48,"props":744,"children":745},{},[746,748,753,755,760,762,767,769,774],{"type":45,"value":747},"Run this using the same ",{"type":39,"tag":102,"props":749,"children":751},{"className":750},[],[752],{"type":45,"value":184},{"type":45,"value":754}," pattern from step 3 (with ",{"type":39,"tag":102,"props":756,"children":758},{"className":757},[],[759],{"type":45,"value":200},{"type":45,"value":761}," and ",{"type":39,"tag":102,"props":763,"children":765},{"className":764},[],[766],{"type":45,"value":223},{"type":45,"value":768},"). The ",{"type":39,"tag":102,"props":770,"children":772},{"className":771},[],[773],{"type":45,"value":703},{"type":45,"value":775}," value from the results is the trace location ID needed for the hot path skill.",{"type":39,"tag":153,"props":777,"children":778},{},[779],{"type":39,"tag":48,"props":780,"children":781},{},[782,787,789,794],{"type":39,"tag":62,"props":783,"children":784},{},[785],{"type":45,"value":786},"Set user expectations",{"type":45,"value":788},": The hot path fetch involves multiple API steps (trigger analysis → poll for completion → fetch root tree → expand child nodes) and typically takes ",{"type":39,"tag":62,"props":790,"children":791},{},[792],{"type":45,"value":793},"1–2 minutes",{"type":45,"value":795}," for fresh analyses. Inform the user upfront that this will take some time. For previously analyzed traces, results are cached and return in seconds.",{"type":39,"tag":58,"props":797,"children":798},{},[799,804],{"type":39,"tag":62,"props":800,"children":801},{},[802],{"type":45,"value":803},"Putting data together to identify performance improvement opportunities",{"type":45,"value":805}," — Correlate the hot path bottlenecks with code optimization recommendations to prioritize fixes.",{"type":39,"tag":58,"props":807,"children":808},{},[809,814],{"type":39,"tag":62,"props":810,"children":811},{},[812],{"type":45,"value":813},"Try provide code edits to optimize the performance",{"type":45,"value":815}," — When source code is available, suggest concrete code changes targeting the methods identified in the hot path.",{"type":39,"tag":817,"props":818,"children":820},"h2",{"id":819},"leveraging-profiler-hot-path-data",[821],{"type":45,"value":675},{"type":39,"tag":48,"props":823,"children":824},{},[825,827,832],{"type":45,"value":826},"The ",{"type":39,"tag":102,"props":828,"children":830},{"className":829},[],[831],{"type":45,"value":650},{"type":45,"value":833}," skill provides method-level profiler trace data. Invoke it to get the hot path call tree for a specific profiler trace, then use the results here for deeper analysis.",{"type":39,"tag":835,"props":836,"children":838},"h3",{"id":837},"when-to-use-the-hot-path-data",[839],{"type":45,"value":840},"When to use the hot path data",{"type":39,"tag":263,"props":842,"children":843},{},[844,856,868],{"type":39,"tag":58,"props":845,"children":846},{},[847,849,854],{"type":45,"value":848},"Fetch the hot path only ",{"type":39,"tag":62,"props":850,"children":851},{},[852],{"type":45,"value":853},"after",{"type":45,"value":855}," code optimization recommendations have identified specific operations worth investigating, or after step 3 has surfaced specific slow requests with profiler traces — it is an expensive operation per request.",{"type":39,"tag":58,"props":857,"children":858},{},[859,861,866],{"type":45,"value":860},"Use it to get method-level detail on ",{"type":39,"tag":62,"props":862,"children":863},{},[864],{"type":45,"value":865},"targeted",{"type":45,"value":867}," slow operations already surfaced by telemetry.",{"type":39,"tag":58,"props":869,"children":870},{},[871],{"type":45,"value":872},"Cross-reference hot path methods with Code Optimization recommendations for actionable fixes.",{"type":39,"tag":835,"props":874,"children":876},{"id":875},"how-to-use-the-hot-path-results",[877],{"type":45,"value":878},"How to use the hot path results",{"type":39,"tag":48,"props":880,"children":881},{},[882,883,888],{"type":45,"value":826},{"type":39,"tag":102,"props":884,"children":886},{"className":885},[],[887],{"type":45,"value":650},{"type":45,"value":889}," skill returns a call tree with timing data. Use it as follows:",{"type":39,"tag":54,"props":891,"children":892},{},[893,911,945,961],{"type":39,"tag":58,"props":894,"children":895},{},[896,901,903,909],{"type":39,"tag":62,"props":897,"children":898},{},[899],{"type":45,"value":900},"Identify the dominant method",{"type":45,"value":902},": The hot path highlights the most expensive execution path. Focus optimization efforts on the methods consuming the most inclusive time (highest ",{"type":39,"tag":102,"props":904,"children":906},{"className":905},[],[907],{"type":45,"value":908},"Values.Metric",{"type":45,"value":910},").",{"type":39,"tag":58,"props":912,"children":913},{},[914,919,921,927,929,935,937,943],{"type":39,"tag":62,"props":915,"children":916},{},[917],{"type":45,"value":918},"Classify the bottleneck type",{"type":45,"value":920},": Check ",{"type":39,"tag":102,"props":922,"children":924},{"className":923},[],[925],{"type":45,"value":926},"TotalCpuTime",{"type":45,"value":928},", ",{"type":39,"tag":102,"props":930,"children":932},{"className":931},[],[933],{"type":45,"value":934},"TotalAwaitTime",{"type":45,"value":936},", and ",{"type":39,"tag":102,"props":938,"children":940},{"className":939},[],[941],{"type":45,"value":942},"TotalBlockedTime",{"type":45,"value":944}," from the root tree to determine if the issue is CPU-bound, I\u002FO-bound, or contention-bound.",{"type":39,"tag":58,"props":946,"children":947},{},[948,953,955,959],{"type":39,"tag":62,"props":949,"children":950},{},[951],{"type":45,"value":952},"Match with Code Optimization recommendations",{"type":45,"value":954},": Cross-reference the hot path methods with the recommendations from ",{"type":39,"tag":70,"props":956,"children":957},{"href":544},[958],{"type":45,"value":547},{"type":45,"value":960}," for prioritized, data-backed fixes.",{"type":39,"tag":58,"props":962,"children":963},{},[964,969],{"type":39,"tag":62,"props":965,"children":966},{},[967],{"type":45,"value":968},"Target code changes",{"type":45,"value":970},": If source code is available, navigate to the methods identified in the hot path and apply targeted optimizations.",{"type":39,"tag":153,"props":972,"children":973},{},[974],{"type":39,"tag":48,"props":975,"children":976},{},[977,982,984,988,990,995],{"type":39,"tag":62,"props":978,"children":979},{},[980],{"type":45,"value":981},"Note on log queries",{"type":45,"value":983},": If you need to query Application Insights logs (requests, dependencies, performanceCounters tables) for additional context beyond what ",{"type":39,"tag":70,"props":985,"children":986},{"href":138},[987],{"type":45,"value":141},{"type":45,"value":989}," provides, use the Azure portal, Azure CLI (",{"type":39,"tag":102,"props":991,"children":993},{"className":992},[],[994],{"type":45,"value":184},{"type":45,"value":996},"), or the Azure Monitor REST API directly. This skill focuses on profiler-based analysis via the dataplane API.",{"type":39,"tag":835,"props":998,"children":1000},{"id":999},"example-workflow",[1001],{"type":45,"value":1002},"Example workflow",{"type":39,"tag":723,"props":1004,"children":1008},{"className":1005,"code":1007,"language":45},[1006],"language-text","1. Check investigation-notes.md for previously identified App Insights resource\n2. If found, confirm with user; if not, identify and write to investigation notes\n3. Resolve app ID from resource ID if needed\n4. Query for slow requests with profiler traces (query-slow-requests.md)\n5. If zero profiler events (no ServiceProfilerIndex):\n   a. Check local source for profiler NuGet packages and registration calls\n   b. If profiler code found → run check-connection-string-match.md\n   c. If mismatch in source → present as troubleshooting signal (may be overridden at deploy time), ask user to confirm → stop or continue based on user response\n   d. If no profiler code, or strings match, or mismatch confirmed as non-issue → recommend enable-profiler skill → stop\n   If ServiceProfilerIndex exists but no ServiceProfilerSample: profiler is running but no request samples → advise on traffic\u002Ftriggers → stop\n6. Present ranked results with rationales; ask user which request(s) to investigate\n7. Run get-code-optimizations.md to fetch Code Optimization recommendations\n8. Identify the top operations worth deep-diving (from steps 6–7)\n9. Invoke get-profile-hotpath skill with the app ID and trace location ID\n10. Receive hot path call tree (e.g., WeatherForecastController.Get → 70% in ToList lambda)\n11. Combine hot path + recommendations into prioritized action plan\n12. Suggest code changes targeting the hot path bottleneck methods\n",[1009],{"type":39,"tag":102,"props":1010,"children":1011},{"__ignoreMap":728},[1012],{"type":45,"value":1007},{"type":39,"tag":817,"props":1014,"children":1016},{"id":1015},"tips",[1017],{"type":45,"value":1018},"Tips",{"type":39,"tag":263,"props":1020,"children":1021},{},[1022,1027,1037,1049,1054,1059],{"type":39,"tag":58,"props":1023,"children":1024},{},[1025],{"type":45,"value":1026},"Always confirm the Application Insights resource with the user before proceeding with analysis.",{"type":39,"tag":58,"props":1028,"children":1029},{},[1030,1032,1036],{"type":45,"value":1031},"The app ID (GUID) is required for all dataplane API calls. If only a resource ID is available, resolve it with ",{"type":39,"tag":70,"props":1033,"children":1034},{"href":112},[1035],{"type":45,"value":115},{"type":45,"value":117},{"type":39,"tag":58,"props":1038,"children":1039},{},[1040,1042,1047],{"type":45,"value":1041},"When a profiler trace is available for a slow operation, invoke the ",{"type":39,"tag":102,"props":1043,"children":1045},{"className":1044},[],[1046],{"type":45,"value":650},{"type":45,"value":1048}," skill to get method-level bottleneck data — but only after Code Optimization recommendations have confirmed the operation is worth investigating.",{"type":39,"tag":58,"props":1050,"children":1051},{},[1052],{"type":45,"value":1053},"Cross-reference hot path methods with Code Optimization recommendations for the highest-confidence optimization suggestions.",{"type":39,"tag":58,"props":1055,"children":1056},{},[1057],{"type":45,"value":1058},"When suggesting code optimizations, target the specific methods identified in the hot path and consider the bottleneck type (CPU, I\u002FO, contention).",{"type":39,"tag":58,"props":1060,"children":1061},{},[1062,1067,1069,1075,1077,1083],{"type":39,"tag":62,"props":1063,"children":1064},{},[1065],{"type":45,"value":1066},"Distributed trace analysis",{"type":45,"value":1068},": If a slow operation involves calls to downstream services (visible in the ",{"type":39,"tag":102,"props":1070,"children":1072},{"className":1071},[],[1073],{"type":45,"value":1074},"dependencies",{"type":45,"value":1076}," table or hot path), and those services have their own App Insights resources, suggest the ",{"type":39,"tag":102,"props":1078,"children":1080},{"className":1079},[],[1081],{"type":45,"value":1082},"deep-analysis",{"type":45,"value":1084}," skill. The user can provide the operation ID to get a unified cross-resource timeline showing where time was spent across all services.",{"type":39,"tag":817,"props":1086,"children":1088},{"id":1087},"references",[1089],{"type":45,"value":1090},"References",{"type":39,"tag":48,"props":1092,"children":1093},{},[1094],{"type":45,"value":1095},"For the investigation notes format and read\u002Fwrite protocol, see:",{"type":39,"tag":263,"props":1097,"children":1098},{},[1099],{"type":39,"tag":58,"props":1100,"children":1101},{},[1102],{"type":39,"tag":70,"props":1103,"children":1105},{"href":1104},"..\u002Fshared\u002Finvestigation-notes.md",[1106],{"type":45,"value":1107},"Investigation Notes",{"type":39,"tag":48,"props":1109,"children":1110},{},[1111,1113,1118],{"type":45,"value":1112},"For known ",{"type":39,"tag":102,"props":1114,"children":1116},{"className":1115},[],[1117],{"type":45,"value":184},{"type":45,"value":1119}," CLI issues, see:",{"type":39,"tag":263,"props":1121,"children":1122},{},[1123],{"type":39,"tag":58,"props":1124,"children":1125},{},[1126],{"type":39,"tag":70,"props":1127,"children":1128},{"href":189},[1129],{"type":45,"value":1130},"az CLI Query Pitfalls",{"type":39,"tag":48,"props":1132,"children":1133},{},[1134],{"type":45,"value":1135},"For detailed guidance on finding application insights resource, see:",{"type":39,"tag":263,"props":1137,"children":1138},{},[1139],{"type":39,"tag":58,"props":1140,"children":1141},{},[1142],{"type":39,"tag":70,"props":1143,"children":1144},{"href":90},[1145],{"type":45,"value":93},{"type":39,"tag":48,"props":1147,"children":1148},{},[1149],{"type":45,"value":1150},"For detailed guidance on analyzing Application Insights Profiler traces, see:",{"type":39,"tag":263,"props":1152,"children":1153},{},[1154],{"type":39,"tag":58,"props":1155,"children":1156},{},[1157],{"type":39,"tag":70,"props":1158,"children":1160},{"href":1159},"references\u002Fprofiler-analysis-guide.md",[1161],{"type":45,"value":1162},"Profiler Analysis Guide",{"type":39,"tag":48,"props":1164,"children":1165},{},[1166],{"type":45,"value":1167},"For fetching and interpreting profiler hot path call trees, see:",{"type":39,"tag":263,"props":1169,"children":1170},{},[1171],{"type":39,"tag":58,"props":1172,"children":1173},{},[1174],{"type":39,"tag":70,"props":1175,"children":1177},{"href":1176},"..\u002Fget-profile-hotpath\u002FSKILL.md",[1178],{"type":45,"value":1179},"Get Profile Hot Path skill",{"type":39,"tag":1181,"props":1182,"children":1183},"style",{},[1184],{"type":45,"value":1185},"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":1187,"total":22},[1188,1205],{"slug":1189,"name":1189,"fn":1190,"description":1191,"org":1192,"tags":1193,"stars":22,"repoUrl":23,"updatedAt":1204},"error-exploration","investigate errors in Application Insights","Explore errors in Application Insights — exceptions, failed requests, and failed dependencies. Use this when asked to find errors, investigate failures, identify reliability issues, or recommend which errors to fix.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1194,1197,1200,1201],{"name":1195,"slug":1196,"type":15},"Application Insights","application-insights",{"name":1198,"slug":1199,"type":15},"Azure","azure",{"name":20,"slug":21,"type":15},{"name":1202,"slug":1203,"type":15},"Observability","observability","2026-07-03T16:32:18.458603",{"slug":4,"name":4,"fn":5,"description":6,"org":1206,"tags":1207,"stars":22,"repoUrl":23,"updatedAt":24},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1208,1209,1210],{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"items":1212,"total":1403},[1213,1233,1252,1273,1288,1305,1316,1329,1344,1359,1378,1391],{"slug":1214,"name":1214,"fn":1215,"description":1216,"org":1217,"tags":1218,"stars":1230,"repoUrl":1231,"updatedAt":1232},"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},[1219,1220,1223,1224,1227],{"name":17,"slug":18,"type":15},{"name":1221,"slug":1222,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":1225,"slug":1226,"type":15},"Project Management","project-management",{"name":1228,"slug":1229,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":1234,"name":1234,"fn":1235,"description":1236,"org":1237,"tags":1238,"stars":1249,"repoUrl":1250,"updatedAt":1251},"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},[1239,1242,1245,1246],{"name":1240,"slug":1241,"type":15},".NET","net",{"name":1243,"slug":1244,"type":15},"Agents","agents",{"name":1198,"slug":1199,"type":15},{"name":1247,"slug":1248,"type":15},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":1253,"name":1253,"fn":1254,"description":1255,"org":1256,"tags":1257,"stars":1249,"repoUrl":1250,"updatedAt":1272},"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},[1258,1261,1262,1265,1268,1269],{"name":1259,"slug":1260,"type":15},"Analytics","analytics",{"name":1198,"slug":1199,"type":15},{"name":1263,"slug":1264,"type":15},"Data Analysis","data-analysis",{"name":1266,"slug":1267,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":1270,"slug":1271,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":1274,"name":1274,"fn":1275,"description":1276,"org":1277,"tags":1278,"stars":1249,"repoUrl":1250,"updatedAt":1287},"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},[1279,1282,1283,1284],{"name":1280,"slug":1281,"type":15},"AI Infrastructure","ai-infrastructure",{"name":1198,"slug":1199,"type":15},{"name":1266,"slug":1267,"type":15},{"name":1285,"slug":1286,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":1289,"name":1289,"fn":1290,"description":1291,"org":1292,"tags":1293,"stars":1249,"repoUrl":1250,"updatedAt":1304},"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},[1294,1295,1298,1299,1300,1303],{"name":1198,"slug":1199,"type":15},{"name":1296,"slug":1297,"type":15},"Compliance","compliance",{"name":1247,"slug":1248,"type":15},{"name":9,"slug":8,"type":15},{"name":1301,"slug":1302,"type":15},"Python","python",{"name":1285,"slug":1286,"type":15},"2026-07-18T05:14:23.017504",{"slug":1306,"name":1306,"fn":1307,"description":1308,"org":1309,"tags":1310,"stars":1249,"repoUrl":1250,"updatedAt":1315},"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},[1311,1312,1313,1314],{"name":1259,"slug":1260,"type":15},{"name":1198,"slug":1199,"type":15},{"name":1247,"slug":1248,"type":15},{"name":1301,"slug":1302,"type":15},"2026-07-31T05:54:29.068751",{"slug":1317,"name":1317,"fn":1318,"description":1319,"org":1320,"tags":1321,"stars":1249,"repoUrl":1250,"updatedAt":1328},"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},[1322,1325,1326,1327],{"name":1323,"slug":1324,"type":15},"API Development","api-development",{"name":1198,"slug":1199,"type":15},{"name":9,"slug":8,"type":15},{"name":1301,"slug":1302,"type":15},"2026-07-18T05:14:16.988376",{"slug":1330,"name":1330,"fn":1331,"description":1332,"org":1333,"tags":1334,"stars":1249,"repoUrl":1250,"updatedAt":1343},"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},[1335,1336,1339,1342],{"name":1198,"slug":1199,"type":15},{"name":1337,"slug":1338,"type":15},"Computer Vision","computer-vision",{"name":1340,"slug":1341,"type":15},"Images","images",{"name":1301,"slug":1302,"type":15},"2026-07-18T05:14:18.007737",{"slug":1345,"name":1345,"fn":1346,"description":1347,"org":1348,"tags":1349,"stars":1249,"repoUrl":1250,"updatedAt":1358},"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},[1350,1351,1354,1357],{"name":1198,"slug":1199,"type":15},{"name":1352,"slug":1353,"type":15},"Configuration","configuration",{"name":1355,"slug":1356,"type":15},"Feature Flags","feature-flags",{"name":1266,"slug":1267,"type":15},"2026-07-03T16:32:01.278468",{"slug":1360,"name":1360,"fn":1361,"description":1362,"org":1363,"tags":1364,"stars":1249,"repoUrl":1250,"updatedAt":1377},"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},[1365,1368,1371,1374],{"name":1366,"slug":1367,"type":15},"Cosmos DB","cosmos-db",{"name":1369,"slug":1370,"type":15},"Database","database",{"name":1372,"slug":1373,"type":15},"NoSQL","nosql",{"name":1375,"slug":1376,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":1379,"name":1379,"fn":1361,"description":1380,"org":1381,"tags":1382,"stars":1249,"repoUrl":1250,"updatedAt":1390},"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},[1383,1384,1385,1386,1387],{"name":1366,"slug":1367,"type":15},{"name":1369,"slug":1370,"type":15},{"name":9,"slug":8,"type":15},{"name":1372,"slug":1373,"type":15},{"name":1388,"slug":1389,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":1392,"name":1392,"fn":1393,"description":1394,"org":1395,"tags":1396,"stars":1249,"repoUrl":1250,"updatedAt":1402},"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},[1397,1398,1399,1400,1401],{"name":1198,"slug":1199,"type":15},{"name":1366,"slug":1367,"type":15},{"name":1369,"slug":1370,"type":15},{"name":1266,"slug":1267,"type":15},{"name":1372,"slug":1373,"type":15},"2026-05-13T06:14:17.582229",267]