[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-declarative-agent-developer":3,"mdc-bq7afa-key":37,"related-repo-microsoft-declarative-agent-developer":1793,"related-org-microsoft-declarative-agent-developer":1900},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"declarative-agent-developer","build and deploy declarative agents for M365","Create, build, deploy, and localize declarative agents for M365 Copilot and Teams. USE THIS SKILL for ANY task involving a declarative agent — including localization, scaffolding, editing manifests, adding capabilities, and deploying. Localization requires tokenized manifests and language files that only this skill knows how to produce. Triggers: \"create agent\", \"create a declarative agent\", \"new declarative agent\", \"scaffold an agent\", \"new agent project\", \"add a capability\", \"add a plugin\", \"configure my agent\", \"deploy my agent\", \"fix my agent manifest\", \"edit my agent\", \"localize my agent\", \"add localization\", \"translate my agent\", \"multi-language agent\", \"add an API plugin\", \"add an MCP plugin\", \"add OAuth to my plugin\", \"review instructions\", \"improve instructions\", \"fix my instructions\"\n",{"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,20,23],{"name":13,"slug":14,"type":15},"Copilot","copilot","tag",{"name":17,"slug":18,"type":15},"Microsoft 365","microsoft-365",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"Deployment","deployment",{"name":24,"slug":25,"type":15},"Agents","agents",947,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fwork-iq","2026-04-06T18:35:42.309091",null,109,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"MCP Server and CLI for accessing Work IQ","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fwork-iq\u002Ftree\u002FHEAD\u002Fplugins\u002Fmicrosoft-365-agents-toolkit\u002Fskills\u002Fdeclarative-agent-developer","---\nname: declarative-agent-developer\ndescription: >\n  Create, build, deploy, and localize declarative agents for M365 Copilot and Teams.\n  USE THIS SKILL for ANY task involving a declarative agent — including localization,\n  scaffolding, editing manifests, adding capabilities, and deploying.\n  Localization requires tokenized manifests and language files that only this skill knows how to produce.\n  Triggers: \"create agent\", \"create a declarative agent\", \"new declarative agent\",\n  \"scaffold an agent\", \"new agent project\", \"add a capability\", \"add a plugin\",\n  \"configure my agent\", \"deploy my agent\", \"fix my agent manifest\", \"edit my agent\",\n  \"localize my agent\", \"add localization\", \"translate my agent\", \"multi-language agent\",\n  \"add an API plugin\", \"add an MCP plugin\", \"add OAuth to my plugin\",\n  \"review instructions\", \"improve instructions\", \"fix my instructions\"\n---\n\n# M365 Agent Developer\n\n## Telemetry Tagging\n\nBefore running any `atk` CLI commands, set the session environment variable so all CLI invocations are tagged as skill-initiated:\n```bash\nexport ATK_CLI_SKILL=true\n```\nRun this once at the start of the session. All subsequent `atk` commands in the same terminal will inherit it.\n\n## ⛔ Workspace Check — MANDATORY FIRST STEP\n\n**Before doing ANYTHING, check the workspace files to fingerprint the project:**\n\n1. Run `npx -y --package @microsoft\u002Fm365agentstoolkit-cli atk --version` to confirm ATK CLI is installed. If not found → **Stop.** Tell the user to install ATK.\n2. Check for `m365agents.yml` or `teamsApp.yml` at the project root.\n3. Check for `appPackage\u002FdeclarativeAgent.json`.\n4. Check for non-agent indicators (`package.json` with express\u002Freact\u002Fnext, `src\u002Findex.js`, `app.py`, etc.)\n\n**Then follow the decision gate:**\n\n| Condition | Gate | Action |\n|-----------|------|--------|\n| Non-agent project files, no `appPackage\u002F` | **Reject** | Text-only response. No files, no commands. |\n| No manifest, user wants to edit\u002Fdeploy | **Reject** | Text-only response. Explain manifest is missing. |\n| No manifest, user wants new project | **Scaffold** | → [Scaffolding Workflow](references\u002Fscaffolding-workflow.md) |\n| Manifest exists with errors | **Fix** | Detect → Inform → Ask (see below). Do NOT deploy. |\n| Valid project, user reports behavior issues | **Review** | → [Instruction Review](references\u002Finstruction-review.md) — run the full 5-phase review workflow |\n| Valid agent project | **Edit** | → [Editing Workflow](references\u002Fediting-workflow.md) |\n\n> **Detailed gate rules, examples, and anti-patterns:** [Workspace Gates](references\u002Fworkspace-gates.md)\n\n### 🚫 HARD REJECTION RULES — No Exceptions\n\n**These rules override ALL other instructions.** If any of these apply, you MUST stop immediately.\n\n1. **NEVER create `declarativeAgent.json` yourself.** If the manifest is missing and the user asked to edit\u002Fmodify\u002Fdeploy, respond with text only: explain the manifest is missing, suggest `npx -y --package @microsoft\u002Fm365agentstoolkit-cli atk new` or starting from scratch. Do NOT create the file, do NOT create `appPackage\u002F`, do NOT \"help\" by scaffolding implicitly.\n\n2. **NEVER create files in a non-agent project.** If the workspace is an Express\u002FReact\u002FDjango\u002Fetc. app without `appPackage\u002F`, your response must be text-only. Do NOT create any files, do NOT run any commands.\n\n3. **NEVER deploy when errors exist.** If the agent manifest has errors, STOP. Do NOT run `npx -y --package @microsoft\u002Fm365agentstoolkit-cli atk provision` — not \"to test\", not \"to demonstrate the error\", not \"to see what happens\". Report the errors and ask the user how to proceed.\n\n### 🔍 Detect → Inform → Ask (Error-Handling Protocol)\n\nWhen you encounter ANY problem (missing files, malformed JSON, validation errors, incompatible features), you MUST follow this sequence **in order**:\n\n1. **Detect** — Identify the specific problem. For JSON issues, attempt to parse the file and report syntax errors. For missing fields, check the manifest against the [Schema](references\u002Fschema.md).\n2. **Inform** — Tell the user BEFORE taking any action. Describe exactly what is wrong (\"declarativeAgent.json has malformed JSON: missing comma on line 12, unclosed array on line 18\").\n3. **Ask** — Wait for the user's response before making changes. Do NOT silently fix, auto-correct, or work around the problem.\n\n**This protocol applies to:**\n- Missing `declarativeAgent.json` → Detect (file not found) → Inform (\"no manifest found\") → Ask (\"would you like to create a new agent?\")\n- Malformed JSON → Detect (parse errors) → Inform (list specific syntax issues) → Ask (\"should I fix these syntax errors?\")\n- Validation errors → Detect (parse and check manifest) → Inform (list all errors) → Ask (\"how would you like to fix these?\")\n- Version incompatibility → Detect (feature requires newer version) → Inform (\"this feature requires v1.6, your agent is v1.4\") → Ask (\"should I upgrade?\")\n\n---\n\n## Phase Routing\n\n| Scenario | Workflow Reference |\n|----------|-------------------|\n| Creating a NEW project from scratch | [Scaffolding Workflow](references\u002Fscaffolding-workflow.md) |\n| Working with existing `.json` manifests | [Editing Workflow](references\u002Fediting-workflow.md) |\n| Adding an API plugin | [API Plugins](references\u002Fapi-plugins.md) |\n| Adding an MCP server | [MCP Plugin](references\u002Fmcp-plugin.md) |\n| Adding OAuth to an MCP or API plugin | [Authentication](references\u002Fauthentication.md) |\n| Reviewing or improving existing agent instructions | [Instruction Review](references\u002Finstruction-review.md) |\n| User reports agent gives generic\u002Fwrong answers | [Instruction Review](references\u002Finstruction-review.md) |\n| Localizing an agent into multiple languages | [Localization](references\u002Flocalization.md) |\n| Adding a new language to an already-localized agent | [Localization](references\u002Flocalization.md) |\n| Writing agent instructions | [Conversation Design](references\u002Fconversation-design.md) |\n\n---\n\n## ATK CLI Setup\n\nBefore running any ATK commands, check if the ATK CLI is available by running `npx -y --package @microsoft\u002Fm365agentstoolkit-cli atk --version`. If not found, **STOP and tell the user** — do NOT attempt to install it yourself.\n\nAll commands use the `npx -y --package @microsoft\u002Fm365agentstoolkit-cli atk` prefix (e.g., `npx -y --package @microsoft\u002Fm365agentstoolkit-cli atk provision --env local`).\n\n---\n\n## Critical Rules\n\n### 1. Deploy After EVERY Edit\n\nAfter ANY change to files in `appPackage\u002F`, you MUST deploy and show the test link before responding:\n\n```bash\nnpx -y --package @microsoft\u002Fm365agentstoolkit-cli atk provision --env local --interactive false\n```\n\nThen read `M365_TITLE_ID` from `env\u002F.env.local` and **ALWAYS** present the review UX:\n\n```\n✅ Agent deployed successfully!\n\n🚀 Test Your Agent in M365 Copilot:\n🔗 https:\u002F\u002Fm365.cloud.microsoft\u002Fchat\u002F?titleId={M365_TITLE_ID}\n```\n\n**⛔ Never respond without this link.** If you deployed, the test link MUST appear in your response. This is not optional — it is how the user tests their agent.\n\n- If the manifest has errors → **STOP. Fix errors. Do NOT deploy.**\n- Exception: user explicitly asks you not to deploy\n\n### 2. Never Invent Content or Create Missing Files\n\n- Do NOT invent placeholder names, descriptions, or instructions\n- Do NOT create `declarativeAgent.json` or `appPackage\u002F` if they don't exist — this is a REJECT scenario, not a \"help by creating\" scenario\n- If required fields are missing, report the gaps, and ASK the user\n- If JSON is malformed, follow Detect → Inform → Ask: parse the file first, tell the user what's broken, then ask before fixing. Use surgical edits (not rewrites)\n- **⛔ NEVER set placeholder values for environment variables** that are populated by automation (e.g., `\u003CPREFIX>_MCP_AUTH_ID`, `TEAMS_APP_ID`). Leave them empty (`VAR_NAME=`). Placeholders will be treated as real values and will NOT be overwritten by provisioning.\n\n### 3. Schema Version Compatibility\n\nBefore adding ANY feature, read the `version` field in `declarativeAgent.json` and check the [Schema](references\u002Fschema.md) feature matrix. If the feature isn't supported in that version, **refuse** and offer to upgrade.\n\nKey version gates:\n- `sensitivity_label`, `worker_agents`, `EmbeddedKnowledge` → **v1.6 only**\n- `Meetings` → **v1.5+**\n- `ScenarioModels`, `behavior_overrides`, `disclaimer` → **v1.4+**\n- `Dataverse`, `TeamsMessages`, `Email`, `People` → **v1.3+**\n\n### 4. Use `npx -y --package @microsoft\u002Fm365agentstoolkit-cli atk add action` for API Plugins — NEVER Create Plugin Files Manually\n\nYou are **forbidden** from manually creating `ai-plugin.json`, OpenAPI specs, adaptive cards, or editing the `actions` array. Use the CLI:\n\n```bash\n# ⛔ Always list ALL operations in a single call — NEVER run separate calls per operation\nnpx -y --package @microsoft\u002Fm365agentstoolkit-cli atk add action --api-plugin-type api-spec --openapi-spec-location URL --api-operation \"GET \u002Fpath,POST \u002Fpath,PATCH \u002Fpath\u002F{id},DELETE \u002Fpath\u002F{id}\" -i false\n```\n\nRun a **single** `npx -y --package @microsoft\u002Fm365agentstoolkit-cli atk add action` call per OpenAPI spec, listing **all** operations as a comma-separated list in `--api-operation`. Never run separate `npx -y --package @microsoft\u002Fm365agentstoolkit-cli atk add action` calls for different operations from the same spec — this creates multiple plugins instead of one. If `npx -y --package @microsoft\u002Fm365agentstoolkit-cli atk add action` fails, report the error; do NOT fall back to manual creation.\n\n> **Exception:** MCP servers are not supported by `npx -y --package @microsoft\u002Fm365agentstoolkit-cli atk add action`. Use the [MCP Plugin workflow](references\u002Fmcp-plugin.md) instead.\n\n### 5. MCP Server Integration\n\nWhen the user mentions an MCP server URL, follow the [MCP Plugin workflow](references\u002Fmcp-plugin.md). You MUST discover tools via the MCP protocol handshake (initialize → notifications\u002Finitialized → tools\u002Flist) — **NEVER fabricate tool names\u002Fdescriptions**. For authenticated MCP servers, follow the [authentication guide](references\u002Fauthentication.md) to configure OAuth.\n\n### 6. Always Update Instructions & Starters After Changes\n\nAdding a capability or plugin without updating instructions is incomplete. After ANY change:\n1. Update instructions to describe the new\u002Fchanged functionality — every data source should have clear intent coverage (WHEN and WHY to use it) per the [Instruction Review](references\u002Finstruction-review.md) quality bar. Built-in capabilities don't need exact names; actions\u002Fplugins should be named.\n2. **Do NOT list tool names, descriptions, or parameters in instructions** — these are already in the plugin metadata (`ai-plugin.json`, MCP manifests, capability config). Instructions should contain decision logic only: WHEN to use each tool, chaining rules, and failure handling.\n3. **Stay within the 8,000-character instruction limit** — if close to the limit, cut tool descriptions first\n4. Add at least 1 conversation starter per added capability\u002Fplugin\n5. Remove starters that reference removed capabilities\n6. Run the [Diagnostic Checklist](references\u002Finstruction-review.md) against the updated instructions to verify quality\n\n### 7. App Name Requirement\n\nAlways update the app name and description to something meaningful. Never leave defaults like \"My Agent\".\n\n---\n\n## References\n\n### Shared\n- **[Authentication](references\u002Fauthentication.md)** — OAuth discovery, credentials, oauth\u002Fregister lifecycle, OAuthPluginVault\n- **[Best Practices](references\u002Fbest-practices.md)** — Security, performance, testing, compliance\n- **[Conversation Design](references\u002Fconversation-design.md)** — Authoring instructions and conversation starters from scratch\n- **[Instruction Review](references\u002Finstruction-review.md)** — Auditing, diagnosing, and improving existing instructions; anti-pattern detection; before\u002Fafter rewrites\n- **[Deployment](references\u002Fdeployment.md)** — ATK CLI workflows, environments, CI\u002FCD\n- **[Localization](references\u002Flocalization.md)** — Multi-language support, tokenized manifests, language files\n- **[Workspace Gates](references\u002Fworkspace-gates.md)** — Detailed gate rules, examples, anti-patterns\n\n### Scaffolding\n- **[Scaffolding Workflow](references\u002Fscaffolding-workflow.md)** — Step-by-step scaffolding instructions, naming rules, error handling\n\n### JSON Development\n- **[Editing Workflow](references\u002Fediting-workflow.md)** — Step-by-step JSON development instructions\n- **[Schema](references\u002Fschema.md)** — Official JSON schema for agent manifests\n- **[API Plugins](references\u002Fapi-plugins.md)** — OpenAPI integration for JSON agents\n- **[MCP Plugin](references\u002Fmcp-plugin.md)** — MCP server integration with RemoteMCPServer, OAuth, response semantics, logo handling\n- **[Examples](references\u002Fexamples.md)** — JSON manifest examples\n",{"data":38,"body":39},{"name":4,"description":6},{"type":40,"children":41},"root",[42,51,58,73,113,125,131,140,227,235,418,438,445,455,526,532,544,584,592,623,627,633,823,826,832,851,872,875,881,887,899,961,989,999,1009,1027,1033,1102,1108,1141,1146,1259,1273,1301,1400,1447,1474,1480,1505,1511,1516,1579,1585,1590,1593,1599,1605,1695,1701,1716,1722,1787],{"type":43,"tag":44,"props":45,"children":47},"element","h1",{"id":46},"m365-agent-developer",[48],{"type":49,"value":50},"text","M365 Agent Developer",{"type":43,"tag":52,"props":53,"children":55},"h2",{"id":54},"telemetry-tagging",[56],{"type":49,"value":57},"Telemetry Tagging",{"type":43,"tag":59,"props":60,"children":61},"p",{},[62,64,71],{"type":49,"value":63},"Before running any ",{"type":43,"tag":65,"props":66,"children":68},"code",{"className":67},[],[69],{"type":49,"value":70},"atk",{"type":49,"value":72}," CLI commands, set the session environment variable so all CLI invocations are tagged as skill-initiated:",{"type":43,"tag":74,"props":75,"children":80},"pre",{"className":76,"code":77,"language":78,"meta":79,"style":79},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export ATK_CLI_SKILL=true\n","bash","",[81],{"type":43,"tag":65,"props":82,"children":83},{"__ignoreMap":79},[84],{"type":43,"tag":85,"props":86,"children":89},"span",{"class":87,"line":88},"line",1,[90,96,102,108],{"type":43,"tag":85,"props":91,"children":93},{"style":92},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[94],{"type":49,"value":95},"export",{"type":43,"tag":85,"props":97,"children":99},{"style":98},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[100],{"type":49,"value":101}," ATK_CLI_SKILL",{"type":43,"tag":85,"props":103,"children":105},{"style":104},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[106],{"type":49,"value":107},"=",{"type":43,"tag":85,"props":109,"children":110},{"style":98},[111],{"type":49,"value":112},"true\n",{"type":43,"tag":59,"props":114,"children":115},{},[116,118,123],{"type":49,"value":117},"Run this once at the start of the session. All subsequent ",{"type":43,"tag":65,"props":119,"children":121},{"className":120},[],[122],{"type":49,"value":70},{"type":49,"value":124}," commands in the same terminal will inherit it.",{"type":43,"tag":52,"props":126,"children":128},{"id":127},"workspace-check-mandatory-first-step",[129],{"type":49,"value":130},"⛔ Workspace Check — MANDATORY FIRST STEP",{"type":43,"tag":59,"props":132,"children":133},{},[134],{"type":43,"tag":135,"props":136,"children":137},"strong",{},[138],{"type":49,"value":139},"Before doing ANYTHING, check the workspace files to fingerprint the project:",{"type":43,"tag":141,"props":142,"children":143},"ol",{},[144,165,186,198],{"type":43,"tag":145,"props":146,"children":147},"li",{},[148,150,156,158,163],{"type":49,"value":149},"Run ",{"type":43,"tag":65,"props":151,"children":153},{"className":152},[],[154],{"type":49,"value":155},"npx -y --package @microsoft\u002Fm365agentstoolkit-cli atk --version",{"type":49,"value":157}," to confirm ATK CLI is installed. If not found → ",{"type":43,"tag":135,"props":159,"children":160},{},[161],{"type":49,"value":162},"Stop.",{"type":49,"value":164}," Tell the user to install ATK.",{"type":43,"tag":145,"props":166,"children":167},{},[168,170,176,178,184],{"type":49,"value":169},"Check for ",{"type":43,"tag":65,"props":171,"children":173},{"className":172},[],[174],{"type":49,"value":175},"m365agents.yml",{"type":49,"value":177}," or ",{"type":43,"tag":65,"props":179,"children":181},{"className":180},[],[182],{"type":49,"value":183},"teamsApp.yml",{"type":49,"value":185}," at the project root.",{"type":43,"tag":145,"props":187,"children":188},{},[189,190,196],{"type":49,"value":169},{"type":43,"tag":65,"props":191,"children":193},{"className":192},[],[194],{"type":49,"value":195},"appPackage\u002FdeclarativeAgent.json",{"type":49,"value":197},".",{"type":43,"tag":145,"props":199,"children":200},{},[201,203,209,211,217,219,225],{"type":49,"value":202},"Check for non-agent indicators (",{"type":43,"tag":65,"props":204,"children":206},{"className":205},[],[207],{"type":49,"value":208},"package.json",{"type":49,"value":210}," with express\u002Freact\u002Fnext, ",{"type":43,"tag":65,"props":212,"children":214},{"className":213},[],[215],{"type":49,"value":216},"src\u002Findex.js",{"type":49,"value":218},", ",{"type":43,"tag":65,"props":220,"children":222},{"className":221},[],[223],{"type":49,"value":224},"app.py",{"type":49,"value":226},", etc.)",{"type":43,"tag":59,"props":228,"children":229},{},[230],{"type":43,"tag":135,"props":231,"children":232},{},[233],{"type":49,"value":234},"Then follow the decision gate:",{"type":43,"tag":236,"props":237,"children":238},"table",{},[239,263],{"type":43,"tag":240,"props":241,"children":242},"thead",{},[243],{"type":43,"tag":244,"props":245,"children":246},"tr",{},[247,253,258],{"type":43,"tag":248,"props":249,"children":250},"th",{},[251],{"type":49,"value":252},"Condition",{"type":43,"tag":248,"props":254,"children":255},{},[256],{"type":49,"value":257},"Gate",{"type":43,"tag":248,"props":259,"children":260},{},[261],{"type":49,"value":262},"Action",{"type":43,"tag":264,"props":265,"children":266},"tbody",{},[267,295,315,343,364,392],{"type":43,"tag":244,"props":268,"children":269},{},[270,282,290],{"type":43,"tag":271,"props":272,"children":273},"td",{},[274,276],{"type":49,"value":275},"Non-agent project files, no ",{"type":43,"tag":65,"props":277,"children":279},{"className":278},[],[280],{"type":49,"value":281},"appPackage\u002F",{"type":43,"tag":271,"props":283,"children":284},{},[285],{"type":43,"tag":135,"props":286,"children":287},{},[288],{"type":49,"value":289},"Reject",{"type":43,"tag":271,"props":291,"children":292},{},[293],{"type":49,"value":294},"Text-only response. No files, no commands.",{"type":43,"tag":244,"props":296,"children":297},{},[298,303,310],{"type":43,"tag":271,"props":299,"children":300},{},[301],{"type":49,"value":302},"No manifest, user wants to edit\u002Fdeploy",{"type":43,"tag":271,"props":304,"children":305},{},[306],{"type":43,"tag":135,"props":307,"children":308},{},[309],{"type":49,"value":289},{"type":43,"tag":271,"props":311,"children":312},{},[313],{"type":49,"value":314},"Text-only response. Explain manifest is missing.",{"type":43,"tag":244,"props":316,"children":317},{},[318,323,331],{"type":43,"tag":271,"props":319,"children":320},{},[321],{"type":49,"value":322},"No manifest, user wants new project",{"type":43,"tag":271,"props":324,"children":325},{},[326],{"type":43,"tag":135,"props":327,"children":328},{},[329],{"type":49,"value":330},"Scaffold",{"type":43,"tag":271,"props":332,"children":333},{},[334,336],{"type":49,"value":335},"→ ",{"type":43,"tag":337,"props":338,"children":340},"a",{"href":339},"references\u002Fscaffolding-workflow.md",[341],{"type":49,"value":342},"Scaffolding Workflow",{"type":43,"tag":244,"props":344,"children":345},{},[346,351,359],{"type":43,"tag":271,"props":347,"children":348},{},[349],{"type":49,"value":350},"Manifest exists with errors",{"type":43,"tag":271,"props":352,"children":353},{},[354],{"type":43,"tag":135,"props":355,"children":356},{},[357],{"type":49,"value":358},"Fix",{"type":43,"tag":271,"props":360,"children":361},{},[362],{"type":49,"value":363},"Detect → Inform → Ask (see below). Do NOT deploy.",{"type":43,"tag":244,"props":365,"children":366},{},[367,372,380],{"type":43,"tag":271,"props":368,"children":369},{},[370],{"type":49,"value":371},"Valid project, user reports behavior issues",{"type":43,"tag":271,"props":373,"children":374},{},[375],{"type":43,"tag":135,"props":376,"children":377},{},[378],{"type":49,"value":379},"Review",{"type":43,"tag":271,"props":381,"children":382},{},[383,384,390],{"type":49,"value":335},{"type":43,"tag":337,"props":385,"children":387},{"href":386},"references\u002Finstruction-review.md",[388],{"type":49,"value":389},"Instruction Review",{"type":49,"value":391}," — run the full 5-phase review workflow",{"type":43,"tag":244,"props":393,"children":394},{},[395,400,408],{"type":43,"tag":271,"props":396,"children":397},{},[398],{"type":49,"value":399},"Valid agent project",{"type":43,"tag":271,"props":401,"children":402},{},[403],{"type":43,"tag":135,"props":404,"children":405},{},[406],{"type":49,"value":407},"Edit",{"type":43,"tag":271,"props":409,"children":410},{},[411,412],{"type":49,"value":335},{"type":43,"tag":337,"props":413,"children":415},{"href":414},"references\u002Fediting-workflow.md",[416],{"type":49,"value":417},"Editing Workflow",{"type":43,"tag":419,"props":420,"children":421},"blockquote",{},[422],{"type":43,"tag":59,"props":423,"children":424},{},[425,430,432],{"type":43,"tag":135,"props":426,"children":427},{},[428],{"type":49,"value":429},"Detailed gate rules, examples, and anti-patterns:",{"type":49,"value":431}," ",{"type":43,"tag":337,"props":433,"children":435},{"href":434},"references\u002Fworkspace-gates.md",[436],{"type":49,"value":437},"Workspace Gates",{"type":43,"tag":439,"props":440,"children":442},"h3",{"id":441},"hard-rejection-rules-no-exceptions",[443],{"type":49,"value":444},"🚫 HARD REJECTION RULES — No Exceptions",{"type":43,"tag":59,"props":446,"children":447},{},[448,453],{"type":43,"tag":135,"props":449,"children":450},{},[451],{"type":49,"value":452},"These rules override ALL other instructions.",{"type":49,"value":454}," If any of these apply, you MUST stop immediately.",{"type":43,"tag":141,"props":456,"children":457},{},[458,491,508],{"type":43,"tag":145,"props":459,"children":460},{},[461,474,476,482,484,489],{"type":43,"tag":135,"props":462,"children":463},{},[464,466,472],{"type":49,"value":465},"NEVER create ",{"type":43,"tag":65,"props":467,"children":469},{"className":468},[],[470],{"type":49,"value":471},"declarativeAgent.json",{"type":49,"value":473}," yourself.",{"type":49,"value":475}," If the manifest is missing and the user asked to edit\u002Fmodify\u002Fdeploy, respond with text only: explain the manifest is missing, suggest ",{"type":43,"tag":65,"props":477,"children":479},{"className":478},[],[480],{"type":49,"value":481},"npx -y --package @microsoft\u002Fm365agentstoolkit-cli atk new",{"type":49,"value":483}," or starting from scratch. Do NOT create the file, do NOT create ",{"type":43,"tag":65,"props":485,"children":487},{"className":486},[],[488],{"type":49,"value":281},{"type":49,"value":490},", do NOT \"help\" by scaffolding implicitly.",{"type":43,"tag":145,"props":492,"children":493},{},[494,499,501,506],{"type":43,"tag":135,"props":495,"children":496},{},[497],{"type":49,"value":498},"NEVER create files in a non-agent project.",{"type":49,"value":500}," If the workspace is an Express\u002FReact\u002FDjango\u002Fetc. app without ",{"type":43,"tag":65,"props":502,"children":504},{"className":503},[],[505],{"type":49,"value":281},{"type":49,"value":507},", your response must be text-only. Do NOT create any files, do NOT run any commands.",{"type":43,"tag":145,"props":509,"children":510},{},[511,516,518,524],{"type":43,"tag":135,"props":512,"children":513},{},[514],{"type":49,"value":515},"NEVER deploy when errors exist.",{"type":49,"value":517}," If the agent manifest has errors, STOP. Do NOT run ",{"type":43,"tag":65,"props":519,"children":521},{"className":520},[],[522],{"type":49,"value":523},"npx -y --package @microsoft\u002Fm365agentstoolkit-cli atk provision",{"type":49,"value":525}," — not \"to test\", not \"to demonstrate the error\", not \"to see what happens\". Report the errors and ask the user how to proceed.",{"type":43,"tag":439,"props":527,"children":529},{"id":528},"detect-inform-ask-error-handling-protocol",[530],{"type":49,"value":531},"🔍 Detect → Inform → Ask (Error-Handling Protocol)",{"type":43,"tag":59,"props":533,"children":534},{},[535,537,542],{"type":49,"value":536},"When you encounter ANY problem (missing files, malformed JSON, validation errors, incompatible features), you MUST follow this sequence ",{"type":43,"tag":135,"props":538,"children":539},{},[540],{"type":49,"value":541},"in order",{"type":49,"value":543},":",{"type":43,"tag":141,"props":545,"children":546},{},[547,564,574],{"type":43,"tag":145,"props":548,"children":549},{},[550,555,557,563],{"type":43,"tag":135,"props":551,"children":552},{},[553],{"type":49,"value":554},"Detect",{"type":49,"value":556}," — Identify the specific problem. For JSON issues, attempt to parse the file and report syntax errors. For missing fields, check the manifest against the ",{"type":43,"tag":337,"props":558,"children":560},{"href":559},"references\u002Fschema.md",[561],{"type":49,"value":562},"Schema",{"type":49,"value":197},{"type":43,"tag":145,"props":565,"children":566},{},[567,572],{"type":43,"tag":135,"props":568,"children":569},{},[570],{"type":49,"value":571},"Inform",{"type":49,"value":573}," — Tell the user BEFORE taking any action. Describe exactly what is wrong (\"declarativeAgent.json has malformed JSON: missing comma on line 12, unclosed array on line 18\").",{"type":43,"tag":145,"props":575,"children":576},{},[577,582],{"type":43,"tag":135,"props":578,"children":579},{},[580],{"type":49,"value":581},"Ask",{"type":49,"value":583}," — Wait for the user's response before making changes. Do NOT silently fix, auto-correct, or work around the problem.",{"type":43,"tag":59,"props":585,"children":586},{},[587],{"type":43,"tag":135,"props":588,"children":589},{},[590],{"type":49,"value":591},"This protocol applies to:",{"type":43,"tag":593,"props":594,"children":595},"ul",{},[596,608,613,618],{"type":43,"tag":145,"props":597,"children":598},{},[599,601,606],{"type":49,"value":600},"Missing ",{"type":43,"tag":65,"props":602,"children":604},{"className":603},[],[605],{"type":49,"value":471},{"type":49,"value":607}," → Detect (file not found) → Inform (\"no manifest found\") → Ask (\"would you like to create a new agent?\")",{"type":43,"tag":145,"props":609,"children":610},{},[611],{"type":49,"value":612},"Malformed JSON → Detect (parse errors) → Inform (list specific syntax issues) → Ask (\"should I fix these syntax errors?\")",{"type":43,"tag":145,"props":614,"children":615},{},[616],{"type":49,"value":617},"Validation errors → Detect (parse and check manifest) → Inform (list all errors) → Ask (\"how would you like to fix these?\")",{"type":43,"tag":145,"props":619,"children":620},{},[621],{"type":49,"value":622},"Version incompatibility → Detect (feature requires newer version) → Inform (\"this feature requires v1.6, your agent is v1.4\") → Ask (\"should I upgrade?\")",{"type":43,"tag":624,"props":625,"children":626},"hr",{},[],{"type":43,"tag":52,"props":628,"children":630},{"id":629},"phase-routing",[631],{"type":49,"value":632},"Phase Routing",{"type":43,"tag":236,"props":634,"children":635},{},[636,652],{"type":43,"tag":240,"props":637,"children":638},{},[639],{"type":43,"tag":244,"props":640,"children":641},{},[642,647],{"type":43,"tag":248,"props":643,"children":644},{},[645],{"type":49,"value":646},"Scenario",{"type":43,"tag":248,"props":648,"children":649},{},[650],{"type":49,"value":651},"Workflow Reference",{"type":43,"tag":264,"props":653,"children":654},{},[655,670,693,710,727,744,759,774,791,806],{"type":43,"tag":244,"props":656,"children":657},{},[658,663],{"type":43,"tag":271,"props":659,"children":660},{},[661],{"type":49,"value":662},"Creating a NEW project from scratch",{"type":43,"tag":271,"props":664,"children":665},{},[666],{"type":43,"tag":337,"props":667,"children":668},{"href":339},[669],{"type":49,"value":342},{"type":43,"tag":244,"props":671,"children":672},{},[673,686],{"type":43,"tag":271,"props":674,"children":675},{},[676,678,684],{"type":49,"value":677},"Working with existing ",{"type":43,"tag":65,"props":679,"children":681},{"className":680},[],[682],{"type":49,"value":683},".json",{"type":49,"value":685}," manifests",{"type":43,"tag":271,"props":687,"children":688},{},[689],{"type":43,"tag":337,"props":690,"children":691},{"href":414},[692],{"type":49,"value":417},{"type":43,"tag":244,"props":694,"children":695},{},[696,701],{"type":43,"tag":271,"props":697,"children":698},{},[699],{"type":49,"value":700},"Adding an API plugin",{"type":43,"tag":271,"props":702,"children":703},{},[704],{"type":43,"tag":337,"props":705,"children":707},{"href":706},"references\u002Fapi-plugins.md",[708],{"type":49,"value":709},"API Plugins",{"type":43,"tag":244,"props":711,"children":712},{},[713,718],{"type":43,"tag":271,"props":714,"children":715},{},[716],{"type":49,"value":717},"Adding an MCP server",{"type":43,"tag":271,"props":719,"children":720},{},[721],{"type":43,"tag":337,"props":722,"children":724},{"href":723},"references\u002Fmcp-plugin.md",[725],{"type":49,"value":726},"MCP Plugin",{"type":43,"tag":244,"props":728,"children":729},{},[730,735],{"type":43,"tag":271,"props":731,"children":732},{},[733],{"type":49,"value":734},"Adding OAuth to an MCP or API plugin",{"type":43,"tag":271,"props":736,"children":737},{},[738],{"type":43,"tag":337,"props":739,"children":741},{"href":740},"references\u002Fauthentication.md",[742],{"type":49,"value":743},"Authentication",{"type":43,"tag":244,"props":745,"children":746},{},[747,752],{"type":43,"tag":271,"props":748,"children":749},{},[750],{"type":49,"value":751},"Reviewing or improving existing agent instructions",{"type":43,"tag":271,"props":753,"children":754},{},[755],{"type":43,"tag":337,"props":756,"children":757},{"href":386},[758],{"type":49,"value":389},{"type":43,"tag":244,"props":760,"children":761},{},[762,767],{"type":43,"tag":271,"props":763,"children":764},{},[765],{"type":49,"value":766},"User reports agent gives generic\u002Fwrong answers",{"type":43,"tag":271,"props":768,"children":769},{},[770],{"type":43,"tag":337,"props":771,"children":772},{"href":386},[773],{"type":49,"value":389},{"type":43,"tag":244,"props":775,"children":776},{},[777,782],{"type":43,"tag":271,"props":778,"children":779},{},[780],{"type":49,"value":781},"Localizing an agent into multiple languages",{"type":43,"tag":271,"props":783,"children":784},{},[785],{"type":43,"tag":337,"props":786,"children":788},{"href":787},"references\u002Flocalization.md",[789],{"type":49,"value":790},"Localization",{"type":43,"tag":244,"props":792,"children":793},{},[794,799],{"type":43,"tag":271,"props":795,"children":796},{},[797],{"type":49,"value":798},"Adding a new language to an already-localized agent",{"type":43,"tag":271,"props":800,"children":801},{},[802],{"type":43,"tag":337,"props":803,"children":804},{"href":787},[805],{"type":49,"value":790},{"type":43,"tag":244,"props":807,"children":808},{},[809,814],{"type":43,"tag":271,"props":810,"children":811},{},[812],{"type":49,"value":813},"Writing agent instructions",{"type":43,"tag":271,"props":815,"children":816},{},[817],{"type":43,"tag":337,"props":818,"children":820},{"href":819},"references\u002Fconversation-design.md",[821],{"type":49,"value":822},"Conversation Design",{"type":43,"tag":624,"props":824,"children":825},{},[],{"type":43,"tag":52,"props":827,"children":829},{"id":828},"atk-cli-setup",[830],{"type":49,"value":831},"ATK CLI Setup",{"type":43,"tag":59,"props":833,"children":834},{},[835,837,842,844,849],{"type":49,"value":836},"Before running any ATK commands, check if the ATK CLI is available by running ",{"type":43,"tag":65,"props":838,"children":840},{"className":839},[],[841],{"type":49,"value":155},{"type":49,"value":843},". If not found, ",{"type":43,"tag":135,"props":845,"children":846},{},[847],{"type":49,"value":848},"STOP and tell the user",{"type":49,"value":850}," — do NOT attempt to install it yourself.",{"type":43,"tag":59,"props":852,"children":853},{},[854,856,862,864,870],{"type":49,"value":855},"All commands use the ",{"type":43,"tag":65,"props":857,"children":859},{"className":858},[],[860],{"type":49,"value":861},"npx -y --package @microsoft\u002Fm365agentstoolkit-cli atk",{"type":49,"value":863}," prefix (e.g., ",{"type":43,"tag":65,"props":865,"children":867},{"className":866},[],[868],{"type":49,"value":869},"npx -y --package @microsoft\u002Fm365agentstoolkit-cli atk provision --env local",{"type":49,"value":871},").",{"type":43,"tag":624,"props":873,"children":874},{},[],{"type":43,"tag":52,"props":876,"children":878},{"id":877},"critical-rules",[879],{"type":49,"value":880},"Critical Rules",{"type":43,"tag":439,"props":882,"children":884},{"id":883},"_1-deploy-after-every-edit",[885],{"type":49,"value":886},"1. Deploy After EVERY Edit",{"type":43,"tag":59,"props":888,"children":889},{},[890,892,897],{"type":49,"value":891},"After ANY change to files in ",{"type":43,"tag":65,"props":893,"children":895},{"className":894},[],[896],{"type":49,"value":281},{"type":49,"value":898},", you MUST deploy and show the test link before responding:",{"type":43,"tag":74,"props":900,"children":902},{"className":76,"code":901,"language":78,"meta":79,"style":79},"npx -y --package @microsoft\u002Fm365agentstoolkit-cli atk provision --env local --interactive false\n",[903],{"type":43,"tag":65,"props":904,"children":905},{"__ignoreMap":79},[906],{"type":43,"tag":85,"props":907,"children":908},{"class":87,"line":88},[909,915,921,926,931,936,941,946,951,956],{"type":43,"tag":85,"props":910,"children":912},{"style":911},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[913],{"type":49,"value":914},"npx",{"type":43,"tag":85,"props":916,"children":918},{"style":917},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[919],{"type":49,"value":920}," -y",{"type":43,"tag":85,"props":922,"children":923},{"style":917},[924],{"type":49,"value":925}," --package",{"type":43,"tag":85,"props":927,"children":928},{"style":917},[929],{"type":49,"value":930}," @microsoft\u002Fm365agentstoolkit-cli",{"type":43,"tag":85,"props":932,"children":933},{"style":917},[934],{"type":49,"value":935}," atk",{"type":43,"tag":85,"props":937,"children":938},{"style":917},[939],{"type":49,"value":940}," provision",{"type":43,"tag":85,"props":942,"children":943},{"style":917},[944],{"type":49,"value":945}," --env",{"type":43,"tag":85,"props":947,"children":948},{"style":917},[949],{"type":49,"value":950}," local",{"type":43,"tag":85,"props":952,"children":953},{"style":917},[954],{"type":49,"value":955}," --interactive",{"type":43,"tag":85,"props":957,"children":958},{"style":104},[959],{"type":49,"value":960}," false\n",{"type":43,"tag":59,"props":962,"children":963},{},[964,966,972,974,980,982,987],{"type":49,"value":965},"Then read ",{"type":43,"tag":65,"props":967,"children":969},{"className":968},[],[970],{"type":49,"value":971},"M365_TITLE_ID",{"type":49,"value":973}," from ",{"type":43,"tag":65,"props":975,"children":977},{"className":976},[],[978],{"type":49,"value":979},"env\u002F.env.local",{"type":49,"value":981}," and ",{"type":43,"tag":135,"props":983,"children":984},{},[985],{"type":49,"value":986},"ALWAYS",{"type":49,"value":988}," present the review UX:",{"type":43,"tag":74,"props":990,"children":994},{"className":991,"code":993,"language":49},[992],"language-text","✅ Agent deployed successfully!\n\n🚀 Test Your Agent in M365 Copilot:\n🔗 https:\u002F\u002Fm365.cloud.microsoft\u002Fchat\u002F?titleId={M365_TITLE_ID}\n",[995],{"type":43,"tag":65,"props":996,"children":997},{"__ignoreMap":79},[998],{"type":49,"value":993},{"type":43,"tag":59,"props":1000,"children":1001},{},[1002,1007],{"type":43,"tag":135,"props":1003,"children":1004},{},[1005],{"type":49,"value":1006},"⛔ Never respond without this link.",{"type":49,"value":1008}," If you deployed, the test link MUST appear in your response. This is not optional — it is how the user tests their agent.",{"type":43,"tag":593,"props":1010,"children":1011},{},[1012,1022],{"type":43,"tag":145,"props":1013,"children":1014},{},[1015,1017],{"type":49,"value":1016},"If the manifest has errors → ",{"type":43,"tag":135,"props":1018,"children":1019},{},[1020],{"type":49,"value":1021},"STOP. Fix errors. Do NOT deploy.",{"type":43,"tag":145,"props":1023,"children":1024},{},[1025],{"type":49,"value":1026},"Exception: user explicitly asks you not to deploy",{"type":43,"tag":439,"props":1028,"children":1030},{"id":1029},"_2-never-invent-content-or-create-missing-files",[1031],{"type":49,"value":1032},"2. Never Invent Content or Create Missing Files",{"type":43,"tag":593,"props":1034,"children":1035},{},[1036,1041,1059,1064,1069],{"type":43,"tag":145,"props":1037,"children":1038},{},[1039],{"type":49,"value":1040},"Do NOT invent placeholder names, descriptions, or instructions",{"type":43,"tag":145,"props":1042,"children":1043},{},[1044,1046,1051,1052,1057],{"type":49,"value":1045},"Do NOT create ",{"type":43,"tag":65,"props":1047,"children":1049},{"className":1048},[],[1050],{"type":49,"value":471},{"type":49,"value":177},{"type":43,"tag":65,"props":1053,"children":1055},{"className":1054},[],[1056],{"type":49,"value":281},{"type":49,"value":1058}," if they don't exist — this is a REJECT scenario, not a \"help by creating\" scenario",{"type":43,"tag":145,"props":1060,"children":1061},{},[1062],{"type":49,"value":1063},"If required fields are missing, report the gaps, and ASK the user",{"type":43,"tag":145,"props":1065,"children":1066},{},[1067],{"type":49,"value":1068},"If JSON is malformed, follow Detect → Inform → Ask: parse the file first, tell the user what's broken, then ask before fixing. Use surgical edits (not rewrites)",{"type":43,"tag":145,"props":1070,"children":1071},{},[1072,1077,1079,1085,1086,1092,1094,1100],{"type":43,"tag":135,"props":1073,"children":1074},{},[1075],{"type":49,"value":1076},"⛔ NEVER set placeholder values for environment variables",{"type":49,"value":1078}," that are populated by automation (e.g., ",{"type":43,"tag":65,"props":1080,"children":1082},{"className":1081},[],[1083],{"type":49,"value":1084},"\u003CPREFIX>_MCP_AUTH_ID",{"type":49,"value":218},{"type":43,"tag":65,"props":1087,"children":1089},{"className":1088},[],[1090],{"type":49,"value":1091},"TEAMS_APP_ID",{"type":49,"value":1093},"). Leave them empty (",{"type":43,"tag":65,"props":1095,"children":1097},{"className":1096},[],[1098],{"type":49,"value":1099},"VAR_NAME=",{"type":49,"value":1101},"). Placeholders will be treated as real values and will NOT be overwritten by provisioning.",{"type":43,"tag":439,"props":1103,"children":1105},{"id":1104},"_3-schema-version-compatibility",[1106],{"type":49,"value":1107},"3. Schema Version Compatibility",{"type":43,"tag":59,"props":1109,"children":1110},{},[1111,1113,1119,1121,1126,1128,1132,1134,1139],{"type":49,"value":1112},"Before adding ANY feature, read the ",{"type":43,"tag":65,"props":1114,"children":1116},{"className":1115},[],[1117],{"type":49,"value":1118},"version",{"type":49,"value":1120}," field in ",{"type":43,"tag":65,"props":1122,"children":1124},{"className":1123},[],[1125],{"type":49,"value":471},{"type":49,"value":1127}," and check the ",{"type":43,"tag":337,"props":1129,"children":1130},{"href":559},[1131],{"type":49,"value":562},{"type":49,"value":1133}," feature matrix. If the feature isn't supported in that version, ",{"type":43,"tag":135,"props":1135,"children":1136},{},[1137],{"type":49,"value":1138},"refuse",{"type":49,"value":1140}," and offer to upgrade.",{"type":43,"tag":59,"props":1142,"children":1143},{},[1144],{"type":49,"value":1145},"Key version gates:",{"type":43,"tag":593,"props":1147,"children":1148},{},[1149,1179,1194,1223],{"type":43,"tag":145,"props":1150,"children":1151},{},[1152,1158,1159,1165,1166,1172,1174],{"type":43,"tag":65,"props":1153,"children":1155},{"className":1154},[],[1156],{"type":49,"value":1157},"sensitivity_label",{"type":49,"value":218},{"type":43,"tag":65,"props":1160,"children":1162},{"className":1161},[],[1163],{"type":49,"value":1164},"worker_agents",{"type":49,"value":218},{"type":43,"tag":65,"props":1167,"children":1169},{"className":1168},[],[1170],{"type":49,"value":1171},"EmbeddedKnowledge",{"type":49,"value":1173}," → ",{"type":43,"tag":135,"props":1175,"children":1176},{},[1177],{"type":49,"value":1178},"v1.6 only",{"type":43,"tag":145,"props":1180,"children":1181},{},[1182,1188,1189],{"type":43,"tag":65,"props":1183,"children":1185},{"className":1184},[],[1186],{"type":49,"value":1187},"Meetings",{"type":49,"value":1173},{"type":43,"tag":135,"props":1190,"children":1191},{},[1192],{"type":49,"value":1193},"v1.5+",{"type":43,"tag":145,"props":1195,"children":1196},{},[1197,1203,1204,1210,1211,1217,1218],{"type":43,"tag":65,"props":1198,"children":1200},{"className":1199},[],[1201],{"type":49,"value":1202},"ScenarioModels",{"type":49,"value":218},{"type":43,"tag":65,"props":1205,"children":1207},{"className":1206},[],[1208],{"type":49,"value":1209},"behavior_overrides",{"type":49,"value":218},{"type":43,"tag":65,"props":1212,"children":1214},{"className":1213},[],[1215],{"type":49,"value":1216},"disclaimer",{"type":49,"value":1173},{"type":43,"tag":135,"props":1219,"children":1220},{},[1221],{"type":49,"value":1222},"v1.4+",{"type":43,"tag":145,"props":1224,"children":1225},{},[1226,1232,1233,1239,1240,1246,1247,1253,1254],{"type":43,"tag":65,"props":1227,"children":1229},{"className":1228},[],[1230],{"type":49,"value":1231},"Dataverse",{"type":49,"value":218},{"type":43,"tag":65,"props":1234,"children":1236},{"className":1235},[],[1237],{"type":49,"value":1238},"TeamsMessages",{"type":49,"value":218},{"type":43,"tag":65,"props":1241,"children":1243},{"className":1242},[],[1244],{"type":49,"value":1245},"Email",{"type":49,"value":218},{"type":43,"tag":65,"props":1248,"children":1250},{"className":1249},[],[1251],{"type":49,"value":1252},"People",{"type":49,"value":1173},{"type":43,"tag":135,"props":1255,"children":1256},{},[1257],{"type":49,"value":1258},"v1.3+",{"type":43,"tag":439,"props":1260,"children":1262},{"id":1261},"_4-use-npx-y-package-microsoftm365agentstoolkit-cli-atk-add-action-for-api-plugins-never-create-plugin-files-manually",[1263,1265,1271],{"type":49,"value":1264},"4. Use ",{"type":43,"tag":65,"props":1266,"children":1268},{"className":1267},[],[1269],{"type":49,"value":1270},"npx -y --package @microsoft\u002Fm365agentstoolkit-cli atk add action",{"type":49,"value":1272}," for API Plugins — NEVER Create Plugin Files Manually",{"type":43,"tag":59,"props":1274,"children":1275},{},[1276,1278,1283,1285,1291,1293,1299],{"type":49,"value":1277},"You are ",{"type":43,"tag":135,"props":1279,"children":1280},{},[1281],{"type":49,"value":1282},"forbidden",{"type":49,"value":1284}," from manually creating ",{"type":43,"tag":65,"props":1286,"children":1288},{"className":1287},[],[1289],{"type":49,"value":1290},"ai-plugin.json",{"type":49,"value":1292},", OpenAPI specs, adaptive cards, or editing the ",{"type":43,"tag":65,"props":1294,"children":1296},{"className":1295},[],[1297],{"type":49,"value":1298},"actions",{"type":49,"value":1300}," array. Use the CLI:",{"type":43,"tag":74,"props":1302,"children":1304},{"className":76,"code":1303,"language":78,"meta":79,"style":79},"# ⛔ Always list ALL operations in a single call — NEVER run separate calls per operation\nnpx -y --package @microsoft\u002Fm365agentstoolkit-cli atk add action --api-plugin-type api-spec --openapi-spec-location URL --api-operation \"GET \u002Fpath,POST \u002Fpath,PATCH \u002Fpath\u002F{id},DELETE \u002Fpath\u002F{id}\" -i false\n",[1305],{"type":43,"tag":65,"props":1306,"children":1307},{"__ignoreMap":79},[1308,1317],{"type":43,"tag":85,"props":1309,"children":1310},{"class":87,"line":88},[1311],{"type":43,"tag":85,"props":1312,"children":1314},{"style":1313},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1315],{"type":49,"value":1316},"# ⛔ Always list ALL operations in a single call — NEVER run separate calls per operation\n",{"type":43,"tag":85,"props":1318,"children":1320},{"class":87,"line":1319},2,[1321,1325,1329,1333,1337,1341,1346,1351,1356,1361,1366,1371,1376,1381,1386,1391,1396],{"type":43,"tag":85,"props":1322,"children":1323},{"style":911},[1324],{"type":49,"value":914},{"type":43,"tag":85,"props":1326,"children":1327},{"style":917},[1328],{"type":49,"value":920},{"type":43,"tag":85,"props":1330,"children":1331},{"style":917},[1332],{"type":49,"value":925},{"type":43,"tag":85,"props":1334,"children":1335},{"style":917},[1336],{"type":49,"value":930},{"type":43,"tag":85,"props":1338,"children":1339},{"style":917},[1340],{"type":49,"value":935},{"type":43,"tag":85,"props":1342,"children":1343},{"style":917},[1344],{"type":49,"value":1345}," add",{"type":43,"tag":85,"props":1347,"children":1348},{"style":917},[1349],{"type":49,"value":1350}," action",{"type":43,"tag":85,"props":1352,"children":1353},{"style":917},[1354],{"type":49,"value":1355}," --api-plugin-type",{"type":43,"tag":85,"props":1357,"children":1358},{"style":917},[1359],{"type":49,"value":1360}," api-spec",{"type":43,"tag":85,"props":1362,"children":1363},{"style":917},[1364],{"type":49,"value":1365}," --openapi-spec-location",{"type":43,"tag":85,"props":1367,"children":1368},{"style":917},[1369],{"type":49,"value":1370}," URL",{"type":43,"tag":85,"props":1372,"children":1373},{"style":917},[1374],{"type":49,"value":1375}," --api-operation",{"type":43,"tag":85,"props":1377,"children":1378},{"style":104},[1379],{"type":49,"value":1380}," \"",{"type":43,"tag":85,"props":1382,"children":1383},{"style":917},[1384],{"type":49,"value":1385},"GET \u002Fpath,POST \u002Fpath,PATCH \u002Fpath\u002F{id},DELETE \u002Fpath\u002F{id}",{"type":43,"tag":85,"props":1387,"children":1388},{"style":104},[1389],{"type":49,"value":1390},"\"",{"type":43,"tag":85,"props":1392,"children":1393},{"style":917},[1394],{"type":49,"value":1395}," -i",{"type":43,"tag":85,"props":1397,"children":1398},{"style":104},[1399],{"type":49,"value":960},{"type":43,"tag":59,"props":1401,"children":1402},{},[1403,1405,1410,1411,1416,1418,1423,1425,1431,1433,1438,1440,1445],{"type":49,"value":1404},"Run a ",{"type":43,"tag":135,"props":1406,"children":1407},{},[1408],{"type":49,"value":1409},"single",{"type":49,"value":431},{"type":43,"tag":65,"props":1412,"children":1414},{"className":1413},[],[1415],{"type":49,"value":1270},{"type":49,"value":1417}," call per OpenAPI spec, listing ",{"type":43,"tag":135,"props":1419,"children":1420},{},[1421],{"type":49,"value":1422},"all",{"type":49,"value":1424}," operations as a comma-separated list in ",{"type":43,"tag":65,"props":1426,"children":1428},{"className":1427},[],[1429],{"type":49,"value":1430},"--api-operation",{"type":49,"value":1432},". Never run separate ",{"type":43,"tag":65,"props":1434,"children":1436},{"className":1435},[],[1437],{"type":49,"value":1270},{"type":49,"value":1439}," calls for different operations from the same spec — this creates multiple plugins instead of one. If ",{"type":43,"tag":65,"props":1441,"children":1443},{"className":1442},[],[1444],{"type":49,"value":1270},{"type":49,"value":1446}," fails, report the error; do NOT fall back to manual creation.",{"type":43,"tag":419,"props":1448,"children":1449},{},[1450],{"type":43,"tag":59,"props":1451,"children":1452},{},[1453,1458,1460,1465,1467,1472],{"type":43,"tag":135,"props":1454,"children":1455},{},[1456],{"type":49,"value":1457},"Exception:",{"type":49,"value":1459}," MCP servers are not supported by ",{"type":43,"tag":65,"props":1461,"children":1463},{"className":1462},[],[1464],{"type":49,"value":1270},{"type":49,"value":1466},". Use the ",{"type":43,"tag":337,"props":1468,"children":1469},{"href":723},[1470],{"type":49,"value":1471},"MCP Plugin workflow",{"type":49,"value":1473}," instead.",{"type":43,"tag":439,"props":1475,"children":1477},{"id":1476},"_5-mcp-server-integration",[1478],{"type":49,"value":1479},"5. MCP Server Integration",{"type":43,"tag":59,"props":1481,"children":1482},{},[1483,1485,1489,1491,1496,1498,1503],{"type":49,"value":1484},"When the user mentions an MCP server URL, follow the ",{"type":43,"tag":337,"props":1486,"children":1487},{"href":723},[1488],{"type":49,"value":1471},{"type":49,"value":1490},". You MUST discover tools via the MCP protocol handshake (initialize → notifications\u002Finitialized → tools\u002Flist) — ",{"type":43,"tag":135,"props":1492,"children":1493},{},[1494],{"type":49,"value":1495},"NEVER fabricate tool names\u002Fdescriptions",{"type":49,"value":1497},". For authenticated MCP servers, follow the ",{"type":43,"tag":337,"props":1499,"children":1500},{"href":740},[1501],{"type":49,"value":1502},"authentication guide",{"type":49,"value":1504}," to configure OAuth.",{"type":43,"tag":439,"props":1506,"children":1508},{"id":1507},"_6-always-update-instructions-starters-after-changes",[1509],{"type":49,"value":1510},"6. Always Update Instructions & Starters After Changes",{"type":43,"tag":59,"props":1512,"children":1513},{},[1514],{"type":49,"value":1515},"Adding a capability or plugin without updating instructions is incomplete. After ANY change:",{"type":43,"tag":141,"props":1517,"children":1518},{},[1519,1530,1547,1557,1562,1567],{"type":43,"tag":145,"props":1520,"children":1521},{},[1522,1524,1528],{"type":49,"value":1523},"Update instructions to describe the new\u002Fchanged functionality — every data source should have clear intent coverage (WHEN and WHY to use it) per the ",{"type":43,"tag":337,"props":1525,"children":1526},{"href":386},[1527],{"type":49,"value":389},{"type":49,"value":1529}," quality bar. Built-in capabilities don't need exact names; actions\u002Fplugins should be named.",{"type":43,"tag":145,"props":1531,"children":1532},{},[1533,1538,1540,1545],{"type":43,"tag":135,"props":1534,"children":1535},{},[1536],{"type":49,"value":1537},"Do NOT list tool names, descriptions, or parameters in instructions",{"type":49,"value":1539}," — these are already in the plugin metadata (",{"type":43,"tag":65,"props":1541,"children":1543},{"className":1542},[],[1544],{"type":49,"value":1290},{"type":49,"value":1546},", MCP manifests, capability config). Instructions should contain decision logic only: WHEN to use each tool, chaining rules, and failure handling.",{"type":43,"tag":145,"props":1548,"children":1549},{},[1550,1555],{"type":43,"tag":135,"props":1551,"children":1552},{},[1553],{"type":49,"value":1554},"Stay within the 8,000-character instruction limit",{"type":49,"value":1556}," — if close to the limit, cut tool descriptions first",{"type":43,"tag":145,"props":1558,"children":1559},{},[1560],{"type":49,"value":1561},"Add at least 1 conversation starter per added capability\u002Fplugin",{"type":43,"tag":145,"props":1563,"children":1564},{},[1565],{"type":49,"value":1566},"Remove starters that reference removed capabilities",{"type":43,"tag":145,"props":1568,"children":1569},{},[1570,1572,1577],{"type":49,"value":1571},"Run the ",{"type":43,"tag":337,"props":1573,"children":1574},{"href":386},[1575],{"type":49,"value":1576},"Diagnostic Checklist",{"type":49,"value":1578}," against the updated instructions to verify quality",{"type":43,"tag":439,"props":1580,"children":1582},{"id":1581},"_7-app-name-requirement",[1583],{"type":49,"value":1584},"7. App Name Requirement",{"type":43,"tag":59,"props":1586,"children":1587},{},[1588],{"type":49,"value":1589},"Always update the app name and description to something meaningful. Never leave defaults like \"My Agent\".",{"type":43,"tag":624,"props":1591,"children":1592},{},[],{"type":43,"tag":52,"props":1594,"children":1596},{"id":1595},"references",[1597],{"type":49,"value":1598},"References",{"type":43,"tag":439,"props":1600,"children":1602},{"id":1601},"shared",[1603],{"type":49,"value":1604},"Shared",{"type":43,"tag":593,"props":1606,"children":1607},{},[1608,1620,1634,1646,1658,1671,1683],{"type":43,"tag":145,"props":1609,"children":1610},{},[1611,1618],{"type":43,"tag":135,"props":1612,"children":1613},{},[1614],{"type":43,"tag":337,"props":1615,"children":1616},{"href":740},[1617],{"type":49,"value":743},{"type":49,"value":1619}," — OAuth discovery, credentials, oauth\u002Fregister lifecycle, OAuthPluginVault",{"type":43,"tag":145,"props":1621,"children":1622},{},[1623,1632],{"type":43,"tag":135,"props":1624,"children":1625},{},[1626],{"type":43,"tag":337,"props":1627,"children":1629},{"href":1628},"references\u002Fbest-practices.md",[1630],{"type":49,"value":1631},"Best Practices",{"type":49,"value":1633}," — Security, performance, testing, compliance",{"type":43,"tag":145,"props":1635,"children":1636},{},[1637,1644],{"type":43,"tag":135,"props":1638,"children":1639},{},[1640],{"type":43,"tag":337,"props":1641,"children":1642},{"href":819},[1643],{"type":49,"value":822},{"type":49,"value":1645}," — Authoring instructions and conversation starters from scratch",{"type":43,"tag":145,"props":1647,"children":1648},{},[1649,1656],{"type":43,"tag":135,"props":1650,"children":1651},{},[1652],{"type":43,"tag":337,"props":1653,"children":1654},{"href":386},[1655],{"type":49,"value":389},{"type":49,"value":1657}," — Auditing, diagnosing, and improving existing instructions; anti-pattern detection; before\u002Fafter rewrites",{"type":43,"tag":145,"props":1659,"children":1660},{},[1661,1669],{"type":43,"tag":135,"props":1662,"children":1663},{},[1664],{"type":43,"tag":337,"props":1665,"children":1667},{"href":1666},"references\u002Fdeployment.md",[1668],{"type":49,"value":21},{"type":49,"value":1670}," — ATK CLI workflows, environments, CI\u002FCD",{"type":43,"tag":145,"props":1672,"children":1673},{},[1674,1681],{"type":43,"tag":135,"props":1675,"children":1676},{},[1677],{"type":43,"tag":337,"props":1678,"children":1679},{"href":787},[1680],{"type":49,"value":790},{"type":49,"value":1682}," — Multi-language support, tokenized manifests, language files",{"type":43,"tag":145,"props":1684,"children":1685},{},[1686,1693],{"type":43,"tag":135,"props":1687,"children":1688},{},[1689],{"type":43,"tag":337,"props":1690,"children":1691},{"href":434},[1692],{"type":49,"value":437},{"type":49,"value":1694}," — Detailed gate rules, examples, anti-patterns",{"type":43,"tag":439,"props":1696,"children":1698},{"id":1697},"scaffolding",[1699],{"type":49,"value":1700},"Scaffolding",{"type":43,"tag":593,"props":1702,"children":1703},{},[1704],{"type":43,"tag":145,"props":1705,"children":1706},{},[1707,1714],{"type":43,"tag":135,"props":1708,"children":1709},{},[1710],{"type":43,"tag":337,"props":1711,"children":1712},{"href":339},[1713],{"type":49,"value":342},{"type":49,"value":1715}," — Step-by-step scaffolding instructions, naming rules, error handling",{"type":43,"tag":439,"props":1717,"children":1719},{"id":1718},"json-development",[1720],{"type":49,"value":1721},"JSON Development",{"type":43,"tag":593,"props":1723,"children":1724},{},[1725,1737,1749,1761,1773],{"type":43,"tag":145,"props":1726,"children":1727},{},[1728,1735],{"type":43,"tag":135,"props":1729,"children":1730},{},[1731],{"type":43,"tag":337,"props":1732,"children":1733},{"href":414},[1734],{"type":49,"value":417},{"type":49,"value":1736}," — Step-by-step JSON development instructions",{"type":43,"tag":145,"props":1738,"children":1739},{},[1740,1747],{"type":43,"tag":135,"props":1741,"children":1742},{},[1743],{"type":43,"tag":337,"props":1744,"children":1745},{"href":559},[1746],{"type":49,"value":562},{"type":49,"value":1748}," — Official JSON schema for agent manifests",{"type":43,"tag":145,"props":1750,"children":1751},{},[1752,1759],{"type":43,"tag":135,"props":1753,"children":1754},{},[1755],{"type":43,"tag":337,"props":1756,"children":1757},{"href":706},[1758],{"type":49,"value":709},{"type":49,"value":1760}," — OpenAPI integration for JSON agents",{"type":43,"tag":145,"props":1762,"children":1763},{},[1764,1771],{"type":43,"tag":135,"props":1765,"children":1766},{},[1767],{"type":43,"tag":337,"props":1768,"children":1769},{"href":723},[1770],{"type":49,"value":726},{"type":49,"value":1772}," — MCP server integration with RemoteMCPServer, OAuth, response semantics, logo handling",{"type":43,"tag":145,"props":1774,"children":1775},{},[1776,1785],{"type":43,"tag":135,"props":1777,"children":1778},{},[1779],{"type":43,"tag":337,"props":1780,"children":1782},{"href":1781},"references\u002Fexamples.md",[1783],{"type":49,"value":1784},"Examples",{"type":49,"value":1786}," — JSON manifest examples",{"type":43,"tag":1788,"props":1789,"children":1790},"style",{},[1791],{"type":49,"value":1792},"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":1794,"total":1899},[1795,1814,1834,1845,1861,1869,1883],{"slug":1796,"name":1796,"fn":1797,"description":1798,"org":1799,"tags":1800,"stars":26,"repoUrl":27,"updatedAt":1813},"action-item-extractor","extract action items from meetings","Extract action items with owners, deadlines, and priorities from meeting content",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1801,1803,1804,1807,1810],{"name":1187,"slug":1802,"type":15},"meetings",{"name":9,"slug":8,"type":15},{"name":1805,"slug":1806,"type":15},"Productivity","productivity",{"name":1808,"slug":1809,"type":15},"Summarization","summarization",{"name":1811,"slug":1812,"type":15},"Task Management","task-management","2026-04-06T18:35:30.007473",{"slug":1815,"name":1815,"fn":1816,"description":1817,"org":1818,"tags":1819,"stars":26,"repoUrl":27,"updatedAt":1833},"channel-audit","audit and clean up Microsoft Teams channels","Audit Teams channels across your teams — identify inactive channels, low‑engagement conversations, channels with no recent posts, and recommend cleanup actions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1820,1823,1826,1827,1830],{"name":1821,"slug":1822,"type":15},"Audit","audit",{"name":1824,"slug":1825,"type":15},"Messaging","messaging",{"name":9,"slug":8,"type":15},{"name":1828,"slug":1829,"type":15},"Microsoft Teams","microsoft-teams",{"name":1831,"slug":1832,"type":15},"Operations","operations","2026-04-06T18:35:22.45187",{"slug":1835,"name":1835,"fn":1836,"description":1837,"org":1838,"tags":1839,"stars":26,"repoUrl":27,"updatedAt":1844},"channel-digest","generate digests for Microsoft Teams channels","Summarize activity across multiple Teams channels into a single consolidated digest — key discussions, decisions, mentions, and action items.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1840,1841,1842,1843],{"name":1824,"slug":1825,"type":15},{"name":9,"slug":8,"type":15},{"name":1828,"slug":1829,"type":15},{"name":1808,"slug":1809,"type":15},"2026-04-06T18:35:25.021901",{"slug":1846,"name":1846,"fn":1847,"description":1848,"org":1849,"tags":1850,"stars":26,"repoUrl":27,"updatedAt":1860},"daily-outlook-triage","triage Outlook inbox and calendar daily","Get a quick summary of your day by pulling your inbox emails and calendar meetings. Helps you triage and prioritize your workday.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1851,1852,1855,1858,1859],{"name":9,"slug":8,"type":15},{"name":1853,"slug":1854,"type":15},"Outlook Calendar","outlook-calendar",{"name":1856,"slug":1857,"type":15},"Outlook Email","outlook-email",{"name":1805,"slug":1806,"type":15},{"name":1808,"slug":1809,"type":15},"2026-04-06T18:35:28.767999",{"slug":4,"name":4,"fn":5,"description":6,"org":1862,"tags":1863,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1864,1865,1866,1867,1868],{"name":24,"slug":25,"type":15},{"name":13,"slug":14,"type":15},{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"slug":1870,"name":1870,"fn":1871,"description":1872,"org":1873,"tags":1874,"stars":26,"repoUrl":27,"updatedAt":1882},"email-analytics","analyze email volume and response patterns","Analyze your email patterns over a time period — volume trends, top senders, response time estimates, busiest days, and unread backlog statistics.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1875,1878,1880,1881],{"name":1876,"slug":1877,"type":15},"Analytics","analytics",{"name":1245,"slug":1879,"type":15},"email",{"name":9,"slug":8,"type":15},{"name":1805,"slug":1806,"type":15},"2026-04-06T18:35:26.264312",{"slug":1884,"name":1884,"fn":1885,"description":1886,"org":1887,"tags":1888,"stars":26,"repoUrl":27,"updatedAt":1898},"install-atk","install and update M365 Agents Toolkit","Install or update the M365 Agents Toolkit (ATK) CLI and VS Code extension. Triggers: \"install atk\", \"update atk\", \"install agents toolkit\", \"update agents toolkit\", \"install the toolkit\", \"setup atk\", \"get atk\", \"install atk cli\", \"install atk extension\", \"install atk vsix\", \"update the vs code extension\", \"install latest atk\", \"upgrade atk\"\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1889,1890,1893,1896,1897],{"name":24,"slug":25,"type":15},{"name":1891,"slug":1892,"type":15},"CLI","cli",{"name":1894,"slug":1895,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},"2026-04-06T18:35:40.873947",14,{"items":1901,"total":2090},[1902,1922,1941,1960,1975,1992,2003,2016,2031,2046,2065,2078],{"slug":1903,"name":1903,"fn":1904,"description":1905,"org":1906,"tags":1907,"stars":1919,"repoUrl":1920,"updatedAt":1921},"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},[1908,1911,1912,1913,1916],{"name":1909,"slug":1910,"type":15},"Engineering","engineering",{"name":1894,"slug":1895,"type":15},{"name":9,"slug":8,"type":15},{"name":1914,"slug":1915,"type":15},"Project Management","project-management",{"name":1917,"slug":1918,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":1923,"name":1923,"fn":1924,"description":1925,"org":1926,"tags":1927,"stars":1938,"repoUrl":1939,"updatedAt":1940},"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},[1928,1931,1932,1935],{"name":1929,"slug":1930,"type":15},".NET","net",{"name":24,"slug":25,"type":15},{"name":1933,"slug":1934,"type":15},"Azure","azure",{"name":1936,"slug":1937,"type":15},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":1942,"name":1942,"fn":1943,"description":1944,"org":1945,"tags":1946,"stars":1938,"repoUrl":1939,"updatedAt":1959},"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},[1947,1948,1949,1952,1955,1956],{"name":1876,"slug":1877,"type":15},{"name":1933,"slug":1934,"type":15},{"name":1950,"slug":1951,"type":15},"Data Analysis","data-analysis",{"name":1953,"slug":1954,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":1957,"slug":1958,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":1961,"name":1961,"fn":1962,"description":1963,"org":1964,"tags":1965,"stars":1938,"repoUrl":1939,"updatedAt":1974},"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},[1966,1969,1970,1971],{"name":1967,"slug":1968,"type":15},"AI Infrastructure","ai-infrastructure",{"name":1933,"slug":1934,"type":15},{"name":1953,"slug":1954,"type":15},{"name":1972,"slug":1973,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":1976,"name":1976,"fn":1977,"description":1978,"org":1979,"tags":1980,"stars":1938,"repoUrl":1939,"updatedAt":1991},"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},[1981,1982,1985,1986,1987,1990],{"name":1933,"slug":1934,"type":15},{"name":1983,"slug":1984,"type":15},"Compliance","compliance",{"name":1936,"slug":1937,"type":15},{"name":9,"slug":8,"type":15},{"name":1988,"slug":1989,"type":15},"Python","python",{"name":1972,"slug":1973,"type":15},"2026-07-18T05:14:23.017504",{"slug":1993,"name":1993,"fn":1994,"description":1995,"org":1996,"tags":1997,"stars":1938,"repoUrl":1939,"updatedAt":2002},"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},[1998,1999,2000,2001],{"name":1876,"slug":1877,"type":15},{"name":1933,"slug":1934,"type":15},{"name":1936,"slug":1937,"type":15},{"name":1988,"slug":1989,"type":15},"2026-07-31T05:54:29.068751",{"slug":2004,"name":2004,"fn":2005,"description":2006,"org":2007,"tags":2008,"stars":1938,"repoUrl":1939,"updatedAt":2015},"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},[2009,2012,2013,2014],{"name":2010,"slug":2011,"type":15},"API Development","api-development",{"name":1933,"slug":1934,"type":15},{"name":9,"slug":8,"type":15},{"name":1988,"slug":1989,"type":15},"2026-07-18T05:14:16.988376",{"slug":2017,"name":2017,"fn":2018,"description":2019,"org":2020,"tags":2021,"stars":1938,"repoUrl":1939,"updatedAt":2030},"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},[2022,2023,2026,2029],{"name":1933,"slug":1934,"type":15},{"name":2024,"slug":2025,"type":15},"Computer Vision","computer-vision",{"name":2027,"slug":2028,"type":15},"Images","images",{"name":1988,"slug":1989,"type":15},"2026-07-18T05:14:18.007737",{"slug":2032,"name":2032,"fn":2033,"description":2034,"org":2035,"tags":2036,"stars":1938,"repoUrl":1939,"updatedAt":2045},"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},[2037,2038,2041,2044],{"name":1933,"slug":1934,"type":15},{"name":2039,"slug":2040,"type":15},"Configuration","configuration",{"name":2042,"slug":2043,"type":15},"Feature Flags","feature-flags",{"name":1953,"slug":1954,"type":15},"2026-07-03T16:32:01.278468",{"slug":2047,"name":2047,"fn":2048,"description":2049,"org":2050,"tags":2051,"stars":1938,"repoUrl":1939,"updatedAt":2064},"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},[2052,2055,2058,2061],{"name":2053,"slug":2054,"type":15},"Cosmos DB","cosmos-db",{"name":2056,"slug":2057,"type":15},"Database","database",{"name":2059,"slug":2060,"type":15},"NoSQL","nosql",{"name":2062,"slug":2063,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":2066,"name":2066,"fn":2048,"description":2067,"org":2068,"tags":2069,"stars":1938,"repoUrl":1939,"updatedAt":2077},"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},[2070,2071,2072,2073,2074],{"name":2053,"slug":2054,"type":15},{"name":2056,"slug":2057,"type":15},{"name":9,"slug":8,"type":15},{"name":2059,"slug":2060,"type":15},{"name":2075,"slug":2076,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":2079,"name":2079,"fn":2080,"description":2081,"org":2082,"tags":2083,"stars":1938,"repoUrl":1939,"updatedAt":2089},"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},[2084,2085,2086,2087,2088],{"name":1933,"slug":1934,"type":15},{"name":2053,"slug":2054,"type":15},{"name":2056,"slug":2057,"type":15},{"name":1953,"slug":1954,"type":15},{"name":2059,"slug":2060,"type":15},"2026-05-13T06:14:17.582229",267]