Bible Network Crypto DeFi Onchain RWA AI Agent Stablecoin Chain SAFU CryptoTax DeFAI AGI Claude Me Claude Skill Claude Design Claude Cowork
独立メディア
いかなるプロジェクトとも無提携
AI知性のフロンティアを探求する
claude-me.com
最新
Claude Code に --max-findings パラメータ追加:コードレビューが一度に百件の指摘で埋もれることがなくなる  ·  Claude Code に Mods 機能追加:プラグインがより深い挙動を変更可能に、だが品質評価方法は Anthropic 自身も明言していない  ·  バークレイズが Claude を大規模導入:年内にエンジニアの50%が Claude Code 採用、1日12万通のメール分類も  ·  Claude Agent SDK に verbatim_prompts 追加:@path 自動展開とスラッシュコマンド発火を無効化し、外部テキストがコマンドとして実行されるのを防ぐ  ·  Claude Agent SDK がバックグラウンドサブエージェントのバグを修正:サブエージェント完了直後に stdin が早く閉じられ、次のターンが失敗する問題  ·  Claude Agent SDK に prewarm() 追加:セッションが確定する前に Claude Code プロセスを先に起動し、最初のクエリの待ち時間を削減
practice

Claude Agent SDK に verbatim_prompts 追加:@path 自動展開とスラッシュコマンド発火を無効化し、外部テキストがコマンドとして実行されるのを防ぐ

30秒バージョン · 忙しい方へ
外部入力に紛れ込んだ @/etc/passwd が意図しないファイル読み取りを引き起こすこともある——verbatim_prompts はメッセージをそのまま送り、書式の偶然につけ入る隙を与えない。

詳しく読む +
01 · なぜ起きたのか?

verbatim_prompts を有効にした後も、Claude はユーザー入力中のファイルパスへの言及を理解できるか?

理解はできるが、方法が異なる。展開機能を無効にすると、Claude は純粋なテキストとしての @path/to/file という文字列を受け取り、それでも「ユーザーがこのパスについて言及している」という意味を理解することはできる。ただし、ファイル内容を自動的に取得して prompt に埋め込む処理は行われない。アプリケーションで Claude に実際にファイルの内容を読ませる必要がある場合、verbatim_prompts を有効にした後はツール呼び出し(たとえば Claude に明示的にファイル読み取りツールを呼び出させる)を通じて実現する必要があり、メッセージの書式による自動発火には頼れない。

この違いは実はメリットでもある——ファイル読み取りがテキスト書式に隠された暗黙の挙動ではなく、明示的に許可・記録・範囲制限が可能なツール呼び出しになるからだ。

02 · 仕組みは?

アプリケーションのメッセージの一部が開発者によるもので、一部がユーザー入力を組み込んだものである場合、ユーザー入力部分だけに verbatim_prompts を有効にできるか?

できない。verbatim_prompts はセッション全体、あるいは各 query() 呼び出し単位での設定であり、メッセージ内の特定部分にだけ適用されるトグルではない。prompt の組み立てロジックが開発者のテキストとユーザー入力を同じメッセージ内で混在させている場合、このオプションを有効にするとメッセージ全体で @path と slash command の解析がスキップされ、開発者が本来有効にしたかった部分も含まれてしまう。

より確実な方法は prompt 組み立てロジック自体を見直すことだ——開発者が意図するファイル展開や slash command の発火を、メッセージ書式に頼るのではなく明示的なツール呼び出しやプログラムロジックで処理するように変更すれば、verbatim_prompts を全体で有効にしても必要な機能を犠牲にせずに済む。

03 · 自分にどう影響する?

verbatim_prompts を有効にすると、Claude の応答の品質や挙動に影響するか?

設計上、モデル自体の理解や応答品質に直接影響することはない——このオプションが動かすのは SDK と CLI の間の prompt 前処理レイヤーであり、モデルの推論挙動ではない。違いが現れるのは、もともと @path 展開や slash command の発火に依存して動作していた機能だけだ。ワークフローがこれらの仕組みに頼ってファイルを自動取得したりコマンドを発火させたりしていた場合、有効化後はその自動化が機能しなくなり、明示的なツール呼び出しに置き換える必要がある。

