Audit Teams channels across your teams — identify inactive channels, low‑engagement conversations, channels with no recent posts, and recommend cleanup actions.
npx skills add https://github.com/microsoft/work-iq --skill channel-audit
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.
workiq-ask (
question: "What is my profile information including display name, email, and time zone?"
)
Extract displayName, email, and timeZone for date calculations.
List every team and their channels:
workiq-ask (
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."
)
Build an inventory of every channel:
If the response is too large or truncated, query teams individually:
workiq-ask (
question: "List all channels in the '<team name>' team including channel name, description, type, and creation date."
)
For each channel (or batch of channels within a team), pull recent messages to measure activity:
workiq-ask (
question: "Show me the 10 most recent messages in the '<channel name>' channel of the '<team name>' team. For each message include the sender, date, content summary, reply count, and whether it was from a bot or connector."
)
For each channel, calculate:
For each channel (especially those flagged as low‑activity):
workiq-ask (
question: "How many members are in the '<channel name>' channel of the '<team name>' team? List the member count."
)
Record:
Categorize each channel based on activity metrics:
🟢 Active — Messages within the last 7 days, multiple authors, replies present
🟡 Slow — Last message 7–30 days ago, limited authors
🟠 Stale — Last message 30–90 days ago, very few participants
🔴 Dead — No messages in 90+ days
⚪ Bot‑Only — Recent messages, but only from automated bots or connectors
Compare channel names and descriptions across teams to find potential duplicates:
🔍 CHANNEL AUDIT REPORT
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📅 Audit date: {date}
👤 Audited by: {displayName}
🏢 Teams scanned: {N} · 📢 Channels audited: {N}
📊 HEALTH OVERVIEW
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🟢 Active: {N} channels ({percentage}%)
🟡 Slow: {N} channels ({percentage}%)
🟠 Stale: {N} channels ({percentage}%)
🔴 Dead: {N} channels ({percentage}%)
⚪ Bot‑only: {N} channels ({percentage}%)
🔴 DEAD CHANNELS — Recommend Archive ({count})
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
{Team} › #{Channel}
📅 Last post: {date} ({N} days ago)
👥 Members: {N} · 💬 Last author: {name}
💡 Action: Archive
{Team} › #{Channel}
📅 Last post: {date} ({N} days ago)
👥 Members: {N} · 💬 Last author: {name}
💡 Action: Archive
🟠 STALE CHANNELS — Monitor / Consider Archiving ({count})
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
{Team} › #{Channel}
📅 Last post: {date} ({N} days ago)
👥 Members: {N} · 📝 Active posters: {N} ({ratio}%)
💡 Action: Notify owner, review purpose
🟡 SLOW CHANNELS — Watch List ({count})
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
{Team} › #{Channel}
📅 Last post: {date} ({N} days ago)
👥 Members: {N} · 📝 Active posters: {N}
⚪ BOT‑ONLY CHANNELS ({count})
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
{Team} › #{Channel}
🤖 Only automated posts detected
💡 Action: Review if bot output is still needed
🔄 POTENTIAL DUPLICATES
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
• {Team1} › #{Channel A} ↔ {Team2} › #{Channel B}
Reason: Similar names, overlapping members
💡 Action: Consider merging
🟢 HEALTHY CHANNELS ({count})
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
{Team} › #{Channel} — {N} posts last 7d, {N} authors
{Team} › #{Channel} — {N} posts last 7d, {N} authors
📋 RECOMMENDED ACTIONS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. 🗑️ Archive {N} dead channels
2. 📧 Notify owners of {N} stale channels
3. 🔄 Review {N} potential duplicate pairs
4. 🤖 Review {N} bot‑only channels
| Parameter | Required | Default | Description |
|-----------|----------|---------|-------------|
| Teams | No | All user's teams | Specific teams to audit |
| Inactive Threshold | No | 30 days | Days without posts to flag as stale |
| Dead Threshold | No | 90 days | Days without posts to flag as dead |
| Include Healthy | No | true | Show healthy channels in the report |
| Include General | No | false | Include default "General" channels |
| Sort By | No | Last activity | Sort order: "last-activity", "member-count", "team" |
| MCP Server | Tool | Purpose |
|---|---|---|
| workiq (Local WorkIQ CLI) | ask | User identity, team/channel discovery, message activity retrieval, and membership data |
Full workspace audit
> "Audit all my Teams channels and tell me which ones I should clean up."
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.
Single-team audit with narrow threshold
> "Do a channel health check for the Engineering team — flag anything with no posts in the last 2 weeks."
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.
Dead channels only, ready for archiving
> "Show me only the dead channels across all teams — nothing healthy, just what we should archive."
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.
Cannot retrieve user details
ask returns an authentication or permission error.Team list is empty or incomplete
ask returns no teams or only a subset of expected teams.Channel message retrieval fails for one or more channels
ask returns an error or no data for private or shared channels where the user lacks membership.⚠️ Access Restricted. Request channel membership or ask a channel owner to run the audit.No messages returned but channel exists
Member list unavailable
ask cannot retrieve membership data for a private channel due to permission restrictions.Large workspace timeouts
ask calls and take significant time.Integration with protocols.io API for managing scientific protocols. This skill should be used when working with protocols.io to search, create, update, or publish protocols; manage protocol steps and materials; handle discussions and comments; organize workspaces; upload and manage files; or integrate protocols.io functionality into workflows. Applicable for protocol discovery, collaborative protocol development, experiment tracking, lab protocol management, and scientific documentation.
Analyzes job descriptions and generates tailored resumes that highlight relevant experience, skills, and achievements to maximize interview chances
Generate Excalidraw diagrams from natural language descriptions. Use when asked to "create a diagram", "make a flowchart", "visualize a process", "draw a system architecture", "create a mind map", or "generate an Excalidraw file". Supports flowcharts, relationship diagrams, mind maps, and system architecture diagrams. Outputs .excalidraw JSON files that can be opened directly in Excalidraw.
Build and distribute Expo development clients locally or via TestFlight
Use when you have a written implementation plan to execute in a separate session with review checkpoints
Data structure for annotated matrices in single-cell analysis. Use when working with .h5ad files or integrating with the scverse ecosystem. This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census.
Benchling R&D platform integration. Access registry (DNA, proteins), inventory, ELN entries, workflows via API, build Benchling Apps, query Data Warehouse, for lab data management automation.
Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.
Take microsoft/channel-audit from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.