Slack to Teams Expert System
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 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:
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.md in 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:
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.md with 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:
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:
Source: microsoft/skills → .github/plugins/microsoft-365-agents-toolkit/skills/teams-app-developer/slack-to-teams/SKILL.md
1---2name: slack-to-teams3description: 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, converting Block Kit to Adaptive Cards, identity/OAuth bridging, deploying bots to Azure or AWS, configuring AI model providers. DO NOT USE FOR: general web development, non-bot projects, standalone Teams development without Slack (use parent skill instead).4---567# Slack to Teams Expert System89A routed expert system with 100+ micro-expert files for migrating Slack bots to Teams and building cross-platform bots.1011> **Parent skill:** For ATK CLI setup and routing, see [../SKILL.md](../SKILL.md). For local testing, see [../test-playground/test-playground.md](../test-playground/test-playground.md) or [../test-teams/test-teams.md](../test-teams/test-teams.md). For cloud deploy, see [../provision-deploy/provision-deploy.md](../provision-deploy/provision-deploy.md). For troubleshooting, see [../troubleshoot/troubleshoot.md](../troubleshoot/troubleshoot.md).1213## When to Use1415- Building a new Slack bot, Teams bot, or dual-platform bot16- Adding Teams support to an existing Slack bot (or vice versa)17- Migrating a bot between platforms18- Deploying a bot to Azure or AWS19- Configuring AI model providers for a bot20- Converting UI between Block Kit and Adaptive Cards21- Bridging identity, events, files, or transport between platforms22- Making a Teams bot project compatible with Microsoft Agents Toolkit (m365agents.yml, env/, appPackage placeholders)2324## Procedure2526### Step 1: Determine project type2728Assess whether the developer has an existing codebase or is starting fresh.2930- **New project** → go to [New Project Flow](#new-project-flow)31- **Existing project** → go to [Existing Project Flow](#existing-project-flow)3233---3435### New Project Flow3637#### 1a: Platform selection3839Ask the developer which platform(s) to support:40- Slack + Teams (dual-platform)41- Slack only42- Teams only4344#### 1b: Load the expert system45461. Read [experts/index.md](../experts/index.md) — the root router.472. Execute the **pre-task interview** defined in that file.483. Route based on platform choice:49 - **Slack + Teams** → Read [experts/bridge/index.md](../experts/bridge/index.md). Load [cross-platform-advisor](../experts/bridge/cross-platform-advisor-ts.md).50 - **Slack only** → Read [experts/slack/index.md](../experts/slack/index.md).51 - **Teams only** → Read [experts/teams/index.md](../experts/teams/index.md).5253#### 1c: Architecture setup54551. Read [cross-platform-architecture](../experts/bridge/cross-platform-architecture-ts.md) (even for single-platform — establishes patterns for adding a second platform later).562. Let the domain router and advisor take over.573. Write a `PLAN.md` in the target project root with platform, features, experts loaded.5859#### 1d: Implementation6061Follow the advisor's or domain router's output. Implement feature by feature:621. Pick the next feature from the prioritized list.632. Load the expert(s) specified for that feature.643. Implement using the expert's patterns and rules.654. Verify against the expert's pitfalls section.6667---6869### Existing Project Flow7071#### 2a: Analyze the project7273Run these four sub-analyses **in parallel**:7475**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).7677**Detect current platform** — Scan dependencies for SDK indicators:78- Slack: `@slack/bolt`, `@slack/web-api`, `slack_bolt`, `app.message`, `app.command`, `ack()`79- Teams: `@microsoft/teams-ai`, `botbuilder`, `TeamsActivityHandler`, `app.turn`, Adaptive Cards8081**Detect features** — Scan for slash commands, Block Kit/Adaptive Cards, action handlers, OAuth, file upload/download, scheduling, threading, AI/LLM calls, proactive messages.8283**Detect architecture** — Scan for web framework (Express, Fastify, etc.), hosting target (Azure, AWS, Docker), cloud provider, architecture pattern (single bot, dual-bot, monolith).8485#### 2b: Language gate8687Classify the detected language into SDK tiers:8889| Tier | Languages | Guidance |90|---|---|---|91| **1: Full SDK** | TypeScript / JavaScript | Full expert system available |92| **2: Adapt** | Python | Both SDKs exist — adapt TS patterns. Load [bolt-python](../experts/slack/bolt-python.md), [teams-python](../experts/teams/teams-python.md), [python-cross-platform](../experts/bridge/python-cross-platform.md) |93| **3: Split SDK** | Java, C# | One platform has SDK, other needs REST. Load [bolt-java](../experts/slack/bolt-java.md) or [teams-dotnet](../experts/teams/teams-dotnet.md) + [rest-only](../experts/bridge/rest-only-integration-ts.md) |94| **4: No SDK** | Go, Ruby, Rust | REST-only for both. Load [rest-only](../experts/bridge/rest-only-integration-ts.md) |9596#### 2c: Expert coverage gap analysis97981. Read [experts/analyzer.md](../experts/analyzer.md).992. Execute the analyzer workflow: scan manifests, dependencies, source files.1003. Cross-reference detected tech against existing experts.1014. Present gap analysis — covered vs uncovered technologies.102103#### 2d: Build missing experts (if needed)1041051. Read [experts/builder.md](../experts/builder.md).1062. For each gap: analyze project usage → read package source → draft expert → validate → wire into routing.1073. Use [experts/_expert-ts.md](../experts/_expert-ts.md) as the template.108109#### 2e: Load the expert system1101111. Read [experts/index.md](../experts/index.md) — the root router.1122. Execute the pre-task interview, pre-filling with analysis results from 2a.1133. Route based on detected platform and task intent:114 - Has Slack, wants Teams → **Bridge** domain115 - Has Teams, wants Slack → **Bridge** domain116 - Has both → Route by task (bridge refinement, deploy, models, etc.)117 - Has neither → Ask which platform(s) to target1184. Load [cross-platform-advisor](../experts/bridge/cross-platform-advisor-ts.md) if bridging. Feed analysis results into Phase 1.119120#### 2f: Architecture and implementation1211221. Read [cross-platform-architecture](../experts/bridge/cross-platform-architecture-ts.md).1232. Write a `PLAN.md` with analysis results, routing decisions, and feature migration order.1243. Implement feature by feature using the advisor's prioritized list.125126## Agents Toolkit Compatibility127128For ATK-compatible project structure (m365agents.yml, env/ files, appPackage), see the parent skill:129- **[Parent SKILL.md](../SKILL.md)** — ATK CLI setup, sub-skill routing, workflow chains130- **[manifest-and-yaml.md](../toolkit/manifest-and-yaml.md)** — Project files, YAML config, env vars, .localConfigs flow131- **[commands.md](../toolkit/commands.md)** — Package, validate, share, collaborate, environment management132- **[templates.md](../toolkit/templates.md)** — All templates with language support133134For Teams manifest schema and packaging, see [runtime.manifest-ts](../experts/teams/runtime.manifest-ts.md).135136## Error Recovery137138If the expert system fails to cover a topic:1391. Read [experts/fallback.md](../experts/fallback.md).1402. Phase 1: Re-scan all domain routers for missed experts.1413. Phase 2: Web-search for remaining knowledge gaps.1424. Consider creating a new expert using [experts/builder.md](../experts/builder.md).143144## Expert Domains145146| Domain | Index | Description |147|---|---|---|148| Slack | [experts/slack/index.md](../experts/slack/index.md) | Bolt framework, events, OAuth, commands, UI, CLI |149| Teams | [experts/teams/index.md](../experts/teams/index.md) | Teams AI SDK, Adaptive Cards, Graph, MCP, A2A, deploy |150| Bridge | [experts/bridge/index.md](../experts/bridge/index.md) | 27 cross-platform conversion experts (the core differentiator) |151| Deploy | [experts/deploy/index.md](../experts/deploy/index.md) | Azure & AWS deployment walkthroughs |152| Models | [experts/models/index.md](../experts/models/index.md) | AI model providers (OpenAI, Anthropic, Bedrock, etc.) |153| Convert | [experts/convert/index.md](../experts/convert/index.md) | Language conversion to TypeScript |154| Security | [experts/security/index.md](../experts/security/index.md) | Input validation, secrets management |155156## Platform Comparison Docs157158Reference guides for side-by-side platform comparison:159160- [UI Components](../docs/ui-components.md) — Block Kit vs Adaptive Cards161- [Messaging & Commands](../docs/messaging-and-commands.md)162- [Identity & Auth](../docs/identity-and-auth.md)163- [Interactive Responses](../docs/interactive-responses.md)164- [Files & Links](../docs/files-and-links.md)165- [Middleware & Handlers](../docs/middleware-and-handlers.md)166- [Infrastructure](../docs/infrastructure.md)167- [Advanced Features](../docs/advanced-features.md)168- [Feature Gaps](../docs/feature-gaps.md)169- [Workflow Scenarios](../docs/workflows.md) — Message-native workflow patterns (triggers, state, logic, AI, visibility) for Teams bots170171---172173**Source:** [`microsoft/skills`](https://github.com/microsoft/skills) → `.github/plugins/microsoft-365-agents-toolkit/skills/teams-app-developer/slack-to-teams/SKILL.md`