Claude Managed Agentsは、大きなタスクの各部分を複数のエージェントに割り当て、結果を集めて統合するワークフロープログラムを作成できるようになりました。この機能はベータ版です。ここでは、文書フォルダーをレビューして確認済みの調査結果ファイルを作成したいソフトウェア開発者向けに、文書化された設定例を紹介します。

これはAnthropicのClaude Platform APIとCLIを使用します。BIG CHANGEは最新のドキュメントを確認しましたが、設定を実行したりワークフローをテストしたりしていません。

ワークフローの仕組み

1つの 動的ワークフロー は、1回の実行に対する1つのプログラムです。作業をフェーズに分割し、エージェントスレッドを並列で開始し、フェーズ間で結果を渡し、失敗した分岐を再試行または処理して、結果を統合できます。たとえば、最初のフェーズで個別のファイルを確認し、後続のフェーズで調査結果を照合できます。プライマリエージェントが実行を開始し、サーバーがバックグラウンドで処理します。

これは、メインエージェントに別々の実行を作らせる方法とは異なります。ワークフロー実行は1つの実行内で子スレッドを調整し、開始したエージェントに結果を返します。通常のセッションメッセージだけでは実行は始まりません。タスクとシステムプロンプトに基づいて、エージェントが開始時期を判断します。Anthropicによると、1つのセッションに複数の実行を同時に開けますが、それぞれの実行には独自のフェーズと結果があります。

開始前に

Claude Consoleアカウント、APIキー、Claude Managed Agentsへのアクセスが必要です。Anthropicによると、APIアカウントではデフォルトで有効になっています。エージェントとワークフローのエンドポイントには managed-agents-2026-04-01 betaヘッダーが必要です。AnthropicのSDKはこのヘッダーを自動で設定します。SDKを使わずにAPIを呼び出す場合は、自分で追加してください。

現在のドキュメントでもManaged Agentsには ベータ版のラベルが付いています。Anthropicの リリースノート では、パブリックベータは2026年4月9日、マルチエージェントオーケストレーションは5月11日、動的ワークフローは10月9日とされています。動的ワークフローもベータ版です。日付は重要です。「1,000エージェント」という数字は現在のワークフロー実行あたりの上限であり、1,000エージェントを同時に起動できるようになったという意味ではありません。

プラットフォームはセッションの会話履歴、サンドボックスの状態、出力をサーバー側に保存します。Anthropicによると、Managed Agentsは現在、 Zero Data RetentionまたはHIPAA Business Associate Agreementの対象ではありません。組織が適用されるデータ規則と設定を確認するまでは、規制対象または機密の資料をセッションに入れないでください。

1. CLIとSDKをインストールする

Anthropicの ant CLIを、 Managed Agentsクイックスタートに記載されたOS別の方法でインストールします。たとえば、macOS用として文書化されているコマンドは次のとおりです。

Terminal
brew install anthropics/tap/ant

PythonではSDKをインストールし、APIキーをソースファイルに書かずに環境変数などから渡します。

Terminal
pip install anthropic
export ANTHROPIC_API_KEY="your-api-key"

上記のキーはプレースホルダーです。実際の値は、通常のシークレット管理ツールまたは保護された環境設定に保存してください。

2. ワークフローを使えるエージェントを定義する

作成します。 document-reviewer.md. 次の multiagent ブロックで10月に導入されたワークフロー型を有効にします。サブエージェントを無効にすると、設定した委任経路が明確になります。このエージェントは一度限りのサブエージェント委任ではなく、動的ワークフローを使用します。

YAML
---
name: document-reviewer
model: claude-sonnet-5-5
tools:
  - type: agent_toolset_20260401
multiagent:
  type: multiagent_20261001
  subagents:
    type: disabled
  workflows:
    type: enabled
---

You review documents for a user-defined checklist.

When a request contains more than 20 independent files, use a dynamic workflow.
Make one phase that checks the files independently and a later phase that
reconciles duplicate findings. Do not infer missing facts. Save the final
machine-readable results to report.json and a concise explanation to summary.md.
Include the source filename and a short evidence excerpt for every finding.
If a file cannot be read or a worker fails, record that file as unresolved;
do not silently omit it. The final response must report the number of files
reviewed, unresolved files, and whether every output file was written.

しきい値とレビュー指示はポリシー上の選択であり、Anthropicのデフォルトではありません。作業内容とエラーのコストに合わせて調整してください。 claude-sonnet-5-5 はモデルIDの例です。アカウントで現在利用でき、予算に合うモデルを選んでください。

エージェントを作成し、返されたIDを保存します。

Terminal
ant apply document-reviewer.md

CLIはエージェントIDを表示し、 claude-lock.jsonに記録します。Managed Agentsでは、再利用可能なエージェント定義(モデル、指示、ツール)と、セッションを実行する環境が分離されています。

3. サンドボックスを設定する

環境は、セッションの実行場所を制御します。Anthropic管理のクラウドサンドボックスか、自社インフラ上のセルフホスト型サンドボックスを選びます。クイックスタートのクラウド例ではネットワークを制限し、パッケージマネージャーを許可しています。

