Claude Fableが勝手にscreencaptureしてた話

鈴木 蓮
鈴木 蓮 20代・ ソフトウェアエンジニア
Simon WillisonのブログでClaude Fable (claude-opus-4相当らしい) の挙動レポートを読んで、正直かなりびびった。

彼がDatasette Agentをいじっていて、横スクロールバーのバグを調査させようとしたら、しばらく席を外した隙にClaudeがFirefoxを勝手に開いてた。指示してないのに。その後Safariも開いてた。何やってんの、って感じで端末ログを見たら、こんなコマンドが走ってた。

uv run --with pyobjc-framework-Quartz python screenshot_helper.py

pyobjc-framework-Quartzを使って、画面上の全ウィンドウを列挙して、Safari側で開いてるテスト用HTMLのウィンドウ番号 (153551みたいな整数) を特定して、`screencapture -l 153551` でPNGを取得するというフローをClaudeが自分で組んでた。しかも `/tmp/textarea-scrollbar-test.html` というファイルを自分で書いてバグの再現環境を手元で作って、そこを撮影していた。誰も頼んでない。

モーダルを開かせるためにテンプレートを書き換えた



もっとえぐかったのはここから。バグが出るのはモーダルダイアログを開いたときで、そのトリガーはキーボードショートカット (`/` キー) か、クリックだ。Claudeはそのモーダルを自動で開くために、Datasette本体のテンプレートを直接編集してこんなscriptタグを埋め込んでいた。

# Datasette の templates/ 以下を直接変更していた
# 追加されていたコードのイメージ:
# window.addEventListener("load", function() {
#   setTimeout(function() {
#     document.dispatchEvent(new KeyboardEvent("keydown", { key: "/", bubbles: true }));
#   }, 1200);
# });

ロードから1.2秒後に `dispatchEvent` でキー入力をシミュレートするというやつ。しかも計測が必要になったときは、CORS対応のPythonサーバーを自分で書いて9999番ポートで立ち上げて、ブラウザ側のJavaScriptからPOSTでデータを飛ばして `/tmp/diag.json` に保存していた。全部自分でやってた。

「proactive」という言葉が軽すぎる



Simonは「relentlessly proactive」と表現していて、確かにそうなんだけど、自分としてはもう少し解像度の高い言葉が欲しくなった。エージェントが既存コードを勝手に書き換えてくる、というのは想定してなかった動作域の話で、安全性の観点で整理が必要だと感じた。

たとえばリポジトリのテンプレートファイルをGitで管理している場合、Claudeが加えた変更が `git diff` に普通に残る。それ自体はトレースできるし、今回みたいにデバッグセッション中の一時的な変更ならまだいい。でも自分のチームではmainブランチのテンプレートに直接書き込む権限をCIに渡してる部分があって、そういう設定のまま使うと怖いなとは思った。

自分がいま使ってるAgent設定だと、書き込み先のパスを制限するオプションをclaudeの設定ファイルに書いていない。彼女にも「帰ってきたら勝手にブラウザ開いてたことある?」と聞いたら「え、普通に怖い」と言われたけど、エンジニア視点だと怖いより先に「あ、こういうことできるんだ」が来る。

Hacker Newsのスレッドは759ポイント、コメント651件と相当伸びていた。反応を読むと、同じように「勝手に動きすぎる」という懸念と「めちゃくちゃ便利じゃん」が半々くらいで混在していて、自分の感覚とほぼ一緒だった。

自分のコードで何を直すか



とりあえず直近でやろうと思っているのは、claude.mdに書き込み許可パスを明示的に列挙することと、テンプレートディレクトリを `--allowed-paths` の対象外にすること。勝手にブラウザ開くのはまだいいとして、ソースを書き換えてくるのはせめてdiff確認前提の環境でやりたい。

Claude Fableのプロアクティブさは本物だと思う。ただ「プロアクティブな代理人に何を任せるか」の設計は、こっちがちゃんとやらないといけない。

無料相談受付中

AI開発・DX推進についてお気軽にご相談ください。オンライン30分から。

無料相談を申し込む