Skip to content
AI & Agents
Skill

/add-node

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.

BOOST
From plugin
copilot-studio
46931 skills4 agents1 hook
Install
$ npx -y skills add microsoft/skills-for-copilot-studio --skill add-node --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/add-node

Context preview

The summary Claude sees to decide when to auto-load this skill.

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.

SKILL.md

add-node.SKILL.md
user-invocable: false
description: 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.
argument-hint: <node-type> to <topic-name>
allowed-tools: Bash(node *schema-lookup.bundle.js *), Read, Write, Edit, Glob
context: fork
agent: copilot-studio-author

Add Node to Topic

Add a new node to an existing Copilot Studio topic, or modify an existing one.

In Copilot Studio, the elements inside a topic's `actions` array are **nodes** (SendActivity, Question, ConditionGroup, etc.). These are different from **actions** (`actions/*.mcs.yml`), which are connector-based TaskDialogs. This skill handles nodes within topics.

**For generative answers (SearchAndSummarizeContent, AnswerQuestionWithAI)**, use the `/add-generative-answers` skill instead — it has the specific patterns, follow-up ConditionGroup logic, and disambiguation guidance needed to set them up correctly.

Instructions

1. **Auto-discover the agent directory**:

   Glob: **/agent.mcs.yml

NEVER hardcode an agent name.

2. **Parse the arguments** to identify:

  • The node type (SendActivity, Question, SetVariable, ConditionGroup, etc.)
  • The target topic file
  • If modifying an existing node, which node to modify

3. **Look up the node schema**:

   node ${CLAUDE_SKILL_DIR}/../../scripts/schema-lookup.bundle.js resolve <NodeType>

4. **Read the existing topic file** to understand its current structure.

5. **Generate or modify the node** with:

  • A unique ID (format: `<nodeType>_<6-8 random alphanumeric>`)
  • All required properties from the schema
  • Appropriate default values

6. **Determine the correct insertion point** in the actions array and present the plan to the user before writing.

Common Node Types

| Node | Purpose | Key Properties | |------|---------|----------------| | `SendActivity` | Send message | `kind`, `id`, `activity` | | `Question` | Ask user input | `kind`, `id`, `variable`, `prompt`, `entity` | | `SetVariable` | Set/compute value | `kind`, `id`, `variable`, `value` | | `SetTextVariable` | Set text with interpolation (YAML-only, no canvas) | `kind`, `id`, `variable`, `value` | | `ConditionGroup` | Branching logic | `kind`, `id`, `conditions` | | `BeginDialog` | Call another topic | `kind`, `id`, `dialog` | | `EndDialog` | End topic | `kind`, `id` | | `CancelAllDialogs` | Cancel all topics | `kind`, `id` |

Generative Orchestration Guidelines

When the agent has `GenerativeActionsEnabled: true`:

  • Prefer **AutomaticTaskInput** over Question nodes for collecting user info (the orchestrator handles prompting automatically).
  • Still use Question nodes when: conditional asks (ask X only if Y), or end-of-flow confirmations.
  • Prefer **topic outputs** over SendActivity for returning results.
  • Do NOT use SendActivity to show final outputs unless it's a precise mid-flow message.

Power Fx Quick Reference

  • Expressions start with `=`: `condition: =System.FallbackCount < 3`
  • String interpolation uses `{}`: `activity: "Error: {System.Error.Message}"`
  • Variable init on first assignment: `variable: init:Topic.MyVar`
  • Common: `Text()`, `Now()`, `IsBlank()`, `!IsBlank()`

Example: Adding a Question Node

- kind: Question
  id: question_k7xPm2
  variable: init:Topic.UserName
  prompt: What is your name?
  entity: StringPrebuiltEntity
  alwaysPrompt: true
  interruptionPolicy:
    allowInterruption: false

Important Notes

  • **Unique IDs**: Use random 6-8 alphanumeric characters. Duplicate IDs cause Copilot Studio errors.
  • Verify the node type exists in the schema before generating.
  • For ConditionGroup, include at least one condition item with its own unique ID.
Read more
Ships withcopilot-studio

A plugin for Claude Code, GitHub Copilot CLI, and VS Code that enables authoring, testing, and troubleshooting Microsoft Copilot Studio STANDARD agents through YAML files — directly from your terminal or editor.

Get the whole plugin

Other skills on copilot-studio.