「資料を読んで、要約を返すだけでいいです」。調査を任せるとき、多くの人はこう書きます。書いた本人は、これで読むだけの役割になったつもりでいます。

ところが、返ってきたのは要約だけではありませんでした。頼んでいないファイルが、そこに増えていました。運営元WEBMARKSで実際に起きたことです。

この記事は、調査や分析だけを任せたい相手から、書き込みという選択肢そのものを外す設計を扱います。素材はClaude Code公式ドキュメント3件と、社内で動いている調査用ワーカーの定義です(検証日2026-08-03)。

こんなふうに調べていませんか

  • 調査だけ頼んだはずのAIエージェントが、指示していないファイルを作っていた
  • 「読むだけ」と書いておけば、それで読み取り専用になると思っていた
  • 設定は書いた。ただ、それが効いているかを確かめる方法を知らない

この記事を読み終えたときに手に入るもの

  • 調査だけを任せる相手から、書き込み系の道具を構造的に外せるようになります
  • toolsで足し算するか、disallowedToolsで引き算するかを選べるようになります
  • 設計が効いているかを、3つの見方で確かめられるようになります

結論30秒でわかる、この記事の結論

  • 読み取り専用になるかどうかは、指示文の丁寧さではなくtools欄に何を書くかで決まります。
  • 外すのはWriteEditNotebookEditと、リダイレクトで書き込めるBashです。
  • 書いた設定は、動かして止まるところを見るまで、効いているとは数えません。
調べるだけの相手には、道具を先に減らします直すのは文章ではなく、渡した一覧のほうです調べるだけの相手には、道具を先に減らします手順1渡す道具を選び直す読む系だけ残し、書く系は一覧から消す手順2書かせにいって確かめる止まる画面を自分の目で見るまでが設定手順3触ったら戻す約束を書く兼務で足した道具の戻し忘れを防ぐ鈴木さん直すのは文章ではなく、渡した一覧のほうです
調べるだけの相手には、道具を先に減らします — 直すのは文章ではなく、渡した一覧のほうです

01調査だけ任せたサブエージェントが、勝手にファイルを作ってしまうのはなぜですか?

若葉さん
若葉さんの発言

「要約だけ返してください」とお願いしたのに、ファイルが増えていたんです。書き方が悪かったんでしょうか。

鈴木さん
鈴木さんの発言

書き方というより、手元に道具が残っていた、という話に近いと思っています。ドライバーを渡したまま「回さないでね」と言っている状態です。

記録はこうです。2026-07-28 11:13、「資料を読んで要約を返すだけ」という指示で、調査用のサブエージェントを走らせました。返ってきた要約とは別に、指示していない図解SVGファイル(AGIM-701-01.svg・5,333バイト)が生成され、保存されていました(社内実測記録)。

指示文のどこにも、書けとは書いていません。それでも書けたのは、書き込むための道具がそのサブエージェントの手元に残っていたからです。指示は「何をしようとするか」を形づくります。けれども「何ができるか」の一覧までは削ってくれません

この事故の症状・誤診・真因の追跡はAIエージェントの権限設計|絞らなかった空白と4段の戻し方に譲ります。ここでは、同じことが起きないようにする設定だけを扱います。分業そのものの設計はサブエージェント設計|委譲の線引きと3つの失敗で扱っており、本記事は1体に何を渡すかだけに絞ります。

同じ依頼でも、手元に何が残っているか分かれ目は、書く道が選べる状態かどうか同じ依頼でも、手元に何が残っているか分かれ目は、書く道が選べる状態かどうか文章でお願いする読むだけでいい、と書き添える渡した一覧はそのままにする書く道は候補に残り続けるやろうと思えば、できてしまいます一覧から取り除く読む系の道具だけを渡す書く道具は手元に無い選ぼうにも候補に出てこないできないので、起こりようがありません
同じ依頼でも、手元に何が残っているか — 分かれ目は、書く道が選べる状態かどうか

02「読むだけ」と書けば、サブエージェントの読み取り専用設計になるんですか?

なりません。Claude Code公式ドキュメントは、権限ルールを強制するのはClaude Code自身であって、モデルではないと明記しています(出典: Claude Code公式ドキュメント)。「読むだけにしてください」という一文は、判断の材料にはなっても、壁にはなりません。

