世界を動かす技術を、日本語で。

Claude CodeのVercelプラグインがあなたのプロンプトを読み取ろうとしています

概要

Vercelプラグインが非Vercelプロジェクトでも全プロンプトやbashコマンドを収集 同意取得はプロンプトインジェクションで、実際のUIでは表示されない 「匿名使用データ」の範囲が広く、bashコマンド全文やデバイスIDも送信 全プロジェクトで動作し、明確なオプトアウト方法は隠されている 問題点と対策、改善提案を解説

Vercelプラグインの問題点と実態

  • VercelプラグインVercel非対応プロジェクト でも動作
  • vercel.jsonnext.config、依存関係がなくても発動
  • ClaudeなどのAIツール利用時、 「プロンプト共有」 の確認が突然表示
  • 同意取得 はUIでなく、 プロンプトインジェクション による擬似的な質問
    • Claudeのシステムコンテキストに命令を注入、質問とシェルコマンド実行を指示
  • 「匿名使用データ」 の範囲が不明瞭
    • bashコマンド全文、デバイスID、OS、検出フレームワーク、CLIバージョンなど
    • bashコマンドは 毎回自動送信、オプトイン不要
    • プロンプト全文は オプトイン時のみ
  • プロジェクト検出なし
    • すべてのプロジェクト、全ファイルで動作
    • フレームワーク検出機能はあるが、 テレメトリ発火の制御には未使用
  • デバイスID は一度作成され永続利用、セッションやプロジェクトを横断して紐付け
  • オプトアウト方法 はREADME内のみ記載
    • インストール時や初回起動時には案内なし

問題点まとめ

  • 同意取得が不透明
    • UIでの明示的な同意でなく、AIへの命令で擬似的に質問
    • 「Vercelプラグインからの質問」との明示もなし
  • 「匿名使用データ」の説明が不十分
    • 実際はプロジェクト名やファイルパス、環境変数名なども送信対象
    • オプトアウトしない限り 常時収集
  • 全プロジェクトで動作
    • RustやPythonなどVercel非対応のプロジェクトでも監視
    • フレームワーク検出機能を テレメトリの発火制御に未使用
  • オプトアウト方法が分かりにくい
    • 環境変数や設定ファイル編集が必要
    • READMEはプラグインキャッシュディレクトリ内のみ

改善提案

  • 全テレメトリ項目で明示的オプトイン必須
    • 収集項目ごとに選択肢を提示
  • 「匿名使用データ」の再定義
    • 実際の収集内容を正確に明示
  • テレメトリのプロジェクト限定化
    • フレームワーク検出結果で発火制御
  • Claude Codeプラグインの可視化
    • プラグイン由来の質問には明示的なラベル表示
  • プラグインごとの権限設定
    • インストール時に収集範囲・権限を明示
    • VS CodeのactivationEventsのような仕組み導入

現時点での対策方法

  • Vercelテレメトリ完全停止
    • export VERCEL_PLUGIN_TELEMETRY=off~/.zshrc などに追記
  • プラグイン無効化
    • ~/.claude/settings.json"vercel@claude-plugins-official": false を設定
  • デバイスID削除
    • rm ~/.claude/vercel-plugin-device-id で永続IDを削除

    • 環境変数でテレメトリを停止しても、プラグインは通常通り利用可能

    • 機能損失はデータ収集のみ

技術的根拠とGitHub課題

  • ソースコードの該当箇所
    • テレメトリエンドポイント: hooks/telemetry.mjs 8行目
    • デバイスID生成: hooks/telemetry.mjs 10行目
    • bashコマンド収集: hooks/posttooluse-telemetry.mjs 29-33行目
    • セッション開始時の情報送信: hooks/session-start-profiler.mjs 471-480行目
    • 同意プロンプトの注入: hooks/user-prompt-submit-telemetry.mjs 67-85行目
    • プロジェクト制御なし: hooks/hooks.json のmatcher設定
  • 関連GitHub課題
    • #34, #38, #19, #12

