Agent SkillsはClaudeの機能を、整理されたインストラクション、スクリプト、リソースのフォルダを通じて拡張します。このガイドでは、事前構築済みのSkillsとカスタムSkillsの両方をClaude APIで使用する方法を説明します。
リクエスト/レスポンススキーマおよびすべてのパラメータを含む完全なAPIリファレンスについては、以下を参照してください:
Agent Skillsのアーキテクチャと実際のアプリケーションについての詳細は、エンジニアリングブログをお読みください:Equipping agents for the real world with Agent Skills。
Skillsはコード実行ツールを通じてMessages APIと統合されます。Anthropicが管理する事前構築済みのSkillsを使用する場合でも、アップロードしたカスタムSkillsを使用する場合でも、統合の形式は同一です。どちらもコード実行を必要とし、同じcontainer構造を使用します。
Skillsはソースに関係なく、Messages APIで同一の方法で統合されます。containerパラメータでskill_id、type、およびオプションのversionを指定してSkillsを指定し、コード実行環境で実行されます。
Skillsは2つのソースから使用できます:
| 項目 | Anthropic Skills | カスタムSkills |
|---|---|---|
| Type値 | anthropic | custom |
| Skill ID | 短縮名:pptx、xlsx、docx、pdf | 生成値:skill_01AbCdEfGhIjKlMnOpQrStUv |
| バージョン形式 | 日付ベース:20251013またはlatest | エポックタイムスタンプ:1759178010641129またはlatest |
| 管理 | Anthropicが事前構築・メンテナンス | Skills APIでアップロード・管理 |
| 利用可能性 | すべてのユーザーが利用可能 | ワークスペースにプライベート |
両方のSkillソースはList Skillsエンドポイントで返されます(sourceパラメータでフィルタリング可能)。統合の形式と実行環境は同一で、唯一の違いはSkillsの提供元と管理方法です。
Skillsを使用するには、以下が必要です:
code-execution-2025-08-25 - コード実行を有効化(Skillsに必須)skills-2025-10-02 - Skills APIを有効化files-api-2025-04-14 - コンテナへの/からのファイルのアップロード/ダウンロード用SkillsはMessages APIのcontainerパラメータを使用して指定します。1リクエストあたり最大8つのSkillsを含めることができます。
構造はAnthropicとカスタムSkillsの両方で同一です。必須のtypeとskill_idを指定し、オプションでversionを含めて特定のバージョンに固定できます:
import anthropic
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-opus-4-6",
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"
}]
)Skillsがドキュメント(Excel、PowerPoint、PDF、Word)を作成すると、レスポンスにfile_id属性が返されます。これらのファイルをダウンロードするにはFiles APIを使用する必要があります。
仕組み:
file_idが含まれる例:Excelファイルの作成とダウンロード
import anthropic
client = anthropic.Anthropic()
# ステップ1:Skillを使用してファイルを作成
response = client.beta.messages.create(
model="claude-opus-4-6",
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':
for file in content_item.content:
if hasattr(file, 'file_id'):
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,
betas=["files-api-2025-04-14"]
)
file_content = client.beta.files.download(
file_id=file_id,
betas=["files-api-2025-04-14"]
)
# ステップ4:ディスクに保存
file_content.write_to_file(file_metadata.filename)
print(f"Downloaded: {file_metadata.filename}")追加のFiles API操作:
# ファイルメタデータの取得
file_info = client.beta.files.retrieve_metadata(
file_id=file_id,
betas=["files-api-2025-04-14"]
)
print(f"Filename: {file_info.filename}, Size: {file_info.size_bytes} bytes")
# すべてのファイルを一覧表示
files = client.beta.files.list(betas=["files-api-2025-04-14"])
for file in files.data:
print(f"{file.filename} - {file.created_at}")
# ファイルの削除
client.beta.files.delete(
file_id=file_id,
betas=["files-api-2025-04-14"]
)Files APIの完全な詳細については、Files APIドキュメントを参照してください。
コンテナIDを指定して、複数のメッセージ間で同じコンテナを再利用します:
# 最初のリクエストでコンテナを作成
response1 = client.beta.messages.create(
model="claude-opus-4-6",
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 this sales data"}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}]
)
# 同じコンテナで会話を継続
messages = [
{"role": "user", "content": "Analyze this sales data"},
{"role": "assistant", "content": response1.content},
{"role": "user", "content": "What was the total revenue?"}
]
response2 = client.beta.messages.create(
model="claude-opus-4-6",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"id": response1.container.id, # コンテナを再利用
"skills": [
{"type": "anthropic", "skill_id": "xlsx", "version": "latest"}
]
},
messages=messages,
tools=[{"type": "code_execution_20250825", "name": "code_execution"}]
)Skillsは複数のターンを必要とする操作を実行する場合があります。pause_turn停止理由を処理してください:
messages = [{"role": "user", "content": "Process this large dataset"}]
max_retries = 10
response = client.beta.messages.create(
model="claude-opus-4-6",
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 i 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-4-6",
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にターンを継続させるために、レスポンスをそのまま後続のリクエストに提供するか、会話を中断して追加のガイダンスを提供したい場合はコンテンツを変更できます。
複雑なワークフローを処理するために、単一のリクエストで複数のSkillsを組み合わせます:
response = client.beta.messages.create(
model="claude-opus-4-6",
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をアップロードして、ワークスペースで利用可能にします。ディレクトリパスまたは個別のファイルオブジェクトを使用してアップロードできます。
import anthropic
client = anthropic.Anthropic()
# オプション1:files_from_dirヘルパーを使用(Pythonのみ、推奨)
from anthropic.lib import files_from_dir
skill = client.beta.skills.create(
display_title="Financial Analysis",
files=files_from_dir("/path/to/financial_analysis_skill"),
betas=["skills-2025-10-02"]
)
# オプション2:zipファイルを使用
skill = client.beta.skills.create(
display_title="Financial Analysis",
files=[("skill.zip", open("financial_analysis_skill.zip", "rb"))],
betas=["skills-2025-10-02"]
)
# オプション3:ファイルタプルを使用(filename, file_content, mime_type)
skill = client.beta.skills.create(
display_title="Financial Analysis",
files=[
("financial_skill/SKILL.md", open("financial_skill/SKILL.md", "rb"), "text/markdown"),
("financial_skill/analyze.py", open("financial_skill/analyze.py", "rb"), "text/x-python"),
],
betas=["skills-2025-10-02"]
)
print(f"Created skill: {skill.id}")
print(f"Latest version: {skill.latest_version}")要件:
name:最大64文字、小文字/数字/ハイフンのみ、XMLタグなし、予約語なし("anthropic"、"claude")description:最大1024文字、空でないこと、XMLタグなし完全なリクエスト/レスポンススキーマについては、Skill作成APIリファレンスを参照してください。
Anthropicの事前構築済みSkillsとカスタムSkillsの両方を含む、ワークスペースで利用可能なすべてのSkillsを取得します。sourceパラメータを使用してSkillタイプでフィルタリングできます:
# すべてのSkillsを一覧表示
skills = client.beta.skills.list(
betas=["skills-2025-10-02"]
)
for skill in skills.data:
print(f"{skill.id}: {skill.display_title} (source: {skill.source})")
# カスタムSkillsのみを一覧表示
custom_skills = client.beta.skills.list(
source="custom",
betas=["skills-2025-10-02"]
)ページネーションとフィルタリングオプションについては、Skills一覧APIリファレンスを参照してください。
特定のSkillの詳細を取得します:
skill = client.beta.skills.retrieve(
skill_id="skill_01AbCdEfGhIjKlMnOpQrStUv",
betas=["skills-2025-10-02"]
)
print(f"Skill: {skill.display_title}")
print(f"Latest version: {skill.latest_version}")
print(f"Created: {skill.created_at}")Skillを削除するには、まずすべてのバージョンを削除する必要があります:
# ステップ1:すべてのバージョンを削除
versions = client.beta.skills.versions.list(
skill_id="skill_01AbCdEfGhIjKlMnOpQrStUv",
betas=["skills-2025-10-02"]
)
for version in versions.data:
client.beta.skills.versions.delete(
skill_id="skill_01AbCdEfGhIjKlMnOpQrStUv",
version=version.version,
betas=["skills-2025-10-02"]
)
# ステップ2:Skillを削除
client.beta.skills.delete(
skill_id="skill_01AbCdEfGhIjKlMnOpQrStUv",
betas=["skills-2025-10-02"]
)既存のバージョンがあるSkillを削除しようとすると、400エラーが返されます。
Skillsはアップデートを安全に管理するためにバージョニングをサポートしています:
Anthropic管理のSkills:
20251013カスタムSkills:
1759178010641129"latest"を使用# 新しいバージョンを作成
from anthropic.lib import files_from_dir
new_version = client.beta.skills.versions.create(
skill_id="skill_01AbCdEfGhIjKlMnOpQrStUv",
files=files_from_dir("/path/to/updated_skill"),
betas=["skills-2025-10-02"]
)
# 特定のバージョンを使用
response = client.beta.messages.create(
model="claude-opus-4-6",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": new_version.version
}]
},
messages=[{"role": "user", "content": "Use updated Skill"}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}]
)
# 最新バージョンを使用
response = client.beta.messages.create(
model="claude-opus-4-6",
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": "Use latest Skill version"}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}]
)完全な詳細については、Skillバージョン作成APIリファレンスを参照してください。
コンテナでSkillsを指定すると:
/skills/{directory}/にコピーされます段階的開示アーキテクチャにより、効率的なコンテキスト使用が保証されます—Claudeは必要な場合にのみ完全なSkill指示を読み込みます。
ブランド&コミュニケーション
プロジェクト管理
ビジネスオペレーション
コンテンツ作成
データ分析
開発&自動化
ExcelとカスタムDCF分析Skillsを組み合わせる:
# カスタムDCF分析Skillを作成
from anthropic.lib import files_from_dir
dcf_skill = client.beta.skills.create(
display_title="DCF Analysis",
files=files_from_dir("/path/to/dcf_skill"),
betas=["skills-2025-10-02"]
)
# Excelと組み合わせて財務モデルを作成
response = client.beta.messages.create(
model="claude-opus-4-6",
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 with the attached financials"
}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}]
)name:最大64文字、小文字の英字/数字/ハイフンのみ、XMLタグなし、予約語なしdescription:最大1024文字、空でないこと、XMLタグなしSkillsはコード実行コンテナ内で以下の制限付きで実行されます:
利用可能なパッケージについては、コード実行ツールのドキュメントを参照してください。
タスクが複数のドキュメントタイプやドメインに関わる場合にSkillsを組み合わせます:
良いユースケース:
避けるべきこと:
本番環境向け:
# 安定性のために特定のバージョンに固定
container={
"skills": [{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "1759178010641129" # 特定のバージョン
}]
}開発環境向け:
# アクティブな開発にはlatestを使用
container={
"skills": [{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest" # 常に最新を取得
}]
}プロンプトキャッシングを使用する場合、コンテナ内のSkillsリストを変更するとキャッシュが無効になることに注意してください:
# 最初のリクエストでキャッシュを作成
response1 = client.beta.messages.create(
model="claude-opus-4-6",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02", "prompt-caching-2024-07-31"],
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-4-6",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02", "prompt-caching-2024-07-31"],
container={
"skills": [
{"type": "anthropic", "skill_id": "xlsx", "version": "latest"},
{"type": "anthropic", "skill_id": "pptx", "version": "latest"} # キャッシュミス
]
},
messages=[{"role": "user", "content": "Create a presentation"}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}]
)最適なキャッシングパフォーマンスのために、リクエスト間でSkillsリストを一貫して保持してください。
Skill関連のエラーを適切に処理します:
try:
response = client.beta.messages.create(
model="claude-opus-4-6",
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}")
# Skill固有のエラーを処理
else:
raiseWas this page helpful?