コンテンツにスキップ

Agent SDK でのスキル

facts /Claude Code /agent-sdk-skills

stable1 か月前 · 2026-08-24

概要

Claude Agent SDK でスキルを設定・発見・実行するための仕様。スキルは SKILL.md ファイルとしてファイルシステムに置き、SDK が起動時に自動検出してセッションで利用できるようにする。

仕様

スキルの動作

  • ファイルシステム成果物: .claude/skills/<name>/SKILL.md として作成する
  • ロード元: settingSources(Python: setting_sources)で指定したパスから SDK がロード
  • 自動検出: 起動時にメタデータを検出し、Claude が実際に呼び出すときに全文をロード
  • モデル呼び出し: Claude がコンテキストに応じて自律的に選択・呼び出す
  • ユーザー呼び出し: プロンプトで /<name> を送信することで直接ディスパッチできる
  • スコープ制御: skills オプションで呼び出せるスキルを制限できる
  • SDK にスキルを登録するプログラム API はない。スキルはファイルシステム上に作成する

skills オプション

値動作
省略検出済みスキルがすべて有効。Skill ツールも利用可能(CLI と同じ動作)
"all"検出済みスキルをすべて Claude が呼び出せる
["pdf", "docx"] などの名前リストリストに含まれるスキルのみ Claude が呼び出せる
[]Claude が呼び出せるスキルはない
  • skills を設定すると SDK は allowedTools に Skill ツールを自動追加する
  • 明示的な tools リストも渡す場合は "Skill" をそのリストに含める必要がある

スキルのロード確認

  • ストリームの開始付近で SDK がサブタイプ init のシステムメッセージを yield する
  • message.skills 配列(Python: message.data["slash_commands"])でロードされたスキルを確認できる
  • user-invocable: false のスキルはロードされるが skills 配列に現れない
  • 配列は skills リストへの含有にかかわらず、セッションが検出したスキルを列挙する

特定スキルのみを許可する

  • skills リストにスキル名を渡す。名前は SKILL.md の name フィールドまたはディレクトリ名と一致させる
  • プラグイン提供スキルには plugin:skill 形式を使う
  • 完全一致のみ。ワイルドカード不可
  • リストにないスキルは Skill ツールが拒否するが、ファイルはディスク上に残る
  • /<name> でのユーザーディスパッチはリスト外でも機能する

コマンドの種類(Agent SDK セッション)

種別説明
組み込みコマンドClaude Code プロセスにコーディングされたロジック(例: /compact)
バンドルスキルClaude Code に同梱のプロンプト成果物(例: /code-review、/verify)
ユーザースキルユーザーが作成した SKILL.md ファイル
カスタムコマンドファイル.claude/commands/ 内のフラット Markdown ファイル(スキルの旧形式)
  • system/init メッセージの slash_commands フィールドで利用可能なコマンドを確認できる
  • インタラクティブなターミナルを必要とするコマンド(例: /theme、/terminal-setup)はリストに現れない

コマンドのディスパッチ

  • /<name> をプロンプト文字列に含めて送信する
  • ディスパッチは skills オプションに依存しない。skills リストに含まれていないスキルでも /<name> で実行できる
  • maxTurns/max_turns の上限に達する可能性がある場合は try/catch(TypeScript)または try/except(Python)で囲む

/compact

  • 古いメッセージを要約してコンテキストウィンドウを縮小する
  • 要約には既存の会話履歴が必要。ワンショット query() の初回呼び出しには効果なし
  • コンパクションが実行された場合のみ compact_boundary システムメッセージが届く
  • 要約対象がない場合: エラーを出さず success で終了し、result テキストに理由が入る

/clear

  • 会話を空のコンテキストにリセットする(以前の会話はディスク上に残る)
  • ストリーミング入力モードで有用。ワンショット query() では各呼び出しがすでに空のコンテキストで始まるため実用的な効果はない

スキルの作成

  • ディレクトリと SKILL.md ファイル(YAML フロントマター + Markdown)で構成する
  • description フィールドで Claude がスキルを呼び出すタイミングを制御する

発見レベル:

レベルパス有効範囲
プロジェクトスキル.claude/skills/現在のプロジェクトのみ
個人スキル~/.claude/skills/すべてのプロジェクト

ツールの事前承認

  • allowedTools(Python: allowed_tools)でスキルが使うツールを事前承認できる
  • プロジェクト・個人スキルには SKILL.md の allowed-tools フロントマターフィールドも SDK セッション内で適用される

制約・注意点

スキルが見つからない場合

  • settingSources/setting_sources に "user" と "project" を含める必要がある。省略するとスキルはロードされない
  • cwd は .claude/skills/ を含むディレクトリかその下を指す必要がある(リポジトリルートまでの親ディレクトリも探索される)

スキルが使われない場合

  • skills リストを渡した場合、スキル名がリストに含まれているか確認する
  • description フィールドが具体的で関連キーワードを含んでいるか確認する

無効なスキル名エラー

query() がセッション開始前にリストを拒否する条件:

  • 空の名前
  • 括弧・カンマ・制御文字を含む名前
  • 空白でパディングされた名前
  • ワイルドカード形式(* 単独、または :* サフィックス)
SDK動作バージョン制約
TypeScriptClaude Code プロセス起動前に Error をスローTypeScript Agent SDK 0.3.221 より前はこのチェックを実行しない
PythonValueError を raisePython Agent SDK 0.2.129 より前はこのチェックを実行しない