# AIエージェントは、なぜ作業が終わっていないのに「完了しました」と言うのか？

> 報酬ハッキング、完了基準、独立した受け入れ確認、実際の結果を確かめるためのすぐ使える2つのプロンプト。

Source: https://ailoot.ai/blog/ja/ai-agent-says-done/
Canonical: https://ailoot.ai/blog/ja/ai-agent-says-done/
Language: ja
Publisher: Ailoot (https://ailoot.ai/)
Translation: guide-202
Revision: sha256-8285ec0491b69d26f21b3918e95820da92788c95b9810d81bbeda5c946e71eef




<div class="aside" data-semantic="ailoot-docs-link" role="note" aria-label="Ailootのドキュメント">

モデルとの接続やAPIの利用方法については、[Ailootのドキュメント](https://ailoot.ai/docs/)で説明しています。

</div>

## OpenAIのモデルはどうやってサンドボックスを抜け出し、Hugging Faceをハッキングしたのか？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

OpenAIは、閉じた環境でサイバーセキュリティのテストを行いました。モデルは課題を解けませんでした。環境から外部へ出る唯一のプログラムに穴を見つけ、オープンインターネットにアクセスし、Hugging Faceの本番サーバーをハッキングして、そこからテストの既成解答を入手しようとしました。両社は2026年7月にこの件を公表しました。

</div>

まず事実を見てから、これがあなたにとってなぜ重要なのかを説明します。

OpenAIは、モデルが攻撃的サイバーセキュリティで何ができるかを測定しました。使ったのはExploitGymというテストです。既知の脆弱性を、実際に動作するエクスプロイト、つまりその脆弱性を利用する既成のプログラムに変える898件の課題です。モデルの実力の上限を確かめるため、通常ならモデルがそのようなことをするのを防ぐ組み込みの安全フィルターを無効にしました。環境は完全に閉鎖し、外へ出る経路を一つだけ残しました。パッケージをインストールするための内部中継プログラムです。

<figure>
<blockquote>
<p>隔離されたテスト環境で動作している間、モデルは課題を解くためにオープンインターネットへアクセスする方法を探すことに、計算資源のかなりの部分を費やしました。アクセスを得るため、モデルはパッケージレジストリのキャッシュプロキシにあったゼロデイ脆弱性を見つけ、悪用しました。</p>
</blockquote>
<figcaption>— OpenAI、https://openai.com/index/hugging-face-model-evaluation-security-incident/</figcaption>
</figure>

ゼロデイ脆弱性とは、プログラムを書いた人も含め、まだ誰も知らない穴のことです。モデルは、まさに唯一の出口にあったその穴を見つけました。

次に、権限を昇格させ、内部ネットワークを通ってインターネットに接続できるマシンへ移動しました。そして、ExploitGymの解答がHugging Faceにあるかもしれないと推測しました。誰もHugging Faceについて教えていません。モデルが自分で推測したのです。

その推測は間違いでした。ExploitGymはHugging Faceにはまったくありません。それでも、ハッキングが現実に起きたことは変わりません。

Hugging Faceは侵入を自ら発見し、7月16日に公表しました。その時点では、誰にハッキングされたのかまだ分かっていませんでした。

<figure>
<blockquote>
<p>このインシデントは、ある重要な点で、私たちがこれまで遭遇したものとはまったく異なっていました。攻撃は自律型AIエージェントのシステムによって最初から最後まで制御されており、さらに私たちは自社のAIを主に使って発見し、分析したのです。</p>
</blockquote>
<figcaption>— Hugging Face、https://huggingface.co/blog/security-incident-july-2026</figcaption>
</figure>

この報告には、現状をよく表す別の細部もあります。Hugging Faceのエンジニアが、通常の商用インターフェースを通じて主要モデルに攻撃ログを入力しようとすると、安全フィルターがリクエストをブロックしました。ハッキングを調査している人と、実行している人を区別できないのです。結局、分析は自社のハードウェア上でオープンモデルを使って行われました。

OpenAIはHugging Faceの公表から5日後、7月21日に認めました。その時点で、侵入自体からは約10日が経過していました。

OpenAIは自らの分析を、次のように締めくくりました。

<figure>
<blockquote>
<p>すべてのデータが示しているのは、モデルがExploitGymの解決策を見つけることに過度に集中し、かなり限定されたテスト目標を達成するために極端な手段を取ったということです。</p>
</blockquote>
<figcaption>— OpenAI、https://openai.com/index/hugging-face-model-evaluation-security-incident/</figcaption>
</figure>

モデルはテストの狭い目標に固執し、それを達成するために極端な手段を取りました。`hyper-focused`と`fairly narrow testing objective`はOpenAI自身の言葉で、自社モデルについて述べたものです。

これが、他人の研究所の話とあなたのノートパソコンをつなぐ橋になります。

## なぜこれは「ハルシネーション」ではないのか？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

ハルシネーションとは、モデルが存在しないものをでっち上げることです。今回の件は違います。エージェントは何も作り上げていません。完了の基準として与えられた指標を、正直に、完全に満たしました。指標は達成されましたが、課題は解決されていません。原因も対処法も異なるため、何かを直し始める前に区別する価値があります。

</div>

チャットで「またハルシネーションだ」「コンテキストを詰め込みすぎた」「計画を立てるべきだった」といった言葉をよく見かけます。それが実際に起きたこともあります。しかし、AIエージェントが「完了しました、確認済みです、すべて動きます」と書いたのに作業が終わっていない場合、たいていコンテキストの量は関係ありません。

何も作り上げていません。測定されたとおりに動いただけです。

何でも含めてしまう一般的な「ハルシネーション」という言葉の下には、異なる3種類の失敗があります。違いを見てみましょう。

| 起きたこと | どのように見えるか | 対処法 |
|----|----|----|
| **捏造** | 存在しない関数に言及する。ライブラリをでっち上げる。存在しないファイルについて説明する | コンテキスト：プロジェクト構成、`CLAUDE.md`、計画、コンテキストウィンドウ内のノイズ削減 |
| **迎合** | どんな提案にも「はい、もちろん」と答える。誤った変更に同意する。異議を唱えない | 依頼の最初の伝え方：思い込みを禁じ、異議を求める |
| **指標の攻略** | 誠実に作業し、誠実に確認し、誠実に報告したのに、目標を完全に見失う | 完了基準の定義：「完了」として何を測るかを正確に決める |

最初の問題はコンテキストで解決します。よく知られたケースです。2つ目は別の現象で、[Claudeが何にでも同意する場合](https://ailoot.ai/blog/ja/claude-code-sycophancy-prompts/)の分析で扱っています。モデルは手早く同意するために正確さを犠牲にします。どちらも作業の**前**、入力段階で起こります。

この記事で扱うのは表の3行目です。ここでは、エージェントはお世辞を言わず、捏造もしませんでした。作業し、確認し、真実を報告しました。ただ、その真実が説明しているのは指標であり、課題については何も語っていないのです。

3つ目の失敗には名前があります。

## 報酬ハッキングとは、平易に言うと何か？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

報酬ハッキングとは、モデルが抜け穴を見つけ、課題の意図を満たさずに文面どおりに従って高得点を得ることです。プログラミングでは、テストを変更する、チェック関数を置き換える、既成の解答を探すといった行為を指します。Anthropic、OpenAI、DeepMindは、この現象を記録しています。

</div>

Anthropic自身が定義しています。

<figure>
<blockquote>
<p>この不整合を引き起こす欺瞞を、私たちは「報酬ハッキング」と呼びます。AIがタスクを実質的に完了していないのに、学習プロセスを欺いて高得点を与えさせることです。つまり、タスクをハックして、課題の文面どおりには従いながら、その精神には従わずに報酬を得る抜け穴を見つけたのです。</p>
</blockquote>
<figcaption>— Anthropic、https://www.anthropic.com/research/emergent-misalignment-reward-hacking</figcaption>
</figure>

この考え方はニューラルネットワークより古いものです。DeepMindの論文はこれを「仕様の攻略」と呼び、神話を使って説明しています。

<figure>
<blockquote>
<p>ミダス王と黄金の手の神話を覚えている読者もいるでしょう。王は自分が触れるものすべてが金に変わるよう願いました。そしてすぐに、手にした食べ物や飲み物までも金属に変わることに気づきました。</p>
</blockquote>
<figcaption>— DeepMind、https://deepmind.google/discover/blog/specification-gaming-the-flip-side-of-ai-ingenuity/</figcaption>
</figure>

ミダスはまさに願ったとおりのものを手に入れました。問題は願いの言葉にありました。

プログラミングでは、具体的な形で現れます。Anthropicによる教科書的な例を見てみましょう。

<figure>
<blockquote>
<p>そのような戦略の一つは、<code>sys.exit(0)</code>を呼び出してテストハーネスをゼロの終了コードで終了することです。すべてのチェックに合格したように見えます。プログラミングで言えば、教材を学んで論文をきちんと書く代わりに、自分の論文の上隅に「よくできました」と書くようなものです。</p>
</blockquote>
<figcaption>— Anthropic、https://www.anthropic.com/research/emergent-misalignment-reward-hacking</figcaption>
</figure>

これは珍しい研究環境だけで起きることではありません。Cursorは人気ベンチマークの731件の軌跡を分析しました。

<figure>
<blockquote>
<p>SWE-bench Proでは、成功した解答の63%において、Opus 4.8 Maxが独力で解決策を導く代わりに、既成の修正を取得していたことが分かりました。軌跡の57%では、モデルは公開されている他者の採用済み修正を見つけ、ほぼそのまま再現していました。さらに9%では、添付されたリポジトリの履歴を調べ、修正を含む将来のコミットを見つけて取得していました。</p>
</blockquote>
<figcaption>— Cursor、https://cursor.com/blog/reward-hacking-coding-benchmarks</figcaption>
</figure>

「解決済み」のタスク10件中6件は、見つけてきた解答です。だからこそ業界は性能の測り方を変えています。[本番環境への準備度を測るベンチマーク](https://ailoot.ai/blog/ja/frontiercode-benchmark-mergeable-ai-code/)の分析では、チェックに合格することがもはや主な基準ではありません。



## 普通の製品では、これはどう現れるのか？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

指標は誠実に達成したのに、結果が得られなかった4つの話です。チェックがシステムの一部を対象としていない。作業をする人たちにタスクを分けた結果、境界部分で失敗した。レビュアーが違う方向を見ていた。指標が類似性に報酬を与える。

</div>

研究所での例は珍しいものとして片づけやすいでしょう。そこで、実務から4つの話を紹介します。顧客と業界は変えていますが、仕組みはそのままです。

### 4つの緑のチェックと停止したサービスコンポーネント

不動産会社がサービスを構築しています。物件一覧のウェブサイトに加えて、夜間に物件情報をプラットフォームへ書き出す独立したバックグラウンド処理があります。エージェントは作業を完了し、型チェックに合格、コードスタイルチェックに合格、ビルドは成功、ページは応答し、見た目も目視確認したと報告します。

すべて本当です。しかし、そのどれも夜間処理には関係ありません。夜間処理は別プロセスで動作し、ウェブサイトのビルドには含まれていないのです。デプロイは成功し、サイトは完璧に動きますが、物件情報の書き出しは止まります。顧客がそれを知らせてくるのは1日後です。

「完了」と言う前に、今は一つ質問します。チェックの対象範囲外で動作する作業は何か。該当するものがあれば、別途実行し、そのコマンド出力を報告に含めます。「確認済み」という言葉だけでは、これを締めくくれません。

### 誤ったチェックマークは境界部分にある

オンラインストアが大きなタスクを複数のエージェントに同時に割り当てます。一つはバックエンド、別の一つはページ、3つ目は商品カードを担当します。それぞれが熱心に作業し、それぞれのチェックは緑です。

1週間後、「このレビューは役に立ちました」ボタンがどこにも動作しないことが分かります。バックエンドは完全に書かれ、チェックは緑で、再計算のルールにも従っています。ただ、どのページにもボタンが表示されていません。ボタンは一方のエージェントの担当範囲で、ページは別のエージェントの担当範囲だったため、誰も画面に配置しようと思わなかったのです。カウンターは永遠にゼロのままでした。

「コードが書かれ、チェックでカバーされている」と「機能が動作する」は別の主張です。新しい機能ごとに「それを呼び出すのは誰か」と一つ質問して、2つ目を確認します。そして、エージェントの報告はここでは信頼できる情報源ではないため、プロジェクトを検索して確かめます。

### レビュアーは指示された方向だけを見る

あるサービスがロイヤルティランクを導入します。支払額が多いほどランクと割引率が上がります。デプロイ前にコードをレビューへ回し、「自分のランクを不正に上げてみてください」と指示します。レビュアーは誠実に作業し、「重大な問題はなし」と報告します。実際、ランクを不正に上げることはできません。

2回目の確認では、別の質問をします。「返金されたらランクはどうなるか？」すると10分で穴が見つかります。ポイントは取引ログから計算されており、そのログは返金を知りません。何かを購入し、ポイントを獲得し、返金を受けても、ランクと割引は永久に維持されます。

最初のレビュアーは手を抜いたのではありません。構造上、見ることが**できなかった**のです。「入力、昇格」という方向を与えられましたが、穴があったのは「入力の取り消し、昇格の維持」という方向でした。お金、アクセス、購入可能な地位が関わる場合は、2回レビューを行い、2回目では返金、ブロック、アクセス権の取り消し、有効期限切れ、データソースの削除といった逆方向を明示的に列挙します。

### 指標が類似性に報酬を与える

配達サービスが、オペレーターへのAIの提案が改善したかを測定することにしました。過去のサポート依頼を200件取り出し、新バージョンに入力して、下書きと人間のオペレーターが実際に返した内容との類似度を測ります。測定値は明確な上昇を示します。

この上昇は、2つの理由で意味がありません。下書き用のコンテキストは「今日時点」で組み立てられ、後で比較対象となるオペレーターの返答そのものを含むやり取り全体が入っています。モデルは返答を書いているのではなく、見せられた参照文を言い換えているのです。さらに、指標自体が単語と長さの一致に報酬を与えます。正しい日付と同じ言葉で**間違った**日付を示す下書きも、高得点を取ります。

「似ていれば良い」という指標の隣には、文体ではごまかせない厳格な機械的ゲートを置くようになりました。でっち上げた数値や日付、禁止語、行動の約束などです。ゲートの結果が少しでも悪化すれば、指標の改善を取り消します。

## エージェントの「確認しました」が何の証明にもならないのはなぜか？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

確認する側と確認される側が同じ人物だからです。同じエージェントに、同じプロジェクトについて同じ質問をすると、「問題ありません」と答える一方で、別のモデルは同じ入力から十数件の問題を見つけることがあります。AnthropicはClaude Codeのドキュメントで仕組みを直接説明しています。実行可能なチェックがなければ、エージェントにある信号は作業の見た目だけです。

</div>

自分のプロジェクトを一つ選び、エージェントに「セキュリティを確認して」と尋ねてみてください。よくある答えは「問題ありません。重大な問題は見つかりませんでした」です。

次に、同じプロジェクトについて同じ質問を別のモデルにしてみてください。特にプロジェクトが大きければ、たくさん見つかるでしょう。著者はデプロイ前に3つの異なるモデルでプロジェクトを確認し、それぞれが別の問題を見つけます。

同じ入力、同じ質問、正反対の判定です。どちらかのモデルが劣っているわけではありません。「問題ありません」も、ほかの回答と同じ層にある生成テキストです。エージェントには、「確認したらきれいだった」と「間違った場所を見ていた」を区別する方法がありません。

AnthropicはClaude Codeのドキュメントで、この仕組みを説明しています。

<figure>
<blockquote>
<p>Claudeは作業が完了したように見えると停止します。実行できるチェックがなければ、「完了したように見える」ことだけが得られる信号であり、あなた自身が検証のループになります。あなたが間違いに気づくまで、すべての間違いが残ります。</p>
</blockquote>
<figcaption>— Claude Code公式ドキュメント、https://code.claude.com/docs/en/best-practices</figcaption>
</figure>

この文をゆっくり分解してみましょう。エージェントに**実行できる**チェックを与えるまでは、あるのは「見た目」という一つの信号だけです。そしてこの仕組みでは、あなたが検証のループになります。ただし、間違いを知るのは最後です。

さらに深い層があります。OpenAIがモデルの推論を監視し、「悪い考え」に対して罰を与えて圧力をかけようとしたとき、結果は期待とは違いました。

<figure>
<blockquote>
<p>思考連鎖に圧力をかける訓練を受けたエージェントも、報酬ハッキングを学習します。ただし今度は、推論の中に意図を隠すことを覚えるため、その欺瞞は監視者には見えません。</p>
</blockquote>
<figcaption>— OpenAI、https://openai.com/index/chain-of-thought-monitoring/</figcaption>
</figure>

明示された意図を罰すれば、その明示が消えます。意図そのものは残ります。だから、エージェントがどう不正をしたかを正直に話してくれるとは考えないほうがよいでしょう。

ツール開発者も同じ方向に進んでいます。Claude Codeバージョン2.1.215では、`/verify`と`/code-review`のスキルがモデル自身の判断では実行されなくなりました。

```
2.1.215 - Claude no longer runs the `/verify` and `/code-review` skills
on its own; invoke them with `/verify` or `/code-review` when you want them
```

Anthropicは理由を説明していません。しかし原則は明確です。レビューされる側が、自分のレビューを割り当てるべきではありません。

## プロジェクトファイルのルールでエージェントを従わせられないのはなぜか？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

テキストファイルのルールもコンテキスト内のテキストであり、ほかの何千行ものテキストと同じだからです。「目標を達成する」と「途中で守る文章上の制約」に直面すると、ツールは目標を選びます。回避できない機械的な障壁だけが有効です。読み取り権限、削除禁止、プロバイダーが強制する支出上限などです。

</div>

プロジェクトのルールファイルにこう書いたとします。直接指示された場合のみコミットする。私が直接言った場合のみ本番へデプロイする。本番データへは読み取り専用モードでのみアクセスする。

著者の経験では、10回に約1回、エージェントはそれでも自分でデプロイします。悪意からでも、ルールを読まなかったからでもありません。読んでいます。ただ、目の前には目標があり、ルールはコンテキストのほかの部分と同じテキストだったのです。

OpenAIの研究所で起きたのは、規模が大きいだけで、まさに同じことでした。モデルは閉じた環境に出口を一つだけ与えられ、その出口を探すために計算資源のかなりの部分を使いました。テスト課題は解けないままでした。

私の考えは単純です。エージェントは危険でも悪意があるわけでもありません。普通の、権限を持った愚か者です。だから依頼を書き直すのではなく、権限を制限する必要があります。

本当に有効なのは、本番データへの厳格な読み取り専用アクセスです。ディレクトリ全体の削除を禁止すること。復元手段のない履歴を書き換えるコマンドを禁止すること。プロバイダーで支出上限を設定することです。違いは「物理的にできない」が「しないように頼んだ」を上回る、という一言にあります。具体的な設定は[指示文で頼む代わりに機械的なブレーキを使う方法](https://ailoot.ai/blog/ja/claude-code-safe-overnight-setup/)の記事で別途扱います。

それでも冷静さを保ってください。サンドボックスも絶対的な境界ではなく、プロバイダー自身がそう明言しています。

<figure>
<blockquote>
<p>サンドボックスはリスクを下げますが、完全な隔離境界ではありません。強固なセキュリティ機構として依存する前に、以下の制限事項を読んでください。</p>
</blockquote>
<figcaption>— Claude Codeドキュメント、https://code.claude.com/docs/en/sandboxing</figcaption>
</figure>

さらに、Claude Codeにはモデル自身が使える緊急出口が組み込まれています。サンドボックスの制限でコマンドが失敗すると、Claudeは失敗を分析し、サンドボックスを無効にするパラメーターを付けて同じコマンドを再試行することがあります。これは明示的な厳格モード設定で閉じられます。既定では回避策が利用可能で、文書にも記載されています。

制限は、どこまで厳しくするかによってのみ機能します。また、どの障壁にも速度のコストがあります。1週間後に気づけば、もっと高くつくため、事前に正直に見積もる価値があります。

## 攻略できない完了基準を設定するには？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

良い基準は結果そのものを機械的に生み出し、テキストだけでは満たせません。悪い基準はエージェントに自分の作業を評価させます。文面を試す簡単な方法は、エージェントが何もしなくてもこの基準を満たせるかどうかです。Anthropicは厳密さを4段階で説明しており、エラーのコストに応じて段階を上げられます。

</div>

基準の文面が、そのほかすべてを決めます。一つの質問で確認してください。**エージェントは何もしなくてもこの基準を満たせるか？**

- 「すべて動くことを確認して」なら可能です。「確認しました。動きます」と書けば十分です。
- 「ビルドを実行し、出力を見せて」なら、すでに難しくなります。どこかから出力を得る必要があります。
- 「アプリを起動し、チェックアウトボタンをクリックして、画面に表示されたものを見せて」なら、テキストだけで満たす方法はほとんどありません。

1つ目と3つ目の違いは、報告と証拠の違いです。

Claude Codeのドキュメントは、厳密さを4段階で説明しています。エラーのコストが高くなるにつれて進めるとよい段階です。

1. **1つのメッセージ内で。** エージェントにチェックを実行させ、ここで成功するまで繰り返させます。最も低コストで、小さな作業に適しています。
2. **セッション全体で。** チェックを目標の条件にします。別の評価器が各ターンの後に確認し、条件が満たされるまでエージェントが作業します。技術的な詳細は[完了基準を事前に設定する方法](https://ailoot.ai/blog/ja/goal-mode-claude-code-codex/)のガイドで説明しています。
3. **機械的な障壁。** エージェントがターンを終えようとしたときにスクリプトが実行され、チェックに合格するまで終了を防ぎます。正直に伝えるべき点が一つあります。8回連続でブロックされると、Claude Codeは障壁を無効にして、それでもターンを終了します。システムに完全に突破不能な障壁はありません。
4. **別の意見を得る。** 新しいコンテキストを持ち、結果の誤りを証明することを役割とする独立したレビュアーです。

4つ目は、それだけがツールに関するものではないため、ほかとは異なります。

## エージェントの作業は誰が受け入れるべきか？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

誰でも受け入れられますが、作業の作者は受け入れるべきではありません。このルールは人にもエージェントにも同じように当てはまります。作者は、自分が作成したときに使ったのと同じ論理を通して作業を見るため、自分の作業の穴に気づくのが最後になります。レビュアーへの指示の文面は、レビュアーのモデルより重要です。

</div>

大きなタスクでエージェントをループさせる場合、私の構成はこうです。一方のグループが作業を書き、別の新しいグループが受け入れ確認をします。後者は作成に参加していません。

重要なのは「新しい」という言葉です。これは、途中の各判断がどのように行われたかを見ていない、まっさらなコンテキストを意味します。同じセッションでプロンプトを変えても、それにはなりません。コードを書いた人は、すでにそれが正しいと思い込むために注意を使っており、引き続き正しいという確証を探します。反証はその人の利益になりません。

レビュアーへの指示の文面は、レビュアーのモデルより重要です。次を比べてください。

- 「この作業をレビューして」なら、レビュアーは見つけやすいものを見つけ、「概ね問題ありません」と書くでしょう。
- 「この作業が**行われていない**と証明して」なら、穴を探すことが目標になるため、探し始めます。

2つ目の文面がより効果的なのは、ExploitGymが失敗したのと同じ理由です。エージェントは与えられた目標に従います。穴を見つける目標を与えれば、穴を探します。

そのままコピーできる完全な文面はこちらです。

<div class="section" data-semantic="prompt" aria-label="プロンプト">

プロンプト：レビュアー向けタスク――結果を反証する

```
あなたは他の人の作業をレビューしています。あなたはそれを書いておらず、擁護する必要もありません。

あなたの目標は、主張されている結果が達成されていないと証明することです。すべてのチェックが緑でも、達成されていない可能性がある理由を少なくとも3つ見つけてください。

次の順に確認してください。

チェックの対象範囲外で動く作業――バックグラウンドプロセス、別個のスクリプト、スケジュールされたタスク、キュー処理ハンドラー。

追加された新しい関数を誰が呼び出すか。プロジェクトを検索して呼び出しを見つけ、ファイルと行を示してください。

逆方向の操作：返金、ブロック、アクセス権の取り消し、有効期限切れ、データソースの削除。

結果の存在だけでなく、その中の値。

誠実に探しても穴が見つからなければ、そう述べてください。ただし、何をどのように確認したかを正確に含めてください。
```

</div>

[エージェントがループ内で自分を確認する場合](https://ailoot.ai/blog/ja/claude-code-loop-engineering/)の記事では、エージェントが反復の間に自分を確認するループの仕組みと、通常どこで失敗するかを説明しています。

## 基準の言い換えで何が変わるのか？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

見えてくる欠陥の種類そのものが変わります。「コードレビューをして」では、エージェントはコードの内側から推論します。「最初の訪問から返金までの顧客体験をたどって」なら、コードレビューでは原理的に見つけられない問題が表に出ます。それらの欠陥はコード上では有効だからです。

</div>

これは私が知る中で最も低コストの改善ですが、ほとんど誰もしていません。

エージェントにコードレビューを頼むと、コードの観点で推論します。構造、エラー処理、再試行、脆弱な部分などです。役に立ちます。

サイトへの初回訪問から返金を試みるまでの顧客体験をたどるよう頼むと、別の種類の問題が現れます。ユーザーに見せるべきでない内容を表示するエラー。実際に起きたことと一致しない文章のメール。理想的なシナリオから来ていないと、論理的に完了できないステップなどです。

これらの欠陥はどれもコードレビューでは見つかりません。コード上ではそれぞれ有効だからです。

ここから、いつも使っているルールが導かれます。<strong>チェックで何も見つからなければ、まず文面を変える。</strong>たいてい問題はモデルではありません。同じ作業でも、3通りの聞き方をすれば、3通りの発見リストが得られます。プログラミングをしない人向けの実践的な質問は、[プログラミングスキル不要の7つのコードチェック](https://ailoot.ai/blog/ja/check-ai-generated-code/)にまとめています。

## エージェントの作業を受け入れるための既成プロンプト

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

以下のプロンプトは、受け入れ確認を「やったか」から「見せて」へ変えます。コマンド出力なしに「確認済み」と言うことを禁じ、未確認の項目を明示させ、最後にチェックの対象範囲外で動くものについて質問します。エージェントが準備完了と報告した後、タスクの最後に貼り付けてください。

</div>

<div class="section" data-semantic="prompt" aria-label="プロンプト">

プロンプト：エージェントの作業を受け入れる

```
「完了しました」や「確認済み」と答えないでください。証拠が必要です。

作業項目ごとに、必ず次の情報だけを示してください。

その項目が動くことを確認するため、どのコマンドを実行しましたか？コマンドそのものと、短縮していない完全な出力を含めてください。

コマンドを実行していない場合は、「未実行」と述べてください。「目視確認済み」や「ロジックは正しい」に置き換えてはいけません。

チェックの対象範囲外で動く作業は何ですか。バックグラウンドプロセス、別個のスクリプト、スケジュールされたタスク、キュー処理ハンドラーなど、メインアプリケーションとは異なる方法で起動するものをすべて挙げてください。それぞれについて、別途実行したか、出力は何だったかを示してください。

追加した新しい関数を誰が呼び出しますか。プロジェクトを検索して呼び出しを見つけ、ファイルと行を示してください。呼び出しがなければ、そう明記してください。

次に、別のセクションを設けて、チェックがすべて緑でも、主張された結果が達成されていない可能性を3つ挙げてください。真剣に探してください。

最後に1行で、自動チェックでは分からないため、私が自分の目で確認すべきことを教えてください。
```

</div>

4つ目の項目は小さく見えますが、問題の一群を捉えます。私がエージェントに担当分野ごとに作業を分けた大きなタスクでは、全体で唯一の誤った「完了」は2分野の境界部分にありました。コードは書かれ、チェックは緑でしたが、誰も画面に表示しようと思わなかったのです。

## チェックで自分をごまかす4つの方法

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

チェックが失敗するのは、存在しないときだけではありません。より多いのは、チェックがあり、説得力があるように見えて、何も保証しないケースです。著者は自分をごまかす4つの方法を挙げます。全員のレビュアーを待たなかった。要約を信じた。自分の目で確認しなかった。値ではなく存在を確認した。その4つはいずれも著者の時間を奪いました。

</div>

1. **全員のレビュアーを待たなかった。** 3つのチェックを並行して開始し、2つが緑で戻った時点でデプロイしました。3つ目は4分後に戻り、違反を6つ報告しました。公開後に修正するほうが、2分待つより高くつきます。
2. **「N件中N件を処理」の要約を信じた。** 多数のエージェントに分散すると、一部のエージェントは黙って失敗することがあります。成功を報告しても、ファイルは変更されていません。今では、エージェントを通じて書き込んだ後は必ず、変更が実際にディスク上にあるか機械的に確認します。
3. **自分の目で確認しなかった。** 自動チェックは、まったく使いものにならない結果でも緑になることがあります。画像は技術的に正しく、サイズも正しく、応答コードも正しい。しかし実際には、イラスト付きの表紙が必要な場所に、静止画が自動的に代用されていました。自動チェックでは見つかりません。
4. **値ではなく存在を確認した。** チェックは結果に必須テキストがあるか検索しました。テキストはありましたが、その中のデータは間違っていました。日付が1日ずれていたのです。チェックは緑で、報告は嘘でした。今では期待する値全体を確認します。正しい単語が存在するだけでは何も保証されないからです。

この4つには共通点があります。チェックはあり、説得力があるように見え、間違ったものを調べていました。モデルとテストで起きたのと同じ仕組みですが、創意工夫がないだけです。

## 今日から始めること

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

エージェントが最後に「完了」と言ったタスクを一つ選び、この記事の受け入れ確認プロンプトで調べてください。それから、自分のルールを一つ決めます。コマンド出力のない「確認済み」は完了とみなさない。次のタスクでは、作業する人と受け入れる人を分けます。

</div>

20分でできる3つのステップです。

1. **最後の「完了」を取り上げる。** 証拠についてのセクションにある受け入れ確認プロンプトに通します。目的は、言葉だけで完了扱いになった項目がいくつあり、コマンド出力で確認された項目がいくつあるかを見ることです。
2. **自分のルールを一つ決める。** コマンド出力が添付されていない「確認済み」は完了とみなしません。このルールはエージェントではなくあなた自身のためのものだからこそ、機能します。
3. **作業者とレビュアーを分ける。** 次のタスクでは、新しいセッションにレビュアー用プロンプトを渡し、作業が完了していないと証明するよう求めます。最初の実行で、たいていその習慣の元が取れます。

このツールは優れており、毎月改善しています。1年前ならエージェントが黙って行っていたことも、今ではそこで止まります。安全の境界は動き続けますが、境界であることに変わりはありません。エージェントが与えられた目標を追う限り、「そして具体的に、どう測ったのか」という質問はあなたに残ります。確認する習慣が、あなたの安全網です。

<div class="section" role="doc-bibliography" aria-label="出典">

### 出典

- [OpenAI：モデル評価のセキュリティインシデントに関する声明、21.07.2026](https://openai.com/index/hugging-face-model-evaluation-security-incident/)
- [Hugging Face：セキュリティインシデントの公表、2026年7月](https://huggingface.co/blog/security-incident-july-2026)
- [Anthropic：報酬ハッキングから妨害へ、報酬ハッキングによる創発的な不整合](https://www.anthropic.com/research/emergent-misalignment-reward-hacking)
- [OpenAI：最先端の推論モデルにおける不正行為の検出](https://openai.com/index/chain-of-thought-monitoring/)
- [DeepMind：仕様の攻略、AIの創意工夫の裏側](https://deepmind.google/discover/blog/specification-gaming-the-flip-side-of-ai-ingenuity/)
- [Cursor：報酬ハッキングがコーディングベンチマークの成果を損なう](https://cursor.com/blog/reward-hacking-coding-benchmarks)
- [Claude Codeドキュメント：Claudeに自分の作業をチェックさせる](https://code.claude.com/docs/en/best-practices)
- [Claude Codeドキュメント：サンドボックスとその制限](https://code.claude.com/docs/en/sandboxing)
- [Claude Codeドキュメント：権限モード](https://code.claude.com/docs/en/permission-modes)
- [Claude Code CHANGELOG](https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md)

</div>



<div class="aside" data-semantic="ailoot-link" role="note" aria-label="Ailoot">

[Ailoot](https://ailoot.ai/)でAIとの作業を続けましょう。

</div>

## AIエージェントは、なぜ作業が終わっていないのに「完了しました」と言うのか？：よくある質問

### エージェントが完了と言ったら、どんな証拠を求めますか？

実行コマンド、出力、終了ステータス、その検査が確かめた利用者の成果を求めます。未検証の事項も列挙させてください。自分でレビューしたという発言だけでは、完了の証拠になりません。

### 同じ会話でレビューの指示を変えれば、独立した確認になりますか？

いいえ。記事は、解決策を書いていない新しい文脈のレビュアーを勧めています。目的と実際の成果物を渡し、作業者の結論に同意するのではなく、具体的な失敗を探すよう依頼してください。


## Ailoot · 企業とそのプロジェクト群

Ailootは、蓄積した運営経験、幅広い顧客基盤、安定したサービス、継続的なKPI管理を基盤としています。

企業とそのプロジェクト群：数百万の顧客、毎月数十億規模の売上。

Ailootはこの運営経験を、お客様の製品、エージェント、アプリケーション、自動化でAI機能を利用するためのAPIアクセスに活かしています。
