What Happens When You Publish a Copilot Studio Agent
· AI Agents · 11 min read
By Juan Pedro Márquez
Publishing a Copilot Studio agent pushes your latest content to every channel that agent is already connected to, all at once. It is not a staged rollout. There is no per-channel version, no canary group, no rollback button. And depending on the channel, your users might not see the new version for another hour.
That last detail is the one that catches teams out. Someone publishes a fix at 09:40, tests it in Teams at 09:42, sees the old broken answer, and publishes again. And again. By 10:00 there are four publishes in the log and nobody knows which one is live.
Nothing was broken. The session was.
This is a walkthrough of what the Publish button actually does, what it deliberately does not do, and the release gate you have to build yourself around it — because Copilot Studio does not ship one.
What does the Publish button actually do in Copilot Studio?
Publishing takes the current authoring state of your agent — topics, tools, knowledge, settings — and makes it the live version across every connected channel simultaneously. Microsoft is explicit about this: publishing "applies to all the channels associated with your agent". One action, every surface, no partial state.
A few things happen at once when you confirm that dialog:
- The published content becomes the version served to new sessions on every channel.
- Any pending authentication change takes effect. Auth configuration changes only apply after a publish, which is why an auth edit that "did nothing" almost always means somebody skipped this step.
- The publish status and any error codes land on the Publish page, which is where you go when it fails rather than into a log elsewhere.
And a few things do not happen:
- Existing conversations are not interrupted or migrated.
- Nothing is versioned in a way you can roll back to from the Publish page.
- Channels are not individually staged. There is no "publish to Teams only."

Publish is a broadcast, not a rollout
Here is my opinion, and it is the one thing I would want a platform owner to take from this article: treat Publish as a broadcast to production and put your release gate somewhere else. The button is a content sync, not a deployment mechanism. If your only control over what reaches users is "who has the Publish permission," you have no release process — you have a shared button.
The gate belongs at the environment boundary. More on that below.
Why do users still see the old version after you publish?
Because published content only reaches a user when a new session starts. In most channels a session ends after 30 minutes of inactivity, so an active user keeps talking to the version they started with. In channels with persistent conversations — Microsoft Teams, Omnichannel for Customer Service — it can take up to one hour after publishing before the new version takes effect.
There is a shortcut. Typing start over in the current conversation resets the session and picks up the content you just published. It is documented, it works, and almost nobody on the delivery side knows it exists.
Put that command in your test script. It converts a confusing hour of "did my fix ship?" into a five-second check. It also stops the publish-loop behaviour I described at the top, which is worth more than it sounds: every redundant publish is another change nobody can attribute later.
One nuance worth internalising. This delay is not a cache you can clear tenant-wide. It is per conversation. So "we published and verified" only ever means "we published and verified in a fresh session." If your acceptance test reuses a chat window, it is testing the old build.
What breaks the first time you publish an agent to Teams?
Authentication, nearly every time. Agents are created with Authenticate with Microsoft turned on by default, which wires up Microsoft Entra ID authentication for Teams, Power Apps and Microsoft 365 Copilot with no manual setup. That default is good. The trouble starts when someone changes it for a reason that made sense in week one.
Three failure modes I see repeat:
The agent asks Teams users to sign in, forever. If the agent was first published using manual authentication without Teams single sign-on, the agent in Teams keeps prompting users to sign in. Microsoft lists this as a known issue on the SSO configuration page. It is not a transient glitch — it is a property of how the agent was first published, and it needs the SSO configuration plus a republish to clear.
Someone selects "No authentication" to unblock a demo. That option lets anyone with the link chat with the agent. It also blocks the agent from using any tool configured to require user credentials. So the demo works, the real use case silently stops working, and the two symptoms surface a week apart.
The auth change was saved but never published. Auth edits take effect only on publish. A saved-but-unpublished change is the most common "it works in test chat, not in Teams" report I get.
The authentication decision you can't undo cheaply
Choosing Authenticate with Microsoft unlocks the Teams and Microsoft 365 channel and skips manual configuration entirely. Choosing Authenticate manually is what you need for other channels, but it puts the Entra ID app registration, scopes, secrets or federated credentials on you.
Switching between them later is not free. If topics reference User.AccessToken or User.IsLoggedIn and you move to Authenticate with Microsoft, those variables become unknown and the topics show errors you have to fix before you can publish. Decide this before the first publish, not after the pilot.
Which channels can your admin block before you publish?
More than most makers expect. Administrators can control which channels are available to Copilot Studio agents using Agent access channels in the Power Platform admin center, so a channel that exists in the product can be unavailable in your environment by policy.
Data policies matter here too. When a data policy in the Power Platform admin center requires authentication, the No authentication option disappears from the agent's security settings altogether. That is a good control — it is also a surprise if a maker is following a public tutorial that assumes the option is there.
And the Demo website is not a channel you ship on. It exists so you and your stakeholders can try the agent before customers do, and Microsoft says plainly it is not intended for production use. Share the URL with your team. Do not put it in a customer-facing email.
The same agent behaves differently on each channel
Publishing is uniform. The experience is not. The channel reference table is worth reading once before you design a single conversation, because three of its entries change how you write topics.
Attachments are not supported. On any channel. If a user tries to send one, the agent replies that it can only process text — and that includes Microsoft Teams and the Direct Line API, even though those surfaces obviously support file upload. Users read that reply as the agent being broken.
Teams renders at most six suggested actions in a single question node, so a seven-option menu that looks fine on a website quietly loses an option. And Markdown is only partially supported in Teams, which is why the tidy table you formatted in the authoring canvas arrives as a wall of pipes.
None of this fails at publish time. It fails in front of a user, on one channel, while the others look perfect.

