The office of Nordlicht Reisen GmbH, five people, all with an Entra account, all in Teams, should be able to ask the quote agent from T7 right where they already work. The question sounds simple, but it starts with a landscape that has been renamed many times: Copilot, Teams, two SDKs, a toolkit, a portal. This lesson is the map for it and the place where the course makes and justifies eight decisions for the Kladde. All following lessons hold to them; whoever changes one says so explicitly.
What you bring: T7 "Agents" and T8 "MCP" of the AI track, and with them K2; the course does not repeat what is taught there. It is not a school for Copilot Studio (low-code is delimited, not taught), not licensing advice and not a course for Office add-ins.
State of the checks
This lesson contains no code and nothing that was built or tested. Everything mentioned comes from Microsoft Learn, read when the lesson was written; the pages are listed under "Further reading". Where two pages contradict each other or a question stays open, it says open. No agent had a Microsoft 365 tenant; from lesson W7.2.2 on, exercises that need a tenant say so explicitly.
Two kinds of agents
Learn distinguishes two ways to build an agent for Microsoft 365:
| Declarative agent | Custom engine agent | |
|---|---|---|
| Orchestrator and models | those of Copilot | your own |
| Hosting | none needed, runs in Copilot | outside Microsoft 365, typically Azure, "at an additional cost" |
| Where it runs | in Copilot and in Microsoft 365 applications (Teams, Word, Excel, Outlook) | in Microsoft 365 and outside |
| Proactive messages | no, only on request | yes |
| Compliance, responsible AI | inherits that of Microsoft 365 | is yours to handle |
| Customization | instructions, knowledge, actions | full control |
Learn recommends the declarative agent when the work stays in Microsoft 365 applications and Copilot's orchestrator is enough, and the custom engine when you have your own business logic, your own models, use outside Microsoft 365 or proactive messages. Both read text that others have written (Teams messages, SharePoint, tool responses): text from outside in the sense of T6, whose defense is not taught again here.
Four ways to a custom engine agent
The page on custom engine agents compares four ways in a table:
| Copilot Studio | Teams SDK | Agents SDK | Foundry | |
|---|---|---|---|---|
| Approach | low-code | pro-code | pro-code | low-code or pro-code |
| Orchestrator | Copilot Studio | in the table: Teams AI Action Planner | your own (e.g., Semantic Kernel, LangChain) | your own |
| Channels | Copilot, Teams, partner apps, mobile apps, websites | Copilot, Teams | Copilot, Teams, partner apps, mobile apps, websites | Copilot and Teams, others only with your own integration |
| Publishing | organization | organization, store | organization, store, "10+ channels" | organization, store |
| Languages | not applicable | C#, TypeScript, JavaScript, Python | C#, JavaScript, Python | Python, C# |
Two more statements from the page: Only agents from Teams SDK, Agents SDK or Foundry get into the Commercial Marketplace store. And a Foundry agent can either be published from the Foundry portal (Azure Bot Service and Entra ID are set up in the process) or connected through the Agents Toolkit with an intermediate layer of your own.
- Agents SDK (lesson W7.1.2): scaffolding for channels, state and sign-in, not a model. C#, JavaScript, Python. Channels besides Teams: Learn names web chat, Slack, Facebook Messenger and Twilio on the reference page.
- Teams SDK: developer tool for Teams, for TypeScript, C# and Python, with Teams-specific features (mentions, reactions, Adaptive Cards, citations, labeling of AI content, feedback). Learn: Agents built with it run in Teams and in Copilot.
- Microsoft 365 Agents Toolkit: templates, automatic registration, debugging to Teams, Outlook and Copilot (command line
atk). The Agents Playground tests an agent locally, without a tenant. - Copilot Studio is the managed low-code product; the course does not teach it.
What is deprecated
Learn is clear here, and the date of the page counts for more than a team's memory:
- TeamsFx is no longer supported; for new work Learn names the Teams SDK and the Teams developer CLI. For the community, Learn names a deadline; check it before you plan existing projects.
- Teams AI Library is now called Teams SDK. The Bot Framework SDK (BotBuilder) is no longer supported as an SDK for new bots and agents; the name "Bot Framework" stays for the services behind it, such as Azure Bot Service.
- The Teams SDK has declared its own AI libraries (
ChatPromptand relatives) deprecated. For .NET, Learn shows the abstractions of Microsoft.Extensions.AI (IChatClient) and an agent framework of your choice.
Contradiction: The comparison page still describes the "Action Planner" as the built-in orchestrator of the Teams SDK. The pages of the Teams SDK call its AI libraries deprecated. The course follows the pages of the Teams SDK.
Preview and open points
| Subject | What Learn says | What the course makes of it |
|---|---|---|
| Custom engine agent in Copilot | the same manifest page calls it "public preview" in one place and "limited private preview" in another | open; check with Microsoft before use (lesson W7.3.1) |
| Agent Framework in the Agents SDK | the page calls it "public preview"; T7 uses a 1.x version | open: preview or not |
| Name of the playground | two packages and two commands on different pages | open, see W7.1.2 |
| Package version of the Agents SDK | 1.6.150 on the reference page, 1.9.205 on the API pages | take one version, all packages the same |
Read this table again before use. It is the line of the course that ages fastest.
Licenses and costs: questions, not answers
The course names no prices. It names the questions that an organization has to settle, following the Learn page on licensing and costs of Copilot extensions:
- Which license do the five people have: Microsoft 365 Copilot (add-on license) or Copilot Chat in the subscription?
- Declarative agent: a license or Copilot Chat access is needed. Pay-as-you-go billing (Copilot Credits) can arise as soon as the agent uses tenant data such as SharePoint or connectors.
- Custom engine agent: hosting outside, on Azure for example App Service, Azure Bot Service, Foundry. For people without a Copilot license, consumption can be added if the agent uses shared tenant data.
- Model calls: you pay your own. The cap belongs in operations (T10.3 "Budgets and caps").
- Development and test: Who has a test tenant, who may upload apps?
Decision note M-01 to M-08
The Kladde gets eight decisions. Each comes with its reasons from Learn; where a reason comes from the course itself, it says so.
| No. | Decision | Reasons |
|---|---|---|
| M-01 | Scaffolding: Microsoft 365 Agents SDK, not Teams SDK | The same agent should later also run in the Kladde's web chat; Learn lists the Agents SDK for several channels ("10+ channels", also websites and partner apps). The Teams SDK remains the alternative when only Teams counts and Teams-specific features are in the foreground. |
| M-02 | Orchestration: the ChatClientAgent from T7, unchanged |
T7 built it, tested it and secured it in code; Learn shows it behind an AgentApplication, and the SDK is explicitly not tied to an orchestrator. |
| M-03 | Channels Teams and the Copilot app; custom engine agent as the main path, plus a declarative agent only for read-only questions to Kladde.Mcp |
Sending and approvals need their own rules, and Learn names custom logic as a reason for the custom engine. The declarative agent runs in Copilot's orchestrator. |
| M-04 | Connection to the bot: managed identity (user-assigned) in Azure; client secret only locally | Learn: The client secret is "only for testing and development", the managed identity is recommended for production; K3 3.3.1. |
| M-05 | The person comes from the token, never from the text of a message or card; the tenant is the Entra tenant of Nordlicht Reisen GmbH | Rule of the course from T7.5 and T8.3: text is from outside. No sentence of Learn justifies it; lesson W7.2.2 shows where the SDK delivers the token. |
| M-06 | Graph only delegated, only Calendars.ReadBasic for "My appointments this week" (first assumed to be Calendars.Read, changed in W7.2.2); no application permissions |
least privilege, W4: delegated where it suffices. See the note below. |
| M-07 | Approval as an Adaptive Card; the code determines from the token who confirms; the hash of the draft from T7.3 is in the action; every card counts once | T7.3. Learn: The AgentApplication knows routes for actions of Adaptive Cards; the Teams SDK lists interactive cards as a feature. |
| M-08 | Sessions: one AgentSession per conversation (T7.5) in IStorage in blob storage; 30 days, deletable per person |
Learn: MemoryStorage only for development and test, blob or Cosmos DB for production. The 30 days are an assumption of the example, not advice. |
Notes while reading, without changing a decision:
- M-01: A reason that was in the planning ("Learn shows the connection with Agent Framework precisely for this SDK") carries less than it sounds: The Teams SDK page for C# also shows an agent with
IChatClient. M-01 rests on the first reason, the channels. Its price is in lesson W7.2.1: Streaming and the AI label are described for the Teams SDK in C#, not for the Agents SDK for .NET. - M-06: For "List calendarView", Learn names
Calendars.ReadBasicas the least privileged permission (delegated),Calendars.Readas a higher one. M-06 was meant as an assumption that lesson W7.2.2 checks against Learn. Lesson W7.2.2 therefore explicitly changes M-06 toCalendars.ReadBasic; which fields the tool still gets with it is named there as open. - M-03: The declarative agent only reads. That the server checks the permissions remains a matter of T8.3.
The template for your own decisions
Frage: Wo soll der Agent erreichbar sein, und für wen?
Anforderungen: (Kanäle, Aktionen mit Außenwirkung, Hosting, Betreiber)
Optionen: (zwei bis vier, mit der Quelle bei Learn)
Entscheidung: ...
Gründe: (je Grund: gelesen auf Seite X, oder: Regel des Kurses)
Preis: Was geben wir mit dieser Entscheidung auf?
Offen: Vorschau, Widersprüche, Lizenzfragen
Neu prüfen: Wann, und wer?
The "Preis" (price) item is usually missing from notes; it makes a decision comprehensible and later changeable with a reason.
Exercise 1: Deciding three cases
Without a tenant. For each case, decide with the template: declarative agent or custom engine, and for the custom engine, the way.
- 12 people in the company should be able to ask questions about vacation rules in Teams. The rules are in SharePoint; the agent should only answer.
- An insurance broker wants to offer the same advisory agent in Teams and on its website, with its own calculation logic and its own model.
- A service team wants an agent in Teams that answers @-mentions in group chats and looks up tickets, using Copilot's models.
Check: For each case there is a reason with a source, a "price" and a license question.
Solution 1
- Declarative. The work stays in Microsoft 365 (SharePoint, Teams), Copilot's orchestrator is enough, hosting is not needed. Price: customization only within the framework of Copilot. License question: Does the group have access to Copilot Chat; does consumption arise because the agent reads SharePoint?
- Custom engine, Agents SDK. Own logic, own model, website as the second channel; Learn lists the website for the Agents SDK. Price: own hosting, responsibility for compliance. License question: hosting and model costs.
- Declarative. Learn names this example (a helpdesk agent that answers @-mentions in Teams) itself for the declarative way. Price: tools only as actions within the framework of Copilot. Whether the connection to the ticket system works as a plugin is decided by lesson W7.3.2.
If your answers differ, that is fine as long as the reasons and the price hold.
Exercise 2: Rereading the state
Without a tenant. Read today the pages on root.copilotAgents, on "Use Semantic Kernel and Agent Framework in Agents SDK" and on "Legacy Teams app and agent development frameworks" and note: Does the preview statement still read as in the table? Has a name changed? What follows for M-01 to M-08?
Solution 2
There is no fixed solution; the result depends on the day you read. If only one line of the table "Preview and open points" changes, change the line, not the decision. A decision changes only when its reason falls away, and then as a new note with "Rechecked because ...". What you cannot settle stays open with the reason.
What you can do now
- You distinguish declarative agents and custom engine agents and justify the choice with hosting, orchestrator, channels and compliance.
- You compare Copilot Studio, Teams SDK, Agents SDK and Foundry according to Learn's table.
- You name what is deprecated, and you list preview and contradictions as open.
- You phrase license and cost questions instead of asserting prices.
- You read the decisions M-01 to M-08 with their reasons and write a note with "Preis" and "Offen".
Further reading
- Compare declarative and custom engine agents: the two kinds and the decision path.
- Custom engine agents for Microsoft 365 overview: the comparison table of the four ways.
- What is the Microsoft 365 Agents SDK and Teams SDK: the two SDKs.
- Legacy Teams app and agent development frameworks: what was replaced.
- Plan licensing and cost: kinds of licenses, hosting, consumption.
- root.copilotAgents object and List calendarView: preview state, permissions for M-06.
The Kladde: You have eight decisions with their reasons and know what is open. In lesson W7.1.2 "An agent with the Agents SDK" you build the project Kladde.M365 and let the first agent speak an echo.