TL;DR
- VS Code の GitHub Copilot Chat は、特定ディレクトリに置いた
SKILL.mdを「スキル(カスタムコマンド)」として自動で読み込む - 読み込み先は
chat.agentSkillsLocations設定で制御できる - デフォルトでは
.github/skills/.claude/skills/.copilot/skillsあたりがスキャン対象になっており、Claude Code や Codex のスキルと併用すると Copilot Chat にスキルが二重表示される - 値には ディレクトリの相対パスを書く。グロブ+ファイル名(
.agents/skills/**/SKILL.md)はNGでPaths must be relative...のリントエラーになる
結論、こう書けば二重表示が解消できる👇
// .vscode/settings.json
"chat.agentSkillsLocations": {
".agents/skills": true,
".claude/skills": false
}
はじめに
最近は1つのリポジトリに対して
- GitHub Copilot(VS Code)
- Claude Code
- Codex
…と、複数のAIコーディングエージェントを併用する人が増えてきました。
このとき悩ましいのが 「スキル(SKILL.md)の置き場所」 です。
各エージェントが独自のディレクトリ規約を持っているため、共有しようとすると重複読み込みが起きがちです。
問題:Copilot Chat にスキルが二重で出てくる
.agents/skills に置いたスキルを Claude Code / Codex 側にも読み込ませるため、.claude/skills にシンボリックリンクを作成しました。
すると、Copilot Chat のスキル一覧に同じスキルが2つずつ表示されるようになりました。
原因はシンプルで、Copilot Chat が
-
.agents/skills(自分で追加した場所) -
.claude/skills(デフォルトでスキャンされる場所)
の両方を読み込んでいたためです。同じ実体を2か所から拾っているので、当然ダブります。
解決:chat.agentSkillsLocations で読み込み先を制御
.vscode/settings.json(またはユーザー設定)に chat.agentSkillsLocations を書くと、スキルの読み込み先ディレクトリを明示的に指定できます。
値は { "ディレクトリパス": boolean } のマップで、true で有効・false で無効です。
二重表示を解消するには、「使いたい場所だけ true、ダブる原因の場所を false」にします。
// .vscode/settings.json
{
// ...
"chat.agentSkillsLocations": {
".agents/skills": true,
".claude/skills": false,
},
}
これで .agents/skills 由来のスキルだけが1回ずつ表示されるようになりました。
重複の原因が
.claude/skillsではなく.copilot/skillsや.github/skills側だった場合は、falseにするキーをそちらに変えてください。
ハマりどころ:値は「ディレクトリの相対パス」
最初、こう書いてリントエラーを食らいました。
// ❌ NG
"chat.agentSkillsLocations": {
".agents/skills/**/SKILL.md": true
}
出たエラー
Paths must be relative or start with '~/'.
Absolute paths and '\' separators are not supported.
chat.agentSkillsLocations のキーは 「ディレクトリの相対パス」 を期待しており、
- グロブ(
**)+ファイル名(SKILL.md)を含むパスはNG - 絶対パスはNG
-
\(バックスラッシュ)区切りはNG(Windowsでも/を使う) -
~/(ホーム始まり)はOK
という仕様です。
SKILL.md まで含めてしまうのが間違いで、スキルが入っているディレクトリだけを指定すれば、その配下を再帰的に探してくれます。
// ✅ OK
"chat.agentSkillsLocations": {
".agents/skills": true,
".claude/skills": false
}
デフォルトのスキャン対象
Copilot 拡張は、明示設定がなくても以下のようなディレクトリを既定でスキャンします(環境・バージョンにより差異あり)。
.github/skills.claude/skills.copilot/skills
つまり Claude Code 用に .claude/skills を用意しているだけで、Copilot 側も勝手に拾うということです。これが今回の二重表示の正体でした。
「他エージェント用のディレクトリも Copilot に読まれている」と意識しておくと、重複に気づきやすくなります。
まとめ
- Copilot Chat のスキル読み込み先は
chat.agentSkillsLocationsで制御できる - 値は ディレクトリの相対パス(
~/始まりもOK)。グロブ+ファイル名・絶対パス・\区切りはNG - Claude Code / Codex とスキルを共有して二重表示になったら、片方を
falseにして解決 - マルチエージェント環境では「どのディレクトリがどのツールに読まれるか」を整理しておくと事故が減る
"chat.agentSkillsLocations": {
".agents/skills": true,
".claude/skills": false
}
現場からは以上です。