Claude CodeでClaude Managed Agentをゼロから作った話

Claude Managed Agentsは、長時間タスクと非同期処理のための設定可能なエージェント基盤を構築する、最新の方法です。

以前の記事でClaude Managed Agentsの仕組みを解説しました。

でも実際の作り方には触れていなかった。

今回は、最初のClaude Managed Agentを作るまでに何が起きたかをそのまま書きます。

結論から言います。Claude Codeで作るのが一番楽です。ただし、最初に設計をきちんと固めないと、何度も往復することになります。

まず公式ドキュメントとコードサンプルを読んで、エージェントの設計図(ブループリント)を書きました。

  • 何を達成させたいか
  • 良いアウトプットとはどういう状態か

この2点を明確にしたことで、Claude Codeが一発で本番使用に耐えるエージェントを作れる条件が整いました。

エージェントのブループリント

私が作ることにしたのは、PRレビューエージェントです。

ソフトウェアエンジニアやチームリードが今日から使えるユースケース。それがこの選択の理由です。

定義した内容はこうです:

PRレビューエージェント:プルリクエストを読み込み、コード変更を分析し、構造化されたレビューレポートを出力する。

やること:

  • PRのdiffに含まれる変更ファイルをすべて読む
  • 変更箇所の周辺コンテキストを把握する
  • バグ、コードスメル、セキュリティ問題、テスト不足を検出する
  • 変更がコードベースの既存パターンに沿っているか確認する
  • 発見事項と修正提案を含む構造化Markdownレポートを書く
  • テストスイートを実行してレポートに結果を含める

必要なツール:

  • Bash — gitコマンドの実行、diffの取得、テストスイートの実行
  • ファイル操作 — 変更ファイルの読み込みとレポートの書き出し
  • WebSearchWebFetch — 不明なライブラリやパターンの調査(任意)

良いアウトプットの条件:

  • Summary、Issues Found、Suggested Fixes、Test Results の4セクションで構成されたMarkdownファイル
  • シニアエンジニアがそのまま読めるクオリティ。手直し不要な状態

制約:

  • 最大30ターン — 徹底したレビューに十分で、かつ暴走しない範囲
  • セッションあたりの予算上限 $2.00 — コストを予測可能に保つ
  • パーミッションモード acceptEdits — レポートへのファイル書き込みを自動承認し、シェルコマンドはゲートで制御

このブループリントがそのままClaude Codeへのプロンプトになりました。

Claude Code × Claude Managed Agents ドキュメント

ブループリントが固まったので、ターミナルでClaude Codeを起動しました。

使ったプロンプトはこれです:

以下のURLでClaude Managed Agentsのドキュメントを読んでください:
https://platform.claude.com/docs/en/managed-agents/overview
https://platform.claude.com/docs/en/managed-agents/quickstart
その後、AnthropicのPython SDKとManaged Agentsベータを使って、
本番対応のPRレビューエージェントを作ってください。
エージェントの要件:
1. ディレクトリパスを入力として受け取る
2. git diffを実行して変更ファイルを取得する
3. 変更ファイルとその周辺のコードベースコンテキストをすべて読む
4. バグ、コードスメル、セキュリティ問題、テスト不足を特定する
5. pytestで既存のテストスイートを実行する
6. 4つのセクション(Summary、Issues Found、Suggested Fixes、Test Results)を持つ 構造化Markdownレビューレポートを作成する
要件:
- ツールタイプに agent_toolset_20260401 を使用する
- max_turns を30、max_budget_usd を2.00に設定する
- session.status_idle を含むすべてのストリーミングイベントを適切に処理する
- 適切なエラーハンドリングを含める
- エージェントIDと環境IDを保存して再利用できるようにする
まずドキュメントを読んでから、ステップごとに作成してください

Claude Codeは最初にドキュメントを読みました。両方のページをフェッチした。

プロンプトにURLを入れた理由がここにあります。公式ドキュメントを読んでから作らせることで、正確なAPIの形を理解した上でコードを生成します。

その後、プロジェクトディレクトリを確認してから3つのファイルを生成しました。

  • pr_review_agent.py — 389行、エージェントの完全な実装
  • requirements.txt — 依存関係は1つだけ:anthropic>=0.49.0
  • README.md — 161行、使い方・アーキテクチャ・CLIリファレンスの完全ガイド

アーキテクチャはManaged Agentsのドキュメントに記載されたパターンそのものになっています。

エージェント作成 — 正しいツールタイプと詳細なシステムプロンプト:

agent = client.beta.agents.create( name="PR Review Agent", model="claude-sonnet-4-6", system=SYSTEM_PROMPT, tools=[ # agent_toolset_20260401 は完全な組み込みツールセットを有効にします: # bash、ファイルread/write/edit/glob/grep、ウェブ検索、ウェブフェッチ {"type": "agent_toolset_20260401"}, ],
)

環境 — 無制限ネットワークのクラウドコンテナ:

environment = client.beta.environments.create( name="pr-review-env", config={ "type": "cloud", "networking": {"type": "unrestricted"}, },
)

セッション — 適切な制限と実行ごとの説明的なタイトル:

session = client.beta.sessions.create( agent=agent_id, environment_id=environment_id, title=f"PR Review — {repo_name} — {timestamp}", max_turns=30, max_budget_usd=2.00,
)

ストリーミング — メッセージ送信前に開き、すべてのイベントタイプを処理:

with client.beta.sessions.events.stream(session.id) as stream: client.beta.sessions.events.send( session.id, events=[{"type": "user.message", "content": [...]}], ) for event in stream: match event.type: case "agent.message": for block in event.content: print(block.text, end="", flush=True) case "agent.tool_use": print(f"\n [tool: {event.name}]", flush=True) case "session.status_idle": print("AGENT FINISHED") break case "session.status_error": print(f"[ERROR]: {event.error}") break case "session.budget_exceeded": print("[WARN] Budget limit reached") break

IDの永続化 — エージェントIDと環境IDを agent_config.json に保存して再利用:

def get_or_create_agent(client, config, fresh): if not fresh and "agent_id" in config: print(f"[agent] Reusing existing agent: {config['agent_id']}") return config["agent_id"], config # ... 新しいエージェントを作成

2回目以降のレビューは同じエージェントと環境を再利用します。新しく作り直す場合は --fresh フラグを使います。

動作確認

実際に動かすのは3ステップです:

pip install -r requirements.txt
export ANTHROPIC_API_KEY="sk-ant-..."
python pr_review_agent.py /path/to/your/repo

初回実行時にエージェントと環境が作成され、IDが agent_config.json に保存されます。

2回目以降はそのIDを再利用します。

まとめ

Claude Managed Agentを作る一番簡単な方法を探しているなら、Claude Codeが答えです。

一番大事なのはブループリントを書くステップです。Claude Codeは説明した通りに作ります。説明を明確にすることが全てです。

試してみたい方は、上のプロンプトをそのまま使えます。

ドキュメントを読んで、ブループリントを書いて、あとはClaude Codeに任せてください。

TL;DR

  • Claude Managed Agentsは長時間・非同期タスク向けのエージェント基盤です
  • 作る前にブループリント(何をするか・良いアウトプットとは何か)を書くと一発で完成に近いものができます
  • Claude Codeにドキュメント URLを渡すことで、正確なAPI仕様を読んだ上でコードが生成されます
  • エージェント・環境・セッションの3層構造を理解することが実装の核心です
  • IDを保存して再利用することで、毎回の起動コストを抑えられます