[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-recipe-to-dot":3,"mdc--7zfldv-key":33,"related-repo-microsoft-recipe-to-dot":637,"related-org-microsoft-recipe-to-dot":645},{"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":28,"sourceUrl":31,"mdContent":32},"recipe-to-dot","generate DOT flowcharts from recipe YAML","Convention for generating DOT flowchart diagrams from Amplifier recipe YAML files",{"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},"Amplifier","amplifier","tag",{"name":17,"slug":18,"type":15},"YAML","yaml",{"name":20,"slug":21,"type":15},"Diagrams","diagrams",6,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-bundle-recipes","2026-04-06T18:38:23.129253",null,12,[],{"repoUrl":23,"stars":22,"forks":26,"topics":29,"description":30},[],"Recipes bundle for the Amplifier project","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-bundle-recipes\u002Ftree\u002FHEAD\u002Fskills\u002Frecipe-to-dot","---\nname: recipe-to-dot\ndescription: Convention for generating DOT flowchart diagrams from Amplifier recipe YAML files\nversion: 1.0.0\n---\n\n# Recipe-to-DOT Convention\n\n## Purpose\n\nRecipe YAML files define multi-step AI agent workflows, but they're hard to understand at a glance. DOT flowchart diagrams make recipes visually understandable. This skill documents the standard mapping from recipe YAML structure to DOT visual elements.\n\n## Visual Convention Mapping\n\n| Recipe Concept | DOT Shape | Fill Color | Style |\n|---|---|---|---|\n| Start\u002FEnd nodes | oval | #e0e0e0 (gray) | filled,rounded |\n| Bash step (type: bash) | box | #bbdefb (blue) | filled,rounded |\n| Agent step (type: agent \u002F default) | box | #c8e6c9 (green) | filled,rounded |\n| Sub-recipe call (type: recipe) | box | #e0e0e0 (gray) | filled,rounded,dashed |\n| Approval gate | diamond | #ffe0b2 (orange) | filled |\n| Condition decision | diamond | #fff9c4 (yellow) | filled |\n| Data\u002FOutput | note or cylinder | #e1bee7 (purple) | filled |\n\n## Graph Structure Rules\n\n- Graph flows top-to-bottom (rankdir=TB)\n- Every diagram has Start and Done nodes\n- Flat mode: steps flow sequentially, conditions get preceding diamonds\n- Staged mode: each stage is a cluster subgraph\n- Approval gates between stages when approval.required=true\n- Foreach\u002Fparallel get annotations on edges or node labels\n- While loops get dashed loop-back edges\n- Legend at bottom showing only step types actually used\n\n## Auto-labeling\n\nStep IDs are converted to readable labels:\n- Split on hyphens, title-case each word\n- 3+ words split across 2 lines\n- Sub-recipe steps append \"(sub-recipe)\"\n\n## File Conventions\n\n- Recipe DOT files are **co-located next to their source YAML file**\n- Naming: same filename, different extension — `.yaml` → `.dot` and `.png`\n  - `recipes\u002Fvalidate-recipes.yaml` → `recipes\u002Fvalidate-recipes.dot` + `.png`\n  - `examples\u002Fcode-review-recipe.yaml` → `examples\u002Fcode-review-recipe.dot` + `.png`\n- Rendered with: `dot -Tpng recipe-name.dot -o recipe-name.png`\n\n## Programmatic Generation\n\nThe `recipe_to_dot` Python function in `amplifier_module_tool_recipes.recipe_to_dot` generates DOT deterministically from YAML:\n\n```python\nfrom amplifier_module_tool_recipes.recipe_to_dot import recipe_to_dot, recipe_dot_hash\n\n# Generate DOT string\ndot = recipe_to_dot(\"path\u002Fto\u002Frecipe.yaml\")\n\n# Get hash for freshness checking\nhash = recipe_dot_hash(\"path\u002Fto\u002Frecipe.yaml\")\n```\n\n## Freshness\n\nDOT files embed a `source_hash` graph attribute that tracks the YAML's structural fingerprint.\nThe `validate-recipes` recipe (Phase 7) compares this hash against the current YAML to detect\nstale diagrams — even when labels have been LLM-enhanced.\n\n## LLM Voice Enhancement (Default)\n\nThe standard generation pipeline (`generate-recipe-docs` recipe) includes an LLM pass that\nrewrites node labels so a non-technical person can understand them:\n- \"Read Profile\" → \"Read Your Settings — What repos do we have?\"\n- \"Determine Tiers\" → \"Check For Changes — Look at git history\"\n- \"Structural Validation\" → \"Validate Structure — Are the YAML files well-formed?\"\n\nThis is the default stance — visual documentation should be accessible to anyone.\nThe LLM preserves all structural elements (node IDs, edges, shapes, colors) and only\nrewrites label text and the graph title.\n\nTo generate or regenerate flow diagrams for a repo:\n```\namplifier tool invoke recipes operation=execute \\\n  recipe_path=recipes:recipes\u002Fgenerate-recipe-docs.yaml \\\n  context='{\"repo_path\": \"\u002Fpath\u002Fto\u002Fbundle-repo\"}'\n```\n",{"data":34,"body":36},{"name":4,"description":6,"version":35},"1.0.0",{"type":37,"children":38},"root",[39,48,55,61,67,258,264,309,315,320,338,344,445,451,472,547,553,574,580,593,611,616,621,631],{"type":40,"tag":41,"props":42,"children":44},"element","h1",{"id":43},"recipe-to-dot-convention",[45],{"type":46,"value":47},"text","Recipe-to-DOT Convention",{"type":40,"tag":49,"props":50,"children":52},"h2",{"id":51},"purpose",[53],{"type":46,"value":54},"Purpose",{"type":40,"tag":56,"props":57,"children":58},"p",{},[59],{"type":46,"value":60},"Recipe YAML files define multi-step AI agent workflows, but they're hard to understand at a glance. DOT flowchart diagrams make recipes visually understandable. This skill documents the standard mapping from recipe YAML structure to DOT visual elements.",{"type":40,"tag":49,"props":62,"children":64},{"id":63},"visual-convention-mapping",[65],{"type":46,"value":66},"Visual Convention Mapping",{"type":40,"tag":68,"props":69,"children":70},"table",{},[71,100],{"type":40,"tag":72,"props":73,"children":74},"thead",{},[75],{"type":40,"tag":76,"props":77,"children":78},"tr",{},[79,85,90,95],{"type":40,"tag":80,"props":81,"children":82},"th",{},[83],{"type":46,"value":84},"Recipe Concept",{"type":40,"tag":80,"props":86,"children":87},{},[88],{"type":46,"value":89},"DOT Shape",{"type":40,"tag":80,"props":91,"children":92},{},[93],{"type":46,"value":94},"Fill Color",{"type":40,"tag":80,"props":96,"children":97},{},[98],{"type":46,"value":99},"Style",{"type":40,"tag":101,"props":102,"children":103},"tbody",{},[104,128,150,171,192,215,236],{"type":40,"tag":76,"props":105,"children":106},{},[107,113,118,123],{"type":40,"tag":108,"props":109,"children":110},"td",{},[111],{"type":46,"value":112},"Start\u002FEnd nodes",{"type":40,"tag":108,"props":114,"children":115},{},[116],{"type":46,"value":117},"oval",{"type":40,"tag":108,"props":119,"children":120},{},[121],{"type":46,"value":122},"#e0e0e0 (gray)",{"type":40,"tag":108,"props":124,"children":125},{},[126],{"type":46,"value":127},"filled,rounded",{"type":40,"tag":76,"props":129,"children":130},{},[131,136,141,146],{"type":40,"tag":108,"props":132,"children":133},{},[134],{"type":46,"value":135},"Bash step (type: bash)",{"type":40,"tag":108,"props":137,"children":138},{},[139],{"type":46,"value":140},"box",{"type":40,"tag":108,"props":142,"children":143},{},[144],{"type":46,"value":145},"#bbdefb (blue)",{"type":40,"tag":108,"props":147,"children":148},{},[149],{"type":46,"value":127},{"type":40,"tag":76,"props":151,"children":152},{},[153,158,162,167],{"type":40,"tag":108,"props":154,"children":155},{},[156],{"type":46,"value":157},"Agent step (type: agent \u002F default)",{"type":40,"tag":108,"props":159,"children":160},{},[161],{"type":46,"value":140},{"type":40,"tag":108,"props":163,"children":164},{},[165],{"type":46,"value":166},"#c8e6c9 (green)",{"type":40,"tag":108,"props":168,"children":169},{},[170],{"type":46,"value":127},{"type":40,"tag":76,"props":172,"children":173},{},[174,179,183,187],{"type":40,"tag":108,"props":175,"children":176},{},[177],{"type":46,"value":178},"Sub-recipe call (type: recipe)",{"type":40,"tag":108,"props":180,"children":181},{},[182],{"type":46,"value":140},{"type":40,"tag":108,"props":184,"children":185},{},[186],{"type":46,"value":122},{"type":40,"tag":108,"props":188,"children":189},{},[190],{"type":46,"value":191},"filled,rounded,dashed",{"type":40,"tag":76,"props":193,"children":194},{},[195,200,205,210],{"type":40,"tag":108,"props":196,"children":197},{},[198],{"type":46,"value":199},"Approval gate",{"type":40,"tag":108,"props":201,"children":202},{},[203],{"type":46,"value":204},"diamond",{"type":40,"tag":108,"props":206,"children":207},{},[208],{"type":46,"value":209},"#ffe0b2 (orange)",{"type":40,"tag":108,"props":211,"children":212},{},[213],{"type":46,"value":214},"filled",{"type":40,"tag":76,"props":216,"children":217},{},[218,223,227,232],{"type":40,"tag":108,"props":219,"children":220},{},[221],{"type":46,"value":222},"Condition decision",{"type":40,"tag":108,"props":224,"children":225},{},[226],{"type":46,"value":204},{"type":40,"tag":108,"props":228,"children":229},{},[230],{"type":46,"value":231},"#fff9c4 (yellow)",{"type":40,"tag":108,"props":233,"children":234},{},[235],{"type":46,"value":214},{"type":40,"tag":76,"props":237,"children":238},{},[239,244,249,254],{"type":40,"tag":108,"props":240,"children":241},{},[242],{"type":46,"value":243},"Data\u002FOutput",{"type":40,"tag":108,"props":245,"children":246},{},[247],{"type":46,"value":248},"note or cylinder",{"type":40,"tag":108,"props":250,"children":251},{},[252],{"type":46,"value":253},"#e1bee7 (purple)",{"type":40,"tag":108,"props":255,"children":256},{},[257],{"type":46,"value":214},{"type":40,"tag":49,"props":259,"children":261},{"id":260},"graph-structure-rules",[262],{"type":46,"value":263},"Graph Structure Rules",{"type":40,"tag":265,"props":266,"children":267},"ul",{},[268,274,279,284,289,294,299,304],{"type":40,"tag":269,"props":270,"children":271},"li",{},[272],{"type":46,"value":273},"Graph flows top-to-bottom (rankdir=TB)",{"type":40,"tag":269,"props":275,"children":276},{},[277],{"type":46,"value":278},"Every diagram has Start and Done nodes",{"type":40,"tag":269,"props":280,"children":281},{},[282],{"type":46,"value":283},"Flat mode: steps flow sequentially, conditions get preceding diamonds",{"type":40,"tag":269,"props":285,"children":286},{},[287],{"type":46,"value":288},"Staged mode: each stage is a cluster subgraph",{"type":40,"tag":269,"props":290,"children":291},{},[292],{"type":46,"value":293},"Approval gates between stages when approval.required=true",{"type":40,"tag":269,"props":295,"children":296},{},[297],{"type":46,"value":298},"Foreach\u002Fparallel get annotations on edges or node labels",{"type":40,"tag":269,"props":300,"children":301},{},[302],{"type":46,"value":303},"While loops get dashed loop-back edges",{"type":40,"tag":269,"props":305,"children":306},{},[307],{"type":46,"value":308},"Legend at bottom showing only step types actually used",{"type":40,"tag":49,"props":310,"children":312},{"id":311},"auto-labeling",[313],{"type":46,"value":314},"Auto-labeling",{"type":40,"tag":56,"props":316,"children":317},{},[318],{"type":46,"value":319},"Step IDs are converted to readable labels:",{"type":40,"tag":265,"props":321,"children":322},{},[323,328,333],{"type":40,"tag":269,"props":324,"children":325},{},[326],{"type":46,"value":327},"Split on hyphens, title-case each word",{"type":40,"tag":269,"props":329,"children":330},{},[331],{"type":46,"value":332},"3+ words split across 2 lines",{"type":40,"tag":269,"props":334,"children":335},{},[336],{"type":46,"value":337},"Sub-recipe steps append \"(sub-recipe)\"",{"type":40,"tag":49,"props":339,"children":341},{"id":340},"file-conventions",[342],{"type":46,"value":343},"File Conventions",{"type":40,"tag":265,"props":345,"children":346},{},[347,358,434],{"type":40,"tag":269,"props":348,"children":349},{},[350,352],{"type":46,"value":351},"Recipe DOT files are ",{"type":40,"tag":353,"props":354,"children":355},"strong",{},[356],{"type":46,"value":357},"co-located next to their source YAML file",{"type":40,"tag":269,"props":359,"children":360},{},[361,363,370,372,378,380,386],{"type":46,"value":362},"Naming: same filename, different extension — ",{"type":40,"tag":364,"props":365,"children":367},"code",{"className":366},[],[368],{"type":46,"value":369},".yaml",{"type":46,"value":371}," → ",{"type":40,"tag":364,"props":373,"children":375},{"className":374},[],[376],{"type":46,"value":377},".dot",{"type":46,"value":379}," and ",{"type":40,"tag":364,"props":381,"children":383},{"className":382},[],[384],{"type":46,"value":385},".png",{"type":40,"tag":265,"props":387,"children":388},{},[389,412],{"type":40,"tag":269,"props":390,"children":391},{},[392,398,399,405,407],{"type":40,"tag":364,"props":393,"children":395},{"className":394},[],[396],{"type":46,"value":397},"recipes\u002Fvalidate-recipes.yaml",{"type":46,"value":371},{"type":40,"tag":364,"props":400,"children":402},{"className":401},[],[403],{"type":46,"value":404},"recipes\u002Fvalidate-recipes.dot",{"type":46,"value":406}," + ",{"type":40,"tag":364,"props":408,"children":410},{"className":409},[],[411],{"type":46,"value":385},{"type":40,"tag":269,"props":413,"children":414},{},[415,421,422,428,429],{"type":40,"tag":364,"props":416,"children":418},{"className":417},[],[419],{"type":46,"value":420},"examples\u002Fcode-review-recipe.yaml",{"type":46,"value":371},{"type":40,"tag":364,"props":423,"children":425},{"className":424},[],[426],{"type":46,"value":427},"examples\u002Fcode-review-recipe.dot",{"type":46,"value":406},{"type":40,"tag":364,"props":430,"children":432},{"className":431},[],[433],{"type":46,"value":385},{"type":40,"tag":269,"props":435,"children":436},{},[437,439],{"type":46,"value":438},"Rendered with: ",{"type":40,"tag":364,"props":440,"children":442},{"className":441},[],[443],{"type":46,"value":444},"dot -Tpng recipe-name.dot -o recipe-name.png",{"type":40,"tag":49,"props":446,"children":448},{"id":447},"programmatic-generation",[449],{"type":46,"value":450},"Programmatic Generation",{"type":40,"tag":56,"props":452,"children":453},{},[454,456,462,464,470],{"type":46,"value":455},"The ",{"type":40,"tag":364,"props":457,"children":459},{"className":458},[],[460],{"type":46,"value":461},"recipe_to_dot",{"type":46,"value":463}," Python function in ",{"type":40,"tag":364,"props":465,"children":467},{"className":466},[],[468],{"type":46,"value":469},"amplifier_module_tool_recipes.recipe_to_dot",{"type":46,"value":471}," generates DOT deterministically from YAML:",{"type":40,"tag":473,"props":474,"children":479},"pre",{"className":475,"code":476,"language":477,"meta":478,"style":478},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from amplifier_module_tool_recipes.recipe_to_dot import recipe_to_dot, recipe_dot_hash\n\n# Generate DOT string\ndot = recipe_to_dot(\"path\u002Fto\u002Frecipe.yaml\")\n\n# Get hash for freshness checking\nhash = recipe_dot_hash(\"path\u002Fto\u002Frecipe.yaml\")\n","python","",[480],{"type":40,"tag":364,"props":481,"children":482},{"__ignoreMap":478},[483,494,504,513,522,530,538],{"type":40,"tag":484,"props":485,"children":488},"span",{"class":486,"line":487},"line",1,[489],{"type":40,"tag":484,"props":490,"children":491},{},[492],{"type":46,"value":493},"from amplifier_module_tool_recipes.recipe_to_dot import recipe_to_dot, recipe_dot_hash\n",{"type":40,"tag":484,"props":495,"children":497},{"class":486,"line":496},2,[498],{"type":40,"tag":484,"props":499,"children":501},{"emptyLinePlaceholder":500},true,[502],{"type":46,"value":503},"\n",{"type":40,"tag":484,"props":505,"children":507},{"class":486,"line":506},3,[508],{"type":40,"tag":484,"props":509,"children":510},{},[511],{"type":46,"value":512},"# Generate DOT string\n",{"type":40,"tag":484,"props":514,"children":516},{"class":486,"line":515},4,[517],{"type":40,"tag":484,"props":518,"children":519},{},[520],{"type":46,"value":521},"dot = recipe_to_dot(\"path\u002Fto\u002Frecipe.yaml\")\n",{"type":40,"tag":484,"props":523,"children":525},{"class":486,"line":524},5,[526],{"type":40,"tag":484,"props":527,"children":528},{"emptyLinePlaceholder":500},[529],{"type":46,"value":503},{"type":40,"tag":484,"props":531,"children":532},{"class":486,"line":22},[533],{"type":40,"tag":484,"props":534,"children":535},{},[536],{"type":46,"value":537},"# Get hash for freshness checking\n",{"type":40,"tag":484,"props":539,"children":541},{"class":486,"line":540},7,[542],{"type":40,"tag":484,"props":543,"children":544},{},[545],{"type":46,"value":546},"hash = recipe_dot_hash(\"path\u002Fto\u002Frecipe.yaml\")\n",{"type":40,"tag":49,"props":548,"children":550},{"id":549},"freshness",[551],{"type":46,"value":552},"Freshness",{"type":40,"tag":56,"props":554,"children":555},{},[556,558,564,566,572],{"type":46,"value":557},"DOT files embed a ",{"type":40,"tag":364,"props":559,"children":561},{"className":560},[],[562],{"type":46,"value":563},"source_hash",{"type":46,"value":565}," graph attribute that tracks the YAML's structural fingerprint.\nThe ",{"type":40,"tag":364,"props":567,"children":569},{"className":568},[],[570],{"type":46,"value":571},"validate-recipes",{"type":46,"value":573}," recipe (Phase 7) compares this hash against the current YAML to detect\nstale diagrams — even when labels have been LLM-enhanced.",{"type":40,"tag":49,"props":575,"children":577},{"id":576},"llm-voice-enhancement-default",[578],{"type":46,"value":579},"LLM Voice Enhancement (Default)",{"type":40,"tag":56,"props":581,"children":582},{},[583,585,591],{"type":46,"value":584},"The standard generation pipeline (",{"type":40,"tag":364,"props":586,"children":588},{"className":587},[],[589],{"type":46,"value":590},"generate-recipe-docs",{"type":46,"value":592}," recipe) includes an LLM pass that\nrewrites node labels so a non-technical person can understand them:",{"type":40,"tag":265,"props":594,"children":595},{},[596,601,606],{"type":40,"tag":269,"props":597,"children":598},{},[599],{"type":46,"value":600},"\"Read Profile\" → \"Read Your Settings — What repos do we have?\"",{"type":40,"tag":269,"props":602,"children":603},{},[604],{"type":46,"value":605},"\"Determine Tiers\" → \"Check For Changes — Look at git history\"",{"type":40,"tag":269,"props":607,"children":608},{},[609],{"type":46,"value":610},"\"Structural Validation\" → \"Validate Structure — Are the YAML files well-formed?\"",{"type":40,"tag":56,"props":612,"children":613},{},[614],{"type":46,"value":615},"This is the default stance — visual documentation should be accessible to anyone.\nThe LLM preserves all structural elements (node IDs, edges, shapes, colors) and only\nrewrites label text and the graph title.",{"type":40,"tag":56,"props":617,"children":618},{},[619],{"type":46,"value":620},"To generate or regenerate flow diagrams for a repo:",{"type":40,"tag":473,"props":622,"children":626},{"className":623,"code":625,"language":46},[624],"language-text","amplifier tool invoke recipes operation=execute \\\n  recipe_path=recipes:recipes\u002Fgenerate-recipe-docs.yaml \\\n  context='{\"repo_path\": \"\u002Fpath\u002Fto\u002Fbundle-repo\"}'\n",[627],{"type":40,"tag":364,"props":628,"children":629},{"__ignoreMap":478},[630],{"type":46,"value":625},{"type":40,"tag":632,"props":633,"children":634},"style",{},[635],{"type":46,"value":636},"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":638,"total":487},[639],{"slug":4,"name":4,"fn":5,"description":6,"org":640,"tags":641,"stars":22,"repoUrl":23,"updatedAt":24},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[642,643,644],{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"items":646,"total":840},[647,669,690,711,726,742,753,766,781,796,815,828],{"slug":648,"name":648,"fn":649,"description":650,"org":651,"tags":652,"stars":666,"repoUrl":667,"updatedAt":668},"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},[653,656,659,660,663],{"name":654,"slug":655,"type":15},"Engineering","engineering",{"name":657,"slug":658,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":661,"slug":662,"type":15},"Project Management","project-management",{"name":664,"slug":665,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":670,"name":670,"fn":671,"description":672,"org":673,"tags":674,"stars":687,"repoUrl":688,"updatedAt":689},"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},[675,678,681,684],{"name":676,"slug":677,"type":15},".NET","net",{"name":679,"slug":680,"type":15},"Agents","agents",{"name":682,"slug":683,"type":15},"Azure","azure",{"name":685,"slug":686,"type":15},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":691,"name":691,"fn":692,"description":693,"org":694,"tags":695,"stars":687,"repoUrl":688,"updatedAt":710},"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},[696,699,700,703,706,707],{"name":697,"slug":698,"type":15},"Analytics","analytics",{"name":682,"slug":683,"type":15},{"name":701,"slug":702,"type":15},"Data Analysis","data-analysis",{"name":704,"slug":705,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":708,"slug":709,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":712,"name":712,"fn":713,"description":714,"org":715,"tags":716,"stars":687,"repoUrl":688,"updatedAt":725},"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},[717,720,721,722],{"name":718,"slug":719,"type":15},"AI Infrastructure","ai-infrastructure",{"name":682,"slug":683,"type":15},{"name":704,"slug":705,"type":15},{"name":723,"slug":724,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":727,"name":727,"fn":728,"description":729,"org":730,"tags":731,"stars":687,"repoUrl":688,"updatedAt":741},"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},[732,733,736,737,738,740],{"name":682,"slug":683,"type":15},{"name":734,"slug":735,"type":15},"Compliance","compliance",{"name":685,"slug":686,"type":15},{"name":9,"slug":8,"type":15},{"name":739,"slug":477,"type":15},"Python",{"name":723,"slug":724,"type":15},"2026-07-18T05:14:23.017504",{"slug":743,"name":743,"fn":744,"description":745,"org":746,"tags":747,"stars":687,"repoUrl":688,"updatedAt":752},"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},[748,749,750,751],{"name":697,"slug":698,"type":15},{"name":682,"slug":683,"type":15},{"name":685,"slug":686,"type":15},{"name":739,"slug":477,"type":15},"2026-07-31T05:54:29.068751",{"slug":754,"name":754,"fn":755,"description":756,"org":757,"tags":758,"stars":687,"repoUrl":688,"updatedAt":765},"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},[759,762,763,764],{"name":760,"slug":761,"type":15},"API Development","api-development",{"name":682,"slug":683,"type":15},{"name":9,"slug":8,"type":15},{"name":739,"slug":477,"type":15},"2026-07-18T05:14:16.988376",{"slug":767,"name":767,"fn":768,"description":769,"org":770,"tags":771,"stars":687,"repoUrl":688,"updatedAt":780},"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},[772,773,776,779],{"name":682,"slug":683,"type":15},{"name":774,"slug":775,"type":15},"Computer Vision","computer-vision",{"name":777,"slug":778,"type":15},"Images","images",{"name":739,"slug":477,"type":15},"2026-07-18T05:14:18.007737",{"slug":782,"name":782,"fn":783,"description":784,"org":785,"tags":786,"stars":687,"repoUrl":688,"updatedAt":795},"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},[787,788,791,794],{"name":682,"slug":683,"type":15},{"name":789,"slug":790,"type":15},"Configuration","configuration",{"name":792,"slug":793,"type":15},"Feature Flags","feature-flags",{"name":704,"slug":705,"type":15},"2026-07-03T16:32:01.278468",{"slug":797,"name":797,"fn":798,"description":799,"org":800,"tags":801,"stars":687,"repoUrl":688,"updatedAt":814},"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},[802,805,808,811],{"name":803,"slug":804,"type":15},"Cosmos DB","cosmos-db",{"name":806,"slug":807,"type":15},"Database","database",{"name":809,"slug":810,"type":15},"NoSQL","nosql",{"name":812,"slug":813,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":816,"name":816,"fn":798,"description":817,"org":818,"tags":819,"stars":687,"repoUrl":688,"updatedAt":827},"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},[820,821,822,823,824],{"name":803,"slug":804,"type":15},{"name":806,"slug":807,"type":15},{"name":9,"slug":8,"type":15},{"name":809,"slug":810,"type":15},{"name":825,"slug":826,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":829,"name":829,"fn":830,"description":831,"org":832,"tags":833,"stars":687,"repoUrl":688,"updatedAt":839},"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},[834,835,836,837,838],{"name":682,"slug":683,"type":15},{"name":803,"slug":804,"type":15},{"name":806,"slug":807,"type":15},{"name":704,"slug":705,"type":15},{"name":809,"slug":810,"type":15},"2026-05-13T06:14:17.582229",267]