Add Other Agents logo

Add Other Agents

Organization
microsoft
add-other-agents

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.

Overview

Publishermicrosoft
Repositoryskills-for-copilot-studio
Skill nameadd-other-agents
Stars
478
Forks
101
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by microsoft on GitHub. Read the source before you install it.

Installation

Install the Add Other Agents AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/microsoft/skills-for-copilot-studio/tree/main/skills/add-other-agents
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/microsoft/skills-for-copilot-studio.git /tmp/skills-for-copilot-studio
mkdir -p .claude/skills
cp -r /tmp/skills-for-copilot-studio/skills/add-other-agents .claude/skills/add-other-agents
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Add Other Agents in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Add Other Agents on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Add Other Agents is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Add Other Agents

Add multi-agent capabilities to a Copilot Studio agent. Two patterns are supported:

PatternUse whenWhat it creates
Child agentThe agent needs a specialist sub-agent owned by the same parentAgentDialog in agents/ subdirectory
Connected agentThe agent needs to call an external, independently-managed agentInvokeConnectedAgentTaskAction in a topic (TaskDialog)

Ask the user which pattern they need if unclear.


Pattern 1: Child Agent

Create a new child agent (AgentDialog) that the parent agent's orchestrator can delegate to.

Instructions

  1. Auto-discover the parent agent directory:

    Glob: **/agent.mcs.yml

    Use the top-level agent (not one inside an agents/ subdirectory). NEVER hardcode an agent name.

  2. Look up the AgentDialog schema:

    bash
    node ${CLAUDE_SKILL_DIR}/../../scripts/schema-lookup.bundle.js resolve AgentDialog
    node ${CLAUDE_SKILL_DIR}/../../scripts/schema-lookup.bundle.js resolve OnToolSelected
  3. Determine from the user:

    • Child agent name and display name
    • What the child agent specializes in (for the description and instructions)
    • What inputs the child agent needs (if any)
    • Whether it will need its own knowledge sources (handled in Phase 2 — see below)
  4. Create the child agent directory (Phase 1 — plain agent only, NO knowledge):

    <parent-agent>/agents/<ChildAgentName>/
    └── agent.mcs.yml
  5. Generate agent.mcs.yml using ${CLAUDE_SKILL_DIR}/../../templates/agents/child-agent.mcs.yml as the starting template. Read the template, then customize all placeholder values (<...>) based on the user's requirements.

    Key structure:

    • kind: AgentDialog — marks this as a child agent
    • beginDialog.kind: OnToolSelected with a description — tells the parent orchestrator when to route here
    • settings.instructions — the child agent's system prompt
    • inputType — context the orchestrator passes in
    • outputType — what the child agent returns (use outputType: {} if no structured output is needed)

    CRITICAL: AgentDialog must NOT have beginDialog.actions. Child agents use generative orchestration — all behavior is driven by settings.instructions. Do NOT add action nodes (Question, SendActivity, BeginDialog, ConditionGroup, etc.) to the actions array. If the user's scenario requires hardcoded action flows, it should be an AdaptiveDialog topic in the parent agent, not a child agent.

  6. Key fields explained:

    • beginDialog.description — This is what the parent orchestrator reads to decide when to route. Be specific and action-oriented (e.g., "This agent handles billing inquiries, refund requests, and payment issues").
    • settings.instructions — The child agent's system prompt. Define its personality, scope, and behavior guidelines.
    • inputType — for context the orchestrator should pass. The parent fills these automatically.

Two-Phase Workflow (Important)

Child agents MUST be created in two phases:

Phase 1 — Create the plain agent (steps 1-6 above):

  • Create ONLY agent.mcs.yml with configuration, instructions, inputs, and outputs.
  • Do NOT create a knowledge/ directory or any knowledge sources yet.
  • Tell the user: "The child agent has been created. Please push these changes to your environment using the Copilot Studio VS Code Extension before we can add knowledge sources to it."

Phase 2 — Add knowledge sources (only after the user confirms they pushed):

  • Once the user confirms the child agent has been pushed and exists in the environment, you can add knowledge sources to it using /add-knowledge.
  • Create the knowledge/ directory under the child agent and add knowledge source files there.

