Skip to main content
The GitHub Copilot converter creates .agent.md files with Copilot frontmatter and skill-based commands.

Installation

bunx @every-env/compound-plugin install compound-engineering --to copilot

Output Structure

Writes to .github/:
.github/
├── agents/
│   └── *.agent.md        # Agent files
├── skills/
│   ├── command-name/
│   │   └── SKILL.md      # Commands as skills
│   └── existing-skill/   # Pass-through skills
└── copilot-mcp-config.json  # MCP server config
Commands are converted to skills (not workflows). Copilot invokes them as skills during agent execution.

Conversion Details

Agents → .agent.md Files

Agents are converted to Copilot agent files:
---
description: Planning agent for complex features
tools:
  - "*"
infer: true
model: claude-sonnet-4-5
---

## Capabilities
- Break down complex features
- Create detailed plans

You are a planning specialist...
Frontmatter fields:
  • description: Agent description
  • tools: Always ["*"] (all tools allowed)
  • infer: Always true (Copilot infers tool usage)
  • model: Model name (if specified in Claude plugin)
If agent body exceeds 30,000 characters, a warning is logged. Copilot may truncate large agents.

Commands → Skills

Commands become skills:
---
name: workflows-plan
description: Turn feature ideas into detailed plans
---

## Arguments
<feature description>

You are a planning specialist. Use the repo-research-analyst skill to: research the feature.
Namespace flattening:
workflows:plan → workflows-plan
ce:work → ce-work
simple → simple

Content Transformation

Task agent calls:
- Task repo-research-analyst(feature_description)
+ Use the repo-research-analyst skill to: feature_description
Slash commands:
- Run /workflows:plan
+ Run /workflows-plan
Agent references:
- Consult @code-review-agent
+ Consult the code-review-agent agent
Path rewriting:
- ~/.claude/skills/
+ ~/.copilot/skills/
- .claude/
+ .github/

MCP Servers

MCP servers are written to copilot-mcp-config.json:
{
  "mcpServers": {
    "filesystem": {
      "type": "local",
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem"],
      "tools": ["*"],
      "env": {
        "COPILOT_MCP_ALLOWED_PATHS": "/Users/you/projects"
      }
    },
    "remote-api": {
      "type": "sse",
      "url": "https://api.example.com/mcp",
      "tools": ["*"],
      "headers": {
        "Authorization": "Bearer ${TOKEN}"
      }
    }
  }
}
Server types:
  • local: stdio-based servers (command + args)
  • sse: Remote servers (SSE transport)
Environment variable prefixing: All env vars are prefixed with COPILOT_MCP_:
{
  "env": {
    "ALLOWED_PATHS": "/Users/you/projects"  // Input
  }
}

// Becomes:
{
  "env": {
    "COPILOT_MCP_ALLOWED_PATHS": "/Users/you/projects"  // Output
  }
}
Vars already prefixed with COPILOT_MCP_ are left unchanged.

Name Normalization

Names are normalized to kebab-case:
InputOutput
workflows:planworkflows-plan
Plan Reviewplan-review
my/commandmy-command
UPPERCASEuppercase
Rules:
  • Lowercase only
  • Colons, slashes, spaces → hyphens
  • Special characters removed
  • Multiple hyphens collapsed

Example Output

Input (Claude agent):
{
  "name": "plan-specialist",
  "description": "Planning agent",
  "model": "claude-sonnet-4-5",
  "capabilities": ["Break down features"],
  "body": "You are a planning specialist."
}
Output (.github/agents/plan-specialist.agent.md):
---
description: Planning agent
tools:
  - "*"
infer: true
model: claude-sonnet-4-5
---

## Capabilities
- Break down features

You are a planning specialist.
Input (Claude command):
{
  "name": "workflows:plan",
  "description": "Create plan",
  "argumentHint": "<feature description>",
  "body": "You plan features. Task repo-research-analyst(analyze)."
}
Output (.github/skills/workflows-plan/SKILL.md):
---
name: workflows-plan
description: Create plan
---

## Arguments
<feature description>

You plan features. Use the repo-research-analyst skill to: analyze.

Limitations

  • No hooks support: Copilot does not have a hooks equivalent
  • 30K character limit: Agent bodies over 30,000 characters may be truncated
  • Commands as skills: Commands become skills, not slash commands
  • Env var prefixing: All MCP env vars are prefixed with COPILOT_MCP_
If your plugin has hooks, they will not be converted. Copilot does not support lifecycle hooks.

Sync Support

Sync personal Claude config to Copilot:
bunx @every-env/compound-plugin sync --target copilot
This syncs:
  • Personal skills from ~/.claude/skills/ (to ~/.copilot/skills/)
  • Personal commands from ~/.claude/commands/ (as skills)
  • MCP servers from ~/.claude/settings.json (to ~/.copilot/mcp-config.json)

See Also

GitHub Copilot Documentation

Official GitHub Copilot documentation

Sync Command

Sync personal Claude config to Copilot