add-global-variable
Skill486 starsChanged 8 months agoMITView on GitHub
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.
In this repository30 other files it gives its agents.
- add-actionSkill
- add-adaptive-cardSkill
- add-generative-answersSkill
- add-knowledgeSkill
- add-nodeSkill
- add-other-agentsSkill
- analyze-evalsSkill
- chat-directlineSkill
- chat-sdkSkill
- chat-with-agentSkill
- clone-agentSkill
- create-eval-setSkill
- create-evalSkill
- detect-modeSkill
- directline-chatSkill
- edit-actionSkill
- edit-agentSkill
- edit-triggersSkill
- int-patternsSkill
- int-project-contextSkill
- int-referenceSkill
- list-kindsSkill
- list-topicsSkill
- lookup-schemaSkill
- manage-agentSkill
- new-topicSkill
- run-evalSkill
- run-tests-kitSkill
- test-authSkill
- validateSkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 4 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 12
Create a global variable that persists across all topics within a conversation.
- Distinctive: line 20
Use the top-level agent. NEVER hardcode an agent name.
- Distinctive: line 32
Default value (if any)
- Distinctive: line 33
DO NOT skip any of these properties.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Add Global Variable
Create a global variable that persists across all topics within a conversation.
Instructions
- Auto-discover the agent directory:
Use the top-level agent. NEVER hardcode an agent name.Glob: **/agent.mcs.yml - Read
settings.mcs.ymlto get theschemaNameprefix:
Extract the root-levelRead: <agent-dir>/settings.mcs.ymlschemaNamevalue (e.g.,copilots_header_cre3c_fullagent). - 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.
- Variable name (PascalCase, e.g.,
- 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>- 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— AlwaysConversationfor global variables (persists for the session).schemaName— Must follow the pattern<agent-schemaName>.globalvariable.<VariableName>. Read the prefix fromsettings.mcs.yml.defaultValue— Initial value. UseDEFAULTif 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.CityNameWhen 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-knowledgefor the full pattern. Important: the variable value must be a clean, direct URL — not a SharePoint AllItems.aspx link with query parameters.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

