エージェントスキルは、指示、スクリプト、リソースの整理されたフォルダを通じてClaudeの機能を拡張します。このガイドでは、Claude APIで事前構築済みスキルとカスタムスキルの両方を使用する方法を示します。
リクエスト/レスポンススキーマとすべてのパラメータを含む完全なAPIリファレンスについては、以下を参照してください:

クイックリンク

概要

エージェントスキルのアーキテクチャと実世界での応用についての詳細は、エンジニアリングブログをご覧ください:エージェントスキルで実世界に対応するエージェントを装備する
スキルはコード実行ツールを通じてMessages APIと統合されます。Anthropicが管理する事前構築済みスキルを使用する場合でも、アップロードしたカスタムスキルを使用する場合でも、統合の形状は同じです。どちらもコード実行が必要で、同じcontainer構造を使用します。

スキルの使用

スキルはソースに関係なくMessages APIで同じように統合されます。containerパラメータでスキルを指定し、skill_idtype、およびオプションのversionを使用して、コード実行環境で実行されます。 スキルは2つのソースから使用できます:
側面Anthropicスキルカスタムスキル
Type値anthropiccustom
スキルID短い名前:pptxxlsxdocxpdf生成済み:skill_01AbCdEfGhIjKlMnOpQrStUv
バージョン形式日付ベース:20251013またはlatestエポックタイムスタンプ:1759178010641129またはlatest
管理事前構築済みでAnthropicが保守スキルAPI経由でアップロードして管理
可用性すべてのユーザーが利用可能ワークスペースに限定
両方のスキルソースはリストスキルエンドポイントによって返されます(sourceパラメータを使用してフィルタリング)。統合の形状と実行環境は同じです。唯一の違いはスキルの出所と管理方法です。

前提条件

スキルを使用するには、以下が必要です:
  1. Anthropic APIキー - コンソールから取得
  2. ベータヘッダー
    • code-execution-2025-08-25 - コード実行を有効にする(スキルに必須)
    • skills-2025-10-02 - スキルAPIを有効にする
    • files-api-2025-04-14 - ファイルをコンテナにアップロード/ダウンロードする場合
  3. コード実行ツール - リクエストで有効にする

メッセージでスキルを使用する

コンテナパラメータ

スキルはMessages APIのcontainerパラメータを使用して指定されます。リクエストごとに最大8つのスキルを含めることができます。 構造はAnthropicスキルとカスタムスキルの両方で同じです。必須のtypeskill_idを指定し、オプションでversionを含めて特定のバージョンに固定します:
import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-sonnet-4-5-20250929",
    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"
    }]
)

生成されたファイルのダウンロード

スキルがドキュメント(Excel、PowerPoint、PDF、Word)を作成する場合、レスポンスでfile_id属性が返されます。これらのファイルをダウンロードするにはFiles APIを使用する必要があります。 動作方法:
  1. スキルはコード実行中にファイルを作成する
  2. レスポンスには作成されたファイルごとにfile_idが含まれる
  3. Files APIを使用して実際のファイルコンテンツをダウンロードする
  4. ローカルに保存するか、必要に応じて処理する
例:Excelファイルの作成とダウンロード
import anthropic

client = anthropic.Anthropic()

# ステップ1:スキルを使用してファイルを作成する
response = client.messages.create(
    model="claude-sonnet-4-5-20250929",
    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.messages.create(
    model="claude-sonnet-4-5-20250929",
    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.messages.create(
    model="claude-sonnet-4-5-20250929",
    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"}]
)

長時間実行される操作

スキルは複数のターンが必要な操作を実行する場合があります。pause_turnストップ理由を処理します:
messages = [{"role": "user", "content": "Process this large dataset"}]
max_retries = 10

response = client.messages.create(
    model="claude-sonnet-4-5-20250929",
    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.messages.create(
        model="claude-sonnet-4-5-20250929",
        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が長時間実行されるスキル操作を一時停止したことを示します。レスポンスをそのまま後続のリクエストで提供してClaudeがターンを続行できるようにするか、会話を中断して追加のガイダンスを提供する場合はコンテンツを変更できます。

複数のスキルを使用する

複雑なワークフローを処理するために、単一のリクエストで複数のスキルを組み合わせます:
response = client.messages.create(
    model="claude-sonnet-4-5-20250929",
    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"
    }]
)

カスタムスキルの管理

スキルを作成する

カスタムスキルをアップロードして、ワークスペースで利用可能にします。ディレクトリパスまたは個別のファイルオブジェクトを使用してアップロードできます。
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:ファイルタプルを使用する(ファイル名、ファイルコンテンツ、MIMEタイプ)
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}")
要件:
  • トップレベルにSKILL.mdファイルを含める必要があります
  • すべてのファイルは、パスで共通のルートディレクトリを指定する必要があります
  • 合計アップロードサイズは8MB未満である必要があります
  • YAMLフロントマター:name(最大64文字)、description(最大1024文字)
完全なリクエスト/レスポンススキーマについては、スキル作成APIリファレンスを参照してください。

スキルをリストする

ワークスペースで利用可能なすべてのスキル(Anthropic事前構築済みスキルとカスタムスキルの両方)を取得します。sourceパラメータを使用してスキルタイプでフィルタリングします:
# すべてのスキルをリストする
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})")

