Skill v1.0.1
currentAutomated scan100/1002 files
version: "1.0.1" name: copilot-studio-agent-documenter description: Generate comprehensive documentation for Microsoft Copilot Studio agents from exported Dataverse solutions using the Power Platform CLI. Use when asked, to analyse the solution with the agents file and create documentation from the contents.
Copilot Studio Agent Documentor
To generate documentation in a single file, follow this process, using the sections below to analyse and structure the agents within the /Agents/ folder in this repo.
When to Use This Skill
- User requests documentation for an agent in
Agents/<AgentName>/ - Analyzing agent capabilities, topics, and integrations
- Creating markdown documentation output in
Docs/Agents/folder
Step-by-Step Workflows
1. Identify Agent Structure
# Locate the agent solutionls Agents/<AgentName>/src/bots/# List all bot componentsls Agents/<AgentName>/src/botcomponents/
2. Extract Agent Metadata
Read key files in this order:
Agents/<AgentName>/src/Other/Solution.xml- Publisher, version, solution nameAgents/<AgentName>/src/bots/<prefix>_<agentname>/bot.xml- Agent metadataAgents/<AgentName>/src/bots/<prefix>_<agentname>/configuration.json- Agent configuration
3. Document Agent Components
Topics (Conversation Flows)
- Pattern:
botcomponents/<prefix>_<agent>.topic.<TopicName>/ - Read
botcomponent.xmlfor topic name and state - Check
datafile for conversation logic (if present) - Document standard topics: ConversationStart, Greeting, Fallback, Escalate, OnError
- Highlight custom topics (non-standard names)
GPT Instructions
- Pattern:
botcomponents/<prefix>_<agent>.gpt.default/ - Extract AI instructions from
datafile - Document the agent's generative capabilities and system prompt
Connector Actions
- Pattern:
botcomponents/<prefix>_<agent>.action.<Connector-Operation>/ - Example:
.action.ServiceNow-GetRecord,.action.ServiceNow-Orderitem - List all external actions the agent can perform
- Cross-reference with
Assets/botcomponent_connectionreferenceset.xml
Multi-Agent Orchestration
- Pattern:
botcomponents/<prefix>_<agent>.InvokeConnectedAgentTaskAction.<ChildAgent>/ - Document agent-to-agent handoffs
- Map parent agents to their specialized sub-agents
- Orchestration uses
InvokeConnectedAgentTaskActioncomponents to route conversations.
Test Phrases (Evaluation Sets)
- Pattern:
botcomponents/mspva_<GUID>/botcomponent.xmlwith<category>Testing</category> - Component type:
<componenttype>19</componenttype> - Extract test phrases from
<description>or<name>elements - These are sample questions/prompts used to evaluate agent responses
- Group test phrases by parent agent (
<parentbotid>) - Document which agent or topic each test phrase targets
4. Document Components and External Integrations
File Structure (per component)
botcomponents/<componentschema>/├── botcomponent.xml # Metadata (name, parent, state)└── data # Optional binary/additional data
Solution Metadata
Other/Solution.xml- Publisher, version, localization settingsAssets/botcomponent_*.xml- Cross-cutting configuration sets- Schema name → physical folder name mapping is 1:1
Connection References
Read Agents/<AgentName>/src/Other/Customizations.xml:
- Extract
<connectionreference>elements - Document
connectorid(e.g.,/providers/Microsoft.PowerApps/apis/shared_service-now) - Note connection display names
Knowledge Sources
Read Agents/<AgentName>/src/unstructuredfilesearchentities/*.meta.xml:
- Extract
<sourceurl>values (external API endpoints) - Document knowledge source types (
<knowledgesource>codes)
Dataverse Tables and Entities
Agents may include Dataverse table search capabilities for querying business data. These are found in:
Agents/<AgentName>/src/dvtablesearchs/- Search configurationsAgents/<AgentName>/src/dvtablesearchentities/- Entity/table mappings
Relationship Structure:
- Each
dvtablesearch.xmldefines a search configuration with a unique<dvtablesearchid> - Each
dvtablesearchentity.xmllinks to a search via<dvtablesearchid>and specifies the<entitylogicalname>(table) - Multiple entities can be associated with a single search configuration
Analysis Process:
To find Dataverse table searches:
# Find all Dataverse table searchesls Agents/<AgentName>/src/dvtablesearchs/# Find all entity mappingsls Agents/<AgentName>/src/dvtablesearchentities/
For each dvtablesearch:
- Read
dvtablesearchs/<guid>/dvtablesearch.xml- Extract search name and ID - Find related entities by searching for the
dvtablesearchidin dvtablesearchentities - Read each
dvtablesearchentities/<guid>/dvtablesearchentity.xml- Extract entity logical name and display name
Generate ERD Diagram: Create a Mermaid entity-relationship diagram showing:
- Tables/entities involved in the search
- Relationships between search configurations and entities
- Entity attributes when available
erDiagramDvTableSearch ||--o{ DvTableSearchEntity : "configures"DvTableSearchEntity ||--|| DataverseTable : "queries"DvTableSearch {guid dvtablesearchid PKstring nameint searchtype}DvTableSearchEntity {guid dvtablesearchentityid PKguid dvtablesearchid FKstring entitylogicalnamestring name}DataverseTable {string entitylogicalname PKstring displayname}
Example Mapping:
- Search:
PeopleonAccount_Account_sKtInwp9Jyd91zLl63PSV(ID: c5010e77-c900-4bf1-898d-c4c0ab9eed30) - Entity:
account(Account table)
5. Extract Test Phrases for Evaluation
Search for bot components with <category>Testing</category>:
grep -r "<category>Testing</category>" Agents/<AgentName>/src/botcomponents/ -l
For each testing component:
- Read
botcomponents/<guid>/botcomponent.xml - Extract
<description>and<name>fields - these contain the test phrases - Note the
<parentbotid>to identify which agent the test is for - Group test phrases by agent for documentation
Test phrases are used for:
- Evaluating agent responses to common queries
- Regression testing after agent updates
- Demonstrating agent capabilities with sample questions
6. Generate Documentation Output
Create markdown file in Docs/<AgentName>.md with sections:
# <Agent Display Name>**Solution Name:** <from Solution.xml>**Version:** <from Solution.xml>**Publisher:** <from Solution.xml>## Overview<Brief description of agent purpose>## Agent Architecture<Multi-agent diagram if applicable>## Topics### Standard Topics-List ConversationStart, Greeting, Fallback, etc.### Custom Topics-Document business-specific conversation flows## GPT Instructions<System prompt summary>## External Integrations### Connectors-**ServiceNow**: <list actions>-**<OtherConnector>**: <list actions>### Knowledge Sources-URL: <sourceurl>-Type: <description>### Dataverse Tables<If dvtablesearch components exist>The agent has access to the following Dataverse tables for data queries:#### Entity Relationship Diagram
erDiagram <SearchName> ||--o{ <EntityName> : "searches" <EntityName> { string entitylogicalname string displayname }
#### Configured Searches| Search Name | Search ID | Entity | Description ||-------------|-----------|--------|-------------|| <name> | <dvtablesearchid> | <entitylogicalname> | <purpose> |## Component Inventory- Total Topics: <count>- Total Actions: <count>- Child Agents: <list if orchestrator>- Dataverse Table Searches: <count>- Dataverse Entities: <count>## Test Phrases & Evaluation Sets<Group test phrases by agent>### <Agent Name>- "<test phrase 1>"- "<test phrase 2>"- "<test phrase 3>"### <Another Agent Name>- "<test phrase 1>"- "<test phrase 2>"
Naming Conventions to Recognize
Component Schema Names
- Format:
<customizationprefix>_<logicalname>.<componenttype>.<descriptor> - Example:
cr667_primaryPortalAgent.InvokeConnectedAgentTaskAction.ClientExplorer - The prefix (e.g.,
cr667,pkb) comes from the Dataverse publisher
Topic Naming Patterns
- Standard:
.topic.Greeting,.topic.Fallback,.topic.OnError - Custom:
.topic.<Intent>_<GUID>or.topic.<FriendlyName>
Action Naming Pattern
- Format:
.action.<ConnectorName>-<OperationName> - Example:
.action.ServiceNow-Getcatalogitems
Common Analysis Commands
# Count topics for an agentls Agents/<AgentName>/src/botcomponents/ | grep "\.topic\." | wc -l# Find all connector actionsls Agents/<AgentName>/src/botcomponents/ | grep "\.action\."# Check for multi-agent orchestrationls Agents/<AgentName>/src/botcomponents/ | grep "InvokeConnectedAgentTaskAction"# Find external service URLsgrep -r "sourceurl\|connectorid" Agents/<AgentName>/src/# List all agents in solutionls Agents/<AgentName>/src/bots/# Find all test phrases/evaluation setsgrep -r "<category>Testing</category>" Agents/<AgentName>/src/botcomponents/ -A 3# Check for Dataverse table searchesls Agents/<AgentName>/src/dvtablesearchs/ 2>/dev/null || echo "No Dataverse searches"# List Dataverse entitiesls Agents/<AgentName>/src/dvtablesearchentities/ 2>/dev/null || echo "No Dataverse entities"# Find entity-to-search mappingsgrep -r "dvtablesearchid" Agents/<AgentName>/src/dvtablesearchentities/
Output Best Practices
- Always output to `Docs/` - Never create documentation in other folders
- Use agent name as filename -
Docs/<AgentName>.md - Include file references - Link back to source files when describing components
- Configuration - List out in a table the configuration of each othe bots.
- Document multi-agent relationships - Show parent-child agent hierarchies in a mermaid diagram. Group all the documentation by the agent, showing documentation topics underneath each group.
- Highlight integrations - External APIs and connectors are critical for understanding agent capabilities
- Count components - Provide metrics (# topics, # actions, # child agents)
- Include test phrases - Document evaluation test phrases grouped by agent to demonstrate capabilities and provide testing examples
- Other documentation - Remove references to other documentation in the repository. This file should be standalone.
- Technical depth - Include some explainations of components, assuming that the audience less technical and may not know what these components mean - unless the request asks for highly technical output.
Example: multiagentdemo Analysis
The multiagentdemo solution contains 5 agents:
- primaryPortalAgent (orchestrator)
- getSkillName (People Skills Finder)
- myServices (ServiceNow integration with 3 actions)
- serviceNowKnowledgeAgent (knowledge base queries)
- whoWhat (account lookups)
ServiceNow integration found:
- Connector:
shared_service-now - Actions: GetRecord, Getcatalogitems, Orderitem
- Knowledge URL:
https://<instance-name>.service-now.com/
Key Files Reference
Solution.xml- Version, publisher, solution metadataCustomizations.xml- Connection references to external servicesbotcomponent_connectionreferenceset.xml- Bot-to-connector mappingsunstructuredfilesearchentities/*.meta.xml- Knowledge source URLsbotcomponents/*/botcomponent.xml- Individual component metadatabotcomponents/*/data- Individual component data filesbots/*/bot.xml- Top-level bot definitionsbots/*/configuration.json- Bot configuration settingsdvtablesearchs/*/dvtablesearch.xml- Dataverse table search configurationsdvtablesearchentities/*/dvtablesearchentity.xml- Dataverse entity/table mappings
When you are building references to files, navigate from the repo root, as the generated document can existing under a subfolder when generated.