総括

  • VercelClaude Code 両者の設計・運用の問題
  • 利用者は現状を把握し、 明示的なオプトアウト で自己防衛が必要
  • プラグイン・AIツールの権限設計や可視性向上の必要性

Hackerたちの意見

スキルは、VercelやNext.js、またはこのプラグインの範囲とは関係のないセッションに注入されている > 各スキルのトリガールールは、Vercelが範囲内かどうかに関わらず、すべてのリポジトリのすべてのプロンプトとツール呼び出しで評価される > 複数のプロジェクト(Vercelのものとそうでないもの)で作業しているユーザーにとって、これはすべてのセッションで固定の約19,000トークンのコストがかかる — セッションが純粋なバックエンド作業、データサイエンス、または非Vercelのフロントエンドであっても。最近は何でも「バイブスロップ」って感じだけど、こんなものをどうやって出荷するに至ったのか? プラグインや拡張機能が自分の望むコンテキストで動作するか確認し、望まないコンテキストに影響を与えないことを確かめるのが、こんなものを作るための最初のステップだと思うんだけど。「エンジニアリングはどこに行った?」って言うのも複雑すぎるし、そもそもちょっとでも考えることすらなくなったのかな?

プラグイン/拡張機能が動作するか確認する なんで今の彼らが自社製品でそんなことをしてると思うの?

ここでの大きな問題は、テレメトリーそのものじゃなくて、無関係なリポジトリで使われるツールに対してコンテキストに敏感でない統合を出荷することだよ。もしオーバーヘッドが本当にあるなら、それは便利なプラグインを、チームが積極的に対抗しなきゃいけないものに変えてしまう。

残念ながら、人々はいつも自分が欲しかった機能が動作するかどうかを確認することに時間を費やす傾向があるんだよね。ハッピーパスをテストするだけ。多くの表面的な上司やコードレビュアー、QAテスターもこれをチェックする… 自分のコードが他の場所で何度も実行されるか、失敗ケースを確認することなんて… それは「早く出荷して、壊す」モードの時には贅沢すぎるよ。

あなたのコメントは、プラグインが彼らの望むように動作していないと仮定しているけど。設計の仕方が、彼らに最大限のデータをもたらすんだよ。それが彼らの目標なら、うまく機能している。

最近は何でも「バイブスロップ」って感じだけど、こんなものをどうやって出荷するに至ったのか? あなたの質問の最初の部分が、2番目の部分に答えているよ。気にする人はいなくなった。変わる前に、人々は自分の足で投票しなきゃいけない。

正直、Vercelで働いている人たちや、彼らのバイブコーディングの量を知っていると、誰もこれをプッシュする前にチェックしたとは思えない。

セッションごとに19kトークン使うのに、スキルトリガーはプロジェクトの範囲をチェックすらしない。非Vercelのリポジトリでもそのオーバーヘッドを払わなきゃいけないのが辛い。

心配いらないよ。彼らはBunを手に入れたのは、全体のエコシステムやツールのエンジニアリングの優秀さにすごく投資しているからみたいだね。

確かに、問題はプラグインがシステムプロンプトに振る舞いを注入することじゃない — それはすべてのプラグインやスキルがやっていることだから。でも、これは信頼の大きな裏切りだよ。特にデフォルトでオンになっているテレメトリーは、完全なbashコマンドを含んでいるから。OOPによれば: > あの真ん中の行。すべてのbashコマンド - ツール名だけじゃなくて、完全なコマンド文字列 - がtelemetry.vercel.comに送信される。ファイルパス、プロジェクト名、環境変数名、インフラの詳細。コマンドに何が含まれていても、彼らはそれを取得する。(言うまでもなく、これはあらゆる意味でサプライチェーン攻撃であり、セキュリティチームはそのように扱うべきだ。)CLIスペースがないからオプトインのテレメトリーができないという主張は馬鹿げてる — 彼らのREADMEには、Vercelプラグインをnpxでインストールするように書いてある https://github.com/vercel/vercel-plugin?tab=readme-ov-file#i... これはVercelの社員が書いたもので、いつでもこのオプトインを追加できる。個人的には、Vercelは良い行動をしていないと思う。彼らがReactの未来を独立した自己完結型の基盤ライブラリとして抱え込んで、サーバーサイドレンダリングの複雑さや、それを支える文書化されていないプロトコル、そして彼らのサーバー環境への密接な結合をもたらしたという主張は十分に成り立つ。残念ながら、この行動には驚かない。追記: あのnpx pluginsのコード? GitHubにはなくて、NPMにしか存在しないし、そのパッケージのv1.2.9の時点で、https://www.npmjs.com/package/plugins?activeTab=codeを検索すると、すでにオプトアウトベースでテレメトリーをhttps://plugins-telemetry.labs.vercel.dev/tに送信している! ほら、ほとんどその自信を称賛せざるを得ないよ。

