◉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 に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/API & SDK
⬡ API & SDK/2026-06-02上級

自律エージェントの破壊的操作に事前条件・事後条件の契約ゲートを付ける

スキーマも型も通るのに中身が壊れている——自律エージェントのもっともらしい失敗を、事前条件・事後条件の契約ゲートで止める設計です。tryGuard・commitGuard・rollbackの構造、TypeScriptでの実装、スナップショットによる安全な巻き戻し、既存エージェントへの後付け手順まで紹介します。

Claude Agent SDK13自律エージェント4アーキテクチャ7信頼性5設計6

✦ プレミアム記事

自律エージェントを本番で走らせていて、いちばん肝を冷やすのは、エージェントが「もっともらしく」失敗するときです。クラッシュしてくれたほうがまだ救いがあります。ところが Claude のような言語モデルは、間違った内容を、自信たっぷりに、整った形式で出力します。スキーマは通る。型は合う。ログを見るかぎり成功している。それなのに、書き込まれた中身が壊れている。これがいちばん厄介な失敗の形です。

私は2014年から複数のアプリとサイトを個人で運用していて、ここ数年は記事の更新やデプロイの一部を自律エージェントに任せています。最初に組んだ素朴な仕組みでは、エージェントに git へ push させると、週に1〜2回は壊れた状態が本番に出ていました。リンク先が存在しない、日英の記事数が食い違う、設定ファイルの整合性が崩れている。どれも「プロンプトをもっと丁寧に書けば防げる」と思いがちな失敗です。でも、いくらプロンプトを磨いても、すり抜けはゼロになりませんでした。

結論から言うと、効いたのはプロンプトの改善ではなく、エージェントの書き込み操作を決定論的なゲートで物理的に挟むことでした。この設計を「契約ゲート(Contract Gate)」として一般化し、Claude Agent SDK のツール呼び出しに後付けできる形で、実装まで順に見ていきます。

なぜ「AIに気をつけてもらう」設計は破綻するのか

多くのエージェント実装は、安全性をプロンプトに委ねています。「壊れたデータを書かないでください」「push する前に整合性を確認してください」といった指示です。これは一見うまくいくのですが、本質的に確率的な防御です。モデルは毎回少しずつ違う判断をします。99%守れても、1日に何十回も走らせれば、残りの1%は確実に表に出てきます。

ここで思い出してほしいのが、ソフトウェア工学で古くから知られている「契約による設計(Design by Contract)」です。関数に事前条件(呼び出してよい状態)と事後条件(呼び出し後に保証される状態)を定め、満たされなければ実行そのものを止める考え方です。自律エージェントのツール呼び出しは、まさにこの契約が必要な場所です。エージェントが何を考えていようと、書き込みの前後で機械が不変条件を検査し、破れていたら適用させない。判断の主体をモデルから決定論的なコードに移すわけです。

公式ドキュメントの多くは canUseTool のような許可フックを「人間の承認を挟む」用途で説明します。けれど実運用でいちばん効くのは、人間を挟むことではなく、人間もモデルも介在しない決定論的な検査を挟むことでした。人間の承認は夜間バッチでは機能しませんし、モデルの自己検査は前述のとおり確率的です。

契約ゲートの構造:tryGuard・適用・commitGuard・rollback

契約ゲートは、ひとつの破壊的操作を次の4段で包みます。

  1. tryGuard(事前条件) — 操作してよい状態かを検査する。破れていたら操作を実行せず拒否する。
  2. snapshot(巻き戻し点) — 操作前の状態を記録する。
  3. apply(適用) — 実際の書き込みを行う。
  4. commitGuard(事後条件) — 書き込み後の状態が不変条件を満たすか検査する。破れていたら snapshot まで rollback する。

ポイントは、事後条件で「適用してみてから検査し、ダメなら巻き戻す」という流れを持つことです。事前条件だけでは「適用した結果どうなるか」までは検査できません。たとえば「日本語記事と英語記事の本数が一致していること」という不変条件は、ファイルを書いた後でなければ確かめられません。だからこそ、適用と検査と巻き戻しを一体で扱う必要があります。

✦

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

この記事の続きを読む

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

この記事で得られること
✦ツール呼び出しを tryGuard・適用・commitGuard・rollback の4段で挟む契約ゲートの完全な TypeScript 実装
✦事前条件と事後条件に「何を書いてよくて何を書いてはいけないか」の判断基準(決定論的に検査できる不変条件だけを置く)
✦スナップショットと冪等な巻き戻しでロールバックを安全にする具体パターンと、実運用で弾けた失敗の内訳
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⬡ API & SDK2026-10-07
モデルを切り替える前に、自分の呼び出しの形を候補モデルへ1トークンで再生する
モデルIDを書き換えて本番を回すと、400 は最初のリクエストで返ります。thinking の指定や tool_choice など自分の呼び出しの形を、max_tokens 16 の再生で先に確かめる小さな仕組みを書きました。
⬡ API & SDK2026-08-01
会話の途中でツールを差し替える — プロンプトキャッシュを守るツールレジストリの設計
ターン間でツールを追加・削除できるようになった一方、ツール定義はキャッシュプレフィックスの最前列にあります。12種類の変更を指紋で実測し、安定コアと揮発テールに分けるレジストリ設計とガード実装をまとめました。
⬡ API & SDK2026-07-26
Mcp-Session-Id を前提にしない MCP サーバーへ — 状態の置き場所を作り直す
MCP仕様の2026-07-28リリース候補でMcp-Session-Idヘッダーの廃止が示されました。自作リモートMCPサーバーのセッション結合を監査スクリプトで数え、状態を三つに仕分けて署名付きカーソルへ移行するまでの実測記録です。移行の順番と旧方式の外し方まで具体的に書いています。