This constraint exists because knowledge sources reference the agent they belong to — the child agent must exist in the environment first.

Example: Customer Support Child Agent

yaml
kind: AgentDialog

beginDialog:
  kind: OnToolSelected
  id: main
  description: This agent handles billing inquiries, payment issues, refund requests, and subscription management. Route here when users ask about charges, invoices, or account billing.

settings:
  instructions: |
    You are a billing support specialist. Help customers with:
    - Understanding their charges and invoices
    - Processing refund requests
    - Managing subscription plans
    - Resolving payment issues

    Always verify the customer's account before making changes.
    Escalate to a human agent for refunds over $500.

inputs:
  - kind: AutomaticTaskInput
    propertyName: CustomerQuery
    description: The customer's billing-related question or issue

inputType:
  properties:
    CustomerQuery:
      displayName: Customer Query
      description: The customer's billing-related question or issue
      type: String

outputType: {}

Pattern 2: Connected Agent

Call an external, independently-managed agent from your agent. This creates a TaskDialog with an InvokeConnectedAgentTaskAction that the orchestrator can invoke.

What you can do (calling side)

The plugin creates the calling side YAML — a TaskDialog in your agent that invokes the connected agent with inputs/outputs.

What the user must do (called side)

The connected agent must be configured separately (in Copilot Studio UI or in its own project). Tell the user they need to set up the following on the connected agent:

  1. Create an OnRedirect topic — this is the entry point when the agent is called by another agent
  2. Create global variables for each input the caller passes, with "external source" permissions enabled
  3. Declare inputType: {} and outputType: {} on the OnRedirect topic to signal it participates in multi-agent scenarios

Important: The connected agent must be published and accessible from the same environment or tenant. The botSchemaName (the connected agent's schema name) must be known — the user can find it in the connected agent's settings.mcs.yml or in Copilot Studio under Agent Details.

Instructions

  1. Auto-discover the agent directory:

    Glob: **/agent.mcs.yml
  2. Determine from the user:

    • The connected agent's schema name (botSchemaName) — e.g., cr123_expenseAgent
    • What inputs to pass to the connected agent
    • A description of what the connected agent does (for the orchestrator)
  3. Create a TaskDialog in the agent's actions/ directory (or topics/ if the user prefers):

Example: Calling Side (your agent)

yaml
kind: TaskDialog

modelDisplayName: Expense Report Processor
modelDescription: Use this agent to process expense reports by sending them to the expense processing agent

inputs:
  - kind: AutomaticTaskInput
    propertyName: expenseReportFileFullPath
    description: Full file path, including SharePoint site URL, of an expense report file.

action:
  kind: InvokeConnectedAgentTaskAction
  inputType:
    properties:
      expenseReportFileFullPath:
        displayName: expenseReportFileFullPath
        isRequired: true
        type: String
  botSchemaName: cr123_expenseAgent
  historyType:
    kind: ConversationHistory

Example: Called Side (what the user must configure on the connected agent)

Share this with the user as guidance for what they need to set up on the connected agent:

yaml
# OnRedirect topic on the connected agent
kind: AdaptiveDialog
modelDescription: Initializes the agent when called by another agent

beginDialog:
  kind: OnRedirect
  id: main
  actions:
    - kind: SetVariable
      id: setVariable_abc123
      variable: Global.expenseReportFileFullPath
      value: "=System.Activity.Value.expenseReportFileFullPath"

inputType: {}
outputType: {}

The connected agent also needs:

  • A global variable Global.expenseReportFileFullPath (type: String)
  • The variable must have "Receive values from other agents" enabled in Copilot Studio (this is the "external source" permission)

Frequently asked questions

What does the Add Other Agents AI skill do?

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.

Why use Add Other Agents on TypingMind?

Because you install it once and use it with any model. Add Other Agents is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Add Other Agents in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/microsoft/skills-for-copilot-studio/tree/main/skills/add-other-agents. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Add Other Agents?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Add Other Agents?

As many as you like. As long as a model supports skills, you can use Add Other Agents with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Add Other Agents AI skill free?

Yes. It is published on GitHub by microsoft under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