Adding a Custom Topic to the Copilot in a Model-Driven App
Neil Haddley โข June 1, 2026
The Copilot panel in a model-driven app is a Copilot Studio agent. I tested what it can and cannot do, then added a custom topic to fill one of the gaps.
Model-driven Power Apps include a built-in Copilot panel that lets users ask natural-language questions about their Dataverse data. What is less obvious is that the Copilot is actually a Copilot Studio agent running behind the scenes โ which means you can open it in Copilot Studio and extend it with custom topics. In this post I built a simple Contacts app to explore what the default Copilot can and cannot do, then added a custom topic to fill one of the gaps. I tested this in June 2026, and Copilot features change quickly, so your screens may look different.
I started by creating a new solution called "Contacts" to keep everything organised.
Inside the solution I went to New > App > Model-driven app.
I named the app "Contacts" and clicked Create.
I clicked Add page and chose Dataverse table to pull in the Contact table.
I searched for "contact" and selected the Contact table.
The editor showed a live preview of the app with the standard Dynamics 365 navigation.
When I tried to navigate away, Power Apps asked me to save and publish first.
After publishing, I opened the app and saw the My Active Contacts view โ empty for now.
I opened the Copilot panel on the right, which immediately offered a set of suggested questions about the Contacts table.
I asked "how many contacts?" and Copilot correctly reported there were none in the system.
I then asked Copilot to add a contact named John Doe with phone number +1 604-555-1212. It could not create records directly, but it offered a link to the Contacts form to do it manually.
I opened the New Contact form and entered John Doe's name and mobile number.
I typed "What do we know about /" in the chat input and the Copilot panel listed John Doe as a known entity I could reference.
I selected the John Doe entry and the question resolved to "What do we know about John Doe".
Copilot returned his full name and contact ID, but noted there were no further details on file.
To test the boundaries of what Copilot knows, I asked "What is the Capital of France?" โ a question with no answer in my Dataverse tables. I chose it because the answer is obvious to everyone, but cannot come from the Contacts table. Copilot correctly said it could not find relevant data in the Contacts tables.
This is where it gets interesting. I opened the Agents panel in the Power Apps editor and found the App assistant agent that drives the Copilot panel.
The detail panel described what the agent can do and offered a link to edit it in Copilot Studio.
I clicked through to Copilot Studio, which opened the Copilot in Power Apps - Contacts agent with a live test panel on the right.
I went to the Topics tab and clicked Add a topic, then selected "Add from description with Copilot" to let Copilot build the topic for me.
I entered the topic name as "What is the Capital of France" and the intended response as "The Capital of France is Paris".
Copilot Studio generated a topic canvas with trigger phrases and a message node containing the answer โ no manual canvas editing needed.
I clicked Publish and confirmed in the dialog that appeared.
The topic showed a published timestamp, confirming it was live.
Back in Power Apps, the Agents panel confirmed the agent had been published with an updated timestamp.
I asked the same question again in the Copilot panel โ this time it answered correctly.
Back in the solution I used Add existing to bring the customised agent into the Contacts solution, selecting it from the list.
The agent now appeared under the Agents section of the solution, marked as customised and owned by me.



