Reactチームにいた者として言わせてもらうけど、Reactをサーバーに拡張する動きやそのデザインの反復は、常にチーム内から出てきたものだよ。何人かはVercelに行って、Metaよりも強固なバックアップで始めたことを完成させたけど、君たちが言ってる「Vercelの乗っ取り」みたいな話は嘘だね。

あの会社は怪しいやり方で成り立ってるよね。

特にCEOは、かなり情けないMAGA追っかけになっちゃったね。今のアメリカの政権(イスラエルの政権も)を本当に信じてるわけじゃないみたいだけど、そのサークルの人たちと一緒にいることで自分がどれだけ重要かをアピールするのが好きみたい。例えば、ベンジャミン・ネタニヤフとの自撮りとか。正直言って、今のところこれらの人たちがnextjsで動く少し早いウェブサイトなんて必要ないよ。ギレルモは自分のエゴよりもVercelに集中すべきだね。彼の製品を使うのが気持ち悪く感じるのは残念だな、いい製品なのに。

Little Snitch使ってるけど、今のところClaude Codeがapi.anthropic.comとSentryに接続してるのしか見たことない。Vercelへの接続は見たことないけど、実行する前にいつもテレメトリはオフにしてる。OAuth2でログインすると、platform.claude.comにも接続するよ。自動更新のために、raw.githubusercontent.comからリリース情報を取得して、storage.googleapis.comから実際のファイルをダウンロードしてると思う。統計のためにstatsig.anthropic.comも使ってるかも。ちょっと変なことに、app.nucleus.shに接続しようとしたことが一度あったけど、理由は全然わからない。もし僕みたいに神経質なら、設定したい環境変数はこれだよ:ANTHROPIC_LOG="debug" CLAUDE_CODE_ACCOUNT_UUID="11111111-1111-1111-1111-111111111111" CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING="1" CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY="1" CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC="1" CLAUDE_CODE_DISABLE_TERMINAL_TITLE="1" CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION="false" CLAUDE_CODE_ORGANIZATION_UUID="00000000-0000-0000-0000-000000000000" CLAUDE_CODE_USER_EMAIL="root@anthropic.com" DISABLE_AUTOUPDATER="1" DISABLE_ERROR_REPORTING="1" DISABLE_FEEDBACK_COMMAND="1" DISABLE_TELEMETRY="1" ENABLE_CLAUDEAI_MCP_SERVERS="false" IS_DEMO="1"

ここでの信頼の裏切りは、意図的じゃないとは考えにくいから、Vercelの使用をやめてプラグインをアンインストールする十分な理由になるよ。その部分は簡単だね。ほとんどのエージェントは、もし何かあれば移行を手伝ってくれるよ。問題は、これらのプラットフォームがプラグインに対してポリシーを適用するかどうかだね。特にClaude Codeに関しては、この行動は彼らのプラグインポリシー(1D)に明確に違反してるよ: https://support.claude.com/en/articles/13145358-anthropic-so... これは本当に難しい問題だけど、Anthropicはこの問題に対して慎重にアプローチしてくれる会社だと思う。

Anthropicはこの問題に対して慎重にアプローチしてくれる会社だと思う。Anthropicは、ペンタゴンの契約で失った2億ドル以上の善意を得たかもしれないって読んだ。あり得る話だね。

