VS Code で Claude Code の SKILL.md にエラーが出る原因と対処法

VS Code で Claude Code の SKILL.md を開くと allowed-tools is not supportedUnexpected indentation のエラーが出る。原因は GitHub Copilot の Agent Skills バリデータが .claude/skills/ を自動検出している ためです。Claude Code の動作には影響ないけど、エディタがエラーとか出してると目障りなのでね…

files.associations に1行追加すれば消えます。

{
  "files.associations": {
    "**/.claude/skills/*/SKILL.md": "markdown"
  }
}

以下、原因の詳細と Agent Skills 標準の経緯、関連する既知の Issue を整理します。

何が起きているのか

GitHub Copilot が 2025年12月に Agent Skills というオープンスタンダードに対応しました。このスタンダード、実は Anthropic が 2025年10月に Claude Code で先行リリースしていたもので、後にオープンスタンダードとして公開された経緯があります。

で、このスタンダードでは Skills のファイル名として SKILL.md を使います。Claude Code も Copilot も同じ名前。偶然の一致じゃなくて、同じ仕様に基づいています。

問題はここからで、VS Code の Copilot バリデータが .claude/skills/ 配下の SKILL.md も 自動検出してバリデーションをかけてくる んですよね。

なぜ Warning が出るのか

Agent Skills 標準には以下のフィールドが定義されています。

フィールド必須実験的
nameYesNo
descriptionYesNo
licenseNoNo
compatibilityNoNo
metadataNoNo
allowed-toolsNoYes

allowed-tools実験的フィールドです。Claude Code では普通に使えるんですが、VS Code 側の Copilot バリデータがまだ対応していないので Warning が出ます。

ただ、問題は allowed-tools だけじゃありません。

description: | で Error が出る

実際の SKILL.md を見てみましょう。Claude Code の Skills では description に YAML のブロックスカラー(|)を使って複数行で書くのが一般的です。

---
name: blog-scraper
description: |
  This skill should be used when the user asks to "ブログをスクレイピングして",
  "SIOS Tech Labの記事を保存して", or provides a SIOS Tech Lab blog URL to scrape and save.
allowed-tools: Read, Edit, Bash
---

これを VS Code で開くと、こうなります。

Error: Unexpected indentation     (L4, L5)
Warning: Attribute 'This skill should be used when...' is not supported in skill files.
Warning: Attribute 'allowed-tools' is not supported in skill files.

Error 2つに Warning 3つ。結構派手に怒られます。

原因は Copilot のバリデータが YAML のブロックスカラー記法(|)を解釈できていない こと。description: | の後のインデントされた行を「description の値の続き」ではなく「別の属性」として読んでしまうので、インデントが不正だと怒り、さらに行の内容を未知の属性名として Warning を出します。

Claude Code 側はちゃんとパースしているので、| で書いても動作は問題ありません。確認済みです。

ちなみに | を使わずに1行で書けば Error は消えます。ただ、description が長くなると読みにくいので、実用的にはちょっと厳しい。結局 files.associations で抑制するのが現実的な対処です。

自動検出されるパス

VS Code Copilot は以下のパスを自動で検出します。

パス用途
.github/skills/プロジェクト(標準)
.claude/skills/プロジェクト(後方互換)
~/.copilot/skills/パーソナル
~/.claude/skills/パーソナル(後方互換)

.claude/skills/ が「後方互換」として検出対象に入っています(後方互換性なのか??)。Claude Code ユーザーの Skills がそのまま Copilot でも使えるようにする意図なんですが、バリデータの対応が追いついていない状態です。

回避策: files.associations で Markdown として認識させる

回避策はシンプルです。SKILL.md を Copilot の Skill ファイルではなく、通常の Markdown ファイルとして認識させます。

.vscode/settings.json に以下を追加してください。

{
  "files.associations": {
    "**/.claude/skills/*/SKILL.md": "markdown"
  }
}

devcontainer を使っている場合は devcontainer.jsonsettings に追加しても OK です。

{
  "customizations": {
    "vscode": {
      "settings": {
        "files.associations": {
          "**/.claude/skills/*/SKILL.md": "markdown"
        }
      }
    }
  }
}

検証結果

項目設定前設定後
description: | の ErrorUnexpected indentationなし
allowed-tools の Warningnot supported in skill filesなし
Claude Code の動作正常正常(影響なし)

設定後に VS Code の Diagnostics を確認したところ、Warning は完全に消えていました。Claude Code 側のスキル一覧にも正常に表示されます。まぁMarkdownとして認識させているんで当たり前ですね。Claude Codeの設定ファイルを書くときは自力で頑張りましょう。

Agent Skills 標準の経緯

せっかくなので背景も整理しておきます。

日付できごと
2025年10月16日Anthropic が Agent Skills を発表(Claude Code で利用可能に)
2025年12月18日オープンスタンダードとして公開。同日に GitHub が Copilot での対応を発表
2025年12月VS Code 1.108 で実験的サポート追加

Anthropic が先に作ったものをオープン化して、GitHub が同日に採用を発表した流れです。Agent Skills は「一度書けばどこでも使える(write once, use everywhere)」を目指していて、対応ツールは Claude Code、GitHub Copilot の他に、Cursor、Goose、Amp なども実験的に対応しています。

Claude Code が先行して独自拡張を進めている分、標準仕様との差分が Warning として表面化したのが今回の件ですね。

関連する既知の Issue

この問題に関連して、いくつか Open の Issue があります。

Issue内容
anthropics/claude-code #23723user-invocableuser-invokable のスペル不一致。Claude Code CLI は user-invocable で動作するが、VS Code のスキーマは user-invokable を期待する
anthropics/skills #314SKILL.md のファイル名が大文字小文字を区別する仕様がドキュメントに記載されていない。skill.md(小文字)だとエラーなく無視される
anthropics/claude-code #13586.claude/commands/skill.md を作ると組み込みの Skill ツールと名前が衝突して、全カスタムコマンドが読み込まれなくなる

user-invocable / user-invokable の件は結構ハマりそうなポイントです。Claude Code CLI では user-invocable が正しいので、VS Code 側で Warning が出てもそのまま使ってください。VS Code の警告に従って user-invokable に変更すると、逆に Claude Code で動かなくなります。

まとめ

  • 原因:
    Claude Code と GitHub Copilot が同じ Agent Skills 標準を使っており、VS Code Copilot のバリデータが .claude/skills/ の SKILL.md を検出して Error / Warning を出す。description: | のブロックスカラーと allowed-tools が引っかかる
  • 対処:
    files.associations で Markdown として認識させる(1行追加)
  • 影響:
    Claude Code の動作には一切影響なし

2026年2月15日時点の情報です。検証環境は以下のとおり。

ソフトウェアバージョン
VS Code1.109.3
GitHub Copilot Chat 拡張0.37.6
Claude Code CLI / 拡張2.1.42

Agent Skills はまだ発展途上で、VS Code 側のバリデータが allowed-tools に対応したり、user-invocable のスペルが統一されたりすれば、この設定自体が不要になるはずです。

個人的には Claude Code の Skills と GitHub Copilot の Skills が統合される未来に期待してますが、まぁ希望的観測ですかね。今のところは Claude Code がガンガン先行しているので、この手の差分とはしばらく付き合うことになりそうです。

参考リンク

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

2人がこの投稿は役に立ったと言っています。
エンジニア募集中!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です