FlowLibs
Browse Cloud FlowsConnectorsAI ToolsDev ToolsPricingAboutContact
Dev Tools/Copilot Studio

Copilot Studio Cheat Sheet

Build agents that actually ship — grounded, governed, and able to act. Topics and nodes, generative vs classic orchestration, Power Fx in the conversation, variables and entities, knowledge sources and grounding, tools and actions, authentication, channels, ALM, and the analytics that tell you whether it works.

Copilot Studio26 min read·Updated 2026-06-16
Copilot StudioAgentsTopicsPower FxGenerative AIOrchestrationKnowledge SourcesEntitiesSlot FillingToolsAuthenticationChannelsALMAnalyticsPower Virtual Agents

On this page

  • Fundamentals
  • Orchestration: generative vs classic
  • Topics & nodes
  • Triggering topics
  • Variables & scope
  • Entities & slot filling
  • Power Fx in agents
  • Knowledge & grounding
  • Tools & actions
  • Authentication
  • Channels & publishing
  • ALM & environments
  • Analytics
  • Design best practices

Fundamentals

Copilot Studio is the low-code tool for building agents — conversational and autonomous AI assistants grounded in your data and able to act on it. An agent combines instructions, knowledge (what it can answer from), tools (what it can do), and topics (authored conversation paths). It builds on Power Platform, so agents live in environments, ship in solutions, and obey DLP. (Copilot Studio is the successor to Power Virtual Agents; older bots are now labelled classic and don’t support the generative features.)

  • Agent — the top-level thing you build and publish. New agents default to generative orchestration.
  • Topic — an authored slice of conversation on a canvas, made of nodes (message, question, condition, tool call…).
  • Knowledge — sources the agent searches to answer (SharePoint, Dataverse, files, public websites, web search…).
  • Tool — an action the agent can call (connector, agent flow, prompt, REST API, MCP server, computer use).
  • Orchestration — how the agent decides what to do next: generative (the model chooses) or classic (trigger phrases pick one topic).

Author the business-critical parts; let AI do the rest

The modern design pattern is *not* hundreds of rigid topics. Author topics for the flows that must be exact (auth, payments, consent, regulated wording), ground everything else in trusted knowledge, and let generative orchestration combine topics, tools, and knowledge for the long tail.

Orchestration: generative vs classic

Orchestration decides who controls the next step — the model or the author. Generative orchestration (default for new agents) lets the agent pick the best mix of topics, tools, knowledge, and other agents from their descriptions, auto-ask for missing inputs, and compose the reply. Classic orchestration matches the user’s message to one topic’s trigger phrases and runs exactly what you authored. Toggle it on the agent’s Overview page under Orchestration.

BehaviourGenerative orchestrationClassic orchestration
Topic selectionBy each topic’s descriptionBy matching trigger phrases
Tools / actionsAgent calls them by name + descriptionOnly when explicitly called from a topic
KnowledgeProactively searched to answerFallback when no topic matches (or called in a topic)
Multiple sourcesCombines topics + tools + knowledgeTries to pick one topic, falls back to knowledge
Asking for inputAuto-generates questions for missing inputsYou add Question nodes for every input
RespondingAuto-composes the responseYou author Message nodes (or call a tool)
Other agentsCan route to child / connected agentsNot applicable
How behaviour differs between the two modes.

Descriptions are the new trigger phrases

In generative mode a topic’s Trigger node becomes The agent chooses and selection rides entirely on the topic, tool, and knowledge descriptions. Write them like you’re briefing a colleague: what it does, when to use it, what it needs. Turning generative on for a classic agent auto-generates descriptions from trigger phrases — review them, don’t trust them blindly.

Pick classic when the path must be exact

  • Authentication and identity verification, consent capture, PCI / payment collection.
  • Regulatory or legal wording that must be delivered verbatim, in a fixed order.
  • DTMF menu flows and any journey where exact steps matter more than flexibility.
  • You can still use generative answers inside a classic agent as a fallback for unmatched questions.

Known limits before you flip to generative

With generative orchestration the Conversational boosting and Multiple Topics Matched system topics aren’t used, custom entities (closed-list / regex) aren’t yet supported as topic or tool *input* parameters (use a Question node), conversation history fed to the model is limited, and hyperlinks from knowledge render as plain text. Test thoroughly before turning it on for an existing agent.

Topics & nodes