How do you get a real release gate around Publish?
You build it out of environments, solutions and pipelines, because that is where Power Platform keeps its actual promotion model. The pattern is unglamorous and it works:
- Separate environments per stage. Dev, test and production as distinct environments, with makers holding Publish rights only in dev and test. Publish stays uncontrolled inside an environment — so make the environment the boundary.
- Make the agent solution-aware. Agents built inside a solution can be moved between environments as a unit with their dependencies, instead of being rebuilt by hand.
- Promote with pipelines. Power Platform pipelines give you the deployment step that Publish is not: an auditable move from one environment to the next, with approvals.
- Publish last, in production, deliberately. In the production environment, Publish becomes the final flip of a change that already passed a gate.
This is the same discipline I laid out in more depth in Copilot Studio ALM: pipelines, environments, and solutions, and it is the single highest-return thing a platform team can put in place in week one. It is slow to set up. It is also the difference between a change you can explain and a change you can only apologise for.
Two adjacent controls I would not skip:
- Sharing is separate from publishing. Publishing makes the agent live; sharing decides who can find and use it. Start by publishing for yourself, verify, then make the agent available to others.
- Cost follows usage, not intent. Every new channel you connect widens who can consume messages. I wrote about where that bill actually comes from in the hidden cost of Copilot Studio agents.
What should you check in the first hour after publishing?
Four things, in this order.
Did the publish succeed? Check the publish status on the Publish page. Failures there carry error codes and usually point at a missing dependency — a flow, connector, or knowledge source that exists in your dev environment and not in the target.
Does a fresh session get the new behaviour? Open a new conversation, or type start over in an existing one. Never validate in the window you had open while authoring.
Is authentication behaving on the real channel? Test in Teams, not only in the test panel. The test panel does not exercise the Teams channel's SSO path, and that is precisely where the sign-in loop lives.
Are the numbers moving the way you expect? The analytics in Copilot Studio show engagement, resolution and escalation rates. A publish that quietly broke a topic usually shows up first as a jump in escalations, before anyone files a ticket.
If your agent handles anything sensitive, the security and governance review belongs before the publish, not after. The checklist I use for that is in security for Copilot Studio agents.
Frequently asked questions
Does publishing a Copilot Studio agent affect all channels at once?
Yes. Publishing applies to every channel connected to the agent, and all of them update together. There is no way to publish to one channel and hold another back. If you need staged exposure, use separate environments and promote between them rather than trying to stage channels.
How long does it take for a published change to reach users?
New sessions get the new version immediately. Existing sessions keep the old one until they end — typically after 30 minutes of inactivity. On persistent channels such as Microsoft Teams, it can take up to an hour, unless the user types start over to reset the session.
Can you roll back a Copilot Studio agent after publishing?
Not from the Publish page. There is no one-click revert to a previous published version. Recovery means restoring the earlier content — from a solution export or a pipeline stage — and publishing again, which is exactly why solution-aware agents and pipelines matter more here than in most Power Platform workloads.
Why does my agent keep asking Teams users to sign in?
Most often because the agent was first published with manual authentication and no Teams single sign-on configured. Add the client ID and resource URI to the Teams channel's SSO settings, then publish again. Microsoft documents this behaviour as a known issue.
Is publishing the same as deploying?
No, and treating them as the same thing is the root of most Copilot Studio release incidents. Publish syncs content to live channels inside one environment. Deployment moves a tested agent between environments. You need both, and only one of them is a button.
The short version
Publish is a content sync with production semantics and no safety net. It reaches every channel, it takes effect on the next session, and it cannot be undone from the screen you pressed it on.
Build the gate around it — environments, solutions, pipelines — and Publish becomes a boring final step. Skip the gate, and the button is the only thing standing between an untested topic and every user you have.