一键导入
new-topic
Create a new Copilot Studio topic YAML file. Use when the user asks to create a new topic, conversation flow, or dialog for their agent.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Create a new Copilot Studio topic YAML file. Use when the user asks to create a new topic, conversation flow, or dialog for their agent.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Guide users through adding a new connector action to a Copilot Studio agent. Connector actions require UI-based connection setup, so this skill walks users through the Copilot Studio portal steps, then delegates to edit-action for YAML modifications.
Generate and insert an Adaptive Card into a Copilot Studio topic using AdaptiveCardPrompt. Use when the user asks to add an adaptive card, rich card, form card, info card, confirmation card, or interactive card to a topic.
Add generative answer nodes (SearchAndSummarizeContent or AnswerQuestionWithAI) to a Copilot Studio topic. Use this instead of /add-node when the user asks to add grounded answers, knowledge search, generative answers, or AI-powered responses — these nodes require specific patterns (ConditionGroup follow-up, knowledge source references, autoSend, responseCaptureType) that /add-node does not cover.
Add a knowledge source (public website or SharePoint) to a Copilot Studio agent. Use when the user asks to add a knowledge source, documentation URL, website, or SharePoint site for the agent to search.
Add or modify a node in an existing Copilot Studio topic. Use when the user asks to add a question, message, condition, variable, or other node to a topic. Do NOT use this for generative answers or knowledge search — use /add-generative-answers instead.
Add child agents, connected agents, or other multi-agent patterns to a Copilot Studio agent. Use when the user asks to create a sub-agent, child agent, connected agent, or call another agent.
| user-invocable | false |
| name | new-topic |
| description | Create a new Copilot Studio topic YAML file. Use when the user asks to create a new topic, conversation flow, or dialog for their agent. |
| argument-hint | <topic description> |
Generate a new Copilot Studio topic YAML file based on user requirements.
Auto-discover the agent directory:
Glob: **/agent.mcs.yml
If multiple agents found, ask which one. NEVER hardcode an agent name.
Check for matching templates in .github/templates/topics/ first:
greeting.topic.mcs.yml — OnConversationStart greetingfallback.topic.mcs.yml — OnUnknownIntent fallback with escalationarithmeticsum.topic.mcs.yml — Topic with inputs/outputs and computationquestion-topic.topic.mcs.yml — Question with branching logicsearch-topic.topic.mcs.yml — Generative answers from knowledgeauth-topic.topic.mcs.yml — Authentication flowerror-handler.topic.mcs.yml — Error handlingdisambiguation.topic.mcs.yml — Multiple topics matched
If a template matches, use it as the starting point.MANDATORY: Verify ALL kind: values against the schema before writing them:
node .github/scripts/schema-lookup.bundle.js kinds # List all valid kind values
node .github/scripts/schema-lookup.bundle.js resolve AdaptiveDialog # Resolve trigger structure
node .github/scripts/schema-lookup.bundle.js resolve <TriggerType> # Resolve specific trigger
node .github/scripts/schema-lookup.bundle.js search <ActionKind> # Verify an action kind exists
NEVER write a kind: value you haven't verified exists in the schema. This is the #1 source of hallucination errors. If schema-lookup.bundle.js search <kind> returns no results, the kind does NOT exist — do not use it.
Determine the trigger type from the user's description:
OnRecognizedIntent — For topics triggered by user phrases (most common)OnConversationStart — For welcome/greeting topicsOnUnknownIntent — For fallback topicsOnEscalate — For escalation to human agentOnError — For error handlingGenerate the topic YAML with:
# Name: comment at the topkind: AdaptiveDialogbeginDialog with correct trigger<nodeType>_<6-8 random alphanumeric>)_REPLACE placeholders with unique IDsCheck settings.mcs.yml for GenerativeActionsEnabled. Read the agent's settings.mcs.yml to check.
Save to the agent's topics/<topic-name>.topic.mcs.yml directory
MANDATORY: Validate the generated file after saving:
node .github/scripts/schema-lookup.bundle.js validate <saved-file.yml>
If validation fails, fix the issues before reporting success to the user.
When the agent has GenerativeActionsEnabled: true in settings:
Use Topic Inputs (AutomaticTaskInput) instead of Question nodes to auto-collect user info:
inputs:
- kind: AutomaticTaskInput
propertyName: userName
description: "The user's name"
entity: StringPrebuiltEntity
shouldPromptUser: true
Use Topic Outputs instead of SendActivity for final results:
outputType:
properties:
result:
displayName: result
description: The computed result
type: String
Include inputType/outputType schemas when using inputs/outputs:
inputType:
properties:
userName:
displayName: userName
description: "The user's name"
type: String
outputType:
properties:
result:
displayName: result
type: String
When a topic exists alongside other topics or other actions (i.e. TaskDialog), think carefully about the topic outputs — it directly affects whether the orchestrator will chain to an action.
Two scenarios:
Topic is self-contained (e.g., reservation confirmation, calculation result): The topic does the work itself. It can gather the inputs too or just ask for those, but work is executed into the topic. In such case, output a confirmation/status message. The orchestrator treats the task as done or not, depending on the confirmation — this is correct.
Topic gathers data for an action to consume (e.g., collecting a complaint that a Teams action should send, without manually calling the action into the topic): The topic output must be the data itself, not a confirmation. If you output "Your complaint has been sent!", the orchestrator assumes the job is done and will NOT invoke the action which means the complaint will never be sent. Instead, output the complaint text so the orchestrator can see there's an action to send it and feed it to such action.
Ask yourself: Does this topic complete the task on its own, or does it prepare data for an action/other topic? If the latter, output the data, not a status message.
Alternative approaches for data-gathering topics:
=: value: =Text(Topic.num1 + Topic.num2){}: activity: "Hello {Topic.UserName}"Text(), Now(), IsBlank(), !IsBlank(), DateTimeFormat.UTCvariable: init:Topic.MyVar (first assignment uses init:)SetTextVariable instead of SetVariable to convert non-text types (Number, DateTime, etc.) to text via template interpolation: value: "Guests: {Topic.NumberOfGuests}"