Multi-Agent Support

Target GitHub Copilot, Claude, Cursor, Roo Code, OpenCode, and more - all at once.


Supported Agents

Imprint has built-in support for five AI assistants:

Agent Skills Directory MCP Config File MCP Root Key
copilot .github/skills/ .vscode/mcp.json servers
claude .claude/skills/ .claude/mcp.json mcpServers
cursor .cursor/rules/ .cursor/mcp.json mcpServers
roo .roo/rules/ .roo/mcp.json mcpServers
opencode .opencode/skills/ opencode.json (project root) mcp

Agent-Specific Conventions

Each AI assistant has its own conventions:

GitHub Copilot

  • Skills in .github/skills/ (can be nested in subdirectories)
  • MCP config in .vscode/mcp.json (VS Code integration)
  • Uses servers as the root key in mcp.json

Claude

  • Skills in .claude/skills/
  • MCP config in .claude/mcp.json
  • Uses mcpServers as the root key in mcp.json

Cursor

  • Rules in .cursor/rules/ (note: “rules” not “skills”)
  • MCP config in .cursor/mcp.json
  • Uses mcpServers as the root key in mcp.json

Roo Code

  • Rules in .roo/rules/ (note: “rules” not “skills”)
  • MCP config in .roo/mcp.json
  • Uses mcpServers as the root key in mcp.json

OpenCode

  • Skills in .opencode/skills/
  • MCP config in opencode.json at the project root (not in a subdirectory)
  • Uses mcp as the root key
  • MCP servers use a different format: { "type": "local", "command": ["npx", "-y", "..."], "enabled": true }

Agent Detection

By default, Imprint auto-detects which agents to target by scanning for their directories:

Project Directory
├── .github/         ← Copilot detected
├── .claude/         ← Claude detected
├── .cursor/         ← Cursor detected
├── .roo/            ← Roo Code detected
├── .opencode/       ← OpenCode detected
└── MyProject.csproj

The detection logic checks for the existence of these directories:

Directory Agent
.github/ copilot
.claude/ claude
.cursor/ cursor
.roo/ roo
.opencode/ opencode

Resolution Priority

Agent resolution follows a four-tier priority system:

Tier 1: Explicit Configuration (Highest Priority)

If ImprintTargetAgents is set, it’s used directly:

<PropertyGroup>
  <ImprintTargetAgents>copilot;claude</ImprintTargetAgents>
</PropertyGroup>

Result: Skills deployed to Copilot and Claude only.

Tier 2: Auto-Detection (Default)

If ImprintAutoDetectAgents is true (the default), Imprint scans for agent directories:

<PropertyGroup>
  <ImprintAutoDetectAgents>true</ImprintAutoDetectAgents>
</PropertyGroup>

Result: Skills deployed to all detected agents.

Tier 3: Default Agents

If auto-detection finds nothing, ImprintDefaultAgents is used:

<PropertyGroup>
  <ImprintDefaultAgents>copilot</ImprintDefaultAgents>
</PropertyGroup>

Result: Skills deployed to the default agent(s).

Tier 4: Ultimate Fallback

If everything else is empty, Imprint defaults to copilot.


Configuration Examples

Target Specific Agents Only

<PropertyGroup>
  <!-- Only target Claude, ignore everything else -->
  <ImprintTargetAgents>claude</ImprintTargetAgents>
</PropertyGroup>

Disable for CI/CD

<PropertyGroup Condition="'$(CI)' == 'true'">
  <!-- Don't install skills in CI environments -->
  <ImprintTargetAgents></ImprintTargetAgents>
  <ImprintAutoDetectAgents>false</ImprintAutoDetectAgents>
</PropertyGroup>

Change Default Agent

<PropertyGroup>
  <!-- If no agents detected, use Claude instead of Copilot -->
  <ImprintDefaultAgents>claude</ImprintDefaultAgents>
</PropertyGroup>

Target Multiple Specific Agents

<PropertyGroup>
  <!-- Explicitly target Copilot and Cursor -->
  <ImprintTargetAgents>copilot;cursor</ImprintTargetAgents>
</PropertyGroup>

Unknown Agents

You can target agents that aren’t in the built-in list. Imprint uses a fallback convention:

<PropertyGroup>
  <ImprintTargetAgents>windsurf</ImprintTargetAgents>
</PropertyGroup>

For unknown agents, Imprint assumes:

  • Skills directory: .windsurf/skills/
  • MCP config: .windsurf/mcp.json
  • MCP root key: servers

This allows targeting new AI assistants without waiting for an SDK update.


How Skills Are Copied

When Imprint copies skills to agent directories, it preserves the directory structure:

Package Structure:

skills/
├── authentication/
│   └── SKILL.md
├── security/
│   ├── SKILL.md
│   └── examples.md
└── README.md

Installed to Copilot (.github/skills/):

.github/skills/
├── authentication/
│   └── SKILL.md
├── security/
│   ├── SKILL.md
│   └── examples.md
└── README.md

Installed to Cursor (.cursor/rules/):

.cursor/rules/
├── authentication/
│   └── SKILL.md
├── security/
│   ├── SKILL.md
│   └── examples.md
└── README.md

Installed to Roo Code (.roo/rules/):

.roo/rules/
├── authentication/
│   └── SKILL.md
├── security/
│   ├── SKILL.md
│   └── examples.md
└── README.md

The same files are copied to each agent’s native directory.


MCP Config Differences

Each agent may have slightly different MCP configuration formats:

Copilot/VS Code (.vscode/mcp.json):

{
  "servers": {
    "my-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@my-org/my-server"]
    }
  }
}

Claude (.claude/mcp.json):

{
  "mcpServers": {
    "my-server": {
      "command": "npx",
      "args": ["-y", "@my-org/my-server"]
    }
  }
}

OpenCode (opencode.json at project root):

{
  "mcp": {
    "my-server": {
      "type": "local",
      "command": ["npx", "-y", "@my-org/my-server"],
      "enabled": true
    }
  }
}

Note: OpenCode combines command and args into a single command array, uses type: "local" instead of type: "stdio", and stores its config at the project root (not in a subdirectory).

Imprint handles these differences automatically when merging MCP fragments.


Creating Agent Directories

If you want Imprint to auto-detect an agent, create its directory:

# Enable Copilot detection
mkdir .github

# Enable Claude detection
mkdir .claude

# Enable Cursor detection
mkdir .cursor

# Enable Roo Code detection
mkdir .roo

# Enable OpenCode detection
mkdir .opencode

Then run dotnet build - Imprint will detect and target those agents.


Checking Which Agents Are Targeted

After a build, check the manifest to see which agents were targeted:

cat .imprint/manifest.json

Output:

{
  "version": 2,
  "packages": {
    "MyOrg.Skills": {
      "files": {
        "copilot": [".github/skills/SKILL.md"],
        "claude": [".claude/skills/SKILL.md"]
      }
    }
  }
}

Next Steps


Back to top

Copyright © 2026 Moaid Hathot. Distributed under the MIT License.

This site uses Just the Docs, a documentation theme for Jekyll.