A topic is a portion of a conversation defined on the authoring canvas as a graph of nodes. Agents start with system topics (essential behaviours you can customise but not create) and a few predefined custom topics (greeting, end of conversation…). Every topic you add is a custom topic. Under the hood a topic is an AdaptiveDialog you can also edit as YAML in the code editor or the VS Code extension.

11/11
NodeWhat it doesNotes
Send a messageShow text / rich content to the userSupports variables, Markdown, Adaptive Cards
Ask a questionPrompt the user and capture the answerIdentifies an entity → fills a variable (slot filling)
Add a conditionBranch the conversationSwitch to a Power Fx formula for complex logic
Set a variable valueAssign a variableUse a literal or a Power Fx formula
Add a toolCall a connector / flow / prompt / REST / MCPInputs + outputs map to variables
Create generative answersSearch & summarise knowledgeTopic-level grounding with citations
Ask with Adaptive CardCollect input via a cardJSON or a Power Fx formula
Topic managementRedirect / Go to another topicReuse bite-size topics; pass inputs/outputs
Send HTTP requestCall a REST endpoint directlyParse the response into a variable
Parse valueCoerce a value to a type / schemaTurn JSON into a typed record/table
End / Transfer conversationClose out or hand offTransfer escalates to a live agent

Key system topics

System topicPurpose
Conversation StartBegins the conversation automatically (on by default)
Greeting / Thank you / GoodbyeSocial niceties; Goodbye ends the conversation
EscalateHand off to a live agent
FallbackNo topic matched the user — try generative answers, then escalate
Conversational boostingGenerative answers over knowledge before fallback (classic mode)
Multiple Topics MatchedDisambiguation — the “did you mean?” prompt
End of ConversationTriggers the CSAT survey; mark resolution here
On Error / Reset ConversationError handling and full reset of variables
System topics handle the conversation’s plumbing — customise the nodes, but tread carefully.

Bite-size, reusable topics beat a few giants

Break logic into small topics and call them with Redirect so one fix updates every caller. Topics don’t all need trigger phrases — a redirect-only topic with input/output variables is the conversational equivalent of a function.

Never put a period in a topic name

You can’t export a solution containing an agent whose topic name has a period (.). It silently breaks ALM — keep names clean from day one.

Triggering topics

A topic can start four ways: from the user’s utterance (intent recognition via trigger phrases, classic), because the agent chooses it from its description (generative), from a Redirect in another topic, or from an event (conversation start, inactivity, custom event, an error, an autonomous trigger).

7/7
TriggerModeWhen it fires
Trigger phrases (intent)ClassicUser utterance matches the NLU model
The agent chooses (description)GenerativeModel selects the topic by its description
Redirect / Go to topicBothAnother topic explicitly calls this one
Conversation StartBothA new conversation begins
InactivityBothUser idle past the configured time
Activity received / Custom eventBothA channel event or custom signal arrives
On ErrorBothAn unhandled error occurs in the agent

Trigger-phrase hygiene (classic)

Give each topic 5–10 short, varied trigger phrases — keywords and questions, not long sentences. The match is fuzzy: “see store opening hours” still hits a topic trained on “check store hours.” You can bulk upload/replace phrases from a text file. For generic words like “request” or “issue,” split into more specific topics so triggering stays sharp.

Variables & scope

Variables store user responses and carry state. They live at four scopes. Question nodes auto-create an output variable of the right type; you can promote a topic variable to global, and pass variables in and out of topics and Power Automate (whole records and tables, not just primitives).

4/4
ScopeVisibilityPower Fx prefix
TopicOnly the topic that created it (default)Topic.
GlobalEvery topic in the agentGlobal.
SystemBuilt-in context, all topicsSystem.
EnvironmentPower Platform env var, read-onlyEnvironment.

Useful system variables

11/11
VariableTypeWhat it holds
Activity.TextstringThe most recent message from the user
Activity.Channel / ChannelIdchoice / stringThe channel the conversation is on
Activity.From.NamestringChannel display name of the sender
Conversation.IdstringUnique ID of the current conversation
Conversation.InTestModebooleanTrue when running in the test canvas
Conversation.LocalTimeZonestringUser’s IANA time zone
Bot.Name / Bot.Id / Bot.EnvironmentIdstringIdentity of the agent and its environment
LastMessage.TextstringThe previous user message
FallbackCountnumberTimes no topic matched (On Unknown Intent)
Error.Code / Error.MessagestringCurrent error detail (On Error trigger only)
User.DisplayName / User.IdstringThe signed-in user (when authenticated)

