Copilot Studio Agent Builder
Pick the harness deliberately, teach that choice in the guide, then produce a hands-on walkthrough that
takes a participant from an empty Copilot Studio environment to a working, tested, published agent. Audience: customer makers building their own
agent, following along at a keyboard.
This is a lab, not a briefing. The participant should never have to decide what to type. Every step names a
UI element and an action; every configuration value is supplied literally; every lab ends with something the
participant can see on screen to confirm it worked.
The hand-waving test. Read any instruction you wrote and ask: could someone do this without knowing anything
I haven't told them? "Add a scope guardrail" fails. "Paste this into the Instructions box: Only respond to questions about ..." passes. If a step tells the reader to decide, consider, ensure, review, map, assess,
determine, think about, or make sure — it is not a step, it is a topic heading with no content. Rewrite it as
an action, or move it to the settings table where a recommendation belongs.
When NOT to Use
- Cowork exercises / workshop tracks →
copilot-cowork-exercise-builder
- Demos for Copilot Chat, Researcher, Analyst, Agent Builder, Word/Excel/PowerPoint →
copilot-se-demo-builder
- Multi-agent designs — connected agents, parent/child agent hierarchies, agent-to-agent handoff. This skill
designs one agent. If a scenario seems to need a second agent, narrow the scope of the first instead and
note it as an open question for later.
- Azure AI Foundry / Agent Framework / pro-code agent development
- Actually provisioning, configuring, or publishing the agent in a live tenant
- Licensing quotes, pricing negotiation, or credit forecasting (point to the billing docs instead)
Build Sequence (why this order)
The eight exercises are ordered by dependency, not by topic. Two positions are the ones people get wrong:
- Solution first, before the agent exists. Every Copilot Studio agent is created inside a solution, and
anything created outside one lands in the default solution. An agent there cannot be exported and moved
between environments as a unit, and its components scatter among unrelated ones. So: create the solution in
exercise one, then create the agent from inside that solution in exercise two.
Never tell participants to set a preferred solution. It works for a lone maker and breaks down in a
shared environment: "preferred solution" redirects where new components are created, so a room of people
each setting their own produces collisions and confusion. Creating the agent from within the solution
achieves the same placement without touching a shared setting. For the same reason, have participants put
their own name or initials in the solution and agent names — the environment's lists are shared.
Note the security-role dependency (Environment Maker or System Customizer) in "Before you start", and give
participants without it a way to continue in the default solution rather than a dead end.
Keep it shallow. Create the solution, build in it, move on. Publisher prefixes, managed versus
unmanaged, solution layers and pipelines are ALM topics that belong to a later curriculum, not to a
participant's first agent. Two or three sentences of why, then the clicks.
- Boundaries before capability. Scope and grounding rules (instructions) come before knowledge; the web
boundary comes before tools; testing comes before publishing. An agent does not go wrong by writing a clumsy
sentence; it goes wrong by taking a confident wrong action against a real system — so the guide constrains what the agent may
do before connecting it to anything that can act.
Everything else follows from those: create → instructions → knowledge → web boundary → tools → test → publish.
Deeper capabilities (agent flows and automation, event triggers, adaptive cards, multi-modal prompts, Dataverse
grounding, MCP servers, connected agents) sit outside a first build. Name them in "Where to go next" rather
than folding them in — a first lab that ends with a working, tested, published agent beats one that covers more
and finishes nothing.
Further Training: Agent Academy
Copilot Studio Agent Academy (https://microsoft.github.io/agent-academy/) is Microsoft's free, open-source,
hands-on training program. Every guide ends by linking it as the next step. Two things to keep straight:
- It is a teaching resource, not a product authority. Microsoft Learn remains the only source for product
behavior, limits, setting names, and UI paths under the Hard Grounding Rule. Never cite Agent Academy for a
fact about how the product works — link it as a place to go and keep learning.
- What to link: Recruit is the entry course, one IT
support scenario end to end, in two paths (a 13-mission topic-based path, and a 10-mission instruction-driven
path). Special Ops are standalone single-topic labs
(MCP servers, RAG with Azure AI Search, custom skills) taken in any order. Always include the caveat that
Agent Academy supplies no environments or licenses, and that some missions need Dataverse, solution import
rights, or admin permissions.
Borrow its structure, never its voice. What transfers is the construction: one scenario carried across the
whole sequence, dependency-ordered steps, prerequisites stated before anyone starts, capability-based objectives,
and an end-state checklist of things the participant observed. What does NOT transfer is its presentation — no
codenames, mission numbering, difficulty ratings, badges, rank language, or emoji-led headings. Those belong to
Agent Academy. Guides from this skill use the customer's own voice and the house handout format.
Legacy Constructs (check before you write)
Copilot Studio has moved on from several patterns that still dominate older blog posts and training material.
Writing one into a guide dates it instantly and it will not match the participant's screen. Before describing
any authoring mechanism, confirm it against current Learn rather than recall:
- Topic trigger phrases are classic orchestration. Generative orchestration is the default, and it routes on
the topic's name and trigger description. The phrases option only appears once orchestration is off.
- Topics as a reason to pick the standard harness. Topics are usable there and worth teaching as a technique,
but current migration guidance translates authored conversational paths into instructions and skills
rather than porting them. Justify the harness on the work — question-set breadth, volume and billing model,
file and computation needs, what the org already runs — never on "you need topics".
- Spreadsheets as unstructured knowledge. Semantic search has limitations for cell indexing, so retrieval
alone answers lookups unreliably and arithmetic worse. On the standard harness, re-cast tabular content as
the register or log a business would circulate, or route it to Dataverse/Azure SQL or a connector tool. On the
GitHub Copilot harness this is not a constraint: the Agent Sandbox runs real code over files. See below.
- "Agents cannot do arithmetic." Out of date on the GitHub Copilot harness. Its Agent Sandbox is an isolated
Linux/Python workspace, on by default, with pandas, numpy, matplotlib, openpyxl and similar preinstalled;
the orchestrator writes and runs scripts when a task needs exact computation, parsing, validation or file
generation, and can emit charts and Office files. No outbound internet, so external calls still go through
tools and knowledge. The rule to teach is not never calculate but never calculate by reading — compute
it, or say you could not. (Classic Code Interpreter on the standard harness is the limited preview feature:
one file per prompt, no multi-turn, admin-enabled, not callable from a topic.)
- Positioning the reasoning harness as the unreliable one. Modern agents are highly adherent to their
instructions. What differs between harnesses is what the agent can reach for, not how faithfully it follows
what you wrote. Never justify a harness choice with an unfounded claim about answer consistency.
- When in doubt, search Learn for the mechanism and read the note at the top of the page: most articles state
which harness and which orchestration mode they describe.
Hard Grounding Rule
Copilot Studio changes fast. Never assert a product behavior, limit, setting name, or UI location from memory.
Before writing the guide, re-verify anything version-sensitive against learn.microsoft.com with web_fetch /
web_search — especially: harness capability differences, knowledge source limits, orchestration settings, tool
counts, and publishing paths. references/harness-matrix.md is the doc-grounded baseline; treat entries older
than the current quarter as needing a re-check. If a check fails, say the detail is unverified rather than guessing.
Workflow
Resolve the scenario. Capture: business outcome, users, where they'll use the agent, what data grounds it,
what actions it must take, and whether it runs on request or on a trigger. If the user references a customer,
meeting, or document, look it up (m365_search-SearchM365, sharepoint_onedrive-ReadFileContent) rather
than asking. Ask at most one question via core-AskUserQuestion when the harness choice is genuinely blocked.
Pick the harness, and put the reasoning in the guide. Use
references/harness-matrix.md. The guide carries a "Choosing the runtime"
section: what a harness is, the three-way comparison, why this build sits on the harness you picked and
what it gives up, the warning that GitHub Copilot and standard harness agents cannot be converted to each
other after creation, and — where the build is on the GitHub Copilot harness — that usage-based billing
covers building, testing and evaluating, not only production traffic.
Give the reader a rule they can reuse: if you can write the answer down in advance, author it on the
standard harness; if you can only write down how to work the answer out, you need the reasoning runtime.
Scope the design to a single agent: one set of instructions, one knowledge set, one tool set — unless the
user asks for a build per harness, in which case produce one track each and keep the data and scenario shared.
Write ONE lab made of eight exercises. The deliverable is a single lab producing a single working
agent; the exercises are its parts, never eight standalone labs. Each adds one capability to the same
agent, in this order — the sequence is load-bearing, see Build Sequence below:
solution → create agent → instructions → knowledge → web boundary → tools → test → publish.
Keep each exercise to what the participant must do. Platform machinery they are not configuring (publisher
prefixes, solution layers, managed vs unmanaged, ALM pipelines) is a distraction inside a first build — one
sentence of rationale, then the steps.
Use the click paths and copy-ready text in references/lab-patterns.md and the
coverage checklist in references/build-checklists.md — the checklist says
what must be covered, the lab patterns say how to write it as steps. Every exercise carries Goal, Steps,
Enter this, and Check it worked — an exercise missing that last one is not finished. Add "If it didn't"
only where the failure is likely and fixable from the keyboard; omit it rather than padding.
Write the agent's actual instruction text, knowledge source names and descriptions, and tool names for the
scenario — do not tell the participant to compose their own. The instructions exercise always includes the
Microsoft 365 Copilot refinement prompt from the lab patterns, with its caution about leaving citation and
formatting rules alone.
Verify every product claim and every UI path against Microsoft Learn (Hard Grounding Rule). A click path
you cannot verify gets written as a step and marked [Verify] — never invented. Collect the full URLs
you actually fetched, not just page titles; every lab carries at least one, and the Sources table links them.
Render the guide. Invoke copilot-exercise-html-formatter and hand it the content; save to
output/<agent-name>-build-guide.html. Never hand-roll the HTML. Confirm with Glob output/**/* before
telling the user it's ready.
Then run both sweeps on the rendered file:
- Voice: grep for
facilitat, the room, workshop, agenda, Day One, Day Two, we , I ,
you asked, as discussed. (Harness and credit content is expected in the guide — do not strip it.)
- Hand-waving: grep for
consider, decide, ensure, make sure, review the, map each, assess,
determine, think about, as appropriate, as needed. Each hit inside a lab step is a defect — rewrite
it as an action or move it to the settings table. Then confirm every lab has a "Check it worked" and that
every instruction, description, or configuration value the participant must enter appears literally in a
copy block. Do not add a "If it didn't" block for a failure the participant cannot act on.
A guide that reads like chat output, or that tells the participant to figure something out, is a failed
deliverable even if every fact in it is correct.
Summarize in chat: harness pick + reason, the 3-5 decisions that most affect quality, and open questions
the customer must answer (data access, authentication, admin approvals). This is also where any critique of
the customer's existing materials goes — never in the artifact.
Things Builders Must Not Miss
Call these out explicitly in every guide — they are the common failure points:
- Web knowledge is two different things. A public website knowledge source restricts results to URLs you
list; the separate Web Search / "Use information from the web" setting searches everything Bing indexes and
interleaves those results. Recommend a default per scenario and state the data-boundary implication.
- Grounding is done through instructions, not the ungrounded-responses toggle. Tell the agent in its
instructions to answer only from its configured sources, always cite, and say so when the sources don't cover
the question. Never put "turn off Allow ungrounded responses" in a guide — with it off an answer is
returned only when it carries a citation, and because models omit citations unpredictably, correct answers
vanish intermittently. That is an unteachable failure: it looks like a broken agent, it is not reproducible on
demand, and diagnosing it derails a session. Leave the setting alone and keep it out of the settings table.
- Explain retrieval before configuring it. The knowledge exercise opens with a short plain-language account
of how the agent actually answers: rewrite the query, retrieve roughly the top three results per source,
summarize with citations, validate. Then the distinction people get wrong — documents return passages, while
structured sources (Dataverse, Azure SQL) turn the question into a query over rows, which is the only way a
"how many / total / top five" question is answerable. Both are knowledge and both are read-only: knowledge
informs the answer, a tool takes the action. See references/lab-patterns.md for the wording.
- Instruction sets restart numbering under each heading, and every never is a guardrail regardless of
where it felt natural to write it. Invent no labelling scheme — no letter prefixes, no codes; a reader should
not have to learn a notation. Cross-reference a line by what it says, not by its number. See
references/lab-patterns.md.
- Descriptions are routing logic. Tool, knowledge, topic, and agent names and descriptions are what the
orchestrator reads to choose. A vague description is a routing bug, not a cosmetic one.
- Instructions can't do everything. Instructions steer summarization and conversational flow — not citation
format, retrieval logic, Adaptive Card triggering, or the fallback message. Route those to the right surface.
- Tool count discipline. Keep the tool set small and purposeful — a handful of well-described tools
outperforms a long list. If the scope keeps growing, narrow the agent rather than adding tools.
- Tool authentication is a design decision and belongs in a lab step: end-user credentials preserve per-user
permissions, maker-provided credentials share one identity. Agent-level authentication is not — it already
defaults to Authenticate with Microsoft, so a step confirming that is a stop with no action behind it. Put it
in the settings reference as "leave at the default" and move on.
- Untrusted content is an attack surface. Agents that read email, tickets, or web content can be prompt-
injected. Constrain which tools may run after reading a knowledge source and which recipients/parameters are
allowed; consider requiring confirmation before consequential tools run.
- Publish is a separate step from build, and channel availability may be admin-gated.
Default Tool Shape
Most single-agent scenarios need one or two actions, not a toolbox. Start here and justify anything beyond it:
- Send an email — the Office 365 Outlook connector is the common case. Pair it with an explicit recipient
constraint in the instructions, rich-text formatting for the body, and confirmation before running when the
message goes to anyone outside a known list.
- An agent flow — for a multi-step or system-of-record action (create a record, look something up, chain a
couple of steps) that shouldn't be left to the model.
- Then, only if the scenario demands it: prompt, REST API, MCP server, custom connector, or computer use.
Name each tool for the action it performs and describe when the agent should use it — that description is what
the orchestrator routes on. Supply the actual name and description text in the guide; a participant should
paste them, not invent them.
Artifact Voice (binding)
The HTML guide is a standalone document for the customer. It must read as though it were written for them
from scratch, with no trace of the conversation that produced it and no delivery-team scaffolding.
Keep OUT of the artifact — put these in the chat reply instead:
- Facilitator and delivery notes. No "say this out loud", "give the room", "before the room clicks", no
references to sessions, days, agendas, blocks, rungs, breaks, or who presents what.
- Chat echo. No "as we discussed", "you asked", "here's what I found", "this test run", no first person
(I / we / let's), no addressing the requester rather than the reader.
- Review commentary on the customer's own materials. Findings about their deck, agenda, or plan are
chat-reply content. Only product constraints a builder must act on belong in the artifact, stated as
constraints, never as critique of their document.
- Process narration. No mention of tools used, files read, folders, searches, or how the guide was built.
Harness content is NOT in this list. Name the harness, compare the three, justify the pick, and state the
convertibility and credit consequences — in the guide, not only in chat. What still stays out is sales framing
around it: licensing quotes, credit forecasts, and roadmap.
Second person addressed to the builder ("add the source you want the agent to search") is correct and
expected — that is how product documentation reads. Second person addressed to the requester is not.
Every heading must survive the test: would this heading make sense to someone who has never seen the request?
"Open Questions for Halliburton" fails; "Decisions Required Before Build" passes.
Output Format
The HTML guide, in this order:
- Header strip — a small table: time estimate, exercise count, products used, and what access the reader
must already have. "You need" means entitlements and permissions that can block them (environment, licence,
role) — never audience notes like "no prior experience", which cannot block anyone and waste the column
- The scenario — the business problem in two or three sentences, then what the finished agent does
- What you will be able to do — 5-8 capability statements, each an ability gained ("diagnose why the agent
is not finding what you expect"), never a topic covered
- Choosing the runtime — what a harness is, the three-way comparison table, why this build sits on the
harness picked and what it trades away, the non-convertibility warning, and credit consumption where the
GitHub Copilot harness is used. Place it before the exercises: it is a design decision, not an appendix
- Before you start — split in two: access and licensing (the environment, the licences, the security
role) and content and test material. Name the specific entitlements, not a general "access to the
product": tenant-level access and access inside a given environment are different things, and conflating
them strands people on the day. Say which exercise each item blocks, and give a fallback where one exists
- Exercises, in build order, each with:
- Goal — one sentence
- Steps — numbered, each starting with a UI verb, naming the page and control
- Enter this — copy blocks holding the literal text: agent description, instruction text, knowledge source
names and descriptions, tool names and descriptions
- Check it worked — what appears on screen
- If it didn't — likeliest cause and fix, where the failure is likely and fixable
- What you built — a checklist restating each capability as something the participant observed, plus the
instruction to return to the exercise that produced any line that is not true
- Settings reference — setting, where it lives, recommended value, what the other value does. This is where
recommendations belong, so the exercises stay imperative
- Test prompts — 5-8 to run against the finished agent, at least two the agent should refuse
- Before you share it — auth, data boundary, admin dependencies, monitoring, publish sequence
- Decisions required before build — what the owning organization must confirm (data scope, connectors,
approved recipients, publishing permissions, review owner). Not the harness pick, which the guide makes.
- Sources — a two-column table: which exercise used it, and the page as a live hyperlink plus the bare
URL in visible text (printed handouts lose the anchor). Never a bare
list of page titles — a reader whose screen doesn't match needs the authoritative page in one click.
- Where to go next — link Copilot Studio Agent Academy (https://microsoft.github.io/agent-academy/) with a
one-line description of Recruit and Special Ops, and the caveat that it supplies no environments or licenses
Copy blocks carry only what the participant pastes into Copilot Studio — instruction text, descriptions,
prompts. Never put UI navigation inside a copy block.
Mark anything unverified as [Verify]. Use placeholders like [Customer to confirm] — never invent tenant
details, limits, license entitlements, or numbers.
Guardrails
- Ground every product claim in a fetched Microsoft Learn page; no memory-sourced specifics.
- Do not fabricate customer names, data sources, connector availability, or licensing.
- Recommend one harness per build and say why in the guide; do not hedge across all three.
- Never ship a guide whose harness pick is unexplained, and never omit the non-convertibility warning: the
choice is fixed at creation and is the most expensive thing in the build to get wrong.
- Every lab step is an action a participant performs, not a decision they must make. Recommendations live in the
settings reference; steps stay imperative.
- Never ship a lab without a "Check it worked", and never tell a participant to write text the guide could have
supplied.
- Never write a step that assumes an empty field. Where the product has already populated something — generated
instructions, a default topic, a suggested source — say so, say whether to replace or keep it, and say why.
- Every source is a clickable link with its URL also visible as text. A source list without URLs is a dead end.
- Assume a shared environment. Multiple participants build in the same Power Platform environment, so never
instruct a step that changes environment-wide or account-level defaults (preferred solution being the main
one). Prefer per-object placement, and name objects with the participant's own initials so shared lists stay
navigable.
- Show the product at its best, honestly. Never build an exercise around a pattern the product handles
poorly and then caveat it. If a guide needs a paragraph warning the reader not to trust the agent, change
what the exercise asks for instead of lengthening the warning. Equally, never imply a capability the
documentation does not support: aggregate arithmetic over a document knowledge source is the standing example.
- Never create, modify, or publish a live agent — this skill produces guidance only.
- Include the security/prompt-injection and authentication items in every guide, even short ones.
- The artifact never references the conversation, the requester, the delivery team, or how it was produced.
Ship a document, not a transcript.
1---2name: copilot-studio-agent-builder3description: Picks the right harness for a single Microsoft Copilot Studio agent, then produces a styled HTML hands-on walkthrough taking a participant from an empty environment to a working agent: numbered click-path exercises, copy-ready instruction text, knowledge (including web knowledge), tools, test prompts, and publishing. Use when the user asks to "build a Copilot Studio agent", "which harness should I use", "add knowledge to my agent", "add tools to my agent", "write agent instructions", or "publish my agent to Microsoft 365 Copilot". Do NOT use for Copilot Cowork exercises (use copilot-cowork-exercise-builder), other Copilot surface demos (use copilot-se-demo-builder), or to provision the agent — this produces the guide, not the agent.4---56# Copilot Studio Agent Builder78Pick the harness deliberately, teach that choice in the guide, then produce a **hands-on walkthrough** that9takes a participant from an empty Copilot Studio environment to a working, tested, published agent. Audience: customer makers building their own10agent, following along at a keyboard.1112**This is a lab, not a briefing.** The participant should never have to decide what to type. Every step names a13UI element and an action; every configuration value is supplied literally; every lab ends with something the14participant can see on screen to confirm it worked.1516**The hand-waving test.** Read any instruction you wrote and ask: *could someone do this without knowing anything17I haven't told them?* "Add a scope guardrail" fails. "Paste this into the Instructions box: `Only respond to18questions about ...`" passes. If a step tells the reader to *decide, consider, ensure, review, map, assess,19determine, think about,* or *make sure* — it is not a step, it is a topic heading with no content. Rewrite it as20an action, or move it to the settings table where a recommendation belongs.2122## When NOT to Use2324- Cowork exercises / workshop tracks → `copilot-cowork-exercise-builder`25- Demos for Copilot Chat, Researcher, Analyst, Agent Builder, Word/Excel/PowerPoint → `copilot-se-demo-builder`26- Multi-agent designs — connected agents, parent/child agent hierarchies, agent-to-agent handoff. This skill27 designs **one** agent. If a scenario seems to need a second agent, narrow the scope of the first instead and28 note it as an open question for later.29- Azure AI Foundry / Agent Framework / pro-code agent development30- Actually provisioning, configuring, or publishing the agent in a live tenant31- Licensing quotes, pricing negotiation, or credit forecasting (point to the billing docs instead)3233## Build Sequence (why this order)3435The eight exercises are ordered by dependency, not by topic. Two positions are the ones people get wrong:36371. **Solution first, before the agent exists.** Every Copilot Studio agent is created inside a solution, and38 anything created outside one lands in the *default* solution. An agent there cannot be exported and moved39 between environments as a unit, and its components scatter among unrelated ones. So: create the solution in40 exercise one, then **create the agent from inside that solution** in exercise two.41 **Never tell participants to set a preferred solution.** It works for a lone maker and breaks down in a42 shared environment: "preferred solution" redirects where *new components* are created, so a room of people43 each setting their own produces collisions and confusion. Creating the agent from within the solution44 achieves the same placement without touching a shared setting. For the same reason, have participants put45 their own name or initials in the solution and agent names — the environment's lists are shared.46 Note the security-role dependency (Environment Maker or System Customizer) in "Before you start", and give47 participants without it a way to continue in the default solution rather than a dead end.48 **Keep it shallow.** Create the solution, build in it, move on. Publisher prefixes, managed versus49 unmanaged, solution layers and pipelines are ALM topics that belong to a later curriculum, not to a50 participant's first agent. Two or three sentences of why, then the clicks.512. **Boundaries before capability.** Scope and grounding rules (instructions) come before knowledge; the web52 boundary comes before tools; testing comes before publishing. An agent does not go wrong by writing a clumsy53 sentence; it goes wrong by taking a confident wrong action against a real system — so the guide constrains what the agent may54 do *before* connecting it to anything that can act.5556Everything else follows from those: create → instructions → knowledge → web boundary → tools → test → publish.5758Deeper capabilities (agent flows and automation, event triggers, adaptive cards, multi-modal prompts, Dataverse59grounding, MCP servers, connected agents) sit **outside** a first build. Name them in "Where to go next" rather60than folding them in — a first lab that ends with a working, tested, published agent beats one that covers more61and finishes nothing.6263## Further Training: Agent Academy6465**Copilot Studio Agent Academy** (https://microsoft.github.io/agent-academy/) is Microsoft's free, open-source,66hands-on training program. Every guide ends by linking it as the next step. Two things to keep straight:6768- **It is a teaching resource, not a product authority.** Microsoft Learn remains the only source for product69 behavior, limits, setting names, and UI paths under the Hard Grounding Rule. Never cite Agent Academy for a70 fact about how the product works — link it as a place to go and keep learning.71- **What to link:** [Recruit](https://microsoft.github.io/agent-academy/recruit/) is the entry course, one IT72 support scenario end to end, in two paths (a 13-mission topic-based path, and a 10-mission instruction-driven73 path). [Special Ops](https://microsoft.github.io/agent-academy/special-ops/) are standalone single-topic labs74 (MCP servers, RAG with Azure AI Search, custom skills) taken in any order. Always include the caveat that75 Agent Academy supplies no environments or licenses, and that some missions need Dataverse, solution import76 rights, or admin permissions.7778**Borrow its structure, never its voice.** What transfers is the construction: one scenario carried across the79whole sequence, dependency-ordered steps, prerequisites stated before anyone starts, capability-based objectives,80and an end-state checklist of things the participant observed. What does NOT transfer is its presentation — no81codenames, mission numbering, difficulty ratings, badges, rank language, or emoji-led headings. Those belong to82Agent Academy. Guides from this skill use the customer's own voice and the house handout format.8384## Legacy Constructs (check before you write)8586Copilot Studio has moved on from several patterns that still dominate older blog posts and training material.87Writing one into a guide dates it instantly and it will not match the participant's screen. Before describing88any authoring mechanism, confirm it against current Learn rather than recall:8990- **Topic trigger phrases** are classic orchestration. Generative orchestration is the default, and it routes on91 the topic's **name and trigger description**. The phrases option only appears once orchestration is off.92- **Topics as a reason to pick the standard harness.** Topics are usable there and worth teaching as a technique,93 but current migration guidance translates authored conversational paths into **instructions and skills**94 rather than porting them. Justify the harness on the work — question-set breadth, volume and billing model,95 file and computation needs, what the org already runs — never on "you need topics".96- **Spreadsheets as unstructured knowledge.** Semantic search has limitations for cell indexing, so retrieval97 alone answers lookups unreliably and arithmetic worse. On the **standard harness**, re-cast tabular content as98 the register or log a business would circulate, or route it to Dataverse/Azure SQL or a connector tool. On the99 **GitHub Copilot harness this is not a constraint**: the Agent Sandbox runs real code over files. See below.100- **"Agents cannot do arithmetic."** Out of date on the GitHub Copilot harness. Its Agent Sandbox is an isolated101 Linux/Python workspace, **on by default**, with pandas, numpy, matplotlib, openpyxl and similar preinstalled;102 the orchestrator writes and runs scripts when a task needs exact computation, parsing, validation or file103 generation, and can emit charts and Office files. No outbound internet, so external calls still go through104 tools and knowledge. The rule to teach is not *never calculate* but **never calculate by reading** — compute105 it, or say you could not. (Classic Code Interpreter on the standard harness is the limited preview feature:106 one file per prompt, no multi-turn, admin-enabled, not callable from a topic.)107- **Positioning the reasoning harness as the unreliable one.** Modern agents are highly adherent to their108 instructions. What differs between harnesses is what the agent can reach for, not how faithfully it follows109 what you wrote. Never justify a harness choice with an unfounded claim about answer consistency.110- When in doubt, search Learn for the mechanism and read the note at the top of the page: most articles state111 which harness and which orchestration mode they describe.112113## Hard Grounding Rule114115Copilot Studio changes fast. **Never assert a product behavior, limit, setting name, or UI location from memory.**116Before writing the guide, re-verify anything version-sensitive against `learn.microsoft.com` with `web_fetch` /117`web_search` — especially: harness capability differences, knowledge source limits, orchestration settings, tool118counts, and publishing paths. [references/harness-matrix.md](references/harness-matrix.md) is the doc-grounded baseline; treat entries older119than the current quarter as needing a re-check. If a check fails, say the detail is unverified rather than guessing.120121## Workflow1221231. **Resolve the scenario.** Capture: business outcome, users, where they'll use the agent, what data grounds it,124 what actions it must take, and whether it runs on request or on a trigger. If the user references a customer,125 meeting, or document, look it up (`m365_search-SearchM365`, `sharepoint_onedrive-ReadFileContent`) rather126 than asking. Ask at most one question via `core-AskUserQuestion` when the harness choice is genuinely blocked.1272. **Pick the harness, and put the reasoning in the guide.** Use128 [references/harness-matrix.md](references/harness-matrix.md). The guide carries a "Choosing the runtime"129 section: what a harness is, the three-way comparison, **why this build sits on the harness you picked and130 what it gives up**, the warning that GitHub Copilot and standard harness agents **cannot be converted to each131 other** after creation, and — where the build is on the GitHub Copilot harness — that usage-based billing132 covers building, testing and evaluating, not only production traffic.133 Give the reader a rule they can reuse: *if you can write the answer down in advance, author it on the134 standard harness; if you can only write down how to work the answer out, you need the reasoning runtime.*135 Scope the design to a **single agent**: one set of instructions, one knowledge set, one tool set — unless the136 user asks for a build per harness, in which case produce one track each and keep the data and scenario shared.1373. **Write ONE lab made of eight exercises.** The deliverable is a single lab producing a single working138 agent; the exercises are its parts, never eight standalone labs. Each adds one capability to the **same**139 agent, in this order — the sequence is load-bearing, see Build Sequence below:140 solution → create agent → instructions → knowledge → web boundary → tools → test → publish.141 Keep each exercise to what the participant must *do*. Platform machinery they are not configuring (publisher142 prefixes, solution layers, managed vs unmanaged, ALM pipelines) is a distraction inside a first build — one143 sentence of rationale, then the steps.144 Use the click paths and copy-ready text in [references/lab-patterns.md](references/lab-patterns.md) and the145 coverage checklist in [references/build-checklists.md](references/build-checklists.md) — the checklist says146 *what must be covered*, the lab patterns say *how to write it as steps*. Every exercise carries Goal, Steps,147 Enter this, and **Check it worked** — an exercise missing that last one is not finished. Add "If it didn't"148 only where the failure is likely and fixable from the keyboard; omit it rather than padding.149 Write the agent's actual instruction text, knowledge source names and descriptions, and tool names for the150 scenario — do not tell the participant to compose their own. The instructions exercise always includes the151 Microsoft 365 Copilot refinement prompt from the lab patterns, with its caution about leaving citation and152 formatting rules alone.1534. **Verify** every product claim and every UI path against Microsoft Learn (Hard Grounding Rule). A click path154 you cannot verify gets written as a step and marked **[Verify]** — never invented. Collect the **full URLs**155 you actually fetched, not just page titles; every lab carries at least one, and the Sources table links them.1565. **Render the guide.** Invoke `copilot-exercise-html-formatter` and hand it the content; save to157 `output/<agent-name>-build-guide.html`. Never hand-roll the HTML. Confirm with `Glob output/**/*` before158 telling the user it's ready.159 **Then run both sweeps on the rendered file:**160 - *Voice:* grep for `facilitat`, `the room`, `workshop`, `agenda`, `Day One`, `Day Two`, `we `, `I `,161 `you asked`, `as discussed`. (Harness and credit content is expected in the guide — do not strip it.)162 - *Hand-waving:* grep for `consider`, `decide`, `ensure`, `make sure`, `review the`, `map each`, `assess`,163 `determine`, `think about`, `as appropriate`, `as needed`. Each hit inside a lab step is a defect — rewrite164 it as an action or move it to the settings table. Then confirm every lab has a "Check it worked" and that165 every instruction, description, or configuration value the participant must enter appears literally in a166 copy block. Do not add a "If it didn't" block for a failure the participant cannot act on.167168 A guide that reads like chat output, or that tells the participant to figure something out, is a failed169 deliverable even if every fact in it is correct.1706. **Summarize in chat**: harness pick + reason, the 3-5 decisions that most affect quality, and open questions171 the customer must answer (data access, authentication, admin approvals). This is also where any critique of172 the customer's existing materials goes — never in the artifact.173174## Things Builders Must Not Miss175176Call these out explicitly in every guide — they are the common failure points:177178- **Web knowledge is two different things.** A *public website knowledge source* restricts results to URLs you179 list; the separate *Web Search / "Use information from the web"* setting searches everything Bing indexes and180 interleaves those results. Recommend a default per scenario and state the data-boundary implication.181- **Grounding is done through instructions, not the ungrounded-responses toggle.** Tell the agent in its182 instructions to answer only from its configured sources, always cite, and say so when the sources don't cover183 the question. **Never put "turn off Allow ungrounded responses" in a guide** — with it off an answer is184 returned only when it carries a citation, and because models omit citations unpredictably, correct answers185 vanish intermittently. That is an unteachable failure: it looks like a broken agent, it is not reproducible on186 demand, and diagnosing it derails a session. Leave the setting alone and keep it out of the settings table.187- **Explain retrieval before configuring it.** The knowledge exercise opens with a short plain-language account188 of how the agent actually answers: rewrite the query, retrieve roughly the top three results per source,189 summarize with citations, validate. Then the distinction people get wrong — documents return passages, while190 structured sources (Dataverse, Azure SQL) turn the question into a query over rows, which is the only way a191 "how many / total / top five" question is answerable. Both are knowledge and both are read-only: **knowledge192 informs the answer, a tool takes the action.** See references/lab-patterns.md for the wording.193- **Instruction sets restart numbering under each heading**, and every *never* is a guardrail regardless of194 where it felt natural to write it. Invent no labelling scheme — no letter prefixes, no codes; a reader should195 not have to learn a notation. Cross-reference a line by what it says, not by its number. See196 [references/lab-patterns.md](references/lab-patterns.md).197- **Descriptions are routing logic.** Tool, knowledge, topic, and agent *names and descriptions* are what the198 orchestrator reads to choose. A vague description is a routing bug, not a cosmetic one.199- **Instructions can't do everything.** Instructions steer summarization and conversational flow — not citation200 format, retrieval logic, Adaptive Card triggering, or the fallback message. Route those to the right surface.201- **Tool count discipline.** Keep the tool set small and purposeful — a handful of well-described tools202 outperforms a long list. If the scope keeps growing, narrow the agent rather than adding tools.203- **Tool authentication is a design decision** and belongs in a lab step: end-user credentials preserve per-user204 permissions, maker-provided credentials share one identity. **Agent-level authentication is not** — it already205 defaults to Authenticate with Microsoft, so a step confirming that is a stop with no action behind it. Put it206 in the settings reference as "leave at the default" and move on.207- **Untrusted content is an attack surface.** Agents that read email, tickets, or web content can be prompt-208 injected. Constrain which tools may run after reading a knowledge source and which recipients/parameters are209 allowed; consider requiring confirmation before consequential tools run.210- **Publish is a separate step from build**, and channel availability may be admin-gated.211212## Default Tool Shape213214Most single-agent scenarios need one or two actions, not a toolbox. Start here and justify anything beyond it:215216- **Send an email** — the Office 365 Outlook connector is the common case. Pair it with an explicit recipient217 constraint in the instructions, rich-text formatting for the body, and confirmation before running when the218 message goes to anyone outside a known list.219- **An agent flow** — for a multi-step or system-of-record action (create a record, look something up, chain a220 couple of steps) that shouldn't be left to the model.221- Then, only if the scenario demands it: prompt, REST API, MCP server, custom connector, or computer use.222223Name each tool for the action it performs and describe when the agent should use it — that description is what224the orchestrator routes on. **Supply the actual name and description text in the guide**; a participant should225paste them, not invent them.226227## Artifact Voice (binding)228229The HTML guide is a **standalone document for the customer**. It must read as though it were written for them230from scratch, with no trace of the conversation that produced it and no delivery-team scaffolding.231232Keep OUT of the artifact — put these in the chat reply instead:233234- **Facilitator and delivery notes.** No "say this out loud", "give the room", "before the room clicks", no235 references to sessions, days, agendas, blocks, rungs, breaks, or who presents what.236- **Chat echo.** No "as we discussed", "you asked", "here's what I found", "this test run", no first person237 (I / we / let's), no addressing the requester rather than the reader.238- **Review commentary on the customer's own materials.** Findings about *their* deck, agenda, or plan are239 chat-reply content. Only product constraints a builder must act on belong in the artifact, stated as240 constraints, never as critique of their document.241- **Process narration.** No mention of tools used, files read, folders, searches, or how the guide was built.242Harness content is NOT in this list. Name the harness, compare the three, justify the pick, and state the243convertibility and credit consequences — in the guide, not only in chat. What still stays out is *sales* framing244around it: licensing quotes, credit forecasts, and roadmap.245246Second person addressed to **the builder** ("add the source you want the agent to search") is correct and247expected — that is how product documentation reads. Second person addressed to **the requester** is not.248249Every heading must survive the test: *would this heading make sense to someone who has never seen the request?*250"Open Questions for Halliburton" fails; "Decisions Required Before Build" passes.251252## Output Format253254The HTML guide, in this order:2552561. **Header strip** — a small table: time estimate, exercise count, products used, and **what access the reader257 must already have**. "You need" means entitlements and permissions that can block them (environment, licence,258 role) — never audience notes like "no prior experience", which cannot block anyone and waste the column2592. **The scenario** — the business problem in two or three sentences, then what the finished agent does2603. **What you will be able to do** — 5-8 capability statements, each an ability gained ("diagnose why the agent261 is not finding what you expect"), never a topic covered2624. **Choosing the runtime** — what a harness is, the three-way comparison table, why this build sits on the263 harness picked and what it trades away, the non-convertibility warning, and credit consumption where the264 GitHub Copilot harness is used. Place it before the exercises: it is a design decision, not an appendix2655. **Before you start** — split in two: **access and licensing** (the environment, the licences, the security266 role) and **content and test material**. Name the *specific* entitlements, not a general "access to the267 product": tenant-level access and access inside a given environment are different things, and conflating268 them strands people on the day. Say which exercise each item blocks, and give a fallback where one exists2696. **Exercises**, in build order, each with:270 - **Goal** — one sentence271 - **Steps** — numbered, each starting with a UI verb, naming the page and control272 - **Enter this** — copy blocks holding the literal text: agent description, instruction text, knowledge source273 names and descriptions, tool names and descriptions274 - **Check it worked** — what appears on screen275 - **If it didn't** — likeliest cause and fix, where the failure is likely and fixable2767. **What you built** — a checklist restating each capability as something the participant *observed*, plus the277 instruction to return to the exercise that produced any line that is not true2788. **Settings reference** — setting, where it lives, recommended value, what the other value does. This is where279 recommendations belong, so the exercises stay imperative2809. **Test prompts** — 5-8 to run against the finished agent, at least two the agent should refuse28110. **Before you share it** — auth, data boundary, admin dependencies, monitoring, publish sequence28211. **Decisions required before build** — what the owning organization must confirm (data scope, connectors,283 approved recipients, publishing permissions, review owner). Not the harness pick, which the guide makes.28412. **Sources** — a two-column table: which exercise used it, and the page as a **live hyperlink** plus the bare285 URL in visible text (printed handouts lose the anchor). Never a bare286 list of page titles — a reader whose screen doesn't match needs the authoritative page in one click.28713. **Where to go next** — link Copilot Studio Agent Academy (https://microsoft.github.io/agent-academy/) with a288 one-line description of Recruit and Special Ops, and the caveat that it supplies no environments or licenses289290**Copy blocks carry only what the participant pastes into Copilot Studio** — instruction text, descriptions,291prompts. Never put UI navigation inside a copy block.292293Mark anything unverified as **[Verify]**. Use placeholders like `[Customer to confirm]` — never invent tenant294details, limits, license entitlements, or numbers.295296## Guardrails297298- Ground every product claim in a fetched Microsoft Learn page; no memory-sourced specifics.299- Do not fabricate customer names, data sources, connector availability, or licensing.300- Recommend one harness per build and say why in the guide; do not hedge across all three.301- Never ship a guide whose harness pick is unexplained, and never omit the non-convertibility warning: the302 choice is fixed at creation and is the most expensive thing in the build to get wrong.303- Every lab step is an action a participant performs, not a decision they must make. Recommendations live in the304 settings reference; steps stay imperative.305- Never ship a lab without a "Check it worked", and never tell a participant to write text the guide could have306 supplied.307- Never write a step that assumes an empty field. Where the product has already populated something — generated308 instructions, a default topic, a suggested source — say so, say whether to replace or keep it, and say why.309- Every source is a clickable link with its URL also visible as text. A source list without URLs is a dead end.310- **Assume a shared environment.** Multiple participants build in the same Power Platform environment, so never311 instruct a step that changes environment-wide or account-level defaults (preferred solution being the main312 one). Prefer per-object placement, and name objects with the participant's own initials so shared lists stay313 navigable.314- **Show the product at its best, honestly.** Never build an exercise around a pattern the product handles315 poorly and then caveat it. If a guide needs a paragraph warning the reader not to trust the agent, change316 what the exercise asks for instead of lengthening the warning. Equally, never imply a capability the317 documentation does not support: aggregate arithmetic over a document knowledge source is the standing example.318- Never create, modify, or publish a live agent — this skill produces guidance only.319- Include the security/prompt-injection and authentication items in every guide, even short ones.320- The artifact never references the conversation, the requester, the delivery team, or how it was produced.321 Ship a document, not a transcript.