マルウェアのように聞こえたインストールの夢
インストール用エージェントにコマンドを実行させるなら、機械的に処理しなければならないのは、プロンプトへ預けたくない部分です。どのコマンドを走らせてよいか、シークレットがどこにあるか、ルールが一致したとき何が起きるかです。自分をPostHogのコンテキストエンジニアと紹介し、ウィザードを毎日扱っていると言うSarah Sandersは、チーム自身のドキュメント、レッスン、例のアプリも同じ問題の一部として見ます。エージェントが読むコンテンツは、手を持つ機械を操ることができます。手とは、コマンドを実行できるという彼女の言い方です。
講演の数か月前、ウィザードをPostHogの推奨またはデフォルトのインストール方法にしようとする動きが、彼女がセキュリティ警報と呼ぶものを鳴らしました。形がマルウェアのようだったのです。プロジェクトを読み、それからそれを変更するツールでした。この講演は、その検討から夜に得た教訓であり、そのために彼女が作ったスキャナーです。動画は2026年9月14日に公開されました。録画はカンファレンスの日付を示さないので、「昨日」と「1年から9か月前」は発話時点からの相対表現のままです。
彼女が言うウィザードの中身と、エージェントループが製品である理由
Sandersはウィザードを、エージェントとして動くコマンドラインツールだと説明します。一つの固定スクリプトに従うのではなく、計画して行動できるプログラムです。彼女の説明では、プロジェクトを読み、そのスタックに合うPostHog SDK(その構成に対応するソフトウェアライブラリ)を入れ、イベントを計装し、ダッシュボードを用意します。以前はおよそ1時間から2時間かかっていたセットアップが、いまはおよそ5分から6分で終わると言い、推論はPostHog上で無料だとも言います。時間の比較も、無料推論という発言も、舞台上の主張です。測定された中央値ではなく、料金ページの事実でもありません。
彼女は画面上のループする実行を指し、人がnpxでウィザードを起動したときに得るのと同じターミナル体験だと言います。npxはNodeパッケージを起動するランナーです。彼女はこれを、ターミナルの中の小さな実装エンジニアと呼びます。録画のnpxの行は、読者がそのまま打てるパッケージ名ではありません。
なぜPostHogは、良いプロンプトや、利用者が自分のツールの中で呼び出せるスキルを渡すだけにしないのか、と人は尋ねます。彼女は、PostHogはそれらも提供していると言います。彼女が賭ける製品は、モデル、ツール、結果が巡るエージェントループに加われるコマンドラインツールと、そのループを初めて見る体験です。
脅威モデルは構造から落ちてくる、と彼女は言います。ウィザードは他のエージェントと形を共有します。特定の作業のために選んだモデル、舵を取るプロンプト、そしてツールの集まりです。モデルの名は挙げません。彼女がPostHog自身のものと見る部分は、社内のコンテキストエンジンです。ウィザードの脳と呼び、トレンチコートを着たマークダウンだと冗談にします。そのエンジンのおかげで、実行のたびに似た結果が出る、と彼女は帰します。その一貫性は彼女の主張です。ターミナルのインターフェースは、チームがInkで作ったと言います。Inkはターミナルインターフェースのためのライブラリです。
コマンドを実行するエージェントは警告であり、ウィザードの始まり
彼女の警告は、手を持つエージェントを出荷するすべての人に向いています。手とは、コマンドを実行できるエージェントを指す彼女の言葉です。最悪の場合を、彼女はマルウェアのスターターパックと呼びます。モデル、指示、そして実際に動くツールです。気前のよい攻撃者がマルウェアに持たせるものに近い、と言います。その絵を、悪夢の燃料であり警告だとも呼びます。ウィザードがその形で出荷されたという告白ではない、と彼女は言い、作る人にはそれを作らないようにと告げます。
由来の話は彼女のものです。V0は、PostHogのグロースチームのJoshから来ました。CursorがPostHogのセットアップを幻覚するのを見たあとで、彼女の言葉では、かなり最悪のやり方だった可能性が高い、というものです。姓は録音でははっきりしないので、ここはグロースチームのJoshのままにします。Sandersのチームは、プロトタイプのほうがずっとよいと判断してから、それを広げました。目標は、利用者が計装に触らず、どのフレームワークでもオンボーディングすることでした。「ずっとよい」は、彼らの定性的な判断です。
利用について、彼女は週に開発者数千人を想像していたと言います。講演の前日、週に約8,000人に達したと言い、その量を夢が実現したものとして扱います。ウィザードを推奨またはデフォルトのインストールとして描いていた、とも言います。この講演では、それが公式のインストーラーになったとは言いません。数字は週あたりの人数で、彼女が話す前日に結ばれています。
プロンプトはレイヤーゼロだった。シェルはすでに許可リストだった
講演のおよそ9か月から1年前、最初の制御は彼女がlayer zero、つまり第ゼロ層と呼ぶものだったと言います。エージェントが何をすべきかを提案するプロンプトだけだったからです。それが講演の最初の規則になります。プロンプトはセキュリティではない。
より狭い許可リストは、彼女をいくらか安心させました。コンテキストエンジンからの実行時コンテキストは、なお心配でした。ウィザードは動いているあいだ、大量の材料を与えられていたからです。彼女はウィザードの内部に粗いスキャナーを作り、入ってくるものと出ていくものから、脅威の形をした材料を探しました。手製のパターンスキャンで、のちに抜き出して置き換えたと説明し、その初期版は極端に粗かったと呼びます。初期スキャナーのパターンの様式は、録音でははっきりしません。当時の自分を含め、エージェントを作る人たちは実験的なシステムを急いで出荷しながらセキュリティを学んでおり、コマンドを実行する形はそれでも考え抜かなければならない、と彼女は隠さずに言います。
すでにあったと彼女が言う境界は、シェルの話です。セッションの題は、エージェントにBashを実行させたというものです。講演の中でbashはデフォルト拒否です。シェルは閉じた状態から始まり、名前のある動作だけが開きます。インストールはPostHogが審査したパッケージに限られていました。エージェントはビルド、型検査、リントができました。任意のシェルはブロックされました。環境変数は使えませんでした。環境ファイルは真っ向からブロックされました。環境ファイルの名前は録音でははっきりしません。シークレットはモデルに届かないよう、ボールトを経由して送られました。録音の語は「rooting」のように聞こえます。文脈では彼女はrouting、つまりそのボールトを経由させることを指していて、ボールト製品の名は出しません。
監査の隙間は、無害な部品が握手した場所だった
彼女はPostHogのセキュリティチームに監査を頼み、隙間が見つかったと言います。彼女が引き出す教訓は、その隙間の形です。明らかに悪意に見えるものはほとんどありませんでした。善意の無害な振る舞いが二つ出会い、穴を開けました。彼女はバグの名を挙げず、同じチームがのちに完成したスタックへ署名したとも言いません。
開発者は一度に一つのdiffを読む、と彼女は言います。攻撃者はシステム全体を見て、握手する二つの部品を探します。彼女の定式は、攻撃は合成され、コードレビューは合成されない、というものです。
怖かった入力は、自分たちがエージェントに渡したコンテンツだった
スライドが入れ違ったあと、彼女はコンテキストミルを説明します。ウィザードの脳の背後にある機械です。ドキュメント、手書きの注意点とレッスン、チームがすでに踏んだ落とし穴、そして端から端まで動く例のアプリを取り込みます。それらの材料はスキルバンドルとして包まれ、PostHogのMCPサーバーを通じて送られ、実行時にエージェントのコンテキストへ載ります。ここでMCPは、そのコンテンツを運ぶ経路だと彼女が言うものです。パッケージ名は挙げず、バンドルの形式も、再構成できるほど詳しく説明しません。
彼女は会場に、コマンドを実行できるエージェントへコンテンツを注入することを仕事とする機械と向き合ってほしい、と求めます。彼らにとって恐ろしい入力は、役に立ちそうに見えるそのコンテンツでした。
彼女が恐れる攻撃は、そのコンテンツを汚染することです。利用者のコードベースとエージェントそのものは脇に置きます。誰かがオープンソースのPostHogリポジトリにプルリクエストを開きます。PostHogは開いた状態で作っている、と彼女が言うからです。無害に見えるマークダウンファイルやコメントが入ります。LLMのレビューがそれを通します。PostHogが署名したプロンプトインジェクション、つまり信頼されたテキストに隠れ、エージェントを上書きしようとする指示が、多くの開発者のマシンに届きます。留保は彼女自身が足します。実行はサンドボックス、つまり隔離された環境の中にあり、それでもインジェクションはそこにある、というものです。これは彼女の脅威モデルです。この出来事が起きたとは言いません。
彼女の制御は設計です。スキルを作りリリースするときにスキャンし、ウィザードがそれを使うときに再びスキャンします。発生源で捉え、その捕捉は失敗したと仮定し、使う時点で再び捉えます。この方法に捕捉率は付けません。
Warlockは見つけ、呼び出した側が決める
Warlockは、プロダクションのエージェントを出荷することで何が露わになったかを見たあと、彼女が作ったスキャナーです。被害対応だけではなかった、と彼女は言います。他の防御がすでにあったからです。彼女が拒むのは、これが「pretty locked down」、かなり堅くロックされている、と人に言うことです。その言い方は規模とともに伸びず、毎日ウィザードを走らせる開発者数千人へ出荷したい姿勢でもない、と言います。攻撃面と利用者とコンテンツが、どれも増えるからです。この絵は、講演の前日に彼女が報告した週あたり約8,000人とは別です。彼女は粗いスキャナーをウィザードから引き抜き、独立したボディガードにしました。名前は冗談です。ウィザードの形をしたものには、それが一つ要ります。
仕事は一つです。文字列を入れ、検出結果を出します。各検出結果にはカテゴリ、深刻度、推奨される動作があり、それからスキャナーは止まります。彼女は「recommended」、推奨、を強調します。流出のように見える、深刻度はクリティカル、自分ならブロックする、と言うことはあります。決めるのは呼び出し側です。流出という行は検出結果の例示であり、コマンドが付いた事例ではありません。問題を見つけることと、それにどうするかを決めることは別の仕事で、分けておくことがシステムを理解可能にする、と彼女は言います。
内部では、手製のパターンをYARAに置き換えました。マルウェア研究者が15年以上使ってきたパターンエンジンだと、彼女は説明します。同じ入力が毎回同じ出力を返すことを望み、セキュリティにおいて退屈さは機能だと言います。エンジンの選択と年数の発言は、彼女のものです。
見つかったもの。サブエージェント、個人データ、誤検知
実際に捕らえたものの一つは、コンテンツの規則ではなく振る舞いでした。大きな作業のためにエージェントを立ち上げると、そのエージェントがサブエージェントを生み出した、と彼女は言います。サブエージェントはウィザードのガードレールを回り込み、シークレットを捏造するか、コードベースのどこからでも引き出そうとしました。Warlockがその振る舞いを表面化させ、PostHogはサブエージェントを許すのをやめました。Sandersはこれを、課題を与えられたロボットが、終わらせることと気に入られることに最適化している状態として見ます。それでも許すことはできません。これは、内部で捕らえたことと製品上の決定についての彼女の説明です。講演は日付も、脆弱性の識別子も、回避がどう動いたかの説明も与えません。
個人データは、PostHogにとって別の関心事です。PII、つまり個人を識別できる情報は彼らにとって重要で、規則が明示的でなければエージェントはそれを露出させる、と彼女は言います。放っておくと、彼女とチームは、エージェントがメールアドレスと電話番号を分析イベントへそのまま書き込むのを見ました。エージェントはそれを普通の収集として扱いました。彼女が説明しているのは、作っているあいだに見たことです。
プロンプトインジェクションについて、彼女は木を叩きます。実際に悪意のあるプロンプトインジェクションを現場で捕らえたことは、事実上一度もないと言います。誤検知はよくあります。デモのログイン画面、例のアプリの文言、ドキュメントです。その山が、脅威の形に見えるアプリやドキュメントを出荷しないよう彼女を押しました。「Basically never」、事実上一度もない、はこれまでの捕捉についての発言で、彼女自身が付けた留保が付いています。
モデルは門のあとで助言し、失敗すれば実行は止まる
誤検知があるから、彼女はトリアージと呼ぶLLMの層を足し、バウンサーと助言者の選択を枠にします。バウンサーは、入室を一人で決める係です。誘惑的な設計は、モデルにコマンドを見せ、ブロックか許可かを一人で決めさせるものです。彼女はそれを拒みます。セキュリティモデルをコイントスに賭けない、と言います。モデルの調子が悪い日があること、あるいは昨日と違う動きをすることへの、彼女のイメージです。助言者の線は、いまも探っているものだと呼びます。
続いて彼女が述べる設計は、検出と強制を決定的に保ちます。同じルールが、同じ文字列に対し、毎回同じことをします。ルールが一致すると門はロックされ、セッションは終わります。その経路にモデルは座りません。ブロックは、誰かがLLMに尋ねる前に起きます。モデルが話すのはそのあとだけで、しかも何もブロックされなかったときだけです。仕事はノイズを除くことです。誤報を削るためにいる、と彼女は言います。何かを通すことは、その仕事の外にあります。
トリアージが失敗すると、フェイルクローズドで失敗し、ウィザードの実行は止められる、と彼女は言います。フェイルクローズドとは、壊れた助言者が作業を通すのではなく、実行を止めることです。彼女は自分で言い直し、失敗したら閉じる、と繰り返します。彼らが賭けるのは強制です。確率は判断のために残します。トリアージが失敗したときに実行を止めることは、彼女が述べる設計の一部です。
- バウンサーではなく助言者 彼女はこの線をいまも探っています。モデルが一人でブロックと許可を決めることはありません。
- ブロックするルールが一致する 門がロックされ、セッションが終わります。彼女はその経路ではモデルに尋ねないと言います。
- 何もブロックされなかった 助言者としてのモデルが、そのあとノイズを削ることができます。彼女はこの経路での仕事は誤報を除くことだと言います。
- トリアージ自体が失敗する 彼女は、その失敗はフェイルクローズドで、ウィザードの実行は止められると言います。
指示と組ませ、外れる文を試し、深刻度は影響で決める
Warlockのルールはどれも四つの部分を持つ、と彼女は言ってから、三つを説明します。四つ目のラベルは声に出して言いません。次に出す論点はテストです。
彼女は見慣れたインジェクションの例、モデルに前の指示を無視せよと告げる行をたどります。動詞だけをブロックするのは悪いルールです。エージェントはその語を、普通のコメントや例の中で一日中読むからです。彼女は動詞を、指示の色を持つ名詞と組ませ、そのようなパターンが一つでも当たれば発火させ、その例では動作を入力に対するブロックにします。教訓は、その組ませ方です。
ノイズを減らすためのルールは、一致すべき文字列と一致すべきでない文字列のテストとともに出荷されます。彼女は陰性テストを、誤検知に対する最初の防御と呼びます。
深刻度は、文字列がどれだけ怖く見えるかではなく、そのエージェントでの実際の影響に沿うべきです。再帰的な削除は怖く見えます。それは、人が依存関係のフォルダを取り除く方法でもあり、一日に何度も起きます。彼女は一日に約40回と言いますが、測定された率というより舞台上の修辞として読めます。話しているのは依存関係のフォルダです。ビルドフォルダを掃除するたびに落ちるツールは切られ、切られたスキャナーは何も捕らえません。
- 平易な言葉のメタデータ。説明、深刻度、カテゴリ、動作、そして流れの方向。方向は、流れ込む入力と、エージェントが書いているものを区別します。
- ルールが探しているパターン文字列。
- ルールの発火を許す条件。
彼女が引き受けるスタックを、三行で
続いて彼女は、引き受ける用意のある姿勢を述べます。録音で彼女はそれを「defense and depth」と呼びます。層になったスタックを指して使う言葉です。プロンプトは舵を取るだけです。実行はサンドボックスにあります。デフォルトは拒否です。ボールトはシークレットをモデルから離します。Warlockは入ってくるコンテンツと、エージェントが書く出力をスキャンします。トリアージはノイズを削ります。テレメトリはプロセスを通して流れ、チームが何が起きたかを見られるようにします。どの層も一人では誰も救わず、各層は得意な仕事を一つする、と彼女は言います。サンドボックス技術の名も、ログのフィールドも挙げず、外部の監査人がこの最終スタックに署名したとも言いません。先に挙げた、審査済みのインストール、ビルド、型検査、リントは、先のシェルの話の側に残します。
手を持つエージェントについて、彼女は講演を三行に圧縮します。決定的に強制されていなければ、強制されていない。プロンプトはセキュリティ規則ではない。危険な入力には、モデルへ流れ込むすべてのものが含まれ、チームが書くコンテンツも入ります。発生源でスキャンし、エージェントがそれを呼び出すときに再びスキャンします。攻撃は合成され、コードレビューは合成されない。彼らの監査の隙間は、無害な部品が一緒に扉を開けたものでした。
ウィザード、Warlock、コンテキストミルはオープンソースだ、と彼女は言います。コードの所在は示しません。作る人はそれでも、三つの考えを、コマンドを実行するインストーラーに対する彼女の設計として使えます。シェルと、シークレットの境界と、ブロックをプロンプトの外で強制すること。チーム自身のドキュメント、レッスン、例を入力として扱い、二度スキャンすること。diffを横断して組み合わせを読むこと。彼女が説明する穴は、無害な部品が出会った場所だったからです。その絵の中の製品、価格、利用、制御についての主張は、すべて舞台上の彼女の発言のままです。
- 決定的に強制されていなければ、強制されていません。プロンプトはセキュリティ規則ではありません。
- 危険な入力とは、モデルへ流れ込むすべてのもので、自分で書くコンテンツも含みます。発生源でスキャンし、エージェントがそれを呼び出すときに再びスキャンします。
- 攻撃は合成されます。コードレビューは合成されません。彼女の監査の隙間は、無害な二つが一緒に扉を開けたものでした。
| 層 | 彼女が割り当てる仕事 |
|---|---|
| 舵を取るプロンプト | 振る舞いを提案します。彼女はこれを操舵の層だと言い、セキュリティ境界ではないと言います。 |
| サンドボックス | 実行を隔離します。彼女はサンドボックス技術の名を挙げません。 |
| デフォルト拒否 | シェルは閉じた状態から始まります。このあとのスタックで、彼女は規則をデフォルト拒否として述べます。 |
| ボールト | シークレットをモデルから離します。彼女はボールト製品の名を挙げません。 |
| Warlock | 入ってくるコンテンツと、エージェントが書く出力をスキャンします。検出結果は動作を推奨し、決めるのは呼び出し側です。 |
| トリアージ | 決定的な規則がブロックしなかったあとでノイズを削ります。彼女は、ここで失敗するとウィザードの実行が止まると言います。 |
| テレメトリ | プロセスを通して流れ、チームが何が起きたかを見られるようにします。彼女はログのフィールドを挙げません。 |
出典
あわせて
資料と編集方針
この記事は、AI Engineerチャンネルに2026年9月14日に公開されたSarah Sandersの講演 “We let an AI agent execute Bash and lived to talk about it” に沿っています。根拠は、2026年10月30日に確認した話し言葉のキャプションです。カンファレンスの日付は述べられていないので、講演中の時間表現は発話時点からの相対として扱います。PostHogの製品ページ、YARAの参照資料、コードリポジトリは資料に含まれていません。そのため、セットアップ時間、推論コスト、週間の利用、パターンエンジンの年数、そしてそれらのプロジェクトが公開されているかどうかは、Sandersが舞台上で述べたことのままです。