Some system variables are hidden — reach them with Power Fx

The variable picker doesn’t list every system variable. To use a hidden one, write a Power Fx formula and prefix it with System. — e.g. System.Conversation.Id or System.Activity.ChannelId.

Entities & slot filling

An entity is a type of information the NLU model extracts from a message (an email, a date, money, a person). Slot filling stores that extracted value into a variable — and lets the agent *skip* questions whose answers were already in the user’s opening line. “I’d like 3 large blue t-shirts” can fill quantity, size, and colour at once.

11/11
Prebuilt entityBase typeExample
EmailStringada@contoso.com
Date and timeDateTimenext Friday at 3pm
Number / IntegerNumber3, forty-two
MoneyNumber$100, a hundred dollars
Person nameStringAda Lovelace
Phone numberString+1 555 0100
City / State / Country or regionStringSeattle
BooleanBooleanyes / no
PercentageNumber20%
URLStringhttps://flowlibs.com
Multiple-choice optionsChoicea button selection

Custom entities

  • Closed list — a fixed set of values with optional synonyms (e.g. *Hiking* ← “trekking”, “mountaineering”).
  • Regular expression — values in a fixed format, ideal for IDs like INC000001 (^INC[0-9]{6}$).
  • Dynamic (open list) entity — values supplied at runtime from a table variable (≤ 100 entries); great for per-user lists like payees or accounts.
  • One of multiple entities — accept any of up to five entities at one turn; the answer is a *record* (Identifier.account, Identifier.phone…).

Proactive slot filling makes agents feel smart

Use entities in your Question nodes and the agent fills what it already heard and only asks for what’s missing. Need to force a prompt anyway? Set the Question node’s Skip question behaviour to Ask every time. Note: in generative orchestration, custom entities can’t be topic/tool inputs yet — collect them with a Question node.

Power Fx in agents

Power Fx is the Excel-like formula language for logic inside an agent — set a variable, evaluate a condition, parse a string, shape a table, or build a dynamic Adaptive Card. It’s the *data* layer of the conversation: there are no UI/behaviour functions here (no Navigate, SubmitForm, screens). You set state with the Set a variable value node, not a Set() call, and reference variables with their scope prefix.

5/5
WhereHowExample
Set a variable valueFormula tab → fxUpper(Text(Topic.customerName))
Condition node“Change to formula”Topic.bookingDate > DateAdd(Now(), 14)
Message / question textInline variable + functionsConcatenate("Hi ", Topic.name)
Adaptive CardSwitch JSON → FormulaBind Topic.Title into the card body
Knowledge / generative URLDynamic data sourceBuild a URL from a lookup table

Reference variables by scope

powerfx
System.Conversation.Id          // system variable
Global.gblUserName              // global variable
Topic.customerName             // topic variable
Environment.ApiBaseUrl         // Power Platform environment variable
Prefix every variable with its scope inside a formula.

Set a variable with a formula

powerfx
Upper(Text(Topic.customerName))
Normalise a captured name to upper case.

A condition as a formula

powerfx
Topic.bookingDate > DateAdd(Now(), 14)
Qualify for a discount when the booking is 14+ days out (DateAdd defaults to days).

US number formatting — commas separate arguments

Power Fx in Copilot Studio uses US-style numbers (the dot is the decimal point, as in 1,234.50), so the argument separator is a comma. Named formulas and user-defined functions can’t be generated by the in-product Copilot, and the Copilot helper only reuses variables that already exist.

Knowledge & grounding

Knowledge sources ground the agent’s answers in trusted content instead of the model’s general training. Add them on the Knowledge page (agent-wide) or in a Create generative answers node (topic-level). Internal files are chunked, vector-indexed, and stored in Dataverse; web and SharePoint use Bing/Graph search. Source limits differ by orchestration mode — and a generative-answers *node* always uses classic processing, so its public-site cap is 4 even when the agent is generative.