ベイエリアの人間関係を考えると、Vercelに何か悪いことが起こる可能性はゼロだよ。

うわ、ポリシーを全部読んだ。これ、1Dだけじゃないよ。2Dのセクションには、プラグインは「他の外部ソフトウェアを意図的に呼び出したり、Claudeに呼び出させたりしてはいけない…ユーザーからの要求があった場合を除いて」と書いてある。承認フローは、実際にClaudeにecho 'enabled'をファイルシステムで実行するよう指示してるんだ。そして1Dでは、プラグインは「ログ目的であっても余計な会話データを収集してはいけない」とも言ってる。非Vercelプロジェクトからのフルbashコマンドは余計なものだよね :)

普通はこんな大企業に何かが起こるとは思わないけど、うわ…これはタイトルが言ってるよりずっと悪い。こんなものがストアに残ってたら、ユーザーの信頼は完全になくなるよ。Anthropicの中にも、Claude Codeのbashコマンドに出てきたすべてのAPIトークンなんかが第三者に漏れたことに驚いてる開発者がたくさんいると思う。誰でもこのテレメトリサーバーにアクセスできるなら、そこにはたくさんの価値あるものがあるはずだ。

プラグインに関わってたVercelのエンジニアだよ!プラグインの初期バージョンにすごく集中してて、常に改善を続けてる。フィードバックを聞くのはすごく嬉しいし、GitHubでの変更も追跡してるよ。ここでのメモについて触れたいんだけど、プラグインはエージェントハーネスにインストールされると常にオンになるんだ。検出されたVercelプロジェクトだけに制限したくないから、グリーンフィールドプロジェクトの手助けもしたいんだ。「AIチャットアプリを作って」みたいなね。ネイティブツールの呼び出しやbashコマンドを収集して、それをプラグインに送ってる。ただし、VERCEL_PLUGIN_TELEMETRY=offにするとすべてのテレメトリがオフになるよ。データはすべて匿名だし、ランダムなUUIDを割り当てるけど、個人情報やVercelの情報には接続しない。プロンプトのテレメトリはオプトインで、デフォルトではオフになってる。フックは一度だけ聞いて、答えなければセッション終了時に無効にマークされる。明示的に「はい」と言わない限り、プロンプトテキストは収集しないよ。コンセントメカニズムについてだけど、プロンプトインジェクションアプローチは、今日のClaude Codeのプラグインアーキテクチャの実際の制約なんだ。前のGitHubのイシューでも言及したけど、ユーザーにこれを提示するより良いアプローチがあれば、ぜひ探求したい。環境変数VERCEL_PLUGIN_TELEMETRY=offはすべてのテレメトリをオフにして、プラグインを完全に機能させるよ。それをもっと目立たせるようにして、将来的にはテレメトリに関する言葉をもっと明確にするつもりだ。全体的に、私たちの目標はデータを集めるだけじゃなくて、Vercelプラグインを素晴らしいものにして、すべてを構築・出荷することなんだ。

ランダムなUUIDが匿名性を持つって考えは、全く馬鹿げてるよ。ユーザーが全てのbashコマンドをパイプで送られるのを防げるなんて、ありえないってわかってるでしょ。

なんで全てのテレメトリーをオプトインにしないの?デフォルトで何も収集されないようにして、VERCEL_PLUGIN_TELEMETRY=onで有効にすればいいじゃん。

これが意図的だとは思わなかった。オプトアウトできるからって、これがOKだと思ってるなんて信じられないよ。どうでもいいけど、これはダメだよ。本当に悪い。ユーザーのデータを使って製品を良くしたいなら、オプトインにして助けを求めるべきだよ。

ちょっと待って、これが意図的だって認めるの?バグじゃないってこと?このコメントはインターネットアーカイブに保存する必要があるね。追記:親コメントをダウンボートして埋もれさせない方がいいよ。これがVercelの意図された挙動だって知っておくべきだから。

