Slack to Teams Expert System
SkillFiles & storageGuides your agent through migrating Slack bots to Teams or building bots that run on both platforms.
Then ask your AI: use the Slack to Teams Expert System skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Add it as a step in a pipeline you build on Ahel, or connect Ahel to Claude, ChatGPT, Cursor, Claude Code or Codex and ask your AI to use it.
About this skill
Sub-skill of microsoft-365-agents-toolkit. Routed expert system with 100+ micro-expert files for migrating Slack bots to Teams, cross-platform bridging, and dual-platform bot development. USE FOR: migrating Slack bot to Teams, adding Teams support to Slack bot, building dual-platform bots, convertin
What this skill tells your AI
The instructions your AI receives, as published by microsoft/skills in .github/plugins/microsoft-365-agents-toolkit/skills/teams-app-developer/slack-to-teams/SKILL.md and read by Ahel’s review.
A routed expert system with 100+ micro-expert files for migrating Slack bots to Teams and building cross-platform bots.
Parent skill: For ATK CLI setup and routing, see ../SKILL.md. For local testing, see ../test-playground/test-playground.md or ../test-teams/test-teams.md. For cloud deploy, see ../provision-deploy/provision-deploy.md. For troubleshooting, see ../troubleshoot/troubleshoot.md.
When to Use
- Building a new Slack bot, Teams bot, or dual-platform bot
- Adding Teams support to an existing Slack bot (or vice versa)
- Migrating a bot between platforms
- Deploying a bot to Azure or AWS
- Configuring AI model providers for a bot
- Converting UI between Block Kit and Adaptive Cards
- Bridging identity, events, files, or transport between platforms
- Making a Teams bot project compatible with Microsoft Agents Toolkit (m365agents.yml, env/, appPackage placeholders)
Procedure
Step 1: Determine project type
Assess whether the developer has an existing codebase or is starting fresh.
- New project → go to New Project Flow
- Existing project → go to Existing Project Flow
New Project Flow
1a: Platform selection
Ask the developer which platform(s) to support:
- Slack + Teams (dual-platform)
- Slack only
- Teams only
1b: Load the expert system
- Read experts/index.md — the root router.
- Execute the pre-task interview defined in that file.
- Route based on platform choice:
- Slack + Teams → Read experts/bridge/index.md. Load cross-platform-advisor.
- Slack only → Read experts/slack/index.md.
- Teams only → Read experts/teams/index.md.
1c: Architecture setup
- Read cross-platform-architecture (even for single-platform — establishes patterns for adding a second platform later).
- Let the domain router and advisor take over.
- Write a
PLAN.mdin the target project root with platform, features, experts loaded.
1d: Implementation
Follow the advisor's or domain router's output. Implement feature by feature:
- Pick the next feature from the prioritized list.
- Load the expert(s) specified for that feature.
- Implement using the expert's patterns and rules.
- Verify against the expert's pitfalls section.
Existing Project Flow
2a: Analyze the project
Run these four sub-analyses in parallel:
Detect language — Scan for package.json+tsconfig.json (TypeScript), pom.xml/build.gradle (Java), *.csproj/*.sln (C#), go.mod (Go), requirements.txt/pyproject.toml (Python), Gemfile (Ruby), Cargo.toml (Rust).
Detect current platform — Scan dependencies for SDK indicators:
- Slack:
@slack/bolt,@slack/web-api,slack_bolt,app.message,app.command,ack() - Teams:
@microsoft/teams-ai,botbuilder,TeamsActivityHandler,app.turn, Adaptive Cards
Detect features — Scan for slash commands, Block Kit/Adaptive Cards, action handlers, OAuth, file upload/download, scheduling, threading, AI/LLM calls, proactive messages.
Detect architecture — Scan for web framework (Express, Fastify, etc.), hosting target (Azure, AWS, Docker), cloud provider, architecture pattern (single bot, dual-bot, monolith).
2b: Language gate
Classify the detected language into SDK tiers:
| Tier | Languages | Guidance |
|---|---|---|
| 1: Full SDK | TypeScript / JavaScript | Full expert system available |
| 2: Adapt | Python | Both SDKs exist — adapt TS patterns. Load bolt-python, teams-python, python-cross-platform |
| 3: Split SDK | Java, C# | One platform has SDK, other needs REST. Load bolt-java or teams-dotnet + rest-only |
| 4: No SDK | Go, Ruby, Rust | REST-only for both. Load rest-only |
2c: Expert coverage gap analysis
- Read experts/analyzer.md.
- Execute the analyzer workflow: scan manifests, dependencies, source files.
- Cross-reference detected tech against existing experts.
- Present gap analysis — covered vs uncovered technologies.
2d: Build missing experts (if needed)
- Read experts/builder.md.
- For each gap: analyze project usage → read package source → draft expert → validate → wire into routing.
- Use experts/_expert-ts.md as the template.
2e: Load the expert system
- Read experts/index.md — the root router.
- Execute the pre-task interview, pre-filling with analysis results from 2a.
- Route based on detected platform and task intent:
- Has Slack, wants Teams → Bridge domain
- Has Teams, wants Slack → Bridge domain
- Has both → Route by task (bridge refinement, deploy, models, etc.)
- Has neither → Ask which platform(s) to target
- Load cross-platform-advisor if bridging. Feed analysis results into Phase 1.
2f: Architecture and implementation
- Read cross-platform-architecture.
- Write a
PLAN.mdwith analysis results, routing decisions, and feature migration order. - Implement feature by feature using the advisor's prioritized list.
Agents Toolkit Compatibility
For ATK-compatible project structure (m365agents.yml, env/ files, appPackage), see the parent skill:
- Parent SKILL.md — ATK CLI setup, sub-skill routing, workflow chains
- manifest-and-yaml.md — Project files, YAML config, env vars, .localConfigs flow
- commands.md — Package, validate, share, collaborate, environment management
- templates.md — All templates with language support
For Teams manifest schema and packaging, see runtime.manifest-ts.
Error Recovery
If the expert system fails to cover a topic:
- Read experts/fallback.md.
- Phase 1: Re-scan all domain routers for missed experts.
- Phase 2: Web-search for remaining knowledge gaps.
- Consider creating a new expert using experts/builder.md.
Expert Domains
| Domain | Index | Description |
|---|---|---|
| Slack | experts/slack/index.md | Bolt framework, events, OAuth, commands, UI, CLI |
| Teams | experts/teams/index.md | Teams AI SDK, Adaptive Cards, Graph, MCP, A2A, deploy |
| Bridge | experts/bridge/index.md | 27 cross-platform conversion experts (the core differentiator) |
| Deploy | experts/deploy/index.md | Azure & AWS deployment walkthroughs |
| Models | experts/models/index.md | AI model providers (OpenAI, Anthropic, Bedrock, etc.) |
| Convert | experts/convert/index.md | Language conversion to TypeScript |
| Security | experts/security/index.md | Input validation, secrets management |
Platform Comparison Docs
Reference guides for side-by-side platform comparison:
- UI Components — Block Kit vs Adaptive Cards
- Messaging & Commands
- Identity & Auth
- Interactive Responses
- Files & Links
- Middleware & Handlers
- Infrastructure
- Advanced Features
- Feature Gaps
- Workflow Scenarios — Message-native workflow patterns (triggers, state, logic, AI, visibility) for Teams bots
Signals
- GitHub stars
- 3k
- Forks
- 350
- Last commit
- Oct 2026
Ahel review
S4info
community integration, published by microsoft, not slack
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Item type
- skill
- Key
slack-to-teams- Source
- github.com/microsoft/skills
Related picks
Skill · akiojin
The pick for C#ccxt-csharp
Skill · ccxt
The pick for C#java-sdk-specialist
Skill · a5c-ai
The pick for Java110-java-maven-best-practices
Skill · jabrena
The pick for Javaduplicate-js
Skill · thedaviddias
The pick for JavaScriptmodern-javascript-patterns
Skill · sickn33
The pick for JavaScript