# カスタムスキルのみをリストする
custom_skills = client.beta.skills.list(
    source="custom",
    betas=["skills-2025-10-02"]
)
ページネーションとフィルタリングオプションについては、リストスキルAPIリファレンスを参照してください。

スキルを取得する

特定のスキルの詳細を取得します:
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}")

スキルを削除する

スキルを削除するには、まずすべてのバージョンを削除する必要があります:
# ステップ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:スキルを削除する
client.beta.skills.delete(
    skill_id="skill_01AbCdEfGhIjKlMnOpQrStUv",
    betas=["skills-2025-10-02"]
)
既存のバージョンを持つスキルを削除しようとすると、400エラーが返されます。

バージョン管理

スキルはバージョン管理をサポートして、更新を安全に管理します: Anthropic管理スキル
  • バージョンは日付形式を使用します:20251013
  • 更新が行われると新しいバージョンがリリースされます
  • 安定性のために正確なバージョンを指定します
カスタムスキル
  • 自動生成されたエポックタイムスタンプ: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.messages.create(
    model="claude-sonnet-4-5-20250929",
    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.messages.create(
    model="claude-sonnet-4-5-20250929",
    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"}]
)
完全な詳細については、スキルバージョン作成APIリファレンスを参照してください。

スキルの読み込み方法

コンテナでスキルを指定する場合:
  1. メタデータ検出:Claudeはシステムプロンプトで各スキルのメタデータ(名前、説明)を確認します
  2. ファイル読み込み:スキルファイルは/skills/{directory}/のコンテナにコピーされます
  3. 自動使用:Claudeはリクエストに関連する場合、スキルを自動的に読み込んで使用します
  4. 構成:複数のスキルが複雑なワークフロー用に一緒に構成されます
段階的な開示アーキテクチャにより、効率的なコンテキスト使用が保証されます。Claudeは必要な場合にのみ完全なスキル指示を読み込みます。

ユースケース

組織スキル

ブランド&コミュニケーション
  • ドキュメントに企業固有のフォーマット(色、フォント、レイアウト)を適用する
  • 組織テンプレートに従うコミュニケーションを生成する
  • すべての出力で一貫したブランドガイドラインを確保する
プロジェクト管理
  • 企業固有のフォーマット(OKR、決定ログ)でノートを構造化する
  • チーム規約に従うタスクを生成する
  • 標準化された会議記録とステータス更新を作成する
ビジネス運営
  • 企業標準のレポート、提案、分析を作成する
  • 企業固有の分析手順を実行する
  • 組織テンプレートに従う財務モデルを生成する

個人スキル

コンテンツ作成
  • カスタムドキュメントテンプレート
  • 特殊なフォーマットとスタイリング
  • ドメイン固有のコンテンツ生成
データ分析
  • カスタムデータ処理パイプライン
  • 特殊な可視化テンプレート
  • 業界固有の分析方法
開発&自動化
  • コード生成テンプレート
  • テストフレームワーク
  • デプロイメントワークフロー

例:財務モデリング

ExcelとカスタムDCF分析スキルを組み合わせます:
# カスタムDCF分析スキルを作成する
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.messages.create(
    model="claude-sonnet-4-5-20250929",
    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"}]
)

制限と制約

リクエスト制限

  • リクエストあたりの最大スキル数:8
  • 最大スキルアップロードサイズ:8MB(すべてのファイル合計)
  • YAMLフロントマター制限name 64文字、description 1024文字

環境制約

スキルはコード実行コンテナで実行され、以下の制限があります:
  • ネットワークアクセスなし - 外部APIコールを実行できません
  • ランタイムパッケージのインストールなし - 事前インストール済みパッケージのみ利用可能
  • 分離環境 - 各リクエストは新しいコンテナを取得します
利用可能なパッケージについては、コード実行ツールドキュメントを参照してください。

ベストプラクティス

複数のスキルを使用する場合

タスクが複数のドキュメントタイプまたはドメインを含む場合、スキルを組み合わせます: 良いユースケース:
  • データ分析(Excel)+プレゼンテーション作成(PowerPoint)
  • レポート生成(Word)+ PDFへのエクスポート
  • カスタムドメインロジック+ドキュメント生成
避けるべき:
  • 未使用のスキルを含める(パフォーマンスに影響)

バージョン管理戦略

本番環境の場合:
# 安定性のために特定のバージョンに固定する
container={
    "skills": [{
        "type": "custom",
        "skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
        "version": "1759178010641129"  # 特定のバージョン
    }]
}
開発の場合:
# アクティブな開発にはlatestを使用する
container={
    "skills": [{
        "type": "custom",
        "skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
        "version": "latest"  # 常に最新を取得
    }]
}

プロンプトキャッシングの考慮事項

プロンプトキャッシングを使用する場合、コンテナのスキルリストを変更するとキャッシュが破損することに注意してください:
# 最初のリクエストがキャッシュを作成する
response1 = client.messages.create(
    model="claude-sonnet-4-5-20250929",
    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"}]
)

# スキルを追加/削除するとキャッシュが破損する
response2 = client.messages.create(
    model="claude-sonnet-4-5-20250929",
    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"}]
)
最適なキャッシングパフォーマンスのために、リクエスト間でスキルリストを一貫性のあるものに保ちます。

エラーハンドリング

スキル関連のエラーを適切に処理します:
try:
    response = client.messages.create(
        model="claude-sonnet-4-5-20250929",
        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:
        raise

次のステップ