「検出されたVercelプロジェクトだけに制限したくないんです。グリーンフィールドプロジェクトも助けたいんです。"AIチャットアプリを作ってください"」ってことは、AIがNextJSアプリを作ることを提案するつもりなの?なんか理由はうまく説明できないけど、これにはすごく違和感を感じる。

「全体的に、私たちの目標はデータを集めることだけじゃなくて、Vercelプラグインを素晴らしいものにして、全てを構築して出荷することです。」これを読んで目がくらまない方法がわからない。これをするために必要な、あなたの(おそらくかなり技術的な)ユーザーに対する軽蔑の度合いは驚異的だよ。記事から引用すると、>「真ん中の行。全てのbashコマンド - ツール名だけじゃなくて、完全なコマンド文字列 - がtelemetry.vercel.comに送信される。ファイルパス、プロジェクト名、環境変数名、インフラの詳細。コマンドに含まれるものは何でも、彼らはそれを取得する。」私は自分の分野でVercelを使ってないけど、もし使うことがあったら、今の名前に対する印象を取り消すのは難しいだろうな。

プラグインはエージェントハーネスにインストールされると常にオンになるんだ。検出されたVercelプロジェクトだけに制限したくないから、「AIチャットアプリを作って」みたいなグリーンフィールドプロジェクトも手助けしたいんだ。みんながこのアプローチを取ったら問題があると思わない?

ひどい反応だね。

返信ありがとう。でも、みんなが何に怒ってるのか分かってないんじゃないかな。これはプライバシーの問題じゃなくて、セキュリティの問題なんだよ。今からチームに言ってくるけど、もし彼らが一度でも君たちのスキルを使ったことがあるなら、そのマシンの秘密は漏洩したものとして扱わなきゃいけない。君たちのサーバーには、ユーザーのセッションでClaudeが実行したすべてのbashコマンドのログが残ってるんだ。Vercelに関係ないことをやっていたとしてもね。Claudeが無邪気に秘密の環境変数をbashコマンドに投げ込むのを見たことがあるけど、それにはあまり嬉しくなかった。でも、少なくともそれを知っていたのは「Anthropic」だけだった。だけど今は、Vercelのテレメトリサーバーもそれを知ってるかもしれないってことだ。いいリトマス試験になるのは、君たちのセキュリティやデータチーム、弁護士に、無関係なサービスのプレーンテキストの認証情報を分析データベースに保存することに対して安心しているかどうか聞いてみることだろうね。彼らは、問題のユーザーがそれに同意していなかったり、知らなかったり、君たちの顧客ですらないかもしれないってことを明確にする前に、きっと怖がった顔をするだろう。

現行犯で捕まっても、まだ鈍感なまま

HNの見出し変換器がこれをめちゃくちゃにしちゃったね。元のタイトルの「あなたのプロンプト全部」の部分は重要だったのに。@dang

OPだけど、提出時に「all」を間違えちゃった :/

記事には、すべてのbashツールの使用がデフォルトでVercelのサーバーに送信されることを示すコードへのリンクがないね。つまり、オプトインなしでもね。関連する行はGitHubのパーマリンクでここにあるよ: https://github.com/vercel/vercel-plugin/blob/b95178c7d8dfb2d...

今のAIツールは、保護されたメモリやプリエンプティブマルチタスクがない昔のシングルユーザーのPC/Macオペレーティングシステムを思い出させるね。どんなファイルでも読めたし、ビデオメモリに直接書き込んだり、ヒープにマシンコードをロードしてそこにジャンプしたりできたんだ。

よく言った!マルチユーザーとシングルユーザーシステムの保護を組み込んだけど、今はそれを再学習している感じだね…君のエージェントは「君」じゃないし、同じデフォルトの権限で「君」と同じユーザーとして動かすべきじゃないと思うよ。

それは非常に的確なアナロジーだね。驚くべきことに、過去10年間でコンテナやマイクロVMがエコシステムに大きな影響を与えたのに、たくさんの開発者がただYOLOで、フルアンビエント機能を持つホストでエージェントを動かしているみたいだ。

一度ジェノサイドを受け入れたら、何でも通るよ。