SourceGenerative limitClassic limitAuth
Public website (Bing)25 sites4 sitesNone
File upload / DocumentsAll documentsDataverse storageNone
SharePoint (Graph)25 URLs4 URLs / nodeUser Entra ID
Dataverse tablesUnlimited2 sources (≤15 tables each)Authenticate with Microsoft
Enterprise data (Graph connectors)Unlimited2 per agentUser Entra ID
Web search (real-time Bing)On/offNot availableNone
Real-time structured (Salesforce, ServiceNow, Azure SQL, Zendesk)Supported—Connector
Knowledge sources, capacity, and authentication (generative vs classic).
  • Public website URLs allow up to two path levels (contoso.com/engines/rotary); sites that need auth or aren’t Bing-indexed (wikis, SharePoint) don’t work as public sources.
  • Generative answers supported content: SharePoint modern pages, Word (.docx), PowerPoint (.pptx), and PDF.
  • Dataverse knowledge needs Dataverse search enabled and Authenticate with Microsoft; add synonyms and a glossary so the model maps business terms.
  • Citations are returned automatically; if you customise the answer (store it in a variable for a card) you must render citations yourself, especially in Teams.

Content moderation trades coverage for safety

Each generative-answers node has a moderation level from Lowest to Highest (default High). Lower levels return more answers but loosen the harmful-content filter; higher levels return fewer, stricter answers. If a node returns nothing, moderation is a prime suspect.

Descriptions drive knowledge selection too

In generative orchestration the agent decides *which* knowledge source to search from its description. Give each source a specific, jargon-aware description — it’s the difference between the model reaching for the right corpus and guessing.

Tools & actions

Tools let an agent *do* things, not just answer. In generative orchestration the agent calls tools automatically based on their name and description; in classic mode you call them from a node inside a topic. The same underlying tool (a flow, a connector) can be added to many agents, each with its own input/output wrapper.

7/7
Tool typeUse it forNotes
Connector (prebuilt)Thousands of Microsoft / third-party APIsPick a specific action; create a connection
Custom connectorYour own API via an OpenAPI definitionNeeds org view + share permission
Agent flowMulti-step automation in Power AutomateReturns data / performs actions
PromptSingle-turn model call with instructionsCan reference knowledge; bring your own model
REST APICall API endpoints directlySelect methods to expose as tools
Model Context Protocol (MCP)Connect to an MCP server’s tools/resourcesDiscoverable tool + resource list
Computer useDrive a GUI app with no APINeeds a provisioned machine

End-user vs maker credentials

Tools run in the user context and need authentication. End-user credentials mean each user only touches data they’re allowed to (best for personalised access). Maker-provided credentials use the author’s connection for shared resources. Anonymous (No authentication) agents can’t run tools that need user credentials.

A good description is most of the work

For a tool the agent might auto-call, the description is how it decides when and how. State plainly what the tool does and the questions that should trigger it. Let Copilot fill obvious inputs, but mark anything sensitive or ambiguous to be filled at authoring time.

Authentication

Set authentication under Settings → Security → Authentication. It controls who can chat, which variables you get, and which channels are available — and changes only take effect after you publish.

OptionBehaviourAuth variables
No authenticationAnyone with the link; public knowledge only; no user-credential toolsNone
Authenticate with MicrosoftEntra SSO; auto-config for Teams / M365 / Power AppsUser.DisplayName, User.Id (+Email, names)
Authenticate manuallyEntra V2 (federated / cert / secret) or Generic OAuth 2User.DisplayName, User.Id, User.IsLoggedIn, User.AccessToken
The three options and what they unlock.
  • Teams and all Microsoft channels require authentication — they can’t be anonymous. Use Microsoft auth, or manual auth if you also need other channels.
  • User.AccessToken / User.IsLoggedIn only exist with manual auth — pick it when a topic needs a token for a downstream API.
  • Federated credentials (secret-less, short-lived OIDC tokens) are the recommended manual setup over stored client secrets.
  • A Power Platform data policy can *require* authentication, which removes the No-authentication option entirely.

Don’t disable auth if tools depend on it

If any tool is configured to require user credentials, turning auth off at the agent level breaks it. Switching auth modes can also leave User.AccessToken / User.IsLoggedIn as Unknown variables — fix the topic errors before publishing.

Channels & publishing

You must publish before anyone can use the agent, and a single publish updates every connected channel — make a change, publish again, or users stay on the old version. Add channels after the first publish.

7/7
ChannelNotes
Teams + Microsoft 365 CopilotOrg users; requires authentication
SharePointMicrosoft channel; requires authentication
Demo websitePrebuilt page for stakeholder testing — not production
Custom websiteEmbed on your live site (Web Chat / React)
Mobile app / custom appVia the Direct Line API
WhatsApp / FacebookMessaging channels
Azure Bot Service channelsSlack, Telegram, Twilio, Line, Email, and more

