◉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-19上級

Claude × Playwright のブラウザエージェントが「成功したつもり」で失敗するとき — 操作を検証し UI の変化に先回りする実装メモ

Claude API と Playwright のブラウザエージェントは、視覚で判断する分だけ「やったつもりで失敗する」誤成功が起きます。自己申告を信じず操作を事後検証する設計と、UI 変化に先回りで気づくドリフト検知の実装をまとめます。

playwrightbrowser-automationagent11claude-api83production87typescript11

✦ プレミアム記事

「カートに追加しました」と報告したのに、カートは空だった

夜間に走らせていた収集エージェントのログを朝に開くと、completed: true がずらりと並んでいました。けれど実際の成果物は半分しか揃っていない。ステップを追うと、あるサイトで「商品をカートに追加し、決済画面まで進みました」とエージェントが自信満々に報告しているのに、カートは最後まで空のままでした。クリックは座標の上では成功し、スクリーンショットには「追加」ボタンが押された風の見た目が写っている。それでも、肝心の状態は何も変わっていなかったのです。

これは Playwright のセレクタが壊れる、という昔ながらの故障とは質が違います。命令型スクリプトは壊れると例外を投げて止まってくれるので、少なくとも気づけます。やっかいなのは、Claude にスクリーンショットを見せて次の操作を判断させる視覚エージェントが、壊れずに「成功したつもり」で先へ進むことです。例外も出ず、ログも緑のまま、結果だけが間違っている。本番で一番こわいのはこの静かな失敗です。

ここから、エージェントの自己申告をいっさい信用しない前提で、各操作を目標に結びつけて事後検証する設計と、UI の変化に壊れる前に気づくドリフト検知を、動くコードとともに整理していきます。対象は TypeScript で Playwright と Claude API を触ったことがある方です。

なぜ視覚エージェントは「やったつもり」になるのか

命令型の Playwright スクリプトと、Claude にスクリーンショットを渡して判断させるエージェントでは、失敗の出方が根本的に違います。

観点命令型スクリプト視覚エージェント
UI 変更時の挙動セレクタ不一致で例外 → 停止見た目で推論し操作を続行
失敗の検知例外で即わかる静かに誤った状態へ進む
成功の判定根拠明示的な waitForSelectorモデルの「達成した」という自己申告
怖さ止まるが気づける止まらないが間違っている

誤成功が生まれる3つの経路

ここが最初の落とし穴です。誤成功(false success)が生まれる経路は、私が見てきた範囲では概ね3つに集約されます。第一に、クリック自体は座標上で成立したが、ボタンが無効化されていた・モーダルに覆われていた等で副作用が起きなかった場合。第二に、スクリーンショットの撮影タイミングが非同期更新より早く、操作前の画面を見て「変わった」と誤認する場合。第三に、モデルが目標達成を楽観的に宣言する場合です。Claude は親切なので、ゴールに近い画面を見ると「達成できたと思います」と寄せてくることがあります。

共通する根っこは一つで、「操作した」ことと「状態が目的どおり変わった」ことを同一視している点です。ここを切り離すのが設計の出発点になります。

✦

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

この記事の続きを読む

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

この記事で得られること
✦視覚エージェント特有の「誤成功(false success)」がなぜ起きるかと、自己申告を信用しない検証ゲートの設計
✦目標に紐づけた事後検証(goal-bound assertion)と、DOM を根拠にした二重確認の実装コード
✦UI ドリフトをカナリアで先回り検知し、誤成功率をメトリクス化してサーキットブレーカーで止める運用パターン
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⬡ API & SDK2026-05-26
Claude API の構造化レスポンスを本番で安定させる — tool_use と JSON Schema、多層検証の実装メモ
Claude API の応答を JSON で受け取る実装は数行で書けますが、本番運用では「形は正しいが意味が壊れている」レスポンスにどう備えるかが分かれ目になります。tool_use・JSON Schema・ドメイン検証を組み合わせた多層パイプラインを、壁紙アプリの分類処理での実体験を交えて整理しました。
⬡ API & SDK2026-05-22
Claude API の tool_result could not be submitted が再発しないための回復ハンドラ設計
Claude API でエージェントを長時間動かしていると、ある日突然 'tool_result could not be submitted' が連発し始めることがあります。再試行しても直らない、ストリーミング途中で死ぬ、そして次のセッションでもまた出る — 常時稼働のエージェント基盤で実際に踏み抜いた4種類の原因と、TypeScript で書いた回復ハンドラの実装を整理しました。
⬡ API & SDK2026-05-19
Claude API のチャット履歴を階層サマライズする:3 段階圧縮でトークンを 70 % 削減した設計
壁紙アプリのインアプリ AI チャットで増え続ける履歴トークンを抑えるため、直近ターン・中期エピソード・長期エンティティの 3 層に分けて圧縮する設計を、TypeScript の動くコードと 7 週間の運用データつきで記録しました。月額 API 費用を $480 から $145 まで下げています。