YAML
# environment.yaml
name: document-review
config:
  type: cloud
  networking:
    type: limited
    allow_package_managers: true

を使って適用します。環境IDは ant apply environment.yamlにも保存されます。 claude-lock.json。エージェントにネットワークアクセスが必要な場合は、必要なホストだけを allowed_hostsに列挙します。ネットワークを制限すると、このホストリストによってManaged AgentsのWeb検索および取得ツールも制限されます。パッケージマネージャーを許可する設定でも、Webサイトは許可リストに追加されません。

初回の実行では、小規模で機密性のないフォルダーと必要なツールだけを使います。組み込みのエージェントツールセットにはシェルとファイル操作が含まれます。ツールを追加すると、エージェントが実行できる操作の範囲が広がる可能性があります。外部システムや認証情報へのアクセスを許可する前に、文書化された権限ポリシーとサンドボックス制御を確認してください。

4. セッションを開始し、範囲を限定したタスクを送る

Python SDKでエージェントIDと環境IDを使ってセッションを作成します。

Python
import anthropic

client = anthropic.Anthropic()
session = client.beta.sessions.create(
    agent="AGENT_ID_FROM_CLAUDE_LOCK",
    environment_id="ENVIRONMENT_ID_FROM_CLAUDE_LOCK",
    title="Small document review",
)
print(session.id)

2つのIDプレースホルダーを claude-lock.json内の値に置き換えます。次に、セッションイベントストリームを通じて具体的なタスクを送信します。イベントを送る前にストリームを開始すると、実行とその進行状況を発生と同時に確認できます。

Python
with client.beta.sessions.events.stream(session.id) as stream:
    client.beta.sessions.events.send(
        session.id,
        events=[{
            "type": "user.message",
            "content": [{
                "type": "text",
                "text": (
                    "Review each Markdown file in /review-set for a missing "
                    "owner, deadline, or acceptance criterion. Quote evidence; "
                    "do not infer missing details. Reconcile duplicate findings "
                    "and write /mnt/session/outputs/report.json plus "
                    "/mnt/session/outputs/summary.md. In report.json, use "
                    "a files array with one record per input: path, status "
                    "(reviewed or unresolved), and findings; each finding has "
                    "a check, evidence excerpt, and source location. Include "
                    "input, reviewed, and unresolved counts."
                ),
            }],
        }],
    )
    open_runs = {}
    run_results = {}
    for event in stream:
        if event.type == "workflow_run.created":
            open_runs[event.workflow_run_id] = event.name
            print(f"Run started: {event.name}")
        elif event.type == "workflow_run.status_ended":
            run_results[event.workflow_run_id] = event.result.type
            open_runs.pop(event.workflow_run_id, None)
            print(f"Run ended: {event.result.type}")
        elif event.type == "workflow_run.error":
            print(f"Run error: {event.error}")
        elif event.type == "agent.message":
            for block in event.content:
                if block.type == "text":
                    print(block.text)
        elif event.type == "session.status_idle":
            if event.stop_reason.type == "end_turn" and not open_runs:
                break

    # Inspect the child threads associated with completed workflow runs.
    for thread in client.beta.sessions.threads.list(session.id):
        if thread.workflow_run_id in run_results:
            print(f"Thread {thread.id}: {thread.status}")
            for thread_event in client.beta.sessions.threads.events.list(
                thread.id, session_id=session.id
            ):
                if thread_event.type == "session.error":
                    print(f"Thread error: {thread_event}")

この例では、設定済みのセッション入力方法によってファイルが /review-setで参照できることを前提としています。エージェントにレビューを依頼する前に、文書化された入力方法でファイルをセッションのサンドボックスに配置します。出力は /mnt/session/outputs/以下に書き出すようエージェントに指示します。 Managed Agentsのファイルに関するドキュメント では、セッションに限定されたファイルの一覧表示とダウンロード方法が説明されています。Python SDKで文書化されている読み戻し形式は次のとおりです。

Python
files = client.beta.files.list(
    scope_id=session.id,
    betas=["managed-agents-2026-04-01"],
)
for report in files:
    if report.filename == "report.json":
        content = client.files.download(report.id)
        content.write_to_file("report.json")
        break

セッションがアイドル状態になってからファイルが表示されるまで、数秒かかる場合があります。見つからなければ、少し待ってから再度一覧を取得してください。安全な初回テストでは、期待される結果を手作業で確認できる少数の文書をテスト用フォルダーに入れます。例のプロンプトはレビュー作業を定義するものであり、エージェントがすべての問題を見つける保証ではありません。

出力契約は監査できる程度に厳密にします。たとえば、次のようにします。

JSON
{
  "files": [
    {
      "path": "requirements.md",
      "status": "reviewed",
      "findings": [
        {
          "check": "deadline",
          "evidence_excerpt": "...",
          "source_location": "requirements.md, section 2"
        }
      ]
    }
  ],
  "input_count": 1,
  "reviewed_count": 1,
  "unresolved_count": 0
}

これはワークフローに推奨するスキーマであり、Anthropicが提供するスキーマではありません。未解決または読み取り不能なファイルも記録として残し、結果がないことが問題のないレビューに見えないようにします。

