Skip to content

AI Coding Instructions

Reusable coding instructions, agent skills, custom agents, and prompt templates for AI coding agents.

ai/
├── common/                       # shared — same files read as-is by every tool
│   ├── instructions/*.instructions.md   # general + per-language/platform, one copy each
│   └── skills/<name>/SKILL.md
├── copilot/
│   └── agents/<name>.md          # Copilot-only — alias-based tools, disable-model-invocation
└── claude/
    └── agents/<name>.md          # Claude Code-only — real tool names

The applyTo frontmatter on instruction files is a Copilot-specific glob-scoping mechanism, but it's inert, harmless text to every other consumer (Claude Code's @import just inlines raw file content; Codex/AGENTS.md is plain text) — so there's exactly one copy of each instruction file, used as-is everywhere. Only agents/ needs a real per-tool split, since Copilot and Claude Code parse genuinely different, type-checked frontmatter schemas there.

Three kinds of content: instructions (always-on guidance), skills (workflows loaded only when relevant — avoids bloating context), agents (specialist personas with restricted tools).

NOTE

See the dotfiles repo for a real-world example of scripting this setup end-to-end (personal Claude/Copilot settings, MCP servers) as part of a full machine bootstrap.

Quick Start

One-liner — bootstraps instructions + skills for both tools at once:

sh
curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/shell/setup-ai-agent.sh" | bash -s -- -t both

Use -t claude or -t copilot to set up just one, -p <preset> for a stack-specific instruction set (javascript, python, kubernetes, go), -a to also install agents, -g for personal/global instead of repo setup, -c (with -g -t copilot) to also populate Copilot CLI's personal file, or -r to safely run rtk init -g --copilot without losing existing content (see RTK below). See setup-ai-agent.sh or run it with -h for details.

Or do it by hand, one curl at a time:

Claude Code

sh
curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/instructions/general.instructions.md" \
  -o "CLAUDE.md"

for skill in code-review repository-audit commit-message pull-request; do
  mkdir -p ".claude/skills/${skill}"
  curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/skills/${skill}/SKILL.md" \
    -o ".claude/skills/${skill}/SKILL.md"
done

GitHub Copilot

sh
curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/instructions/general.instructions.md" \
  -o ".github/copilot-instructions.md"

for skill in code-review repository-audit commit-message pull-request; do
  mkdir -p ".github/skills/${skill}"
  curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/skills/${skill}/SKILL.md" \
    -o ".github/skills/${skill}/SKILL.md"
done

That's a working baseline for either tool. See the sections below for scoped per-language instructions, personal/global setup, custom agents, and every other option.


Claude Code

Repo setup

Claude Code reads CLAUDE.md at the repository root. Point it at the general instructions, then append whichever scoped files match the repo's stack:

sh
curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/instructions/general.instructions.md" \
  -o "CLAUDE.md"
# then append the scoped files relevant to this repo, e.g.:
curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/instructions/docker.instructions.md" \
  >> "CLAUDE.md"

The applyTo frontmatter at the top of each file is inert text to Claude Code — it just gets read as part of the prompt, no parsing/scoping applied.

See Available Instructions for the full list of scoped files.

Personal instructions (user profile)

Claude Code always reads ~/.claude/CLAUDE.md for every repo — no settings/opt-in flag required (unlike Copilot's chat.instructionsFilesLocations). Since Claude Code has no applyTo-style scoping, only tool-agnostic, always-relevant guidance belongs here — the General Development instructions fit, the language/platform-scoped ones don't.

Use CLAUDE.md's @path/to/file import syntax to compose it alongside other personal files rather than overwriting the whole thing:

sh
curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/instructions/general.instructions.md" \
  -o "${HOME}/.claude/general-instructions.md"
echo "@general-instructions.md" >> "${HOME}/.claude/CLAUDE.md"

Skills

Claude Code reads skills from .claude/skills/ (repo) or ~/.claude/skills/ (personal, applies to every repo — no opt-in needed). The ai/common/skills/*/SKILL.md files are already in Claude's native format (no conversion needed):