その壁のほうは、はじめから3つの段に分かれています。ファイルの読み取りは、作業ディレクトリの中なら承認なしで通ります。Bashコマンドは、組み込みの読み取り専用コマンドを除いて承認が要ります。ファイルの編集と書き込みは、いつでも承認が要ります(出典: Claude Code公式ドキュメント)。

黙って通る段と、確認を求められる段壁は、はじめから段になっています黙って通る段と、確認を求められる段壁は、はじめから段になっていますファイルを直す・新しく作る(最上段)いつでも確認が入りますシェルのコマンドを走らせる(中段)組み込みの読み取り系を除いて確認作業フォルダの中を見る(土台)そのまま通りますこの段組みは、確認する人がその場にいる前提で立っています。
黙って通る段と、確認を求められる段 — 壁は、はじめから段になっています

この段組みは、人が画面を見ている前提で立っています。編集と書き込みに確認が入るのは、そこで人が読んで判断するからです。判断する人がいない時間帯に同じ仕組みを置くと、段の数は同じでも、意味するところが変わります

この章のまとめ

指示文は、選択肢を減らしません。減らせるのは、道具の一覧そのものだけです。

03一度承認すれば、サブエージェントはその後もずっと同じ場所で止まるんですか?

高梨課長
高梨課長の発言

一度「今後は聞かないで」を選べば、そのあとも同じ判断が続くんですよね。

鈴木さん
鈴木さんの発言

そこが落とし穴でして。Bashコマンドの許可のように恒久保存されるルールとは違って、この確認の「今後」は、そのセッションが終わるまでなんです。

高梨課長
高梨課長の発言

では、夜間にまとめて走らせるような使い方だと。

鈴木さん
鈴木さんの発言

人が画面を見ていない実行では、確認そのものを最後の砦にはできない、と考えています。

適用範囲がセッションの終わりで切れるということは、次に走らせるときには前提が引き継がれないということです(出典: Claude Code公式ドキュメント)。人が一つずつ画面を見ていない自動実行のワークフローでは、この確認の仕組みだけに寄りかかれません

だから、読み取り専用に設計するというのは、確認が出るかどうかに頼らない状態を作ることを指します。WriteEditNotebookEditを、サブエージェントの手元から構造的に外します。

設定ファイルは.claude/agents/または~/.claude/agents/に置くMarkdownファイルです。そのYAMLフロントマターにあるtoolsdisallowedToolsという2つの欄を使います(出典: Claude Code公式ドキュメント)。

鍵にたとえると、違いがはっきりしますその場の確認と、そもそも渡さないこと鍵にたとえると、違いがはっきりしますその場の確認と、そもそも渡さないこと鍵でいうと設定でいうと入るたび声をかけてもらう実行のたびに確認が出る今日のあいだだけ使える合鍵その回のあいだだけ続く許可見張りが席を外している時間誰も画面を見ていない実行合鍵そのものを渡さない書く道具を一覧から外す
鍵にたとえると、違いがはっきりします — その場の確認と、そもそも渡さないこと

04標準で入っているExploreサブエージェントだけで、AIエージェントの調査は足りるんですか?

自分で定義を書く前に、確かめておくことがあります。Claude Codeには、あらかじめ読み取り専用に設計されたサブエージェント「Explore」が標準搭載されています。公式ドキュメントは、Exploreのツールが読み取り専用で、WriteEditが拒否されると明記しています(出典: Claude Code公式ドキュメント)。

コードベースの探索やファイル検索だけが目的なら、まずこのExploreで足りるかを見ます。足りるなら、定義ファイルを1件も増やさずに済みます。

足りない場面もあります。「この資料を読んで、規約の条文が実在するかだけを判定する」のように、業務固有の判定基準を持つ調査です。判定の物差しは、専用のシステムプロンプトに書くしかありません。この場合は独自のサブエージェントを定義し、読み取り専用という設計のほうを自分で引き継ぎます。

標準で入っている役と、自分で書いた役重なっているのは、持たせる道具のほうです標準で入っている役と、自分で書いた役重なっているのは、持たせる道具のほうですはじめから在る役自分で書いた役置くだけで使える/探索と検索が守備範囲/定義を増やさずに済む判定の物差しを書ける/業務ごとの条件を持てる/名前は別にして置く共通の土台共通の土台 : 読む系だけを持つ / 書く道具は無い同じ名前で置くと、はじめから在ったほうが置き換わります。
標準で入っている役と、自分で書いた役 — 重なっているのは、持たせる道具のほうです

