Agent Skillsは、指示、スクリプト、リソースを整理したフォルダを通じてClaudeの機能を拡張します。このガイドでは、Claude APIで事前構築済みのSkillとカスタムSkillの両方を使用する方法を説明します。
リクエスト/レスポンスのスキーマやすべてのパラメータを含む完全なAPIリファレンスについては、以下を参照してください:
「zero data retention」(ゼロデータ保持)、すなわちZDRがこの機能にどのように適用されるかについては、APIとデータ保持を参照してください。
最初のSkillを作成する
Skill作成のベストプラクティス
Agent Skillsのアーキテクチャと実際のアプリケーションについて詳しくは、エンジニアリングブログ記事をご覧ください:Equipping agents for the real world with Agent Skills。
Skillは、コード実行ツールを通じてMessages APIと統合されます。Anthropicが管理する事前構築済みのSkillを使用する場合でも、アップロードしたカスタムSkillを使用する場合でも、統合の形式は同一です。どちらもコード実行を必要とし、同じcontainer構造を使用します。
Skillは、ソースに関係なくMessages APIで同一の方法で統合されます。containerパラメータでskill_id、type、およびオプションのversionを指定してSkillを指定すると、コード実行環境で実行されます。
Skillは2つのソースから使用できます:
| 項目 | Anthropic Skill | カスタムSkill |
|---|---|---|
| Typeの値 | anthropic | custom |
| Skill ID | 短い名前:pptx、xlsx、docx、pdf | 生成されたID:skill_01AbCdEfGhIjKlMnOpQrStUv |
| バージョン形式 | 日付ベース:20251013またはlatest | エポックタイムスタンプ:1759178010641129またはlatest |
| 管理 | Anthropicが事前構築・保守 | Skills APIを通じてアップロードおよび管理 |
| 利用可能範囲 | すべてのユーザーが利用可能 | ワークスペース内でプライベート |
どちらのSkillソースもList Skillsエンドポイントから返されます(sourceパラメータを使用してフィルタリングします)。統合の形式と実行環境は同一です。唯一の違いは、Skillの提供元と管理方法です。
Skillを使用するには、以下が必要です:
code-execution-2025-08-25 - コード実行を有効化(Skillに必須)skills-2025-10-02 - Skills APIを有効化files-api-2025-04-14 - コンテナへのファイルのアップロード/ダウンロード用Skillは、Messages APIのcontainerパラメータを使用して指定します。各リクエストに最大8つのSkillを含めることができます。
構造はAnthropic SkillとカスタムSkillの両方で同一です。必須のtypeとskill_idを指定し、オプションで特定のバージョンに固定するためにversionを含めます:
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [{"type": "anthropic", "skill_id": "pptx", "version": "latest"}]
},
messages=[
{"role": "user", "content": "Create a presentation about renewable energy"}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)Skillがドキュメント(Excel、PowerPoint、PDF、Word)を作成すると、レスポンスにfile_id属性が返されます。これらのファイルをダウンロードするには、Files APIを使用する必要があります。
動作の仕組み:
file_idが含まれます。例:Excelファイルの作成とダウンロード
client = anthropic.Anthropic()
# ステップ1: Skillを使用してファイルを作成する
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [{"type": "anthropic", "skill_id": "xlsx", "version": "latest"}]
},
messages=[
{
"role": "user",
"content": "Create an Excel file with a simple budget spreadsheet",
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# ステップ2: レスポンスからファイルIDを抽出する
def extract_file_ids(response):
file_ids = []
for item in response.content:
if item.type == "bash_code_execution_tool_result":
content_item = item.content
if content_item.type == "bash_code_execution_result":
# 各コンテンツ項目はfile_idを持つbash_code_execution_outputブロックです
for file in content_item.content:
file_ids.append(file.file_id)
return file_ids
# ステップ3: Files APIを使用してファイルをダウンロードする
for file_id in extract_file_ids(response):
file_metadata = client.beta.files.retrieve_metadata(file_id=file_id)
file_content = client.beta.files.download(file_id=file_id)
# ステップ4: ディスクに保存する
file_content.write_to_file(file_metadata.filename)
print(f"Downloaded: {file_metadata.filename}")その他のFiles API操作:
client = anthropic.Anthropic()
file_id = "file_011CNha8iCJcU1wXNR6q4V8w"
# ファイルのメタデータを取得
file_info = client.beta.files.retrieve_metadata(file_id=file_id)
print(f"Filename: {file_info.filename}, Size: {file_info.size_bytes} bytes")
# すべてのファイルを一覧表示
for file in client.beta.files.list():
print(f"{file.filename} - {file.created_at}")
# ファイルを削除
client.beta.files.delete(file_id=file_id)Files APIの詳細については、Files APIのドキュメントを参照してください。
コンテナIDを指定することで、複数のメッセージにわたって同じコンテナを再利用できます:
client = anthropic.Anthropic()
# 最初のリクエストでコンテナを作成します
response1 = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [{"type": "anthropic", "skill_id": "xlsx", "version": "latest"}]
},
messages=[
{"role": "user", "content": "Create a sample sales dataset and analyze it"}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# 同じコンテナで会話を継続します
messages = [
{"role": "user", "content": "Create a sample sales dataset and analyze it"},
{
# アシスタントのテキストを引き継ぎます。container.idが実行状態を保持します
"role": "assistant",
"content": "\n".join(
block.text for block in response1.content if block.type == "text"
),
},
{"role": "user", "content": "What was the total revenue?"},
]
response2 = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"id": response1.container.id, # Reuse container
"skills": [{"type": "anthropic", "skill_id": "xlsx", "version": "latest"}],
},
messages=messages,
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)Skillは複数のターンを必要とする操作を実行する場合があります。pause_turn停止理由を処理してください:
client = anthropic.Anthropic()
messages = [{"role": "user", "content": "Generate and process a large sample dataset"}]
max_retries = 10
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest",
}
]
},
messages=messages,
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# 長時間の操作に対するpause_turnの処理
for _ in range(max_retries):
if response.stop_reason != "pause_turn":
break
messages.append({"role": "assistant", "content": response.content})
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"id": response.container.id,
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest",
}
],
},
messages=messages,
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)レスポンスにはpause_turn停止理由が含まれる場合があります。これは、APIが長時間実行されるSkill操作を一時停止したことを示します。レスポンスをそのまま後続のリクエストに渡してClaudeにターンを継続させることも、会話を中断して追加のガイダンスを提供したい場合はコンテンツを変更することもできます。
複雑なワークフローを処理するために、単一のリクエストで複数のSkillを組み合わせます:
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [
{"type": "anthropic", "skill_id": "xlsx", "version": "latest"},
{"type": "anthropic", "skill_id": "pptx", "version": "latest"},
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest",
},
]
},
messages=[
{"role": "user", "content": "Analyze sales data and create a presentation"}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)Skillバンドルは、nameとdescriptionのYAMLフロントマターを持つSKILL.mdファイルをトップレベルに含み、さらにサポート用のスクリプトやリソースを含むディレクトリです。作成方法についてはAPIでAgent Skillsをはじめるを参照し、完全な制約については例の後にある要件リストを参照してください。
カスタムSkillをアップロードして、ワークスペースで利用できるようにします。zipアーカイブまたは個別のファイルオブジェクトをアップロードできます。Python SDKでは、ディレクトリパスを受け取るfiles_from_dirヘルパーも提供されています。
ファイルは、添付するファイル名によって識別されます。ファイルごとのアップロードでは、パスに共通のトップレベルディレクトリを保持する必要があり(cURLの例では;filename=サフィックス、SDKの例ではファイル名引数)、zipアーカイブでは、Skillディレクトリが単一のトップレベルエントリとして含まれている必要があります。
ant beta:skills create \
--file example_skill.zip \
--beta skills-2025-10-02
# ファイル単位のアップロードにはパス付きのファイル名が必要ですが、CLIでは
# 現在これを設定できません。代わりにzipアーカイブをアップロードしてください。要件:
nameと一致する必要があります(大文字小文字とアンダースコアは区別されません:Financial_Skillはfinancial-skillと一致します)display_titleはオプションです:省略した場合、SKILL.mdのnameから導出されます。明示的な値は、ワークスペース内のカスタムSkill間で一意である必要がありますname:最大64文字、小文字/数字/ハイフンのみ、XMLタグ不可、予約語("anthropic"、"claude")不可description:最大1024文字、空でないこと、XMLタグ不可完全なリクエスト/レスポンスのスキーマについては、Create Skill APIリファレンスを参照してください。
Anthropicの事前構築済みSkillとカスタムSkillの両方を含む、ワークスペースで利用可能なすべてのSkillを取得します。sourceパラメータを使用してSkillタイプでフィルタリングします:
# すべてのSkillを一覧表示
ant beta:skills list
# カスタムSkillのみを一覧表示
ant beta:skills list --source customページネーションとフィルタリングのオプションについては、List Skills APIリファレンスを参照してください。
特定のSkillの詳細を取得します:
ant beta:skills retrieve \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUvSkillを削除するには、まずそのすべてのバージョンを削除する必要があります:
# ステップ1: バージョンを一覧表示し、それぞれを削除します
ant beta:skills:versions list \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \
--transform version --raw-output
# 一覧で返された各バージョンIDに対して繰り返します
ant beta:skills:versions delete \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \
--version 1759178010641129 >/dev/null
# ステップ2: Skillを削除します
ant beta:skills delete \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv >/dev/null既存のバージョンがあるSkillを削除しようとすると、400エラーが返されます。
Skillは、更新を安全に管理するためのバージョニングをサポートしています:
Anthropic Skill:
20251013カスタムSkill:
1759178010641129"latest"を使用します# 新しいバージョンを作成
VERSION_NUMBER=$(ant beta:skills:versions create \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \
--file updated_skill.zip \
--transform version --raw-output)
# 特定のバージョンを使用
ant beta:messages create \
--beta code-execution-2025-08-25,skills-2025-10-02 <<YAML
model: claude-opus-5
max_tokens: 4096
container:
skills:
- type: custom
skill_id: skill_01AbCdEfGhIjKlMnOpQrStUv
version: $VERSION_NUMBER
messages:
- role: user
content: Use updated Skill
tools:
- type: code_execution_20250825
name: code_execution
YAML
# 最新バージョンを使用
ant beta:messages create \
--beta code-execution-2025-08-25,skills-2025-10-02 <<'YAML'
model: claude-opus-5
max_tokens: 4096
container:
skills:
- type: custom
skill_id: skill_01AbCdEfGhIjKlMnOpQrStUv
version: latest
messages:
- role: user
content: Use latest Skill version
tools:
- type: code_execution_20250825
name: code_execution
YAML完全な詳細については、Create Skill Version APIリファレンスを参照してください。
コンテナでSkillを指定すると:
/skills/{directory}/にコピーされます。段階的開示アーキテクチャにより、効率的なコンテキスト使用が保証されます。Claudeは必要な場合にのみ完全なSkillの指示を読み込みます。
ブランドとコミュニケーション
プロジェクト管理
ビジネスオペレーション
コンテンツ作成
データ分析
開発と自動化
ExcelとカスタムDCF分析Skillを組み合わせます:
from anthropic.lib import files_from_dir
client = anthropic.Anthropic()
# カスタムDCF分析Skillを作成
dcf_skill = client.beta.skills.create(
files=files_from_dir("/path/to/dcf_skill"),
)
# Excelと組み合わせて財務モデルを作成
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [
{"type": "anthropic", "skill_id": "xlsx", "version": "latest"},
{"type": "custom", "skill_id": dcf_skill.id, "version": "latest"},
]
},
messages=[
{
"role": "user",
"content": "Build a DCF valuation model for a SaaS company",
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
print(response)name:最大64文字、小文字/数字/ハイフンのみ、XMLタグ不可、予約語("anthropic"、"claude")不可description:最大1024文字、空でないこと、XMLタグ不可Skillは、以下の制限があるコード実行コンテナ内で実行されます:
利用可能なパッケージについては、コード実行ツールを参照してください。
タスクが複数のドキュメントタイプやドメインにまたがる場合は、Skillを組み合わせます:
適切なユースケース:
避けるべきこと:
本番環境向け:
# 安定性のため特定のバージョンに固定します
container = {
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "1759178010641129", # Specific version
}
]
}開発環境向け:
# アクティブな開発には latest を使用します
container = {
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest", # Always get newest
}
]
}プロンプトキャッシングを使用する場合、コンテナ内のSkillリストを変更するとキャッシュが無効になることに注意してください:
client = anthropic.Anthropic()
# 最初のリクエストでキャッシュが作成されます
response1 = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=[
"code-execution-2025-08-25",
"skills-2025-10-02",
],
container={
"skills": [{"type": "anthropic", "skill_id": "xlsx", "version": "latest"}]
},
messages=[{"role": "user", "content": "Analyze sales data"}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# Skillsの追加・削除でキャッシュが無効になります
response2 = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=[
"code-execution-2025-08-25",
"skills-2025-10-02",
],
container={
"skills": [
{"type": "anthropic", "skill_id": "xlsx", "version": "latest"},
{
"type": "anthropic",
"skill_id": "pptx",
"version": "latest",
}, # Cache miss
]
},
messages=[{"role": "user", "content": "Create a presentation"}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)最適なキャッシングパフォーマンスを得るには、リクエスト間でSkillリストを一貫させてください。
Skill関連のエラーを適切に処理します:
client = anthropic.Anthropic()
try:
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest",
}
]
},
messages=[{"role": "user", "content": "Process data"}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
except anthropic.BadRequestError as e:
if "skill" in str(e):
print(f"Skill error: {e}")
# スキル固有のエラーを処理する
else:
raiseAgent SkillsはZDRの取り決めの対象外です。Skillの定義と実行データは、Anthropicの標準的なデータ保持ポリシーに従って保持されます。
すべての機能にわたるZDRの適格性については、APIとデータ保持を参照してください。
すべてのエンドポイントを含む完全なAPIリファレンス
Claudeが発見して正しく使用できる効果的なSkillの書き方を学ぶ
サンドボックス化されたコンテナでPythonとbashコードを実行し、データの分析、ファイルの生成、ソリューションの反復を行う
Was this page helpful?