sh
# Repo
for skill in code-review repository-audit commit-message pull-request; do
  mkdir -p ".claude/skills/${skill}"
  curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/skills/${skill}/SKILL.md" \
    -o ".claude/skills/${skill}/SKILL.md"
done

# Personal (swap the target dir)
for skill in code-review repository-audit commit-message pull-request; do
  mkdir -p "${HOME}/.claude/skills/${skill}"
  curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/skills/${skill}/SKILL.md" \
    -o "${HOME}/.claude/skills/${skill}/SKILL.md"
done
  • Automatic: Claude Code detects when a skill is relevant and loads it (based on description in frontmatter)
  • Explicit: Include the skill name with a / prefix in your prompt: /code-review analyze the auth module

Custom Agents

Claude Code subagents live in .claude/agents/<name>.md. The frontmatter differs from Copilot's agent format — tools: lists actual tool names instead of aliases, and there's no disable-model-invocation flag (Claude Code auto-delegates based on description, or you invoke the agent by name). Canonical source: ai/claude/agents/.

Some agents also tune model: and effort: for cost/quality — cheaper model: haiku for mechanical, low-risk work; effort: high (same model, more reasoning) for analysis where missing a real bug/vuln is costly. code-reviewer also preloads the code-review skill via skills: [code-review] instead of duplicating its checklist inline, so the two can't drift out of sync. These fields are Claude Code-only — Copilot's agent schema doesn't have model/effort/skills in the same shape, so ai/copilot/agents/ intentionally doesn't mirror them.

NameDescriptionModel / Effort
Code ReviewerRead-only code review specialist (preloads code-review skill)effort: high
Security AuditorSecurity-focused vulnerability analysiseffort: high
RefactorerImproves structure while preserving behaviordefault
Test WriterGenerates tests following project conventionsmodel: haiku
Doc WriterGenerates and updates documentation from codemodel: haiku
Migration AssistantDependency upgrades and framework migrationsdefault
IaC ReviewerReviews Terraform, K8s, Docker, CI/CD configseffort: high
Copilot tool aliasClaude Code tool name(s)
readRead, Glob
searchGrep, Glob
editEdit, Write
executeBash
webWebFetch, WebSearch
agentTask
todoTodoWrite
sh
# Repo
mkdir -p .claude/agents
for agent in code-reviewer security-auditor refactorer test-writer doc-writer migration-assistant iac-reviewer; do
  curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/claude/agents/${agent}.md" \
    -o ".claude/agents/${agent}.md"
done

# Personal (swap the target dir) — applies to every repo, no opt-in needed
mkdir -p "${HOME}/.claude/agents"
for agent in code-reviewer security-auditor refactorer test-writer doc-writer migration-assistant iac-reviewer; do
  curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/claude/agents/${agent}.md" \
    -o "${HOME}/.claude/agents/${agent}.md"
done

GitHub Copilot

VS Code

How it works

GitHub Copilot in VS Code reads instructions from several locations, including your home directory for skills:

