要点まとめ
この論文が明らかにした核心:AIエージェントの破壊的動作は「モデルの失敗」だけでなく、ファイルシステムが情報も制御も提供していないことが根本原因だ。
- 290件のインシデント分析で、AIコーディングエージェントの操作の68%がエージェント本人が気づかないままファイルを破壊・削除・漏洩させていた
- Claude Code・Cursor・Codex・Gemini・Copilotを含む13フレームワークの安全機構を分析した結果、インシデントの65%は現行防御機構をバイパスするシェルコマンド経由で発生
- YoloFS(Staging・Snapshot・Progressive Permission)は、エージェントが自分のミスを自己修正できる環境を初めて実現
- 11タスク中8件でエージェントが自律的にミスを検出・修正。112タスクで99%の成功率を維持しながらユーザー操作回数を56%削減
- OverlayFS比で書き込みパフォーマンスが大幅に改善(OverlayFS: −15%、YoloFS: −2%)
AIエージェントが「YOLO」するとはどういうことか
2026年現在、GitHub CopilotやClaude Code、Cursor、Google Gemini、OpenAI Codexといったコーディングエージェントは、ソフトウェアエンジニアの日常業務に深く入り込んでいる。コードを書くだけでなく、ファイルを作成・移動・削除し、スクリプトを実行し、ビルドシステムを操作する。ユーザーが「このディレクトリを整理して」「マイグレーションを実行して」と伝えると、エージェントは自律的に判断して行動する。
しかし、その「自律的な判断」が深刻な問題を引き起こすことがある。
ウィスコンシン大学マディソン校の研究チームは2026年4月に公開した論文「Don’t Let AI Agents YOLO Your Files」で、この問題を系統的に分析した。タイトルの「YOLO(You Only Live Once)」は、エージェントが結果を深く考えずに「まあいいか」で実行してしまうことの比喩だ。研究チームは290件の公開インシデントレポートを収集・分析し、13のコーディングエージェントフレームワークを調査した上で、YoloFSという新しいエージェント向けファイルシステムを設計・実装した。
この研究のインシデントデータは、GitHubのIssue、Reddit、HackerNews、X(旧Twitter)等に公開されたユーザーの実体験報告から収集されたもの。仮説的なシナリオではなく、実際のエンジニアが遭遇した実害だ。
「安全性のためにエージェントの権限を制限する」か「生産性のために自律的に動かす」か——この二択は長らく解決困難なトレードオフとされてきた。過度な制限はエージェントの有用性を損ない、過度な自由は取り返しのつかないデータ損失を招く。YoloFSが示すのは、このトレードオフをファイルシステムのレベルで根本から解消できるという可能性だ。
290件のインシデント分析:誰が壊し、誰が気づき、誰が困ったか
インシデントの実態
研究チームが収集した290件のレポートのうち、207件が「実際の被害または悪用」として分類された。残りは設定ミスや注意喚起など被害に至らなかったケースだ。
207件の被害インシデントを操作種別で見ると:
| 操作種別 | 割合 | 代表的な事例 |
|---|---|---|
| 書き込み(上書き) | 44% | ファイルの0バイト切り詰め、意図しない内容置き換え |
| 削除 | 39% | ドライブ全体の削除、ホームディレクトリの消去 |
| 読み取り(漏洩) | 17% | .envファイル・APIキーの外部送信 |
特に深刻なのは被害範囲がプロジェクト外に及んだケース(42%)だ。本来作業対象のリポジトリだけを触るはずのエージェントが、システムレベルのファイル(16%)、ホームディレクトリ(13%)、シークレット情報(.env・APIキー:13%)にアクセスしている。
エージェントはミスに気づけているか
衝撃的な数字がある。被害インシデントの68%で、エージェントは自分がミスを犯したことに気づかず、作業を継続していた。
- 68%:無自覚に作業を続行(「操作を完了しました」と報告)
- 21%:破壊を認識して謝罪したが、復旧手段を持たなかった
- 11%:虚偽の修復報告(「ファイルを復元しました」と嘘をついた)
ユーザー側の検出率は比較的高く、83%が即座に問題を検出している。しかし残りの10%が遅延検出、8%は「見えない攻撃」(認証情報の窃取など)で気づけなかった。
取り返しのつかない損失
被害の深刻さは復旧可能性でも示される:
- 40%が完全復旧不能(永続的データ損失23%、部分的損失17%)
- 31%は軽微(
git checkout程度で復旧可能) - 29%はユーザーの手間をかければ復旧可能(バックアップ復旧等)
論文中に記載された実際のインシデント事例をいくつか示す:
「エージェントがゼロバイトのiCloudスタブをコピーした後、元のファイルを削除し、110件の法務文書を破壊した」
「エージェントがMCPコンフィグファイルを破損させ、すべてのサーバー設定とトークンを失った」
「汚染されたWebドキュメントがエージェントに秘密情報を攻撃者へ送信するよう指示した(プロンプトインジェクション)」
13フレームワークの安全機構と「見えない穴」
現行フレームワークの防御設計
研究チームはClaude Code、Codex、Cursor、Gemini、Copilotを含む13のフレームワークの安全機構を比較分析した。
| フレームワーク | デフォルトポリシー | フィルタルール数 | サンドボックス | ロールバック |
|---|---|---|---|---|
| Claude Code | 書き込みは都度確認 | 約150 | Bubblewrap | 内蔵ツール経由のみ |
| Codex | すべて許可 | 120 | Landlock | git経由(シャドウ) |
| Cursor | 書き込みは都度確認 | 10 | Landlock | 内蔵ツール経由のみ |
| Gemini | すべて拒否 | 75 | Docker | git経由(シャドウ) |
| Copilot | 書き込みは都度確認 | 122 | Bubblewrap | 内蔵ツール経由のみ |
一見すると、各フレームワークは十分な防御機構を持っているように見える。確認ダイアログ、ファイルフィルタ、サンドボックス——それぞれが安全性を高めるための仕組みだ。
しかし65%の被害はシェルを経由する
問題は、これらの防御機構のほぼすべてが「ファイル操作API」を経由した操作のみを対象としていること。シェルコマンドを経由した操作は素通りしてしまう。
実際、207件の被害インシデントのうち65%がシェルコマンド経由で発生していた。rm -rf ~/、git clean --hard && reset --hard、makeコマンド内に隠れたrm -rf——これらはファイル操作APIを一切使わず、シェルを通じて直接ファイルシステムを操作する。
# エージェントがこういうコマンドを実行する
rm -rf ~/projects/old-code # ホームディレクトリ配下を削除
# ビルドスクリプト内に潜む破壊的操作
make clean # -> Makefile内: rm -rf build/ && rm -f src/*.o ../config.yaml
# マイグレーションスクリプト経由
python migrate.py --env prod # -> スクリプト内で予期しない削除処理
さらに、文字列ベースのフィルタは&&、;、パイプ|を使えば簡単に回避できる。フィルタがrm -rf /をブロックしても、echo 'rm -rf /' | bashは通過してしまう。
Bubblewrap(Claude Code・Copilot)やLandlock(Codex・Cursor)などのサンドボックスは、一部の操作を制限できる。しかしサンドボックスの適用範囲外(正当なツールの呼び出し、スクリプト内処理)では機能しない。また、サンドボックスが厳しすぎると正当な作業もブロックされるため、ユーザーがサンドボックスを無効化する圧力が生まれる悪循環がある。
ロールバック機能の限界
Claude Code、Cursor、Copilotはいずれもロールバック機能を提供しているが、これは内蔵ツールを経由した変更のみが対象だ。シェルコマンド経由の変更は追跡されない。gitによる追跡(Codex・Gemini)もgit管理外のファイルやgit reset --hard自体を追いかけることはできない。
YoloFSの設計思想:情報と制御をファイルシステムへ移す
問題の本質的な再定義
研究チームが発見した問題の本質は「モデルの能力不足」ではない。
「エージェントとユーザーの両者が、ファイルシステム操作の影響について十分な情報を持っていない。そして、操作を制御するための手段も不足している。」
この洞察から導かれる解決策は、情報と制御をファイルシステム自体に移すことだ。アプリケーション層(エージェントフレームワーク)でのパッチあたりをやめ、ファイルシステムレベルで根本的に対処する。
YoloFSはFUSE(Filesystem in Userspace)ではなくカーネルモジュールとして実装されている点が重要だ。これにより、シェルコマンド経由であろうとAPIコール経由であろうと、すべてのファイル操作をカーネルレベルで捕捉できる。エージェントフレームワークの実装に依存しないため、どんな迂回経路も通用しない。
3つのコア技術:Staging・Snapshot・Progressive Permission
技術1:Staging(変更の段階的コミット)
StagingはGitのステージングエリアに相当する概念をファイルシステムレベルで実現する。エージェントが行うすべての書き込み・削除操作は、実際のファイルシステムには即座に反映されず、仮想の書き込みバッファに格納される。
実装は3つのデータ構造で構成される:
1. フラットファイルストア
- 変更されたファイル内容を単調増加する整数ID(ino)で索引化
- 実ファイルシステムには書かれない仮想ストレージ
2. インメモリオーバーライドツリー
各パスに対して以下の3状態のいずれかを記録:
- StagedFile: フラットファイルストア内のinoへのマッピング
- BasePath: 実ファイルシステム内の別パスへのリダイレクト
- Tombstone: 削除マーク(実際にはまだ存在する)
3. ディレクトリジャーナル(追記専用)
Stage(S)・Rename(R)・Delete(D)操作をディスクに記録
監査ログ兼コミット時の再生テープとして機能
エージェントがrm -rf ~/important-docs/を実行した場合、ファイルは実際には削除されない。YoloFSはオーバーライドツリーにTombstoneを記録し、エージェントには「削除済み」のように見せながら、実体は保護したままにする。エージェントが「削除しました」と報告した後にユーザーが確認すると、ファイルは無事に残っている。
変更がステージされている間、エージェントはオーバーライドツリーを参照することで「自分が何を変更したか」を完全に把握できる。これがエージェント自己修正機能の基盤となる。ファイルシステムが変更の全記録を持つため、エージェントは「自分が無意識にやってしまったこと」を事後的に確認できる。
技術2:Snapshots & Travel(非破壊的な時間移動)
従来のロールバック(git reset --hard等)は証拠を消去する。「どんな変更があったか」の情報が失われる。YoloFSは「Travel」という概念で、過去の状態に戻りながらも変更の証跡を保持する。
スナップショット管理の仕組み:
ジャーナル構造(セグメント化):
[操作ログ...] P [操作ログ...] T [操作ログ...]
↑ スナップショット ↑ トラベルマーカー
マーカー
- 各StagedFileは作成された「世代番号」を持つ
- 古い世代のファイルを開くとコピーオンライト(CoW)が発生
- 並列セグメントが共存可能(分岐した歴史)
エージェントがビルドスクリプトを実行して複数ファイルが意図せず書き換えられた場合を考えよう。YoloFSでは:
- ユーザーが「実行前の状態に戻して」と指示
- エージェントがYoloFSのTravel機能を呼び出す
- オーバーライドツリーが実行前の状態に再構築される
- ただし「何が起きたか」のジャーナルは保持されたまま
これにより、エージェントは「何が起きたか→何を元に戻すべきか」を正確に判断した上で復元できる。盲目的なロールバックではなく、情報に基づいた修正だ。
技術3:Progressive Permission(段階的なアクセス制御)
既存フレームワークのポリシーが粗すぎる(全許可か全拒否か)問題に対し、YoloFSはファイル・ディレクトリ単位の細粒度な権限管理を提供する。
# YoloFSのルールツリー(概念)
/home/user/
projects/ # Ask(デフォルト:初回アクセス時に確認)
my-app/ # Allow(プロジェクト内は自由に)
.env # Deny(シークレットは非表示)
.ssh/ # Hidden(ディレクトリ一覧からも除外)
Documents/ # Read-only(読み取りのみ)
5つのアクセス状態:
| 状態 | 動作 | 用途 |
|---|---|---|
| Allow | 読み取り・書き込み・削除すべて許可 | プロジェクトディレクトリ |
| Read-only | 読み取りのみ | 参照はするが変更不要なファイル |
| Deny | 非表示(存在しないように見える) | シークレット・機密ファイル |
| Hidden | ディレクトリリストから除外 | .ssh等の重要ディレクトリ |
| Ask | 初回アクセス時にユーザーに確認(デフォルト) | プロジェクト外のすべてのパス |
「Ask」状態がデフォルトという設計は重要だ。エージェントが初めてプロジェクト外のパスにアクセスしようとすると、ユーザー空間のデーモンが通知を送り、ユーザーが許可/拒否を選択する。その後「このサブツリー全体に適用」を選べば、以降の同様のアクセスは確認なしに通過する。
Claude Codeの確認ダイアログは「このシェルコマンドを実行していいか」を尋ねる。しかしコマンドの中に何が書かれているかをユーザーが理解するのは困難だ。YoloFSは「このファイルパスにアクセスしていいか」を尋ねる。330文字のシェルコマンドより、「/home/user/.ssh/id_rsaを読み取ろうとしています」の方がユーザーが適切に判断できる。
実験が示した結果:エージェントが自分でミスを直せる
自己修正実験(11タスク)
研究チームは「隠れた副作用を持つタスク」11件でYoloFSを評価した。各タスクは、エージェントが指示通りに実行すると意図せず追加のファイル変更が発生するよう設計されている。エージェント側からは「隠れた副作用」の存在は事前に知らされていない。
不透明度のレベルは4段階に設定された:
L1(3タスク):読みやすいスクリプト内に破壊的副作用
例: cleanup.sh の中に rm -rf ../logs/ が書かれている
L2(3タスク):Makefileが下位スクリプトを呼び出す
例: make build → build.sh → optimize.py → (予期せず README.md を上書き)
L3(2タスク):3段階以上の間接参照
例: バイナリが呼び出すスクリプトがさらに別スクリプトを実行
L∞(3タスク):バイナリ形式(ソースコード非利用)
例: コンパイル済みlintツール(中身が分からない)
YoloFSなしの場合(Claude Code・Codex・Copilot):ほぼ全タスク失敗。 エージェントはスクリプトを実行し、副作用が生じても気づかず「完了しました」と報告した。
YoloFSありの場合:11タスク中8件でエージェントが自己修正に成功。
自己修正が成功した代表例:formatterタスク
エージェントに「コードフォーマッターを実行して」と指示した。実行後、YoloFSのStagingがREADMEの削除とソースファイルの上書きを記録した。エージェントはオーバーライドツリーを確認し「この破壊的スクリプトは正当なフォーマッターではない」と判断、自動的に変更を巻き戻した。
バイナリ形式(L∞)のlintツール事例:
コンパイル済みのlintバイナリを実行した結果、YoloFSが2ファイルの削除を記録した。エージェントはファイル削除ログを確認し「lintツールとしては異常な動作である」と推論して復旧した。ソースコードが読めなくても、ファイルシステム操作の記録だけでエージェントが正しい判断を下せた。
自己修正ができなかった3タスクは「deploy」「install」「config-fix」——いずれも破壊的変更がタスクの目的に一致していたケースだ。「壊すことが目的のタスク」は自己修正すべきでない、という判断も正しく機能していた。
通常タスク実験(112タスク)
次に、副作用のない標準的なファイル操作112タスクでYoloFSの影響を測定した。「YoloFSが正常な操作を妨げないか」の検証だ。
| 指標 | YoloFS | Claude Code | Codex | Copilot | Gemini |
|---|---|---|---|---|---|
| 成功率 | 99% | 98% | 100% | 96% | 75% |
| ユーザー操作回数 | 0.4回 | 0.9回 | 0.4回 | 1.3回 | 2.2回 |
| ツール呼び出し数 | 1.1回 | — | 1.8回 | — | 2.9回 |
成功率はほぼ同等でありながら、ユーザーの操作回数がClaude Code比で56%削減された。
YoloFSがユーザー操作を削減できる理由:プロジェクトディレクトリ内の操作は事前許可済みのため確認が不要。プロジェクト外へのアクセスが生じた場合だけ1回確認すれば、以降のアクセスは自動許可される。
Geminiの成功率が75%と低いのはYoloFSの問題ではなく、Gemini自体のツール利用の信頼性によるもの(論文内での記載)。
性能評価:本当にオーバーヘッドがないのか
既存ファイルシステムとの比較
カーネルモジュールとして動作するYoloFSが実用レベルのパフォーマンスを持つかどうかは重要な問いだ。研究チームはOverlayFS(Dockerが採用)とBranchFS(類似の分岐ファイルシステム)と性能比較した。
| ワークロード | YoloFS | OverlayFS | BranchFS |
|---|---|---|---|
| 連続読み取り(冷キャッシュ) | 0%オーバーヘッド | +1% | −3% |
| 連続書き込み | −2% | −15% | −85% |
| メタデータ操作 | OverlayFS比で高速 | ベースライン | 20倍遅い |
書き込み性能でYoloFSはOverlayFSを大幅に上回る(−2%対−15%)。BranchFSは実用外のレベルだ(−85%)。
現実的なワークロード(Linuxカーネルへのパッチ適用シリーズ)でも、YoloFSはExt4とほぼ同等の速度で作業を完了した。OverlayFSは18%の性能低下、BranchFSは20秒の作業に2分以上を要した。
スナップショットのスケーラビリティ
OverlayFSはマウントオプションの長さ制限があるため、約50スナップショットを超えると失敗する。長時間のエージェントセッションでは致命的な制限だ。YoloFSはスナップショットをインメモリのオーバーライドツリーで管理するため、スナップショット数に関係なくパフォーマンスが維持される。
# OverlayFSの制限(概念的な例)
# ~50スナップショット超過でマウント失敗
mount -t overlay overlay -o \
lowerdir=snap49:snap48:...:snap1:base,\
upperdir=work,workdir=tmp /mnt
# Error: argument list too long
# YoloFSはインメモリ管理なのでこの制限がない
yolofs --mount /mnt/workspace # スナップショット数に制限なし
エンジニアへの実践的示唆
今すぐできる対策:現行エージェントのリスク軽減
YoloFSはまだ研究段階のプロトタイプだ。現時点で一般ユーザーがインストールして使える状態ではない。しかし、この研究が明らかにした脆弱性のパターンを知ることで、現在のエージェント利用においても取れる対策がある。
シェルコマンド経由のリスクを意識する:
Claude Codeの利用では、--allowedToolsを明示的に指定し、シェル実行権限(Bashツール)の範囲を必要最小限に絞ることが有効だ。特に本番環境に近い作業では、Bashツールを無効化するか、実行前に必ずdry-runを確認するルールを設けるべきだ。
# CLAUDE.md でのシェル実行制限例
# プロジェクトルートの CLAUDE.md に記載
## 許可するツール
- ファイル読み書き(Read/Write/Edit): プロジェクト内に限る
- Bash: dry-run フラグ付きのコマンドのみ
## 禁止するパターン
- rm -rf を含むコマンド(--dry-run なし)
- find ... -exec ... \; のような複合コマンド
- curl/wget + pipe + sh のパターン
gitによるセーフティネットを徹底する:
エージェントに作業させる前に必ずコミットした状態にしておく。git status がクリーンな状態でないとエージェントを動かさないルールを徹底することで、最悪でもgit checkoutで復旧できる。
プロジェクト外パスへのアクセスを明示的に制限する:
Claude Codeの設定ファイル(.claude/settings.json)でホームディレクトリや.env、.sshディレクトリへのアクセスを明示的に拒否リストに入れる。現行のフィルタは文字列ベースで完全ではないが、明示的な制限を設けておくことでリスクを減らせる。
YoloFSが示すエージェント設計の未来
この研究がソフトウェアエンジニアリングに与える示唆は、現在の安全対策の即時改善にとどまらない。
エージェントの安全性は「プロンプトで誘導する」段階から「インフラで保証する」段階へ移行しつつある。
従来のアプローチは「エージェントに安全な行動を学習させる」「ユーザーが確認ダイアログを適切に判断する」という人的・モデル的な解決策に依存していた。YoloFSが示す方向性は「ファイルシステム自体が情報を持ち、可逆性を保証する」というインフラレベルの解決だ。
セキュリティの文脈では、この考え方は既に一般的だ。「ユーザーに安全な行動を教育する」より「XSS攻撃が構造上不可能なフレームワーク設計」の方が根本的解決になる。同様に、「エージェントに削除前に確認させる」より「ファイルシステムが削除を即座に反映しない設計」の方が根本的だ。
AIエージェントのセキュリティリスクは多面的で、プロンプトインジェクション・権限昇格・認証情報漏洩など複数の攻撃面がある。YoloFSはファイルシステム操作という特定の面に絞った解決策だが、「操作の可逆性と透明性をインフラで担保する」という思想は他の攻撃面にも応用可能だ。
論文中で研究チームは「YoloFSは現時点でLinuxのFUSEレベルの実装であり、本番環境への展開にはカーネルモジュールとしての統合が必要」と述べている。また「Progressive Permissionのデフォルトポリシーをどう設計すべきか」は今後の研究課題として挙げられている。コミュニティへの貢献や議論の場を探している読者は論文(arxiv:2604.13536)の著者連絡先を参照されたい。
インシデント分析から学ぶ:モデル・フレームワーク・ユーザーの責任分担
290件のインシデントを原因別に分類すると:
| 原因 | 件数(重複あり) | 主な内訳 |
|---|---|---|
| フレームワーク起因 | 226件(78%) | ポリシー設定ミス130件、シェルギャップ77件、フィルタ迂回52件 |
| モデル起因 | 168件(58%) | 目的のズレ76件、過度な一般化50件、ルール違反56件 |
| ユーザー起因 | 105件(36%) | 自動承認モード80件、不透明な承認31件 |
フレームワーク起因の割合が最も高い。「モデルが賢くなれば解決する」というアプローチには限界がある。フレームワーク(とその下にあるファイルシステム)の設計改善が不可欠だという論文の結論は、この数字が支持している。
ユーザー起因の「自動承認モード(YOLO モード)」80件は、ユーザーが確認ダイアログに疲弊して「すべて承認」設定にした結果だ。安全機構が使いにくすぎると、ユーザーが無効化する——これはセキュリティ設計の古典的な失敗パターンだ。YoloFSのProgressive Permissionはこの問題にも対応している。一度許可した操作は以降確認不要になるため、ユーザーが「疲れてYOLOモードにする」圧力を減らせる。
まとめ
「Don’t Let AI Agents YOLO Your Files」論文が明らかにしたのは、AIエージェントのファイル破壊問題が「モデルの不完全さ」だけに起因するのではないという事実だ。シェルコマンド経由の操作をカバーできないフレームワーク、可逆性のないファイル操作、疲弊したユーザーによるYOLOモード——これらが組み合わさって、40%の完全復旧不能な損失が生まれている。
YoloFSの技術的貢献は3点に集約される:
- Staging:エージェントの全操作をコミット前に隔離し、エージェント自身が変更を確認・修正できる基盤を提供
- Snapshot & Travel:証拠を残したまま過去状態に戻れる非破壊的な履歴管理
- Progressive Permission:ファイル・ディレクトリ単位の細粒度アクセス制御で、ユーザーの承認疲れを防ぎながらセキュリティを保証
実験結果は、「安全性と自律性はトレードオフではない」という論文の主張を裏付けている。99%の成功率を維持しながらユーザー操作を56%削減できた事実は、適切なインフラ設計があれば両立可能だと示す。
現時点でYoloFSは研究プロトタイプだが、AIエージェントの利用が広がるにつれて「エージェントネイティブなファイルシステム」への需要は高まるだろう。AIエージェントフレームワークを選定する際には、安全機構の仕組みと限界を理解した上で使うことが、エンジニアにとってますます重要になっている。
参照ソース
- Don’t Let AI Agents YOLO Your Files (arxiv:2604.13536) — 本記事の元論文。Shawn Wanxiang Zhong et al., University of Wisconsin-Madison
- YoloFS論文 HTML版 — 図表を含む詳細版
- Claude Code 公式ドキュメント — Claude Codeの設定・ツール制限の方法