[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-channel-audit":3,"mdc--yk4zuc-key":37,"related-repo-microsoft-channel-audit":1054,"related-org-microsoft-channel-audit":1162},{"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},"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},"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},"Operations","operations","tag",{"name":17,"slug":18,"type":15},"Audit","audit",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"Microsoft Teams","microsoft-teams",{"name":24,"slug":25,"type":15},"Messaging","messaging",947,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fwork-iq","2026-04-06T18:35:22.45187",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\u002Fworkiq-productivity\u002Fskills\u002Fchannel-audit","---\nname: channel-audit\ndescription: Audit Teams channels across your teams — identify inactive channels, low‑engagement conversations, channels with no recent posts, and recommend cleanup actions.\n---\n\n# Channel Audit\n\nAudit all Microsoft Teams channels across your teams to assess activity levels and engagement health. Identifies inactive channels, stale conversations, and low‑engagement spaces — then presents a prioritized audit report with recommended cleanup actions such as archiving, merging, or reviving channels.\n\n## When to Use\n\n- \"Audit my Teams channels\"\n- \"Which channels are inactive?\"\n- \"Find dead channels across my teams\"\n- \"Teams channel cleanup report\"\n- \"Show me channels with no posts in the last month\"\n- \"Which channels should we archive?\"\n- \"Channel health check for the Engineering team\"\n\n## Instructions\n\n### Step 1: Identify the User\n\n```\nworkiq-ask (\n  question: \"What is my profile information including display name, email, and time zone?\"\n)\n```\n\nExtract **displayName**, **email**, and **timeZone** for date calculations.\n\n### Step 2: Discover All Teams and Channels\n\nList every team and their channels:\n\n```\nworkiq-ask (\n  question: \"List all Microsoft Teams teams I belong to. For each team, list all channels including the channel name, description, type (standard, private, shared), and creation date.\"\n)\n```\n\nBuild an inventory of every channel:\n- **Team name**\n- **Channel name**, **description**\n- **Channel type** (standard, private, shared)\n- **Created date** (from channel metadata)\n\nIf the response is too large or truncated, query teams individually:\n\n```\nworkiq-ask (\n  question: \"List all channels in the '\u003Cteam name>' team including channel name, description, type, and creation date.\"\n)\n```\n\n### Step 3: Assess Channel Activity\n\nFor each channel (or batch of channels within a team), pull recent messages to measure activity:\n\n```\nworkiq-ask (\n  question: \"Show me the 10 most recent messages in the '\u003Cchannel name>' channel of the '\u003Cteam name>' team. For each message include the sender, date, content summary, reply count, and whether it was from a bot or connector.\"\n)\n```\n\nFor each channel, calculate:\n- **Last message date** — when the most recent message was posted\n- **Days since last post** — time delta from today\n- **Message count** (in the sample) — indicator of volume\n- **Unique authors** — how many distinct people posted\n- **Reply depth** — are messages getting replies or going unanswered?\n- **Content type** — are posts substantive or just bot notifications?\n\n### Step 4: Get Channel Membership Data\n\nFor each channel (especially those flagged as low‑activity):\n\n```\nworkiq-ask (\n  question: \"How many members are in the '\u003Cchannel name>' channel of the '\u003Cteam name>' team? List the member count.\"\n)\n```\n\nRecord:\n- **Member count** — total members in the channel\n- **Activity ratio** — unique posters vs. total members (engagement metric)\n\n### Step 5: Classify Channel Health\n\nCategorize each channel based on activity metrics:\n\n**🟢 Active** — Messages within the last 7 days, multiple authors, replies present\n- Engagement: healthy, no action needed\n\n**🟡 Slow** — Last message 7–30 days ago, limited authors\n- Recommendation: monitor, consider consolidating\n\n**🟠 Stale** — Last message 30–90 days ago, very few participants\n- Recommendation: notify channel owners, consider archiving\n\n**🔴 Dead** — No messages in 90+ days\n- Recommendation: archive or delete\n\n**⚪ Bot‑Only** — Recent messages, but only from automated bots or connectors\n- Recommendation: review if the channel serves a purpose beyond bot notifications\n\n### Step 6: Identify Potential Duplicates\n\nCompare channel names and descriptions across teams to find potential duplicates:\n- Channels with similar names (e.g., \"#design\" and \"#design-team\")\n- Channels with overlapping membership and similar topics\n- Flag these as merge candidates\n\n### Step 7: Compile the Audit Report\n\n## Output Format\n\n```\n🔍 CHANNEL AUDIT REPORT\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n📅 Audit date: {date}\n👤 Audited by: {displayName}\n🏢 Teams scanned: {N}  ·  📢 Channels audited: {N}\n\n📊 HEALTH OVERVIEW\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n🟢 Active:    {N} channels  ({percentage}%)\n🟡 Slow:      {N} channels  ({percentage}%)\n🟠 Stale:     {N} channels  ({percentage}%)\n🔴 Dead:      {N} channels  ({percentage}%)\n⚪ Bot‑only:  {N} channels  ({percentage}%)\n\n🔴 DEAD CHANNELS — Recommend Archive ({count})\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  {Team} › #{Channel}\n     📅 Last post: {date} ({N} days ago)\n     👥 Members: {N}  ·  💬 Last author: {name}\n     💡 Action: Archive\n  \n  {Team} › #{Channel}\n     📅 Last post: {date} ({N} days ago)\n     👥 Members: {N}  ·  💬 Last author: {name}\n     💡 Action: Archive\n\n🟠 STALE CHANNELS — Monitor \u002F Consider Archiving ({count})\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  {Team} › #{Channel}\n     📅 Last post: {date} ({N} days ago)\n     👥 Members: {N}  ·  📝 Active posters: {N} ({ratio}%)\n     💡 Action: Notify owner, review purpose\n\n🟡 SLOW CHANNELS — Watch List ({count})\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  {Team} › #{Channel}\n     📅 Last post: {date} ({N} days ago)\n     👥 Members: {N}  ·  📝 Active posters: {N}\n\n⚪ BOT‑ONLY CHANNELS ({count})\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  {Team} › #{Channel}\n     🤖 Only automated posts detected\n     💡 Action: Review if bot output is still needed\n\n🔄 POTENTIAL DUPLICATES\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  • {Team1} › #{Channel A}  ↔  {Team2} › #{Channel B}\n    Reason: Similar names, overlapping members\n    💡 Action: Consider merging\n\n🟢 HEALTHY CHANNELS ({count})\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  {Team} › #{Channel} — {N} posts last 7d, {N} authors\n  {Team} › #{Channel} — {N} posts last 7d, {N} authors\n\n📋 RECOMMENDED ACTIONS\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  1. 🗑️ Archive {N} dead channels\n  2. 📧 Notify owners of {N} stale channels\n  3. 🔄 Review {N} potential duplicate pairs\n  4. 🤖 Review {N} bot‑only channels\n```\n\n## Parameters\n\n| Parameter | Required | Default | Description |\n|-----------|----------|---------|-------------|\n| Teams | No | All user's teams | Specific teams to audit |\n| Inactive Threshold | No | 30 days | Days without posts to flag as stale |\n| Dead Threshold | No | 90 days | Days without posts to flag as dead |\n| Include Healthy | No | true | Show healthy channels in the report |\n| Include General | No | false | Include default \"General\" channels |\n| Sort By | No | Last activity | Sort order: \"last-activity\", \"member-count\", \"team\" |\n\n## Required MCP Tools\n\n| MCP Server | Tool | Purpose |\n|---|---|---|\n| workiq (Local WorkIQ CLI) | `ask` | User identity, team\u002Fchannel discovery, message activity retrieval, and membership data |\n\n## Tips\n\n- Run monthly to keep your Teams workspace clean and navigable.\n- Say \"audit Engineering team only\" to scope to a single team for faster results.\n- Use \"show only dead channels\" to skip healthy channels and focus on cleanup.\n- After identifying channels to archive, coordinate with team owners before taking action.\n- After identifying channels to clean up, coordinate with team owners to take action.\n- General channels cannot be archived or deleted — they are skipped by default.\n\n## Examples\n\n**Full workspace audit**\n> \"Audit all my Teams channels and tell me which ones I should clean up.\"\n\nScans every team the user belongs to, classifies all channels by health status, detects bot-only and duplicate channels, and produces a complete prioritized report with archive and merge recommendations.\n\n---\n\n**Single-team audit with narrow threshold**\n> \"Do a channel health check for the Engineering team — flag anything with no posts in the last 2 weeks.\"\n\nScopes the audit to the Engineering team only and applies a custom inactive threshold of 14 days instead of the default 30, surfacing slow channels that would otherwise be missed.\n\n---\n\n**Dead channels only, ready for archiving**\n> \"Show me only the dead channels across all teams — nothing healthy, just what we should archive.\"\n\nRuns a full scan but filters the output to dead channels (90+ days without posts), listing each with member count, last author, and a direct archive recommendation — ideal for a quick cleanup session.\n\n## Error Handling\n\n**Cannot retrieve user details**\n- Cause: `ask` returns an authentication or permission error.\n- Action: Re-authenticate and retry. Ensure the WorkIQ CLI has proper Microsoft 365 permissions.\n\n**Team list is empty or incomplete**\n- Cause: `ask` returns no teams or only a subset of expected teams.\n- Action: Confirm the user is an active member of the expected teams in the Teams admin center. Guest accounts may have restricted visibility.\n\n**Channel message retrieval fails for one or more channels**\n- Cause: `ask` returns an error or no data for private or shared channels where the user lacks membership.\n- Action: The audit skips inaccessible channels and notes them in the report as `⚠️ Access Restricted`. Request channel membership or ask a channel owner to run the audit.\n\n**No messages returned but channel exists**\n- Cause: The channel was created but never had any posts, or messages were deleted.\n- Action: The channel is treated as **Dead** (0 days activity) and flagged for archiving. Verify manually before archiving if the channel was recently created.\n\n**Member list unavailable**\n- Cause: `ask` cannot retrieve membership data for a private channel due to permission restrictions.\n- Action: Member count and activity ratio are omitted for that channel; all other metrics are still reported. The channel is still classified by message activity alone.\n\n**Large workspace timeouts**\n- Cause: Auditing teams with dozens of channels may require many `ask` calls and take significant time.\n- Action: Scope the audit to a single team (e.g., \"audit the Marketing team only\") to reduce call volume, or run the audit during off-peak hours.\n",{"data":38,"body":39},{"name":4,"description":6},{"type":40,"children":41},"root",[42,50,56,63,103,109,116,129,156,162,167,176,181,226,231,240,246,251,260,265,328,334,339,348,353,376,382,387,397,405,415,423,433,441,451,459,469,477,483,488,506,512,518,527,533,704,710,759,765,798,804,812,821,826,830,838,846,851,854,862,870,875,881,889,909,917,936,944,971,979,999,1007,1026,1034],{"type":43,"tag":44,"props":45,"children":46},"element","h1",{"id":4},[47],{"type":48,"value":49},"text","Channel Audit",{"type":43,"tag":51,"props":52,"children":53},"p",{},[54],{"type":48,"value":55},"Audit all Microsoft Teams channels across your teams to assess activity levels and engagement health. Identifies inactive channels, stale conversations, and low‑engagement spaces — then presents a prioritized audit report with recommended cleanup actions such as archiving, merging, or reviving channels.",{"type":43,"tag":57,"props":58,"children":60},"h2",{"id":59},"when-to-use",[61],{"type":48,"value":62},"When to Use",{"type":43,"tag":64,"props":65,"children":66},"ul",{},[67,73,78,83,88,93,98],{"type":43,"tag":68,"props":69,"children":70},"li",{},[71],{"type":48,"value":72},"\"Audit my Teams channels\"",{"type":43,"tag":68,"props":74,"children":75},{},[76],{"type":48,"value":77},"\"Which channels are inactive?\"",{"type":43,"tag":68,"props":79,"children":80},{},[81],{"type":48,"value":82},"\"Find dead channels across my teams\"",{"type":43,"tag":68,"props":84,"children":85},{},[86],{"type":48,"value":87},"\"Teams channel cleanup report\"",{"type":43,"tag":68,"props":89,"children":90},{},[91],{"type":48,"value":92},"\"Show me channels with no posts in the last month\"",{"type":43,"tag":68,"props":94,"children":95},{},[96],{"type":48,"value":97},"\"Which channels should we archive?\"",{"type":43,"tag":68,"props":99,"children":100},{},[101],{"type":48,"value":102},"\"Channel health check for the Engineering team\"",{"type":43,"tag":57,"props":104,"children":106},{"id":105},"instructions",[107],{"type":48,"value":108},"Instructions",{"type":43,"tag":110,"props":111,"children":113},"h3",{"id":112},"step-1-identify-the-user",[114],{"type":48,"value":115},"Step 1: Identify the User",{"type":43,"tag":117,"props":118,"children":122},"pre",{"className":119,"code":121,"language":48},[120],"language-text","workiq-ask (\n  question: \"What is my profile information including display name, email, and time zone?\"\n)\n",[123],{"type":43,"tag":124,"props":125,"children":127},"code",{"__ignoreMap":126},"",[128],{"type":48,"value":121},{"type":43,"tag":51,"props":130,"children":131},{},[132,134,140,142,147,149,154],{"type":48,"value":133},"Extract ",{"type":43,"tag":135,"props":136,"children":137},"strong",{},[138],{"type":48,"value":139},"displayName",{"type":48,"value":141},", ",{"type":43,"tag":135,"props":143,"children":144},{},[145],{"type":48,"value":146},"email",{"type":48,"value":148},", and ",{"type":43,"tag":135,"props":150,"children":151},{},[152],{"type":48,"value":153},"timeZone",{"type":48,"value":155}," for date calculations.",{"type":43,"tag":110,"props":157,"children":159},{"id":158},"step-2-discover-all-teams-and-channels",[160],{"type":48,"value":161},"Step 2: Discover All Teams and Channels",{"type":43,"tag":51,"props":163,"children":164},{},[165],{"type":48,"value":166},"List every team and their channels:",{"type":43,"tag":117,"props":168,"children":171},{"className":169,"code":170,"language":48},[120],"workiq-ask (\n  question: \"List all Microsoft Teams teams I belong to. For each team, list all channels including the channel name, description, type (standard, private, shared), and creation date.\"\n)\n",[172],{"type":43,"tag":124,"props":173,"children":174},{"__ignoreMap":126},[175],{"type":48,"value":170},{"type":43,"tag":51,"props":177,"children":178},{},[179],{"type":48,"value":180},"Build an inventory of every channel:",{"type":43,"tag":64,"props":182,"children":183},{},[184,192,206,216],{"type":43,"tag":68,"props":185,"children":186},{},[187],{"type":43,"tag":135,"props":188,"children":189},{},[190],{"type":48,"value":191},"Team name",{"type":43,"tag":68,"props":193,"children":194},{},[195,200,201],{"type":43,"tag":135,"props":196,"children":197},{},[198],{"type":48,"value":199},"Channel name",{"type":48,"value":141},{"type":43,"tag":135,"props":202,"children":203},{},[204],{"type":48,"value":205},"description",{"type":43,"tag":68,"props":207,"children":208},{},[209,214],{"type":43,"tag":135,"props":210,"children":211},{},[212],{"type":48,"value":213},"Channel type",{"type":48,"value":215}," (standard, private, shared)",{"type":43,"tag":68,"props":217,"children":218},{},[219,224],{"type":43,"tag":135,"props":220,"children":221},{},[222],{"type":48,"value":223},"Created date",{"type":48,"value":225}," (from channel metadata)",{"type":43,"tag":51,"props":227,"children":228},{},[229],{"type":48,"value":230},"If the response is too large or truncated, query teams individually:",{"type":43,"tag":117,"props":232,"children":235},{"className":233,"code":234,"language":48},[120],"workiq-ask (\n  question: \"List all channels in the '\u003Cteam name>' team including channel name, description, type, and creation date.\"\n)\n",[236],{"type":43,"tag":124,"props":237,"children":238},{"__ignoreMap":126},[239],{"type":48,"value":234},{"type":43,"tag":110,"props":241,"children":243},{"id":242},"step-3-assess-channel-activity",[244],{"type":48,"value":245},"Step 3: Assess Channel Activity",{"type":43,"tag":51,"props":247,"children":248},{},[249],{"type":48,"value":250},"For each channel (or batch of channels within a team), pull recent messages to measure activity:",{"type":43,"tag":117,"props":252,"children":255},{"className":253,"code":254,"language":48},[120],"workiq-ask (\n  question: \"Show me the 10 most recent messages in the '\u003Cchannel name>' channel of the '\u003Cteam name>' team. For each message include the sender, date, content summary, reply count, and whether it was from a bot or connector.\"\n)\n",[256],{"type":43,"tag":124,"props":257,"children":258},{"__ignoreMap":126},[259],{"type":48,"value":254},{"type":43,"tag":51,"props":261,"children":262},{},[263],{"type":48,"value":264},"For each channel, calculate:",{"type":43,"tag":64,"props":266,"children":267},{},[268,278,288,298,308,318],{"type":43,"tag":68,"props":269,"children":270},{},[271,276],{"type":43,"tag":135,"props":272,"children":273},{},[274],{"type":48,"value":275},"Last message date",{"type":48,"value":277}," — when the most recent message was posted",{"type":43,"tag":68,"props":279,"children":280},{},[281,286],{"type":43,"tag":135,"props":282,"children":283},{},[284],{"type":48,"value":285},"Days since last post",{"type":48,"value":287}," — time delta from today",{"type":43,"tag":68,"props":289,"children":290},{},[291,296],{"type":43,"tag":135,"props":292,"children":293},{},[294],{"type":48,"value":295},"Message count",{"type":48,"value":297}," (in the sample) — indicator of volume",{"type":43,"tag":68,"props":299,"children":300},{},[301,306],{"type":43,"tag":135,"props":302,"children":303},{},[304],{"type":48,"value":305},"Unique authors",{"type":48,"value":307}," — how many distinct people posted",{"type":43,"tag":68,"props":309,"children":310},{},[311,316],{"type":43,"tag":135,"props":312,"children":313},{},[314],{"type":48,"value":315},"Reply depth",{"type":48,"value":317}," — are messages getting replies or going unanswered?",{"type":43,"tag":68,"props":319,"children":320},{},[321,326],{"type":43,"tag":135,"props":322,"children":323},{},[324],{"type":48,"value":325},"Content type",{"type":48,"value":327}," — are posts substantive or just bot notifications?",{"type":43,"tag":110,"props":329,"children":331},{"id":330},"step-4-get-channel-membership-data",[332],{"type":48,"value":333},"Step 4: Get Channel Membership Data",{"type":43,"tag":51,"props":335,"children":336},{},[337],{"type":48,"value":338},"For each channel (especially those flagged as low‑activity):",{"type":43,"tag":117,"props":340,"children":343},{"className":341,"code":342,"language":48},[120],"workiq-ask (\n  question: \"How many members are in the '\u003Cchannel name>' channel of the '\u003Cteam name>' team? List the member count.\"\n)\n",[344],{"type":43,"tag":124,"props":345,"children":346},{"__ignoreMap":126},[347],{"type":48,"value":342},{"type":43,"tag":51,"props":349,"children":350},{},[351],{"type":48,"value":352},"Record:",{"type":43,"tag":64,"props":354,"children":355},{},[356,366],{"type":43,"tag":68,"props":357,"children":358},{},[359,364],{"type":43,"tag":135,"props":360,"children":361},{},[362],{"type":48,"value":363},"Member count",{"type":48,"value":365}," — total members in the channel",{"type":43,"tag":68,"props":367,"children":368},{},[369,374],{"type":43,"tag":135,"props":370,"children":371},{},[372],{"type":48,"value":373},"Activity ratio",{"type":48,"value":375}," — unique posters vs. total members (engagement metric)",{"type":43,"tag":110,"props":377,"children":379},{"id":378},"step-5-classify-channel-health",[380],{"type":48,"value":381},"Step 5: Classify Channel Health",{"type":43,"tag":51,"props":383,"children":384},{},[385],{"type":48,"value":386},"Categorize each channel based on activity metrics:",{"type":43,"tag":51,"props":388,"children":389},{},[390,395],{"type":43,"tag":135,"props":391,"children":392},{},[393],{"type":48,"value":394},"🟢 Active",{"type":48,"value":396}," — Messages within the last 7 days, multiple authors, replies present",{"type":43,"tag":64,"props":398,"children":399},{},[400],{"type":43,"tag":68,"props":401,"children":402},{},[403],{"type":48,"value":404},"Engagement: healthy, no action needed",{"type":43,"tag":51,"props":406,"children":407},{},[408,413],{"type":43,"tag":135,"props":409,"children":410},{},[411],{"type":48,"value":412},"🟡 Slow",{"type":48,"value":414}," — Last message 7–30 days ago, limited authors",{"type":43,"tag":64,"props":416,"children":417},{},[418],{"type":43,"tag":68,"props":419,"children":420},{},[421],{"type":48,"value":422},"Recommendation: monitor, consider consolidating",{"type":43,"tag":51,"props":424,"children":425},{},[426,431],{"type":43,"tag":135,"props":427,"children":428},{},[429],{"type":48,"value":430},"🟠 Stale",{"type":48,"value":432}," — Last message 30–90 days ago, very few participants",{"type":43,"tag":64,"props":434,"children":435},{},[436],{"type":43,"tag":68,"props":437,"children":438},{},[439],{"type":48,"value":440},"Recommendation: notify channel owners, consider archiving",{"type":43,"tag":51,"props":442,"children":443},{},[444,449],{"type":43,"tag":135,"props":445,"children":446},{},[447],{"type":48,"value":448},"🔴 Dead",{"type":48,"value":450}," — No messages in 90+ days",{"type":43,"tag":64,"props":452,"children":453},{},[454],{"type":43,"tag":68,"props":455,"children":456},{},[457],{"type":48,"value":458},"Recommendation: archive or delete",{"type":43,"tag":51,"props":460,"children":461},{},[462,467],{"type":43,"tag":135,"props":463,"children":464},{},[465],{"type":48,"value":466},"⚪ Bot‑Only",{"type":48,"value":468}," — Recent messages, but only from automated bots or connectors",{"type":43,"tag":64,"props":470,"children":471},{},[472],{"type":43,"tag":68,"props":473,"children":474},{},[475],{"type":48,"value":476},"Recommendation: review if the channel serves a purpose beyond bot notifications",{"type":43,"tag":110,"props":478,"children":480},{"id":479},"step-6-identify-potential-duplicates",[481],{"type":48,"value":482},"Step 6: Identify Potential Duplicates",{"type":43,"tag":51,"props":484,"children":485},{},[486],{"type":48,"value":487},"Compare channel names and descriptions across teams to find potential duplicates:",{"type":43,"tag":64,"props":489,"children":490},{},[491,496,501],{"type":43,"tag":68,"props":492,"children":493},{},[494],{"type":48,"value":495},"Channels with similar names (e.g., \"#design\" and \"#design-team\")",{"type":43,"tag":68,"props":497,"children":498},{},[499],{"type":48,"value":500},"Channels with overlapping membership and similar topics",{"type":43,"tag":68,"props":502,"children":503},{},[504],{"type":48,"value":505},"Flag these as merge candidates",{"type":43,"tag":110,"props":507,"children":509},{"id":508},"step-7-compile-the-audit-report",[510],{"type":48,"value":511},"Step 7: Compile the Audit Report",{"type":43,"tag":57,"props":513,"children":515},{"id":514},"output-format",[516],{"type":48,"value":517},"Output Format",{"type":43,"tag":117,"props":519,"children":522},{"className":520,"code":521,"language":48},[120],"🔍 CHANNEL AUDIT REPORT\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n📅 Audit date: {date}\n👤 Audited by: {displayName}\n🏢 Teams scanned: {N}  ·  📢 Channels audited: {N}\n\n📊 HEALTH OVERVIEW\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n🟢 Active:    {N} channels  ({percentage}%)\n🟡 Slow:      {N} channels  ({percentage}%)\n🟠 Stale:     {N} channels  ({percentage}%)\n🔴 Dead:      {N} channels  ({percentage}%)\n⚪ Bot‑only:  {N} channels  ({percentage}%)\n\n🔴 DEAD CHANNELS — Recommend Archive ({count})\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  {Team} › #{Channel}\n     📅 Last post: {date} ({N} days ago)\n     👥 Members: {N}  ·  💬 Last author: {name}\n     💡 Action: Archive\n  \n  {Team} › #{Channel}\n     📅 Last post: {date} ({N} days ago)\n     👥 Members: {N}  ·  💬 Last author: {name}\n     💡 Action: Archive\n\n🟠 STALE CHANNELS — Monitor \u002F Consider Archiving ({count})\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  {Team} › #{Channel}\n     📅 Last post: {date} ({N} days ago)\n     👥 Members: {N}  ·  📝 Active posters: {N} ({ratio}%)\n     💡 Action: Notify owner, review purpose\n\n🟡 SLOW CHANNELS — Watch List ({count})\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  {Team} › #{Channel}\n     📅 Last post: {date} ({N} days ago)\n     👥 Members: {N}  ·  📝 Active posters: {N}\n\n⚪ BOT‑ONLY CHANNELS ({count})\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  {Team} › #{Channel}\n     🤖 Only automated posts detected\n     💡 Action: Review if bot output is still needed\n\n🔄 POTENTIAL DUPLICATES\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  • {Team1} › #{Channel A}  ↔  {Team2} › #{Channel B}\n    Reason: Similar names, overlapping members\n    💡 Action: Consider merging\n\n🟢 HEALTHY CHANNELS ({count})\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  {Team} › #{Channel} — {N} posts last 7d, {N} authors\n  {Team} › #{Channel} — {N} posts last 7d, {N} authors\n\n📋 RECOMMENDED ACTIONS\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  1. 🗑️ Archive {N} dead channels\n  2. 📧 Notify owners of {N} stale channels\n  3. 🔄 Review {N} potential duplicate pairs\n  4. 🤖 Review {N} bot‑only channels\n",[523],{"type":43,"tag":124,"props":524,"children":525},{"__ignoreMap":126},[526],{"type":48,"value":521},{"type":43,"tag":57,"props":528,"children":530},{"id":529},"parameters",[531],{"type":48,"value":532},"Parameters",{"type":43,"tag":534,"props":535,"children":536},"table",{},[537,566],{"type":43,"tag":538,"props":539,"children":540},"thead",{},[541],{"type":43,"tag":542,"props":543,"children":544},"tr",{},[545,551,556,561],{"type":43,"tag":546,"props":547,"children":548},"th",{},[549],{"type":48,"value":550},"Parameter",{"type":43,"tag":546,"props":552,"children":553},{},[554],{"type":48,"value":555},"Required",{"type":43,"tag":546,"props":557,"children":558},{},[559],{"type":48,"value":560},"Default",{"type":43,"tag":546,"props":562,"children":563},{},[564],{"type":48,"value":565},"Description",{"type":43,"tag":567,"props":568,"children":569},"tbody",{},[570,594,616,638,660,682],{"type":43,"tag":542,"props":571,"children":572},{},[573,579,584,589],{"type":43,"tag":574,"props":575,"children":576},"td",{},[577],{"type":48,"value":578},"Teams",{"type":43,"tag":574,"props":580,"children":581},{},[582],{"type":48,"value":583},"No",{"type":43,"tag":574,"props":585,"children":586},{},[587],{"type":48,"value":588},"All user's teams",{"type":43,"tag":574,"props":590,"children":591},{},[592],{"type":48,"value":593},"Specific teams to audit",{"type":43,"tag":542,"props":595,"children":596},{},[597,602,606,611],{"type":43,"tag":574,"props":598,"children":599},{},[600],{"type":48,"value":601},"Inactive Threshold",{"type":43,"tag":574,"props":603,"children":604},{},[605],{"type":48,"value":583},{"type":43,"tag":574,"props":607,"children":608},{},[609],{"type":48,"value":610},"30 days",{"type":43,"tag":574,"props":612,"children":613},{},[614],{"type":48,"value":615},"Days without posts to flag as stale",{"type":43,"tag":542,"props":617,"children":618},{},[619,624,628,633],{"type":43,"tag":574,"props":620,"children":621},{},[622],{"type":48,"value":623},"Dead Threshold",{"type":43,"tag":574,"props":625,"children":626},{},[627],{"type":48,"value":583},{"type":43,"tag":574,"props":629,"children":630},{},[631],{"type":48,"value":632},"90 days",{"type":43,"tag":574,"props":634,"children":635},{},[636],{"type":48,"value":637},"Days without posts to flag as dead",{"type":43,"tag":542,"props":639,"children":640},{},[641,646,650,655],{"type":43,"tag":574,"props":642,"children":643},{},[644],{"type":48,"value":645},"Include Healthy",{"type":43,"tag":574,"props":647,"children":648},{},[649],{"type":48,"value":583},{"type":43,"tag":574,"props":651,"children":652},{},[653],{"type":48,"value":654},"true",{"type":43,"tag":574,"props":656,"children":657},{},[658],{"type":48,"value":659},"Show healthy channels in the report",{"type":43,"tag":542,"props":661,"children":662},{},[663,668,672,677],{"type":43,"tag":574,"props":664,"children":665},{},[666],{"type":48,"value":667},"Include General",{"type":43,"tag":574,"props":669,"children":670},{},[671],{"type":48,"value":583},{"type":43,"tag":574,"props":673,"children":674},{},[675],{"type":48,"value":676},"false",{"type":43,"tag":574,"props":678,"children":679},{},[680],{"type":48,"value":681},"Include default \"General\" channels",{"type":43,"tag":542,"props":683,"children":684},{},[685,690,694,699],{"type":43,"tag":574,"props":686,"children":687},{},[688],{"type":48,"value":689},"Sort By",{"type":43,"tag":574,"props":691,"children":692},{},[693],{"type":48,"value":583},{"type":43,"tag":574,"props":695,"children":696},{},[697],{"type":48,"value":698},"Last activity",{"type":43,"tag":574,"props":700,"children":701},{},[702],{"type":48,"value":703},"Sort order: \"last-activity\", \"member-count\", \"team\"",{"type":43,"tag":57,"props":705,"children":707},{"id":706},"required-mcp-tools",[708],{"type":48,"value":709},"Required MCP Tools",{"type":43,"tag":534,"props":711,"children":712},{},[713,734],{"type":43,"tag":538,"props":714,"children":715},{},[716],{"type":43,"tag":542,"props":717,"children":718},{},[719,724,729],{"type":43,"tag":546,"props":720,"children":721},{},[722],{"type":48,"value":723},"MCP Server",{"type":43,"tag":546,"props":725,"children":726},{},[727],{"type":48,"value":728},"Tool",{"type":43,"tag":546,"props":730,"children":731},{},[732],{"type":48,"value":733},"Purpose",{"type":43,"tag":567,"props":735,"children":736},{},[737],{"type":43,"tag":542,"props":738,"children":739},{},[740,745,754],{"type":43,"tag":574,"props":741,"children":742},{},[743],{"type":48,"value":744},"workiq (Local WorkIQ CLI)",{"type":43,"tag":574,"props":746,"children":747},{},[748],{"type":43,"tag":124,"props":749,"children":751},{"className":750},[],[752],{"type":48,"value":753},"ask",{"type":43,"tag":574,"props":755,"children":756},{},[757],{"type":48,"value":758},"User identity, team\u002Fchannel discovery, message activity retrieval, and membership data",{"type":43,"tag":57,"props":760,"children":762},{"id":761},"tips",[763],{"type":48,"value":764},"Tips",{"type":43,"tag":64,"props":766,"children":767},{},[768,773,778,783,788,793],{"type":43,"tag":68,"props":769,"children":770},{},[771],{"type":48,"value":772},"Run monthly to keep your Teams workspace clean and navigable.",{"type":43,"tag":68,"props":774,"children":775},{},[776],{"type":48,"value":777},"Say \"audit Engineering team only\" to scope to a single team for faster results.",{"type":43,"tag":68,"props":779,"children":780},{},[781],{"type":48,"value":782},"Use \"show only dead channels\" to skip healthy channels and focus on cleanup.",{"type":43,"tag":68,"props":784,"children":785},{},[786],{"type":48,"value":787},"After identifying channels to archive, coordinate with team owners before taking action.",{"type":43,"tag":68,"props":789,"children":790},{},[791],{"type":48,"value":792},"After identifying channels to clean up, coordinate with team owners to take action.",{"type":43,"tag":68,"props":794,"children":795},{},[796],{"type":48,"value":797},"General channels cannot be archived or deleted — they are skipped by default.",{"type":43,"tag":57,"props":799,"children":801},{"id":800},"examples",[802],{"type":48,"value":803},"Examples",{"type":43,"tag":51,"props":805,"children":806},{},[807],{"type":43,"tag":135,"props":808,"children":809},{},[810],{"type":48,"value":811},"Full workspace audit",{"type":43,"tag":813,"props":814,"children":815},"blockquote",{},[816],{"type":43,"tag":51,"props":817,"children":818},{},[819],{"type":48,"value":820},"\"Audit all my Teams channels and tell me which ones I should clean up.\"",{"type":43,"tag":51,"props":822,"children":823},{},[824],{"type":48,"value":825},"Scans every team the user belongs to, classifies all channels by health status, detects bot-only and duplicate channels, and produces a complete prioritized report with archive and merge recommendations.",{"type":43,"tag":827,"props":828,"children":829},"hr",{},[],{"type":43,"tag":51,"props":831,"children":832},{},[833],{"type":43,"tag":135,"props":834,"children":835},{},[836],{"type":48,"value":837},"Single-team audit with narrow threshold",{"type":43,"tag":813,"props":839,"children":840},{},[841],{"type":43,"tag":51,"props":842,"children":843},{},[844],{"type":48,"value":845},"\"Do a channel health check for the Engineering team — flag anything with no posts in the last 2 weeks.\"",{"type":43,"tag":51,"props":847,"children":848},{},[849],{"type":48,"value":850},"Scopes the audit to the Engineering team only and applies a custom inactive threshold of 14 days instead of the default 30, surfacing slow channels that would otherwise be missed.",{"type":43,"tag":827,"props":852,"children":853},{},[],{"type":43,"tag":51,"props":855,"children":856},{},[857],{"type":43,"tag":135,"props":858,"children":859},{},[860],{"type":48,"value":861},"Dead channels only, ready for archiving",{"type":43,"tag":813,"props":863,"children":864},{},[865],{"type":43,"tag":51,"props":866,"children":867},{},[868],{"type":48,"value":869},"\"Show me only the dead channels across all teams — nothing healthy, just what we should archive.\"",{"type":43,"tag":51,"props":871,"children":872},{},[873],{"type":48,"value":874},"Runs a full scan but filters the output to dead channels (90+ days without posts), listing each with member count, last author, and a direct archive recommendation — ideal for a quick cleanup session.",{"type":43,"tag":57,"props":876,"children":878},{"id":877},"error-handling",[879],{"type":48,"value":880},"Error Handling",{"type":43,"tag":51,"props":882,"children":883},{},[884],{"type":43,"tag":135,"props":885,"children":886},{},[887],{"type":48,"value":888},"Cannot retrieve user details",{"type":43,"tag":64,"props":890,"children":891},{},[892,904],{"type":43,"tag":68,"props":893,"children":894},{},[895,897,902],{"type":48,"value":896},"Cause: ",{"type":43,"tag":124,"props":898,"children":900},{"className":899},[],[901],{"type":48,"value":753},{"type":48,"value":903}," returns an authentication or permission error.",{"type":43,"tag":68,"props":905,"children":906},{},[907],{"type":48,"value":908},"Action: Re-authenticate and retry. Ensure the WorkIQ CLI has proper Microsoft 365 permissions.",{"type":43,"tag":51,"props":910,"children":911},{},[912],{"type":43,"tag":135,"props":913,"children":914},{},[915],{"type":48,"value":916},"Team list is empty or incomplete",{"type":43,"tag":64,"props":918,"children":919},{},[920,931],{"type":43,"tag":68,"props":921,"children":922},{},[923,924,929],{"type":48,"value":896},{"type":43,"tag":124,"props":925,"children":927},{"className":926},[],[928],{"type":48,"value":753},{"type":48,"value":930}," returns no teams or only a subset of expected teams.",{"type":43,"tag":68,"props":932,"children":933},{},[934],{"type":48,"value":935},"Action: Confirm the user is an active member of the expected teams in the Teams admin center. Guest accounts may have restricted visibility.",{"type":43,"tag":51,"props":937,"children":938},{},[939],{"type":43,"tag":135,"props":940,"children":941},{},[942],{"type":48,"value":943},"Channel message retrieval fails for one or more channels",{"type":43,"tag":64,"props":945,"children":946},{},[947,958],{"type":43,"tag":68,"props":948,"children":949},{},[950,951,956],{"type":48,"value":896},{"type":43,"tag":124,"props":952,"children":954},{"className":953},[],[955],{"type":48,"value":753},{"type":48,"value":957}," returns an error or no data for private or shared channels where the user lacks membership.",{"type":43,"tag":68,"props":959,"children":960},{},[961,963,969],{"type":48,"value":962},"Action: The audit skips inaccessible channels and notes them in the report as ",{"type":43,"tag":124,"props":964,"children":966},{"className":965},[],[967],{"type":48,"value":968},"⚠️ Access Restricted",{"type":48,"value":970},". Request channel membership or ask a channel owner to run the audit.",{"type":43,"tag":51,"props":972,"children":973},{},[974],{"type":43,"tag":135,"props":975,"children":976},{},[977],{"type":48,"value":978},"No messages returned but channel exists",{"type":43,"tag":64,"props":980,"children":981},{},[982,987],{"type":43,"tag":68,"props":983,"children":984},{},[985],{"type":48,"value":986},"Cause: The channel was created but never had any posts, or messages were deleted.",{"type":43,"tag":68,"props":988,"children":989},{},[990,992,997],{"type":48,"value":991},"Action: The channel is treated as ",{"type":43,"tag":135,"props":993,"children":994},{},[995],{"type":48,"value":996},"Dead",{"type":48,"value":998}," (0 days activity) and flagged for archiving. Verify manually before archiving if the channel was recently created.",{"type":43,"tag":51,"props":1000,"children":1001},{},[1002],{"type":43,"tag":135,"props":1003,"children":1004},{},[1005],{"type":48,"value":1006},"Member list unavailable",{"type":43,"tag":64,"props":1008,"children":1009},{},[1010,1021],{"type":43,"tag":68,"props":1011,"children":1012},{},[1013,1014,1019],{"type":48,"value":896},{"type":43,"tag":124,"props":1015,"children":1017},{"className":1016},[],[1018],{"type":48,"value":753},{"type":48,"value":1020}," cannot retrieve membership data for a private channel due to permission restrictions.",{"type":43,"tag":68,"props":1022,"children":1023},{},[1024],{"type":48,"value":1025},"Action: Member count and activity ratio are omitted for that channel; all other metrics are still reported. The channel is still classified by message activity alone.",{"type":43,"tag":51,"props":1027,"children":1028},{},[1029],{"type":43,"tag":135,"props":1030,"children":1031},{},[1032],{"type":48,"value":1033},"Large workspace timeouts",{"type":43,"tag":64,"props":1035,"children":1036},{},[1037,1049],{"type":43,"tag":68,"props":1038,"children":1039},{},[1040,1042,1047],{"type":48,"value":1041},"Cause: Auditing teams with dozens of channels may require many ",{"type":43,"tag":124,"props":1043,"children":1045},{"className":1044},[],[1046],{"type":48,"value":753},{"type":48,"value":1048}," calls and take significant time.",{"type":43,"tag":68,"props":1050,"children":1051},{},[1052],{"type":48,"value":1053},"Action: Scope the audit to a single team (e.g., \"audit the Marketing team only\") to reduce call volume, or run the audit during off-peak hours.",{"items":1055,"total":1161},[1056,1076,1084,1095,1111,1131,1145],{"slug":1057,"name":1057,"fn":1058,"description":1059,"org":1060,"tags":1061,"stars":26,"repoUrl":27,"updatedAt":1075},"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},[1062,1065,1066,1069,1072],{"name":1063,"slug":1064,"type":15},"Meetings","meetings",{"name":9,"slug":8,"type":15},{"name":1067,"slug":1068,"type":15},"Productivity","productivity",{"name":1070,"slug":1071,"type":15},"Summarization","summarization",{"name":1073,"slug":1074,"type":15},"Task Management","task-management","2026-04-06T18:35:30.007473",{"slug":4,"name":4,"fn":5,"description":6,"org":1077,"tags":1078,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1079,1080,1081,1082,1083],{"name":17,"slug":18,"type":15},{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},{"name":13,"slug":14,"type":15},{"slug":1085,"name":1085,"fn":1086,"description":1087,"org":1088,"tags":1089,"stars":26,"repoUrl":27,"updatedAt":1094},"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},[1090,1091,1092,1093],{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},{"name":1070,"slug":1071,"type":15},"2026-04-06T18:35:25.021901",{"slug":1096,"name":1096,"fn":1097,"description":1098,"org":1099,"tags":1100,"stars":26,"repoUrl":27,"updatedAt":1110},"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},[1101,1102,1105,1108,1109],{"name":9,"slug":8,"type":15},{"name":1103,"slug":1104,"type":15},"Outlook Calendar","outlook-calendar",{"name":1106,"slug":1107,"type":15},"Outlook Email","outlook-email",{"name":1067,"slug":1068,"type":15},{"name":1070,"slug":1071,"type":15},"2026-04-06T18:35:28.767999",{"slug":1112,"name":1112,"fn":1113,"description":1114,"org":1115,"tags":1116,"stars":26,"repoUrl":27,"updatedAt":1130},"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},[1117,1120,1123,1126,1127],{"name":1118,"slug":1119,"type":15},"Agents","agents",{"name":1121,"slug":1122,"type":15},"Copilot","copilot",{"name":1124,"slug":1125,"type":15},"Deployment","deployment",{"name":9,"slug":8,"type":15},{"name":1128,"slug":1129,"type":15},"Microsoft 365","microsoft-365","2026-04-06T18:35:42.309091",{"slug":1132,"name":1132,"fn":1133,"description":1134,"org":1135,"tags":1136,"stars":26,"repoUrl":27,"updatedAt":1144},"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},[1137,1140,1142,1143],{"name":1138,"slug":1139,"type":15},"Analytics","analytics",{"name":1141,"slug":146,"type":15},"Email",{"name":9,"slug":8,"type":15},{"name":1067,"slug":1068,"type":15},"2026-04-06T18:35:26.264312",{"slug":1146,"name":1146,"fn":1147,"description":1148,"org":1149,"tags":1150,"stars":26,"repoUrl":27,"updatedAt":1160},"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},[1151,1152,1155,1158,1159],{"name":1118,"slug":1119,"type":15},{"name":1153,"slug":1154,"type":15},"CLI","cli",{"name":1156,"slug":1157,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":1128,"slug":1129,"type":15},"2026-04-06T18:35:40.873947",14,{"items":1163,"total":1352},[1164,1184,1203,1222,1237,1254,1265,1278,1293,1308,1327,1340],{"slug":1165,"name":1165,"fn":1166,"description":1167,"org":1168,"tags":1169,"stars":1181,"repoUrl":1182,"updatedAt":1183},"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},[1170,1173,1174,1175,1178],{"name":1171,"slug":1172,"type":15},"Engineering","engineering",{"name":1156,"slug":1157,"type":15},{"name":9,"slug":8,"type":15},{"name":1176,"slug":1177,"type":15},"Project Management","project-management",{"name":1179,"slug":1180,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":1185,"name":1185,"fn":1186,"description":1187,"org":1188,"tags":1189,"stars":1200,"repoUrl":1201,"updatedAt":1202},"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},[1190,1193,1194,1197],{"name":1191,"slug":1192,"type":15},".NET","net",{"name":1118,"slug":1119,"type":15},{"name":1195,"slug":1196,"type":15},"Azure","azure",{"name":1198,"slug":1199,"type":15},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":1204,"name":1204,"fn":1205,"description":1206,"org":1207,"tags":1208,"stars":1200,"repoUrl":1201,"updatedAt":1221},"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},[1209,1210,1211,1214,1217,1218],{"name":1138,"slug":1139,"type":15},{"name":1195,"slug":1196,"type":15},{"name":1212,"slug":1213,"type":15},"Data Analysis","data-analysis",{"name":1215,"slug":1216,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":1219,"slug":1220,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":1223,"name":1223,"fn":1224,"description":1225,"org":1226,"tags":1227,"stars":1200,"repoUrl":1201,"updatedAt":1236},"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},[1228,1231,1232,1233],{"name":1229,"slug":1230,"type":15},"AI Infrastructure","ai-infrastructure",{"name":1195,"slug":1196,"type":15},{"name":1215,"slug":1216,"type":15},{"name":1234,"slug":1235,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":1238,"name":1238,"fn":1239,"description":1240,"org":1241,"tags":1242,"stars":1200,"repoUrl":1201,"updatedAt":1253},"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},[1243,1244,1247,1248,1249,1252],{"name":1195,"slug":1196,"type":15},{"name":1245,"slug":1246,"type":15},"Compliance","compliance",{"name":1198,"slug":1199,"type":15},{"name":9,"slug":8,"type":15},{"name":1250,"slug":1251,"type":15},"Python","python",{"name":1234,"slug":1235,"type":15},"2026-07-18T05:14:23.017504",{"slug":1255,"name":1255,"fn":1256,"description":1257,"org":1258,"tags":1259,"stars":1200,"repoUrl":1201,"updatedAt":1264},"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},[1260,1261,1262,1263],{"name":1138,"slug":1139,"type":15},{"name":1195,"slug":1196,"type":15},{"name":1198,"slug":1199,"type":15},{"name":1250,"slug":1251,"type":15},"2026-07-31T05:54:29.068751",{"slug":1266,"name":1266,"fn":1267,"description":1268,"org":1269,"tags":1270,"stars":1200,"repoUrl":1201,"updatedAt":1277},"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},[1271,1274,1275,1276],{"name":1272,"slug":1273,"type":15},"API Development","api-development",{"name":1195,"slug":1196,"type":15},{"name":9,"slug":8,"type":15},{"name":1250,"slug":1251,"type":15},"2026-07-18T05:14:16.988376",{"slug":1279,"name":1279,"fn":1280,"description":1281,"org":1282,"tags":1283,"stars":1200,"repoUrl":1201,"updatedAt":1292},"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},[1284,1285,1288,1291],{"name":1195,"slug":1196,"type":15},{"name":1286,"slug":1287,"type":15},"Computer Vision","computer-vision",{"name":1289,"slug":1290,"type":15},"Images","images",{"name":1250,"slug":1251,"type":15},"2026-07-18T05:14:18.007737",{"slug":1294,"name":1294,"fn":1295,"description":1296,"org":1297,"tags":1298,"stars":1200,"repoUrl":1201,"updatedAt":1307},"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},[1299,1300,1303,1306],{"name":1195,"slug":1196,"type":15},{"name":1301,"slug":1302,"type":15},"Configuration","configuration",{"name":1304,"slug":1305,"type":15},"Feature Flags","feature-flags",{"name":1215,"slug":1216,"type":15},"2026-07-03T16:32:01.278468",{"slug":1309,"name":1309,"fn":1310,"description":1311,"org":1312,"tags":1313,"stars":1200,"repoUrl":1201,"updatedAt":1326},"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},[1314,1317,1320,1323],{"name":1315,"slug":1316,"type":15},"Cosmos DB","cosmos-db",{"name":1318,"slug":1319,"type":15},"Database","database",{"name":1321,"slug":1322,"type":15},"NoSQL","nosql",{"name":1324,"slug":1325,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":1328,"name":1328,"fn":1310,"description":1329,"org":1330,"tags":1331,"stars":1200,"repoUrl":1201,"updatedAt":1339},"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},[1332,1333,1334,1335,1336],{"name":1315,"slug":1316,"type":15},{"name":1318,"slug":1319,"type":15},{"name":9,"slug":8,"type":15},{"name":1321,"slug":1322,"type":15},{"name":1337,"slug":1338,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":1341,"name":1341,"fn":1342,"description":1343,"org":1344,"tags":1345,"stars":1200,"repoUrl":1201,"updatedAt":1351},"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},[1346,1347,1348,1349,1350],{"name":1195,"slug":1196,"type":15},{"name":1315,"slug":1316,"type":15},{"name":1318,"slug":1319,"type":15},{"name":1215,"slug":1216,"type":15},{"name":1321,"slug":1322,"type":15},"2026-05-13T06:14:17.582229",267]