File/FolderPurpose
.github/copilot-instructions.mdGlobal workspace prompt — always active
AGENTS.md, CLAUDE.mdCross-tool alias — always active
.github/instructions/*.instructions.mdScoped — activated by applyTo glob
.github/skills/<name>/SKILL.mdAgent skills (repo) — on demand
~/.copilot/skills/<name>/SKILL.mdAgent skills (personal) — on demand, enabled by default
~/.claude/skills/<name>/SKILL.mdAgent skills (personal, Claude alias) — on demand, enabled by default
.github/agents/<name>.mdCustom agents — selectable from the agent picker
.github/prompts/*.prompt.mdPrompt files — reusable templates

Setup

Option 1 — General instructions only (quickest)

sh
curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/instructions/general.instructions.md" \
  -o ".github/copilot-instructions.md"

The applyTo frontmatter at the top is harmless here — .github/copilot-instructions.md isn't glob-scoped, it's always active regardless, so the 3-line header is just inert text.

Option 2 — Scoped instructions (recommended for multi-tech repos)

sh
mkdir -p .github/instructions
INSTRUCTIONS="javascript docker kubernetes github-actions"
for name in $INSTRUCTIONS; do
  curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/instructions/${name}.instructions.md" \
    -o ".github/instructions/${name}.instructions.md"
done

Option 3 — Full setup (instructions + skills + agents)

sh
# Instructions
mkdir -p .github/instructions
for name in general javascript docker kubernetes github-actions; do
  curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/instructions/${name}.instructions.md" \
    -o ".github/instructions/${name}.instructions.md"
done

# Skills
for skill in code-review repository-audit commit-message pull-request; do
  mkdir -p ".github/skills/${skill}"
  curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/skills/${skill}/SKILL.md" \
    -o ".github/skills/${skill}/SKILL.md"
done

# Agents
mkdir -p .github/agents
for agent in code-reviewer security-auditor; do
  curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/copilot/agents/${agent}.md" \
    -o ".github/agents/${agent}.md"
done

See Recommended setup by project type for stack-specific presets.

Personal instructions (user profile)

Create *.instructions.md files in ~/.copilot/instructions/ to apply personal conventions to all your workspaces. They are not enabled by default — opt in via chat.instructionsFilesLocations in your user settings.json:

sh
mkdir -p ~/.copilot/instructions
curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/instructions/general.instructions.md" \
  -o "${HOME}/.copilot/instructions/general.instructions.md"

Then enable in user settings.json (Cmd+Shift+P → "Open User Settings (JSON)"):

json
{
  "chat.instructionsFilesLocations": {
    ".github/instructions": true,
    "~/.copilot/instructions": true
  }
}

Configure via settings.json

All customization features can be enabled and relocated via settings. The workspace .vscode/settings.json applies to the project; your user settings.json applies globally.

jsonc
{
  // ── Instructions ─────────────────────────────────────────────────────────
  // Where to look for *.instructions.md files (supports ~ expansion)
  "chat.instructionsFilesLocations": {
    ".github/instructions": true,     // workspace (default on)
    ".claude/rules": true,            // workspace, Claude format
    "~/.copilot/instructions": true,  // personal — opt in to enable
    "~/.claude/rules": true           // personal, Claude format — opt in
  },
  "chat.includeApplyingInstructions": true,    // auto-include files with matching applyTo
  "chat.useAgentsMdFile": true,                // AGENTS.md always-on
  "chat.useClaudeMdFile": true,                // CLAUDE.md always-on

  // ── Skills ───────────────────────────────────────────────────────────────
  // All four locations enabled by default
  "chat.useAgentSkills": true,
  "chat.agentSkillsLocations": {
    ".github/skills": true,       // workspace
    ".claude/skills": true,       // workspace, Claude alias
    "~/.copilot/skills": true,    // personal (default on)
    "~/.claude/skills": true      // personal, Claude alias (default on)
  },

  // ── Agents ───────────────────────────────────────────────────────────────
  // Add personal agents location (not enabled by default)
  "chat.agentFilesLocations": {
    ".github/agents": true,       // workspace (default on)
    "~/.copilot/agents": true     // personal — add to enable
  },

  // ── Prompts ──────────────────────────────────────────────────────────────
  "chat.promptFilesLocations": {
    ".github/prompts": true       // workspace (default on)
  },

  // ── Per-feature instructions (commit, PR, review) ────────────────────────
  // Note: codeGeneration.instructions is deprecated since VS Code 1.102
  //       use *.instructions.md files with applyTo: "**" instead
  "github.copilot.chat.commitMessageGeneration.instructions": [
    { "file": ".github/instructions/commit-message.instructions.md" }
  ],
  "github.copilot.chat.pullRequestDescriptionGeneration.instructions": [
    { "file": ".github/instructions/pull-request.instructions.md" }
  ],
  "github.copilot.chat.reviewSelection.instructions": [
    { "file": ".github/instructions/code-review.instructions.md" }
  ],

  // ── Monorepo ─────────────────────────────────────────────────────────────
  // Discover instructions/skills/agents from parent folder when opening a subfolder
  "chat.useCustomizationsInParentRepositories": false
}

Git workflow instructions (commit + PR)

sh
mkdir -p .github/instructions
curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/instructions/commit-message.instructions.md" \
  -o ".github/instructions/commit-message.instructions.md"
curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/instructions/pull-request.instructions.md" \
  -o ".github/instructions/pull-request.instructions.md"
curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/instructions/code-review.instructions.md" \
  -o ".github/instructions/code-review.instructions.md"

CLI

Copilot CLI reads from both the repository and your home directory. Personal config in ~/.copilot/ is loaded every session across all repos.

FileScope
~/.copilot/copilot-instructions.mdPersonal (all sessions, all repos)
~/.copilot/skills/<name>/SKILL.mdPersonal skills (all repos)
.github/copilot-instructions.mdRepository
.github/skills/<name>/SKILL.mdRepository skills
AGENTS.md, Copilot.md, GEMINI.md, CODEX.mdRepository (cross-tool aliases)

Personal setup (applies to all repos)

sh
# Personal instructions — always loaded in every Copilot CLI session
mkdir -p ~/.copilot
curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/instructions/general.instructions.md" \
  -o "${HOME}/.copilot/copilot-instructions.md"

# Personal skills — available everywhere
for skill in code-review repository-audit commit-message pull-request; do
  mkdir -p "${HOME}/.copilot/skills/${skill}"
  curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/skills/${skill}/SKILL.md" \
    -o "${HOME}/.copilot/skills/${skill}/SKILL.md"
done

Key CLI commands

CommandPurpose
/skills listList available skills
/skills infoDetail about a skill
/skills reloadReload after adding skills mid-session
/planCreate an implementation plan before coding
/reviewReview current changes
/delegateOffload work to cloud agent
/modelSwitch model mid-session
/contextShow context window usage
/fleetBreak task into parallel subtasks
/clear or /newReset context between unrelated tasks

Allowed tools

Pre-configure tool permissions via CLI flags:

sh
copilot --allow-tool='shell(git:*)' --deny-tool='shell(git push)'

Common patterns: shell(git:*), shell(npm run:*), shell(bun:*), write.

Agents

Agents define specialist personas with their own instructions and restricted tool access. Canonical source: ai/copilot/agents/.

NameDescriptionTools
Code ReviewerRead-only code review specialistread, search
Security AuditorSecurity-focused vulnerability analysisread, search
RefactorerImproves structure while preserving behavioredit, search, read
Test WriterGenerates tests following project conventionsedit, search, read, execute
Doc WriterGenerates and updates documentation from codeedit, search, read
Migration AssistantDependency upgrades and framework migrationsedit, search, read, execute, web
IaC ReviewerReviews Terraform, K8s, Docker, CI/CD configsread, search

Setup (repository)

sh
mkdir -p .github/agents
for agent in code-reviewer security-auditor refactorer test-writer doc-writer migration-assistant iac-reviewer; do
  curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/copilot/agents/${agent}.md" \
    -o ".github/agents/${agent}.md"
done

Setup (personal — VS Code only)

Personal agents are supported in VS Code via chat.agentFilesLocations. Copilot CLI does not support a personal agents directory.

sh
mkdir -p ~/.copilot/agents
for agent in code-reviewer security-auditor refactorer test-writer doc-writer migration-assistant iac-reviewer; do
  curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/copilot/agents/${agent}.md" \
    -o "${HOME}/.copilot/agents/${agent}.md"
done

Enable in user settings.json:

json
{
  "chat.agentFilesLocations": {
    ".github/agents": true,
    "~/.copilot/agents": true
  }
}

Using agents

  • VS Code: Select the agent from the agent dropdown in the Chat panel
  • Copilot CLI: Copilot auto-delegates to an agent when it detects a matching task (unless disable-model-invocation: true)
  • Cloud agent: Agents are available when assigned to a task on GitHub

Agent configuration

Agent files support these YAML frontmatter properties:

yaml
---
description: What the agent does (required)
tools: ["read", "search"]     # Restrict available tools (omit for all)
model: claude-sonnet-4-5       # Override model (optional)
disable-model-invocation: false # If true, must be manually selected
---

Tool aliases: read, edit, search, execute (shell), web, agent, todo.


Reference

Available Instructions

All of these live in ai/common/instructions/ and are used as-is by Copilot, Claude Code, and Codex/AGENTS.md — pick the ones relevant to what you're setting up (General Development always applies; add scoped ones for the languages/platforms actually in the repo).

NameDescriptionInstruction NameType
General DevelopmentUniversal development practicesgeneralGeneral
Code ReviewCode review guidelines (lightweight)code-reviewReview
Commit MessageConventional Commits formatcommit-messageGit
Pull RequestPR description best practicespull-requestGit
JavaScript/TypeScriptScoped to JS/TS files (incl. Bun)javascriptLanguage
GoScoped to Go filesgoLanguage
Bash/ShellScoped to shell scriptsshellLanguage
PythonScoped to Python files (FastAPI)pythonLanguage
TypeScript MonorepoComplete TS monorepo setupts-monorepoArchitecture
DockerScoped to DockerfilesdockerPlatform
Kubernetes/HelmScoped to K8s YAML fileskubernetesPlatform
GitHub ActionsScoped to workflow filesgithub-actionsCI/CD
Terraform/IaCScoped to Terraform filesterraformPlatform

Available Skills

Skills are folders of instructions loaded on demand when the agent detects they're relevant to a task. All live in ai/common/skills/ — same format works for Copilot and Claude Code.

NameDescriptionSkill Name
Code ReviewFull review methodology with language checks & decision frameworkcode-review
Repository AuditComprehensive repo analysis (quality, security, performance, DevOps)repository-audit
Commit MessageConventional Commits generationcommit-message
Pull RequestPR description generationpull-request

commit-message, pull-request, and repository-audit also carry Claude Code-only frontmatter for perf/scope: allowed-tools grants narrowly-scoped tool calls (e.g. Bash(git diff *)) without a permission prompt while the skill is active, model: haiku (commit-message only) switches the session to a cheaper/faster model for that one formulaic turn, and effort: high (repository-audit) asks for more thorough reasoning on a task that's explicitly meant to be exhaustive. VS Code's Copilot schema doesn't recognize these fields — it flags them as an unsupported-attribute hint and ignores them, the same way it already ignores unrelated fields — so the shared file stays a no-op-safe superset rather than forking per tool.

See the Claude Code and Copilot sections above for setup commands and for the available custom agents (agent tables live there since the frontmatter schema is tool-specific).

Discovery order by tool

Each tool has its own discovery model. Repository-level settings take precedence over personal ones.

ToolRepo instructionsSkillsPersonal
Claude CodeCLAUDE.md, .claude/skills/.claude/skills/~/.claude/CLAUDE.md, ~/.claude/skills/
VS Code Chat.github/copilot-instructions.md, .github/instructions/, AGENTS.md, CLAUDE.md.github/skills/, .claude/skills/, ~/.copilot/skills/*, ~/.claude/skills/*~/.copilot/instructions/†, ~/.claude/rules/†, ~/.claude/CLAUDE.md
Copilot CLI.github/copilot-instructions.md, .github/skills/, AGENTS.md.github/skills/, ~/.copilot/skills/~/.copilot/copilot-instructions.md
GitHub cloud agent.github/copilot-instructions.md, .github/instructions/, AGENTS.md
OpenAI CodexAGENTS.md, CODEX.md

* Enabled by default in VS Code via chat.agentSkillsLocations. † Opt-in — add to chat.instructionsFilesLocations to enable.

Alias files (AGENTS.md, CLAUDE.md, Copilot.md, GEMINI.md, CODEX.md) provide cross-tool compatibility — most modern coding agents recognize them.

Token-Efficient Terminal Commands (RTK)

rtk is a CLI proxy that filters/compresses terminal command output (git, tests, build/lint, containers, GitHub CLI, AWS, IaC, package managers, 100+ commands total) before it reaches the model context, cutting token usage by 60-90%.

Install the auto-rewrite hook — this is the only setup that guarantees every supported command gets rewritten, since it intercepts the shell tool call itself instead of relying on the model to remember to type rtk:

sh
# Install (macOS/Linux)
brew install rtk
# or: curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh

# Enable the hook for your tool
rtk init -g --copilot   # GitHub Copilot (VS Code + CLI)
rtk init -g             # Claude Code (default agent)

None of the instruction files in ai/common/instructions/ embed RTK guidance as prompt text — the hook is the only mechanism relied on. general.instructions.md just points to this section.

NOTE

The auto-rewrite hook only intercepts shell/terminal tool calls. Built-in editor tools (e.g. VS Code's file read/search tools) are never rewritten by the hook — they're a separate, already token-efficient code path.

WARNING

rtk init -g --copilot overwrites ~/.copilot/copilot-instructions.md entirely with just its own RTK block — it does not merge into existing content. If you've already set up custom personal instructions there (see Copilot — Personal setup), running it directly will wipe them. Use setup-ai-agent.sh's -r flag instead — it backs up your existing content, runs the real installer, and merges the two back together (safe to re-run, never duplicates the block):

sh
curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/shell/setup-ai-agent.sh" | bash -s -- -r

rtk init -g (Claude Code, no --copilot flag) doesn't have this problem — it writes to its own separate file and is imported via @RTK.md, not baked into CLAUDE.md directly.

JavaScript / TypeScript

sh
mkdir -p .github/instructions
for name in javascript docker github-actions; do
  curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/instructions/${name}.instructions.md" \
    -o ".github/instructions/${name}.instructions.md"
done

Python (FastAPI)

sh
mkdir -p .github/instructions
for name in python docker github-actions; do
  curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/instructions/${name}.instructions.md" \
    -o ".github/instructions/${name}.instructions.md"
done

Kubernetes / DevOps

sh
mkdir -p .github/instructions
for name in kubernetes docker github-actions terraform shell; do
  curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/instructions/${name}.instructions.md" \
    -o ".github/instructions/${name}.instructions.md"
done

Go

sh
mkdir -p .github/instructions
for name in go docker github-actions; do
  curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/instructions/${name}.instructions.md" \
    -o ".github/instructions/${name}.instructions.md"
done

For Claude Code, curl the same files and cat/append them into CLAUDE.md instead (see Claude Code — Repo setup).

AGENTS.md (OpenAI Codex / GitHub Copilot coding agent)

AGENTS.md at the repository root is read by OpenAI Codex and any agent following the AGENTS.md convention:

sh
curl -fsSL "https://raw.githubusercontent.com/this-is-tobi/tools/main/ai/common/instructions/general.instructions.md" \
  -o "AGENTS.md"

Troubleshooting

Instructions not applied (GitHub Copilot)

  • File must be in .github/ (or .github/instructions/ for scoped files)
  • Scoped files must end in .instructions.md
  • Reload VS Code after adding new files or changing settings
  • Check applyTo frontmatter — patterns are glob-style and case-sensitive:
yaml
---
applyTo: "**/*.{js,ts}"
---

Skills not loading

  • Skill files must be named exactly SKILL.md (case-sensitive)
  • Each skill needs its own subdirectory under .github/skills/ (or .claude/skills/ for Claude Code)
  • YAML frontmatter must include name and description
  • Use /skills list in Copilot CLI to verify discovery
  • Use /skills reload after adding skills mid-session

Instruction file too large

Split the content across multiple scoped files. Each one is only loaded when its applyTo pattern matches the file being edited (Copilot) or when you choose to include it (Claude Code). For task-specific workflows, convert to skills instead — they're only loaded when relevant.