Skip to content
AI & Agents
Skill

/add-global-variable

Add a global variable to a Copilot Studio agent. Use when the user needs a variable that persists across topics in the same conversation and can optionally be visible to the AI orchestrator.

BOOST
From plugin
copilot-studio
46931 skills4 agents1 hook
Install
$ npx -y skills add microsoft/skills-for-copilot-studio --skill add-global-variable --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-global-variable

Context preview

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

Add a global variable to a Copilot Studio agent. Use when the user needs a variable that persists across topics in the same conversation and can optionally be visible to the AI orchestrator.

SKILL.md

add-global-variable.SKILL.md
user-invocable: false
description: Add a global variable to a Copilot Studio agent. Use when the user needs a variable that persists across topics in the same conversation and can optionally be visible to the AI orchestrator.
argument-hint: <variable name and purpose>
allowed-tools: Read, Write, Glob, Grep
context: fork
agent: copilot-studio-author

Add Global Variable

Create a global variable that persists across all topics within a conversation.

Instructions

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

   Glob: **/agent.mcs.yml

Use the top-level agent. NEVER hardcode an agent name.

2. **Read `settings.mcs.yml`** to get the `schemaName` prefix:

   Read: <agent-dir>/settings.mcs.yml

Extract the root-level `schemaName` value (e.g., `copilots_header_cre3c_fullagent`).

3. **Determine from the user**:

  • Variable name (PascalCase, e.g., `LastDiscussedCity`)
  • Description of what it stores
  • Whether the AI orchestrator should be aware of it (`aIVisibility`)
  • Default value (if any)
  • DO NOT skip any of these properties. If the user doesn't provide them, ask follow-up questions to get the necessary information.

4. **Create the variable file** at `<agent-dir>/variables/<VariableName>.mcs.yml`:

# Name: <Human-readable Name>
# <Description>
name: <VariableName>
aIVisibility: <UseInAIContext or HideFromAIContext>
scope: Conversation
description: <Description of what the variable stores>
schemaName: <prefix>.globalvariable.<VariableName>
kind: GlobalVariableComponent
defaultValue: <DEFAULT or specific value>

5. **Key fields explained**:

  • `name` — PascalCase identifier. This is how topics reference the variable: `Global.<name>` (e.g., `Global.LastDiscussedCity`).
  • `aIVisibility` — Controls orchestrator awareness:
  • `UseInAIContext` — The orchestrator can read and reason about this variable. Use when the variable influences routing or response generation (e.g., user preferences, conversation state the AI should track).
  • `HideFromAIContext` — The variable exists but the orchestrator doesn't see it. Use for internal bookkeeping (e.g., counters, flags) that topics use but the AI doesn't need to reason about.
  • `scope: Conversation` — Always `Conversation` for global variables (persists for the session).
  • `schemaName` — Must follow the pattern `<agent-schemaName>.globalvariable.<VariableName>`. Read the prefix from `settings.mcs.yml`.
  • `defaultValue` — Initial value. Use `DEFAULT` if no specific initial value is needed.

How Topics Use Global Variables

Topics reference global variables with the `Global.` prefix:

# Reading a global variable in a condition
- kind: ConditionGroup
  id: conditionGroup_Xk9mPq
  conditions:
    - id: conditionItem_Lw3nRs
      condition: =!IsBlank(Global.LastDiscussedCity)
      actions:
        - kind: SendActivity
          id: sendMessage_Yt7vBw
          activity:
            text:
              - "Last time we discussed {Global.LastDiscussedCity}."

# Setting a global variable from a topic
- kind: SetTextVariable
  id: setTextVariable_Qp4kMn
  variable: Global.LastDiscussedCity
  value: =Topic.CityName

When to Use Global Variables

  • **Cross-topic state**: A value set in one topic needs to be read in another (e.g., user's preferred language, last search query)
  • **AI-aware context**: The orchestrator should know something about the conversation state to make better routing decisions (use `UseInAIContext`)
  • **Conversation-wide defaults**: A default value that multiple topics can read and optionally override
  • **Dynamic knowledge sources**: A global variable can hold a URL that a knowledge source references via `=$"{Global.VarName}"`. This enables routing to different SharePoint folders or websites per user (e.g., by geolocation or department). See `/copilot-studio:add-knowledge` for the full pattern. **Important**: the variable value must be a clean, direct URL — not a SharePoint AllItems.aspx link with query parameters.
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.