なお、.claude/agents/Exploreという名前でファイルを作ると、標準搭載のExploreを上書きします(出典: Claude Code公式ドキュメント)。上書きするつもりがなければ、独自のサブエージェントには別の名前を付けます。

05toolsとdisallowedToolsは、サブエージェントの読み取り専用設計でどう書き分けるんですか?

高梨課長
高梨課長の発言

欄が2つあるということは、どちらを使ってもいいんでしょうか。

鈴木さん
鈴木さんの発言

どちらでも書けます。ただ、受け継いでくる親の権限がどれくらい広いかで、読みやすいほうが変わります。

まず、tools欄に読み取り系のツールだけを並べる書き方から見ます。社内で稼働している調査用ワーカーvault-researcherの定義(2026-08-03確認・一部省略)は次の形です。

---
name: vault-researcher
description: Vault内の資料調査・事実確認や、一次情報の収集・裏取りを行う読取専用の調査ワーカー。ファイルは書かず、調べた事実を構造化して返す。(以下省略)
tools: Read, Glob, Grep, WebFetch, WebSearch
model: sonnet
---

WriteEditNotebookEditBashが、この一覧にありません。だからこのサブエージェントは、書き込みも任意コマンドの実行も、選択肢として持ちません。人格プロンプト側にも「ファイルの作成・編集・削除はしません(ツールも与えられていません)」と書いてあり、指示文と設定の両方で二重に説明しています。

2つの欄の関係は、公式ドキュメントが解決順序として定めています(出典: Claude Code公式ドキュメント)。

設定結果
どちらも未設定親から継承した全ツールを使える
toolsのみ設定一覧にあるツールだけを使える
disallowedToolsのみ設定継承した全ツールから、一覧のツールだけを除く
両方設定disallowedToolsが優先され、重複した項目は除かれる
足し算で書くか、引き算で書くか読みやすいほうは、親の広さで変わります足し算で書くか、引き算で書くか読みやすいほうは、親の広さで変わります使ってよいものを並べる残す道具だけを書き出す書き出さなかったものは持たない渡す数が少ないときに向く社内の調査役は、この書き方です使わせないものを並べる受け継いだ中から取り除く何を禁じたのかが文面に残る受け継ぐ範囲が広いときに向く重なったときは、こちらの指定が通ります
足し算で書くか、引き算で書くか — 読みやすいほうは、親の広さで変わります

継承する親の権限が広いときは、disallowedTools: Write, Edit, NotebookEditのように引き算で除きます。この書き方だと、何を禁じたのかを後から説明しやすくなります。使ってよいツールが最初から数個に絞られているなら、toolsで足し算するvault-researcher側の書き方のほうが見通しが立ちます。

06読み取り専用に絞ると、AI社員に渡せる仕事まで減ってしまいませんか?

外して困る道具と、外さなくてよい道具があります。WebFetchWebSearchは、ファイルを書き込むツールではありません。toolsに含めても、読み取り専用という設計は崩れません。

除くべきなのはWriteEditNotebookEditと、リダイレクトで書き込めるBashです。この4つを手元から外しても、資料を探す・開いて読む・外の情報を取りに行くという調査の中身は、そのまま残ります。

外すものは、呼び名ではなく道で選ぶ調べる仕事は、外したあとも手元に残ります外すものは、呼び名ではなく道で選ぶ調べる仕事は、外したあとも手元に残ります手元を読む道具探す・開く・拾う。調査の中身はここ外から取ってくる道具裏取りに使う。手元は変わらない手元を書き換える道具調べるだけの役には出番がない線をまたぐ道具読むにも書くにも回る。数え落としやすい上:手元のファイルを変えない / 下:変えられる左:手元の中だけで済む / 右:外へ取りに行く
外すものは、呼び名ではなく道で選ぶ — 調べる仕事は、外したあとも手元に残ります

置き直すと、外すかどうかの判断が呼び名から離れます。「書き込み系ツール」という呼び方は、名前で仲間分けをしているだけで、書ける道があるかどうかは見ていません。区画で見れば、線をまたいでいる道具が浮かびます。