アプリケーションがもともとこの2つの自動展開メカニズムに依存していなかった場合、このオプションを有効にしてもユーザー体験上は感知できないはずで、純粋に保護層が一つ増えるだけだ。

04 · どうすればいい?

Claude Agent SDK を社内ツールとしてのみ使用し、利用者が自チームのメンバーだけの場合でも verbatim_prompts は必要か?

リスク評価の鍵は「利用者が誰か」ではなく「メッセージ内のテキストがすべて信頼できる当事者によって生成されたものか」にある。利用者が自チームのメンバーであっても、アプリケーションのメッセージ組み立てロジックに外部由来のテキスト——顧客のメール内容の貼り付け、スクレイピングしたウェブテキスト、サードパーティシステムから返されたフィールドなど——が混ざっている場合、その外部テキスト自体が意図せず @path や slash command の書式に一致する断片を含んでしまい、意図しない挙動を引き起こす可能性がある。悪意のある攻撃である必要はなく、単なる書式の偶然の一致でも発火し得る。

したがって判断基準は「このメッセージ内に開発者自身が打ち込んだもの以外のテキストが含まれているか」であって、「このツールを使う人が信頼できるか」ではない。

全文 +

Claude Agent SDK で構築されたアプリケーションによくあるアーキテクチャパターンは、ユーザー入力、データベースのフィールド、外部 API から取得したテキストを、そのまま Claude CLI に送る prompt 文字列に組み込むというものだ。問題は、SDK のデフォルトの prompt 処理が、メッセージ内の特定のパターンを「コマンド」として解釈してしまうことにある——@path/to/file のような記法はファイル内容に展開され、/ で始まる文字列は slash command として発火する可能性がある。このテキストが開発者自身が書いたものではなく、信頼できないソース(ユーザーが貼り付けた内容、サードパーティシステムから返されたフィールド)由来である場合、これは具体的なインジェクションリスクとなる:悪意のある者が入力に @/etc/passwd や slash command を偽装した文字列を仕込むだけで、意図しないファイル読み取りやコマンド発火を引き起こせる可能性がある。

verbatim_prompts が行うこと:展開と発火を無効化し、そのまま送る

新しく追加された ClaudeAgentOptions.verbatim_prompts(デフォルトは False)オプションは、有効化するとユーザーメッセージが書かれたとおりそのまま CLI に渡され、@path によるファイル展開も slash command の発火も行われなくなる。つまり、テキスト内にコマンドのように見える記法が何であれ、Claude が受け取るのは純粋なテキストそのものであり、書式の偶然の一致によってファイルアクセスやコマンド実行の副作用が引き起こされることはない。このオプションは query() 関数呼び出しと、インタラクティブな ClaudeSDKClient.connect()/ClaudeSDKClient.query() の両方で利用でき、文字列入力と非同期イテラブル入力の両方の形式をカバーしている。注意すべき点として、この機能には CLI 2.1.248 以上が必要であり、古い CLI でこのオプションを有効にすると警告がログに記録されるものの実行は中断されない——つまりデプロイ環境が古い CLI バージョンに固定されている場合、この保護は実際には機能しないため、バージョン番号を別途確認する必要がある。

この選択肢が「念のための保険」ではなく必須となる場面

アプリケーションのアーキテクチャにおいて、Claude に送られるすべての prompt が開発者自身の制御するテキストのみで組み立てられ、外部からの生テキストがどこにも含まれないのであれば、verbatim_prompts がもたらす違いはそれほど大きくない。攻撃者が制御できる入力経路がそもそも存在しないからだ。しかしアーキテクチャのどこか一箇所でも、ユーザー入力、スクレイピングしたウェブコンテンツ、サードパーティ API のレスポンスを処理せずに CLI に送るメッセージ文字列へ直接組み込んでいる場合、それは現実に存在するインジェクション面となる——これはカスタマーサポートボット、文書要約ツール、あるいは「外部コンテンツを読んで回答する」あらゆるアプリケーションでよく見られるパターンだ。このようなアプリケーションは verbatim_prompts=True を問題が起きてから後付けするものではなく、デフォルトで有効にすべき保護として扱うべきだ。

万能な prompt injection 対策ではない