Test chat vs demo website

Use the Test agent panel while building to watch the flow and variables (turn on tracking between topics). Share the demo website with teammates and stakeholders for feedback — but never with customers; it isn’t for production. Publishing to the org catalog (Teams / M365) can require admin approval in the Microsoft 365 admin center.

ALM & environments

Copilot Studio brings Power Platform ALM into the app. Every agent belongs to a solution; author unmanaged in DEV and import managed to TEST/PROD, or deploy with pipelines in one click. Keep config out of the agent so it travels cleanly between environments.

  • Solutions — set a preferred/default solution so new agents and components land in the right place; export/import or use pipelines from inside Copilot Studio.
  • Environment variables — store URLs, list names, and thresholds; reference them in Power Fx with Environment. so values rebind per environment.
  • Connection references — one per connector/purpose so credentials rotate in a single place across all flows and tools.
  • Environment strategy — at least DEV/TEST/PROD, governed with DLP and Managed Environments; lock down the Default environment.
  • Avoid hardcoding — no inline site URLs, keys, or emails; secrets belong in Key Vault via environment variables.

Build solution-aware from day one

Authoring inside a solution from the start makes the agent portable and reviewable. Retrofitting a finished agent into ALM later is painful — and a topic name with a period will block the very first export.

Analytics

Every published agent emits analytics from the first conversation. The unit is the session: a continuous interaction addressing the user’s questions within a 60-minute window (and ≤ 100 turns). Review these monthly and act on the gaps.

8/8
MetricWhat it measures
Total sessionsAnalytics sessions in the period (one chat can be several)
Engagement rate% of sessions that triggered a custom topic, Escalate, Fallback, or Conversational Boosting
Resolution rate% of engaged sessions resolved (confirmed at End of Conversation, or implied)
Escalation rate% of engaged sessions handed off (Escalate / Transfer)
Abandon rate% of engaged sessions idle 60 min with no resolution/escalation
Deflection rate% of requests self-served instead of escalated
CSATAverage End-of-Conversation survey score (1–5)
Reactions / Sentiment / ThemesThumbs (28 days), AI sentiment, AI-grouped question themes

Design conversations to end at End of Conversation

Resolution and CSAT are measured at the End of Conversation topic. Redirect successful paths there so the agent asks “Did that answer your question?” — otherwise good outcomes show up as *implied* or *abandoned* and your numbers understate the agent. Mine unrecognised utterances and themes to find topic-coverage gaps.

Design best practices

  • Lead with knowledge, author the exceptions. Ground broad Q&A in trusted sources; reserve topics for flows that must be exact.
  • Write descriptions like briefs. In generative mode, topic/tool/knowledge descriptions *are* the routing logic — be specific about what and when.
  • Keep topics bite-size and reusable. Redirect into shared topics; pass inputs/outputs; one fix propagates everywhere.
  • Use entities and slot filling so the agent asks only for what’s missing — fewer turns, happier users.
  • Centralise config in environment variables and connection references; never hardcode URLs, list names, or secrets.
  • Authenticate by default, apply least-privilege scopes on tools, and prefer federated credentials over stored secrets.
  • Test before you widen. Use the test canvas and demo website, validate negative paths, and re-check after flipping to generative orchestration.
  • Publish deliberately — every publish hits all channels; review, then ship.

Every cheat table above is searchable

Use the filter box on each table to jump straight to a node, variable, entity, or limit. This whole guide is generated from one structured dataset, so it stays in sync with the FlowLibs MCP reference.

← All Dev ToolsUse these in your AI assistant →
Spotted an error or have a suggestion? Let us know
FlowLibs

A curated library of production-grade Power Automate cloud flow patterns. Packaged as managed solutions, ready to import into your environment.

Library

  • Browse Cloud Flows
  • Approvals
  • Email & Notifications
  • Reporting
  • Security & Compliance

AI

  • AI Tools
  • MCP Server
  • Generate a Token

Resources

  • About
  • FAQ
  • Support
  • Status
  • Contact
  • Power Automate Docs
  • Connector Reference

© 2026 FlowLibs. All rights reserved.

  • Privacy
  • Terms
  • Refunds
  • Cookies
  • Acceptable Use
  • DMCA
Help