07サブエージェントの読み取り専用設計が効いているか、どうやって確かめるんですか?

若葉さん
若葉さんの発言

設定を書いたら、それで終わりでしょうか。

鈴木さん
鈴木さんの発言

書いた設定は、動かして止まるところを見るまで「書いただけ」と数えています。書いた事実と、効いている事実は別に数えます。

判定は次の3点です。

  1. 定義ファイルを目視する.claude/agents/配下の該当ファイルを開きます。tools欄にWriteEditNotebookEditBashのいずれも無いことを確認します。disallowedTools側で除いているなら、この4つがそちらに並んでいるかを見ます。
  2. 書き込みを促す指示で試す:そのサブエージェントへ「この内容でファイルを新規作成して」と、あえて書き込ませにいきます。読み取り専用に絞れていれば、実行そのものが起きず、修正案を言葉で説明するところで止まります。
  3. --verboseで実際の呼び出しを見る--verboseオプション付きで実行すると、そのサブエージェントが呼び出した個別のツール名を確認できます(出典: Claude Code公式ドキュメント)。書き込み系のツール名が1件も出てこなければ合格です。
確かめ方は3つ。見える範囲が違います書いた設定と、動いた振る舞いは別に見ます確かめ方は3つ。見える範囲が違います書いた設定と、動いた振る舞いは別に見ます1定義の中身を開いて読む見えるのは、書いてある文面まで2あえて書かせにいく見えるのは、その場で止まるかどうか3呼び出した名前をたどる見えるのは、何を使ったかの記録
確かめ方は3つ。見える範囲が違います — 書いた設定と、動いた振る舞いは別に見ます

3点のうち、最も確実なのは2番目です。定義ファイルの記述は目視で追えますが、モデルがその制約の中で実際にどう振る舞うかは、動かしてみるまで分かりません。1番目と3番目は、その答え合わせに使います。

この章のまとめ

目視は設定を確かめるもの、実行は振る舞いを確かめるものです。片方だけでは、半分しか見ていません。

08Bashを消し忘れたサブエージェントは、どこから書き込めてしまうんですか?

読み取り専用にしたつもりで崩れる型が、3つあります。

1つ目は、tools欄のツール名を打ち間違えることです。公式ドキュメントは、一覧のどの項目も有効なツールに解決できない場合、サブエージェントはエラーで起動しないと説明しています(出典: Claude Code公式ドキュメント)。読み取り専用のつもりが、綴りミス1つで何も動かない置物になります

2つ目は、Bashを消し忘れることです。WriteEditNotebookEditを除いても、Bashが残っていれば書き込みができます。シェルのリダイレクト(echo テキスト > ファイルのような書き方)が通るからです。「書き込み系ツールを3つ外したから読み取り専用」という数え方は、Bashを勘定に入れていないと成立しません。

3つ目は、動作確認をした時点の設定が、その後も変わらないと思い込むことです。別の作業を兼務させるために誰かがtoolsBashを足し、確認後に戻し忘れる。読み取り専用という前提は、そうやって静かに崩れます。

3つ外した、では足りませんでした数えるのは呼び名ではなく、書ける道です3つ外した、では足りませんでした数えるのは呼び名ではなく、書ける道です呼び名で数える書き込み系と呼ばれるものを外した外した数を成果として数えた呼び名の外にいる道具が残った残ったほうは、誰の数にも入っていません道で数える書き換えられる道を洗い出した回り道で書ける経路も塞いだ足したら戻す約束を書き残した呼び名で選ぶのをやめると、抜けが減ります
3つ外した、では足りませんでした — 数えるのは呼び名ではなく、書ける道です

3つに共通しているのは、画面上は何も起きないことです。起動しないサブエージェントは、まだ気づけます。気づきにくいのは、動いているのに前提だけが外れている状態のほうです。

09明日からのAI導入で、この設計を崩さないために何を決めておくんですか?

設計は、1回書いて終わりではありません。崩れる型の3つ目が示しているのは、設定が変わったことに誰も気づかない、という状態です

決めておくことは3つです。誰が定義ファイルを触ってよいか。触ったあとに、どの確認をやり直すか。兼務のために一時的にツールを足したとき、いつ戻すか。どれも大掛かりな仕組みではなく、先に書いておくかどうかの話です。