はっきりさせておく必要があるのは、verbatim_prompts が解決するのは具体的な攻撃面——@path 展開と slash command の書式を通じて引き起こされる意図しないファイル読み取りやコマンド発火——であるという点だ。より広義の prompt injection 問題、たとえば攻撃者が入力テキストの中で自然言語を使い、モデルに以前の指示を無視させたり、出力すべきでない内容を誘導したりする問題は対象外であり、これらは依然としてシステムプロンプトの設計や出力検証など他の手段で対処する必要がある。verbatim_prompts を唯一の防御線として扱うのは誤解であり、これは多層防御の一層にすぎず、防御全体ではない。

あなたのお金にとって何を意味するか

チームが Claude Agent SDK を使って外部入力に触れるアプリケーション——カスタマーサポートシステム、コンテンツ分析ツール、またはサードパーティのテキストを prompt に組み込むあらゆるアーキテクチャ——を構築しているなら、今すぐどのメッセージ組み立て経路に信頼できない生テキストが含まれているかを棚卸しし、該当する経路に対して verbatim_prompts を有効化すべきだ。同時にデプロイ環境の CLI バージョンが 2.1.248 以上であることを確認する必要がある。そうでなければこのスイッチは実際には機能しない。この種のセキュリティオプションのコストは低い(ブール値のパラメータ一つ)が、実際に問題が起きてから追加するのでは、今10分かけて確認するよりもはるかに高い代償を払うことになる。

出典:Claude Agent SDK (TypeScript) Changelog
図解
verbatim_prompts: Before vs After同一段不受信任文字,在關閉與打開 verbatim_prompts 時的不同處理路徑verbatim_prompts: Before vs AfterUntrusted text: "@/etc/passwd"Default (verbatim_prompts=False)@path expanded to file contentSlash command may dispatchInjection riskSame text: "@/etc/passwd"verbatim_prompts=TrueDelivered as plain textNo expansion, no dispatchSide effect neutralizedRequires CLI 2.1.248+ — older CLIs log a warning and fall back to default behaviorClaude Me · claude-me.com
スクリーンショット歓迎。転載時は出典を明記してください。
質問する
10文字以上入力してください
関連記事
Claude Code に --max-findings パラメータ追加:コードレビューが一度に百件の指摘で埋もれることがなくなる
practice · 10/06
Claude Agent SDK がバックグラウンドサブエージェントのバグを修正:サブエージェント完了直後に stdin が早く閉じられ、次のターンが失敗する問題
practice · 10/06
Claude Agent SDK に prewarm() 追加:セッションが確定する前に Claude Code プロセスを先に起動し、最初のクエリの待ち時間を削減
practice · 10/06
Claude Code に claude plugin configure コマンド追加:プラグインの2種類の「設定」ボタンは混同しやすい
practice · 10/02
関連トピック
Agent Skillをインストールするとき、実は何を信頼しているのか:3,984個のスキルをスキャンしたレポートが示す「正常そう」の頼りなさ
AI Agent Bible
agent skillの公開に必要なのはSKILL.mdファイルと1週間経ったGitHubアカウントだけ——コード署名も、セキュリティ審査も、サンドボックスもない。
#prompt-injection
公式は明記している——「あなたに代わってメッセージを送る、購入する」タスクは予定実行しないこと——だが多くの人はこの警告を見ないまま予定を組んでいる
Claude Cowork Me
予定実行タスクは「あなたがいない」ではなく「誰もいない」——似ているようで、実はまったく違う。
#prompt-injection
あなたのDeFAIエージェントには「記憶」がある——それは新しい攻撃対象にもなる:Memory Poisoning
DeFAI Bible
プロンプトインジェクションはその場でエージェントに嘘をつくこと。memory poisoningは、あらかじめエージェントの記憶に一文を埋め込み、数週間後に自ら「思い出させる」ことだ。
#prompt-injection
Auto Modeを設定したから安全?権限モードとサンドボックス境界は全く別の防御層で、混同すると事故につながる
Claude Skill Me
サンドボックスはモデルが何を実行しようと選んだかではなく、プロセスが実際に何に触れたかだけを見る——これが権限モードとの根本的な違いだ。
#defense-in-depth