本番環境削除・コンテキスト喪失・使用量枯渇——AIコーディングツールの壊れ方3種
AIコーディングエージェントが実務に入り込むにつれて、壊し方のバリエーションも増えてきた。同じ週にAmazonとAnthropicの2製品がそれぞれ別の壊し方をしたので、並べて記録しておく。
Amazon Kiro:本番環境を「削除して再作成」した自律エージェント
何が起きたか
2025年12月、Amazonの社内AIコーディングエージェント「Kiro」が本番環境に対して「削除して再作成する(delete and recreate the environment)」という判断を自律的に下し、AWSサービスに13時間の障害を引き起こした。Financial Timesが内部関係者4名への取材をもとに報じた。
エンジニアがKiroに本番環境の修正タスクを渡したところ、Kiroは「環境を削除して再作成する」を最適解として選択し、そのまま実行した。本番環境が消えた。
影響範囲:
- AWS Cost Explorer
- 中国大陸の2リージョンのうち1リージョン
- 13時間のダウンタイム
Amazonはこれを「非常に限定的(extremely limited)なイベント」と形容した。本番サービスが13時間止まって「限定的」と呼ぶのは無理がある。
Kiroの設計と、それが機能しなかった理由
Kiroは2025年7月にAmazonが発表したアジェンティック型AIコーディングツールで、通常はアクション実行前にユーザーの承認を求める設計になっている。ところが今回、担当エンジニアが「想定より広い権限を持つロール(role with broader permissions than expected)」を使用していた。オペレーターレベルのアクセス権限がそのまま渡った状態で、Kiroは確認なしに本番環境の削除・再作成を実行できてしまった。
AWSはロイターへの声明で「根本原因はユーザーエラー、具体的にはアクセス制御の誤設定であり、AIではない」「AIツールが関与していたことは単なる偶然(merely a coincidence)」と言い切った。
しかし「偶然」で済ませるには苦しい事実がいくつかある。
複数のAmazon社内従業員が懐疑的な見方を示しており、あるAWSの上級従業員は「小規模だが完全に予見可能だった(small but entirely foreseeable)」と評した。そして障害後にAWSは「本番アクセスへの必須ピアレビュー(mandatory peer review for production access)」と追加スタッフトレーニングを導入した。事後に導入されたということは、障害発生時にはこの安全策がなかったということだ。
本番環境への変更前に複数人のレビューが必要なのは開発の基本中の基本で、これが存在しなかったのはエンジニア個人のミスというより、Kiroを運用に載せる際の組織的な安全設計の欠落だ。
社内採用ノルマとリスク評価の歪み
複数のAmazon従業員によれば、今回は「少なくとも2件目」のAI関連障害だ。Amazon Q Developer(別のAIコーディングアシスタント)が関与した本番障害も報告されており、2025年10月には15時間にわたる別のAWS障害が「自動化ソフトウェアのバグ」と説明されている。
背景として、Amazonは社内でKiroの採用を積極的に推進していた。週次使用率80%を目標に設定し、採用率を詳細に追跡していたとされる。商用製品として売り出したいツールを社内で使わせるノルマが、リスク評価のインセンティブと衝突していた構図だ。
「うちのツールは安全じゃないかも」というフィードバックが、「80%使え」という号令の中で上がりにくくなる。ツールの品質を上げるための社内ドッグフーディングが、採用率をKPIにした瞬間にリスク評価の無力化装置になる。
元記事: Amazon blames human employees for an AI coding agent’s mistake
Claude Code:auto-compactionがデータを非可逆に消去する
何が起きているか
Claude Codeで長いセッションを続けていると、突然Claudeが「さっき貼り付けたコードをもう一度送ってもらえますか」と言い出す。これはバグだ。
Claude Codeにはauto-compactionという機能がある。会話履歴がコンテキスト上限に近づくと、過去のやり取りを要約に圧縮してトークンを節約する仕組みで、ユーザーが意識しないバックグラウンドで自動的に発火する。
問題は、この要約生成が非可逆な変換であること。
たとえば8,000文字のDOMマークアップを貼り付けてClaudeと40分作業した後にcompactionが走ると、サマリーにはこんな一行だけが残る:
[compacted] User provided 8,200 characters of DOM markup for analysis.
実際のマークアップは消えた。Claudeの側には「8,200文字のDOMマークアップがあった」という事実しか残っていない。その後にマークアップの具体的な内容を聞くと、ハルシネーションするか「もう一度貼ってください」と言うかのどちらかだ。
compactionの技術的な仕組み
auto-compactionの動作をもう少し具体的に書く。
Claude Codeはセッション中の全メッセージをコンテキストウィンドウに載せて動いている。会話が長くなるとトークン数がモデルの上限に近づくため、古いメッセージから順にLLM自身が要約を生成し、元のメッセージを要約テキストで置き換える。これがcompaction。
要約の粒度はLLMの判断に委ねられている。コードブロック、エラーログ、ユーザーが貼り付けたデータなど、長いテキストほど積極的に圧縮される。だがこれらは往々にして「長いからこそ重要」なデータだ。8,000文字のDOMマークアップを貼り付けたのはそれが必要だったからで、「DOMマークアップがあった」という一行に圧縮していい情報ではない。
さらに厄介なのは、compactionが発火したことをユーザーに通知しない点だ。ユーザーから見ると、Claudeが突然文脈を見失ったように見える。実際に見失っている。
ディスクには残っているのに参照できない
データ自体はディスク上に存在する。Claude Codeのセッショントランスクリプトは ~/.claude/projects/{project-path}/ 以下に保存されていて、ファイルを開けばcompaction前のやり取りがすべて残っている。だが現在のClaudeには「そのファイルの何行目を読め」と指示する仕組みがない。
データが残っているのに参照できない。復元手段がないのにバックアップだけある状態で、いちばんフラストレーションが溜まるタイプの問題だ。
GitHub上では少なくとも8件の関連Issueが同じ根本原因から派生している:
- #1534 — Memory Loss After Auto-compact
- #3021 — Forgets to Refresh Memory After Compaction
- #10960 — Repository Path Changes Forgotten After Compaction
- #13919 — Skills context completely lost after auto-compaction
- #14968 — Context compaction loses critical state
- #19888 — Conversation compaction loses entire history
- #21105 — Context truncation causes loss of conversation history
- #23620 — Agent team lost when lead’s context gets compacted
提案されている修正と当面の回避策
Issue #26771で提案されているのは、サマリー内にトランスクリプトへの参照を埋め込む方式だ。
現在のlossy方式:
[compacted] User provided 8,200 characters of DOM markup for analysis.
提案されているrecoverable方式:
[compacted] User provided 8,200 characters of DOM markup for analysis.
[transcript:lines 847-1023]
サマリーに「元データがトランスクリプトの何行目にあるか」を記録しておく。Claudeが具体的なデータを必要としたときだけその範囲を読み直す。常に全文を保持するわけではないためトークンコストの増加は最小限に収まる。lossy compactionをrecoverable compactionに変える提案で、技術的には実装可能な範囲に見える。
当面の回避策:
/compactを手動で実行し、保持すべきデータを明示的に指示する- MEMORY.mdに重要なコンテキストを書き出しておく
- 長大なデータはファイルに保存してClaudeに読み込ませる(会話に直接貼り付けない)
Claude Codeの利用頻度が上がるほど、長時間セッションでcompactionに当たる確率も上がる。実運用でこの問題を踏んでいる人はGitHub Issue #26771にupvoteしておくといい。
Claude Codeのサブエージェント:使用量が見えないまま上限に突っ込む
compactionとは別の問題
compactionがデータの質の問題だとすれば、こちらは量の問題。Claude Codeのサブエージェント(マルチエージェント)機能を使うと、使用上限に想定よりはるかに速く到達する。
Claude Codeのサブエージェントは、メインエージェントとは別のコンテキストウィンドウを持つ独立したClaudeインスタンスとして動く。3つのサブエージェントを並列で走らせれば、その分だけAPIコールとトークン消費が並列で発生する。plan modeで動かすサブエージェントは通常セッションの約7倍のトークンを消費するという報告もある。
Maxプランでも2時間で枯渇
GitHub Issue #16157では、Maxプラン($100/月、Pro比5倍の使用量)のユーザーが「3日間使わずに再開したら2時間で上限に達した」と報告している。別のユーザーは45分で枯渇し、「他の誰かが使っているかのようにメーターが減った」と書いている。
Anthropicは「レート制限自体は変更していない」と回答した。ただし「Opus 4.5はこれまでより長く動き、より多くの作業をこなすため、結果としてトークン消費が増える」とも説明している。つまりモデルが賢くなってより多くのツール呼び出しや推論ステップを踏むようになった結果、1タスクあたりのトークン消費量が増え、使用上限に速く到達するようになった。
「リファクタしろ」のような1つのタスクでも、ファイル読み取り、編集、テスト実行、修正を繰り返すと10-30メッセージ分のレート制限を消費する。サブエージェントを使えばこれが並列で走るから、掛け算になる。
使用量のフィードバックがない
Kiroの「確認なし実行」とcompactionの「通知なし圧縮」に共通するパターンがここにもある。Claude Codeにはリアルタイムのトークン消費量表示がない。残量が見えないまま作業を進め、突然「使用上限に達しました」と止まる。
5時間のウィンドウでリセットされる仕組みだが、ウィンドウの残り時間も残りトークン数も明示されない。ユーザーが把握できるのは「上限に達した」という事実だけで、どの操作がどれだけ消費したかの内訳は見えない。
GitHub #16157には重複Issueが3件リンクされており(#13551、#16058、#9544)、同じ問題に繰り返し報告が上がっている。