定義を触ったら、ここへ戻ってきます崩れるのは、誰も見ていないあいだです定義を触ったら、ここへ戻ってきます崩れるのは、誰も見ていないあいだです読む系だけが並んでいることを目で見た書かせにいって、止まる場面を見た呼び出しの記録に、書く系の名前が無い兼務のために足したものが、まだ残っている戻す日を決めていないと、そのままになります
定義を触ったら、ここへ戻ってきます — 崩れるのは、誰も見ていないあいだです

取り消せない操作がその先にあるなら、権限設計だけで抱え込まない、という選び方もあります。送信・公開・削除で人の判断を挟む止め方はAIエージェントの承認ゲート|止める操作4種と3層の選び方にまとめています。

10よくある質問

調査用のサブエージェントを作るとき、toolsは省略してもいいですか

省略はおすすめしません。省略すると、親の会話が使える全ツールをそのまま継承します(出典: Claude Code公式ドキュメント)。「読むだけ」という役割なら、toolsに読み取り系だけを明示して初めて、その役割どおりの制約になります。書かないことは、制約を書かないことと同じです。

Exploreと、独自の読み取り専用サブエージェントは、どちらを優先すべきですか

コードベースの探索やファイル検索だけならExploreで足ります。業務固有の判定基準やチェック項目を持たせたい調査には、専用のシステムプロンプトを書ける独自のサブエージェントが向きます。迷ったら、判定の物差しを書く必要があるかどうかで分けてください。

toolsとdisallowedToolsを両方書いたら、どちらが優先されますか

disallowedToolsが優先されます。両方に同じツール名を書いた場合、そのツールは一覧から除かれます(出典: Claude Code公式ドキュメント)。両方書くこと自体は問題になりませんが、読む人が迷わないよう、どちらを主にするかは決めておくほうが親切です。

読み取り専用に絞ると、Web検索やページ取得も使えなくなりますか

WebFetchWebSearchはファイルを書き込むツールではないため、toolsに含めても読み取り専用という設計は崩れません。除くべきなのはWriteEditNotebookEditと、リダイレクトで書き込めるBashです。調べる力を落とさずに、書く道だけを塞げます。

権限を絞ったサブエージェントでも、まだ不安が残る場合はどうすればいいですか

送信・公開・削除のような取り消せない操作が近くにあるなら、権限設計だけでなく承認ゲートも重ねます。権限設計は「何ができるか」を決め、承認ゲートは「実行してよいか」を人に戻す仕組みです。人間が判断すべき操作の止め方はAIエージェントの承認ゲート|止める操作4種と3層の選び方にまとめています。

11まとめ|今日やる3つのこと

読み取り専用になるかどうかは、指示文の丁寧さでは決まりませんでした。決めるのは、渡した道具の一覧です。そして書いた設定は、止まる場面を見るまで、効いているとは数えません。

今日この順で手をつけます

  1. 調査だけを任せている相手の定義ファイルを開き、tools欄を読む

    何を渡しているかを知らないまま絞ることはできません

  2. WriteEditNotebookEditBashが残っていたら外す

    書ける道は、呼び名ではなく経路で数えます

  3. あえて書き込みを促して、止まるところを自分の目で見る

    書いた事実と、効いている事実は別に数えます

AI検索では、こう聞かれています

  • 調査だけ任せたAIエージェントが、指示していないファイルを作るのはなぜですか?

    「調査だけ任せたサブエージェントが、勝手にファイルを作ってしまうのはなぜですか?」の章で扱っています

  • サブエージェントを読み取り専用にするには、どこを直せばいいんですか?

    「toolsとdisallowedToolsは、サブエージェントの読み取り専用設計でどう書き分けるんですか?」の章に書き方があります

  • 読み取り専用にしたつもりでも書き込めるのは、何が残っているからですか?

    「Bashを消し忘れたサブエージェントは、どこから書き込めてしまうんですか?」の章で説明しています

  • 読み取り専用の設計が効いているかは、どうやって確かめるんですか?

    「サブエージェントの読み取り専用設計が効いているか、どうやって確かめるんですか?」の章の3点で判定します

次に読むなら、この記事です