5. 実行と出力を確認する

ワークフローの開始時に、イベントストリームは workflow_run.createdを通知します。これには実行IDとワークフローが宣言したフェーズが含まれます。例では各実行IDを対応する workflow_run.status_endedが届くまで開いたままにします。プライマリセッションがアイドル状態になっただけでは、バックグラウンドのワークフローが終了したとは判断できません。プライマリストリームは子スレッドの状態を要約し、各スレッドのイベント一覧にはそのメッセージとエラーが含まれます。例では workflow_run_id でスレッドを一覧表示し、 session.error イベントを表示します。 retry_status.type == "exhausted"を含む再試行の上限到達やその他の子スレッドエラーがないかイベントを確認し、影響を受けたファイルを未解決として記録します。

「完了」という表示ではなく、出力ファイルを成果物として扱ってください。Anthropicは、スレッドの作業が失敗した場合やスレッドを作成できなかった場合でも、実行が completed で終了する可能性があると明示的に警告しています。 report.json を開き、各入力ファイルに調査結果または明示的な未解決ステータスがあること、根拠の抜粋が正しいソースファイルを指すこと、件数が提供したファイル数と一致することを確認します。より大きなコーパスで使う前に、小規模なテストフォルダーを自分の想定結果と比較してください。

クライアントが切断されると、新しいイベントストリームには開始後に発生したイベントだけが送信されます。文書化されたイベントタイプのフィルターとページネーションを使い、過去のセッションイベントを一覧表示して実行状態を再構築します。子スレッドがまだ動作している可能性があるため、プライマリエージェントがアイドルになっただけで実行終了と判断しないでください。観測したすべての実行が終わったら、セッションに限定されたファイルを一覧表示し、文書化されたFiles APIで /mnt/session/outputs/report.json と summary.md をダウンロードします。提供した各ファイルにレビュー済みまたは未解決の記録があり、件数が一致することを確認します。サンプルのイベントループ自体はレポートのダウンロードも検証もしません。

設計に影響する制限

Anthropicの ワークフロー実行の制限 では、現在、1回の実行で同時に作業するワークフロースレッドは最大64と記載されています。ただし、APIはその並列性を保証せず、値は変更される場合があります。1,000エージェントの上限は、実行期間全体で開始されたエージェントの数です。同時スレッド数ではありません。この合計に達した後でさらにエージェントを開始しようとすると、実行は thread_limit_errorで終了します。失敗したエージェントの再試行によって追加スレッドが作成されることもあります。

実行のデフォルト期間は24時間ですが、エージェントがより短い期間を設定した場合はそれより短くなります。クライアントの応答を待つ時間も含まれ、停止中の実行もタイムアウトする場合があります。セッションでは、アイドル状態を含め、デフォルトで10件の実行を開いておけます。セッションの使用予算はすべてのワークフローエージェントに適用されます。予算に達すると、予算が引き上げられるか削除されるまで、開いている実行は一時停止します。小さな作業単位を計画し、チェックポイントをファイルに保存し、照合フェーズではレビューしたふりをせず未完了項目を報告させます。

失敗した場合は workflow_run.error と該当スレッドを確認します。 program_error は、ワークフローコードまたは子スレッドの失敗を示す場合があります。 thread_limit_error は1,000エージェントの上限を示し、 timeout_error は実行期間の上限を示します。実行がセッション予算に達した場合は、予算を増やすか削除して再開します。ワークフローを停止するには、プライマリエージェントに実行の停止を依頼します。セッションターンの中断は、それ自体では実行のキャンセル命令ではありません。

コスト

Anthropicの 料金に関するドキュメント では、Managed Agentsの料金は選択したモデルのトークン料金とセッション稼働時間に基づき、 稼働中のセッション1時間あたり0.08ドルです。セッションのステータスが runningの間に稼働時間が加算されます。アイドル、再スケジュール、終了の時間は含まれません。ワークフロー実行自体の別料金はありませんが、スレッドのトークン使用量はセッションの料金に含まれます。セッション内で呼び出すWeb検索は、検索1,000件あたり10ドルと記載されています。正確な合計はモデル、入出力トークン、ツール、セッション時間によって異なります。1,000エージェントの上限から推定するのではなく、Consoleで使用量を確認してください。

実際には、少数のファイルから始め、ワークフロー出力が各ファイルを扱っていることを確認し、失敗したスレッドを調べます。レビュー方針とコストに問題がない場合に限って入力を増やしてください。Managed Workflowsは非同期の並列作業を調整する方法を提供しますが、調査結果の正しさを保証するものではありません。

大きな変化

10月9日以降、Managed Agentsのエージェントは、サーバーが複数のエージェントスレッドとフェーズにわたって実行するワークフロープログラムを作成できます。ビルダーはこの方法で範囲を限定した監査可能なファンアウトを行い、メインセッションで進行状況を追跡できます。この機能は引き続きベータ版であり、公開された制限は、すべての実行が最大の並列性に達することや正しい結果を生み出すことを保証しません。

参考資料・関連情報