Copilot & Claude Code Equivalents

This content was generated with the assistance of AI and should be verified against the official documentation of each tool and framework before being relied on in production.

This section’s bibliography lists the reference material consulted while preparing these pages.

This page is written against the Claude Code CLI 2.1.283, VS Code 1.139 with the GitHub Copilot Chat extension, and the GitHub Copilot CLI 1.0.88, all re-verified as current as of 2026-09-28; every cell below was checked against the linked official page on that date, and this is a fast-moving area, so re-check before relying on an exact field or file name. ai-catalog examples are pinned to commit 58fb709 (main).

Both products increasingly read each other’s files directly rather than requiring a separate copy per tool: VS Code’s Local harness can read Claude Code hooks (behind chat.useClaudeHooks) and .claude/agents/*.md custom agents, and Copilot’s own Agent Skills implementation reads the same .claude/skills/ folder Claude Code does. That convergence is what makes the migration path in the second half of this page realistic rather than a full duplication of every file.

Mapping table

Each row names the surface, its Claude Code mechanism, its GitHub Copilot mechanism (VS Code, the cloud coding agent, and the CLI, noted where they diverge), and, where one exists, the closest AGENTS.md-only equivalent — the subset any AGENTS.md-reading tool understands with no vendor-specific file at all. A companion page in this sub-section covers each surface in depth; this table only maps names.

Surface Claude Code GitHub Copilot (VS Code / cloud agent / CLI) AGENTS.md-only

Instructions

CLAUDE.md (project root, nested directories, user ~/.claude/CLAUDE.md, enterprise) —  Instruction & Memory Files

.github/copilot-instructions.md, repo-root, read across Chat on github.com, the VS Code/CLI agents and code review

AGENTS.md at the repository root. Claude Code v2.1.277+ reads it when no CLAUDE.md is present (Claude Code — AGENTS.md); Copilot Chat in VS Code, the Copilot CLI, the cloud agent and code review read it too (GitHub — Support for different types of custom instructions). The CLI and the cloud agent also accept a root CLAUDE.md or GEMINI.md instead. The wider tool list is at agents.md

Path instructions

Nested CLAUDE.md files (load only for that subtree) and .claude/rules/*.md with a paths: glob

.github/instructions/*.instructions.md, applyTo: glob in YAML frontmatter — verified against GitHub’s custom-instructions docs and VS Code’s

No direct equivalent — AGENTS.md’s own nesting (a subdirectory’s AGENTS.md takes priority for work in that subtree) is the closest portable substitute, but it has no glob-based applyTo scoping

Prompt files / commands

.claude/commands/*.md, merged into the Skills mechanism — see Prompt Files & Slash Commands

.github/prompts/.prompt.md, /name in chat — verified against GitHub’s prompt-files tutorial. As of 2026-09-28, VS Code’s own docs mark prompt files *deprecated for Agent Host sessions, in favor of migrating them to Agent Skills (see VS Code — Prompt files)

No direct equivalent — a short, invoke-by-name procedure has no AGENTS.md-only form; write it as a skill instead (next row)

Skills

.claude/skills/<name>/SKILL.md — Skills

Same Agent Skills open standard (agentskills.io): .github/skills/ or .agents/skills/ (project), ~/.copilot/skills/ or ~/.agents/skills/ (personal) — verified against GitHub’s Agent Skills docs. Copilot also reads the same .claude/skills/ folder Claude Code uses, so one folder serves both tools without duplication

The Agent Skills standard itself is tool-agnostic at the name/description/body level; Claude-specific frontmatter (allowed-tools, context: fork, and so on) is not part of the shared baseline

Agents

.claude/agents/*.md custom subagents, plus built-ins (Explore, Plan, general-purpose, …​) —  Subagents & Custom Agents

.github/agents/.agent.md (project) / ~/.copilot/agents/.agent.md (personal) — verified against GitHub’s CLI custom-agents docs. VS Code’s own custom agents (VS Code — Custom agents) read .github/agents/.agent.md *and .claude/agents/*.md in the Claude format, so a Claude subagent file and a VS Code custom agent can share one directory

No shared frontmatter format; an AGENTS.md-only project names delegation conventions in prose rather than as a discrete agent file

Hooks

PreToolUse, PostToolUse, Stop, SessionStart and 25+ other lifecycle events, in .claude/settings.json  — see the full event/exit-code contract on Hooks and Claude Code — Hooks reference

Two independent hook layers, both real: (1) Copilot’s own .github/hooks/.json (repo) or ~/.copilot/hooks/.json (personal), 8 events (sessionStart, sessionEnd, userPromptSubmitted, preToolUse, postToolUse, agentStop, subagentStop, errorOccurred) — verified against GitHub — About hooks; (2) VS Code’s Local harness can instead read Claude Code’s own .claude/settings.json hooks directly, behind the chat.useClaudeHooks setting — verified against VS Code — Hooks. Event names, payloads and available tools differ across all three, so a hook script written for one is not a drop-in for another even when the event name matches

No equivalent — a lifecycle hook is inherently tool-specific, since it runs inside one product’s agentic loop

Permissions

Permission modes (default/Manual, acceptEdits, plan, auto, dontAsk, bypassPermissions) plus permissions.allow/ask/deny rules in a settings file — see Permissions & Settings and Claude Code — Choose a permission mode

VS Code’s own approval settings: chat.tools.global.autoApprove (all workspaces), chat.tools.eligibleForAutoApproval (which tools may ever be auto-approved), and chat.tools.terminal.autoApprove for a per-command or regex terminal allowlist — verified against VS Code — Approvals & permissions. chat.tools.global.autoApprove removes confirmation prompts in every workspace, so any tool call the agent makes, including one steered by injected content, runs unreviewed — the same risk as Claude Code’s bypassPermissions. Prefer a scoped terminal allowlist. The Copilot CLI and cloud agent have their own, separately documented approval/trust prompts rather than sharing this VS Code setting

No shared syntax — an allow/deny rule pattern is specific to the product enforcing it

MCP config

.mcp.json (project, committed) or ~/.claude.json (user/local scope) — see Configuring MCP Servers and Claude Code — Connect Claude Code to tools via MCP

.vscode/mcp.json (VS Code-native servers key) or a portable .mcp.json at the project root (mcpServers key, the same shape Claude Code reads) — verified against VS Code — MCP servers. The Copilot CLI and cloud agent read their own MCP configuration surfaces, documented separately per product

.mcp.json’s portable `mcpServers shape is the de facto shared format — both Claude Code and VS Code read it without translation, even though neither vendor calls it an AGENTS.md-family file

Plugins / distribution

A .claude-plugin/plugin.json manifest plus marketplace.json, bundling skills/agents/hooks/MCP as one installable unit — see Plugins & Marketplaces and Claude Code — Plugins overview

Copilot plugins and marketplaces: a plugin.json manifest bundling custom agents, skills, hooks and MCP/LSP servers, listed in a marketplace.json under .github/plugin/ (or .claude-plugin/), installed with copilot plugin install in the CLI or through enabledPlugins in .github/copilot/settings.json for the cloud agent — verified against GitHub Copilot — About plugins. New plugins are encouraged to use the open Agent Plugins 1.0 format ($schema: https://agent-plugins.org/schemas/1.0.0/plugin.schema.json, agent-plugins.org). VS Code installs plugins from marketplaces or Git sources, picks up the ones the Copilot CLI installed under ~/.copilot/installed-plugins/, and detects the Claude format (.claude-plugin/plugin.json) alongside the Copilot and Agent Plugins formats — verified against VS Code — Agent plugins

No equivalent — packaging is inherently a distribution mechanism, not a file convention a bare-Markdown tool reads

Output styles

A Markdown file with name/description/keep-coding-instructions frontmatter, switched with /output-style, changing tone/format for the whole session — see Output Styles, Status Line & More and Claude Code — Output styles

No direct equivalent. Neither GitHub’s Copilot docs nor VS Code’s agent-customization overview (VS Code — Agent customization overview) document a session-wide, swappable response-format switch. The closest substitute is folding tone/format guidance into a custom agent’s own instructions (Subagents & Custom Agents), which fixes the tone to that one agent rather than letting it apply, and be switched, across the whole session

No equivalent

Status line

A shell script configured as statusLine in a settings file, receiving session JSON on stdin and rendering above the terminal footer — see Output Styles, Status Line & More and Claude Code — Customize your status line

No direct equivalent documented for VS Code’s Copilot Chat surfaces or the CLI as of 2026-09-28; VS Code’s own status bar is an editor-wide feature with no Copilot-specific customization hook comparable to Claude Code’s stdin-driven script

No equivalent

Migrating a Claude-first catalog to also serve Copilot

ai-catalog (this account’s own skill/agent catalog, albertoirurueta/ai-catalog, pinned at 58fb709) is Claude-first: 102 skills under .claude/skills/<name>/SKILL.md, three agents under .claude/agents/, and no AGENTS.md, no .github/copilot-instructions.md, no .github/agents/.agent.md, and no .github/prompts/.prompt.md on main. Its own comparison page, Claude Code vs. GitHub Copilot vs. OpenAI Codex, maps the same surfaces from the catalog’s point of view; read the two side by side, since a fast-moving surface like this one can drift between the two pages' write dates.

Given the "shared file, no duplication" pattern the mapping table above keeps surfacing, extending a Claude-first repository like this one to also serve Copilot needs four additions, roughly in order of effort:

  1. AGENTS.md at the repository root. The cheapest addition. Per the Instructions row above, Copilot Chat in VS Code, the Copilot CLI, the cloud agent and code review all read it, and so does Claude Code (v2.1.277+) when no CLAUDE.md is present. ai-catalog already has a CLAUDE.md, so Claude Code would ignore a bare AGENTS.md. Move the tool-neutral content into AGENTS.md and keep CLAUDE.md as an @AGENTS.md import plus any Claude-only addenda; Instruction & Memory Files covers that import and the symlink alternative.

  2. .github/copilot-instructions.md. Needed in addition to AGENTS.md, not instead of it: Copilot Chat on GitHub.com reads repository-wide instructions only from .github/copilot-instructions.md, not from AGENTS.md. Keep it short and pointed at the same conventions AGENTS.md states, rather than restating the whole file.

  3. .github/agents/.agent.md for the catalog’s three agents. VS Code already reads .claude/agents/.md in the Claude format, but the Copilot CLI and the cloud agent look in .github/agents/. Porting iru-gate-runner.md, iru-isolated-skill-executor.md or iru-change-summarizer.md (Agents) is mostly a frontmatter translation. Copilot’s tools list takes its own aliases: Bash maps to execute and Read to read. Skill has no alias, and Copilot ignores tool names it doesn’t recognize, so it is dropped. That matters for iru-gate-runner, whose body tells it to prefer invoking the named gate skill through the Skill tool: the port must either run the gate commands directly (the body’s own fallback, promoted to the default) or rely on Copilot loading the matching skill itself from its description, and its body has to say which.

  4. Prompt files, only where a Copilot-specific invocation is actually needed. VS Code’s docs mark prompt files deprecated for Agent Host sessions in favor of Agent Skills (see the Prompt files / commands row above), and Copilot already reads the catalog’s .claude/skills/ folder, where each skill is also a /name slash command in VS Code. Most of the catalog therefore needs no .github/prompts/*.prompt.md files at all. Write one only for a workflow that genuinely wants a Copilot-native invocation distinct from the shared skill.

Example files for the migration

The three files below are minimal, illustrative additions for ai-catalog; none of them exists in the repository at the pinned commit. Each is written against the official page linked after it.

AGENTS.md
# AGENTS.md

ai-catalog is a collection of agent skills. There is no application code to compile or unit-test here; the
deliverables are the skills and the Antora docs that describe them.

## Layout
- Skills: `.claude/skills/<name>/SKILL.md`, one directory per skill.
- Agents: `.claude/agents/<name>.md`.
- Docs: `docs/`, an Antora site.

## Build
- Install the docs toolchain: `cd docs && npm ci`
- Build the docs site: `cd docs && npx antora antora-playbook.yml`

## Conventions
- Every skill and agent name starts with `iru-`, in its directory name, its frontmatter `name`, and every
  cross-reference to it.
- A skill's `description` states its exact invocation form, for example `/iru-check-license <path-or-glob>`.
- Skills must not assume they run inside ai-catalog; they detect language and tooling at runtime.

AGENTS.md has no required fields or headings; it is plain Markdown, and the file nearest to the edited file takes precedence. See agents.md — the open AGENTS.md format.

CLAUDE.md, reduced to an import plus Claude-only addenda
@AGENTS.md

## Claude Code
- Agents under `.claude/agents/` are delegated to with the Agent tool, never invoked as slash commands.
.github/copilot-instructions.md
This repository is a catalog of agent skills under `.claude/skills/` and agents under `.claude/agents/`.
There is no application code to build or test; only the Antora docs under `docs/` build, with
`cd docs && npx antora antora-playbook.yml`.

Every skill and agent name starts with `iru-`. A skill's `description` must state its exact invocation form.
The full conventions are in `AGENTS.md` at the repository root.

The file is natural-language Markdown in the .github directory; whitespace between instructions is ignored. See GitHub — Adding repository custom instructions for GitHub Copilot.

.github/agents/iru-gate-runner.agent.md
---
name: iru-gate-runner
description: Runs a single verification or quality-gate check (tests, coverage, lint, license headers, secret scan, or a full build) in an isolated context and reports back only a compact, structured summary, never the raw report.
tools: ["execute", "read"]
---

You are a narrow-purpose runner and reporter for verification/quality-gate work. Run exactly the one check the
prompt names, then report only the summary it asks for.

1. Run the check's underlying command directly (for example `mvn test -Dtest=X` or `dotnet test --filter ...`),
   scoped exactly as the prompt says. If a skill in `.claude/skills/` covers the check, read its `SKILL.md`
   first for the exact command and report location.

(steps 2 to 4 and "What you report back" as in .claude/agents/iru-gate-runner.md)

Step 1 replaces the Claude body’s "prefer the Skill tool" instruction, since the ported agent has no Skill tool. description is the only required property; name defaults to the file name, and omitting tools grants every tool. execute and read are Copilot’s primary aliases for the Claude tools Bash and Read. The body can be up to 30,000 characters. See GitHub Copilot — Custom agents configuration and GitHub Copilot — Create custom agents for the CLI.

The shared .claude/skills/ support is the load-bearing fact behind all four steps: because both products read the same folder, none of ai-catalog’s 102 skills needs to be copied or renamed to reach Copilot. Some frontmatter still needs fixing, though. The Agent Skills specification and VS Code both cap description at 1,024 characters, and at the pinned commit 84 of the 102 descriptions are longer than that. Separately, 52 of the 102 frontmatter blocks fail a strict YAML parse ("mapping values are not allowed here"), and Claude Code’s own docs say a skill whose frontmatter doesn’t parse still loads, but with no fields set. So the migration has a fifth step, done in the shared SKILL.md files themselves: shorten every description to 1,024 characters or fewer, and make every frontmatter block parse as YAML, for example by quoting a plain-scalar description that contains : followed by a space. See Agent Skills — Specification (description field), VS Code — Agent Skills and Claude Code — Frontmatter reference. With that done, the additions above are the thin, Copilot-specific layer on top of a catalog that otherwise already works for both tools. Hooks, plugin packaging and MCP configuration are only partly shared. VS Code can read Claude Code hooks behind chat.useClaudeHooks, the Claude plugin format and a root .mcp.json, but the Copilot CLI and the cloud agent use their own hook files, plugin manifests and MCP configuration (see the Hooks, Plugins and MCP config rows above). Anything the catalog adds on those surfaces needs a real, tool-specific file rather than a thin translation layer.