◉CLAUDE LABEN
●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/Claude Code
⟐ Claude Code/2026-04-17上級

Claude Code SDK でカスタム自律エージェントを実装する — 公式 CLI を超えた独自ループ設計の実践

Claude Code SDK の内部構造を理解し、公式 CLI では制御しきれない自律エージェントループを Python/TypeScript で実装します。ツール許可・エラー回復・ストリーミングに加え、課金変更後のコスト計測とモデル棚卸しまで、実運用で使っているパターンを共有します。

claude-code132SDK4エージェント14自律エージェント4Python22TypeScript24MCP54自動化87

✦ プレミアム記事

Claude Code を使い込んでいると、ある壁にぶつかります。「もっと細かく制御したい」「このタイミングで割り込みたい」「バッチ処理でヘッドレス実行したい」——そういった要望が出てきたとき、公式 CLI のオプションだけでは限界があります。

実は Claude Code は CLI の裏側に SDK が存在しており、Python または TypeScript から直接操作できます。SDK を使うと、ツールの実行を自分でハンドリングしたり、ストリーミングイベントを細粒度で処理したり、複数エージェントをプログラマブルに協調させたりといった、CLI では実現できない制御が可能になります。

ここでは SDK の内部構造から実際の実装パターンまで、本番で使えるレベルで解説します。コードは動作確認済みで、エラーハンドリングも含めた実用的な内容です。

私自身、個人開発のアプリ運用と並行して複数の技術ブログを運営しており、記事の整形や日英の整合性チェックといった定型作業を SDK ベースの自律ループに任せております。深夜も人手を挟まず静かに回り続ける仕組み。一度形になると、もう手放せません。本文のコード例は、その運用のなかで実際に使っている計測と回復のパターンが土台になっています。

SDK が提供するものと、CLI との違い

まず、Claude Code SDK が何者なのかを整理しておきます。

Claude Code CLI(claude コマンド)は人間が対話的に使うことを想定して設計されています。入力プロンプトを受け取り、許可確認を行い、ファイル操作やコマンド実行をインタラクティブに進める——このフローは人間との対話には最適ですが、自動化パイプラインには向いていません。

SDK はこの制約を解消します。プログラムから Claude を呼び出し、ツール実行の可否を独自ロジックで判断し、結果を構造化されたデータとして受け取れます。具体的に何が変わるかというと:

  • ツール許可の自動化: allowed_tools パラメータでリストを渡せば、個別の確認なしにツールが実行されます
  • イベントのプログラマブルな処理: tool_use、text、result などのイベントを1つ1つハンドリングできます
  • セッション管理: セッション ID を持ち越してコンテキストを継続できます
  • 並列実行: 複数の Claude インスタンスを同時に起動して協調させられます

特に自動化や CI/CD 環境でのコード生成、定型タスクのバッチ処理には SDK が必須です。

Python SDK のセットアップと基本構造

まず Python 環境でのセットアップから始めます。

# SDK をインストール
pip install claude-code-sdk
 
# Claude Code CLI も必要(SDK の裏側で使われる)
npm install -g @anthropic-ai/claude-code
 
# 認証確認
claude --version

Python SDK の基本的な使い方です。最初は同期版から理解すると分かりやすいです:

import asyncio
from claude_code_sdk import query, ClaudeCodeOptions
 
async def run_simple_agent():
    """最もシンプルなエージェント実行の例"""
    
    options = ClaudeCodeOptions(
        max_turns=5,           # 最大ターン数(無限ループ防止に必須)
        allowed_tools=["Read", "Write", "Bash"],  # 許可するツール
    )
    
    # query() はメッセージのストリームを返す非同期ジェネレータ
    async for message in query(
        prompt="src/app.py を読んで、改善点を3つ挙げてください",
        options=options
    ):
        # メッセージタイプに応じて処理を分岐
        if message.type == "assistant":
            for block in message.content:
                if block.type == "text":
                    print(f"Claude: {block.text}")
        
        elif message.type == "result":
            print(f"\n完了 — 合計コスト: ${message.cost_usd:.4f}")
            print(f"実行ターン数: {message.num_turns}")
            break
 
asyncio.run(run_simple_agent())

このコードを実行すると、Claude が src/app.py を読み込み、分析結果をストリームで受け取れます。max_turns=5 が重要で、これを設定しないとエージェントが終わらないケースが稀に発生します(後述)。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦SDK ヘッドレス実行の1回あたりコストを ResultMessage から自動記録する計測コードと、実運用での実測分布(平均 $0.04〜0.12)
✦既定モデルの切り替わりや fast mode 廃止で自律ループを止めないための、モデル固定と月次棚卸しチェックリスト5項目
✦自前 SDK ループ・CLI・Managed Agents の使い分け判断基準(2026年前半の環境変化を踏まえた実運用の結論)
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⟐ Claude Code2026-07-27
許可リストに書いた環境変数は誰の環境で展開されるのか — Managed MCP の実効ポリシーを指紋で確かめる
Managed MCP の allowlist・denylist に書いた環境変数参照の解決元が、起動時環境と managed-settings の env に変わりました。同じ設定ファイルが環境ごとに別のポリシーになる仕組みを手元で再現し、実効ポリシーを指紋で突き合わせる起動前チェックを組みました。
⟐ Claude Code2026-10-15
日本語フォルダ名を守るはずのフックが、一度も止めてくれませんでした — Python の stdin が cp932 で読んでいた話
「経理」「議事録」などの日本語フォルダを守る PreToolUse フックが、Python の stdin 既定が cp932 の環境では素通りします。再現の手順と 3 行の直し方、確認用の 1 コマンドを書き残します。
⟐ Claude Code2026-09-29
安定版の Claude Code には、二度の既定モデル交代がまだ届いていません
安定版を追う Claude Code は、今朝の時点で最新版から 6 リリース・10 日ぶん後ろにいました。版番号の引き算に頼らず、実在するリリースだけを数えて「届いていない変更」を見出し付きで一覧にする小さなスクリプトを、標準ライブラリだけで組みます。