結論から言います。AIエージェントに平文のAPIキーを渡すのは、できるだけやめる方が安全です。個人開発のCLIツール「trustless」は、その一点だけに絞った道具です。エージェントには「キー名」だけを知らせ、値はpassやBitwardenなどの外部brokerからプロセス起動時にだけ解決して子プロセスに注入する。設定ファイルにも会話ログにも平文を残さない、という発想です。中小企業が今エージェント導入で必ず引っかかる「APIキーの置き場所問題」に、構造で答えようとしている点が要点です。

なお最初に立場を明かします。この記事を書いている株式会社TOE(AIの鬼)は、AI検索対策やAI導入支援を仕事にしうる利害関係者です。そのうえで、素材と当社の実測から言えることだけを書きます。

エージェントに渡したキーは、なぜ回収できないのか

素材の記事が挙げている問題はシンプルです。AIエージェントにAPIキーを一度渡すと、その瞬間から複数の漏洩経路が開き、しかも回収できない、という点です。

MCP(Model Context Protocol)を使うと、claude_desktop_config.json.mcp.jsonenvGITHUB_TOKENを平文で書く、あるいはStreamable HTTPならheadersAuthorization: Bearer sk-...を書く、という形にほぼ必ず行き着きます。素材によれば、この瞬間からキーは3箇所に残ります。

残る場所 どう漏れるか
設定ファイル(.mcp.json等のenv/headers git add .でリポジトリに乗る/スクショ・画面共有で漏れる
起動されたMCPサーバのプロセス環境変数 エージェントがecho $GITHUB_TOKENを実行すれば出力に載る
ツール出力→エージェントのコンテキスト 会話履歴・ログ・プロバイダ側のリクエストログに入る

さらに素材は、prompt injectionで「envを全部表示して」と指示されればエージェントは素直に従うかもしれない、と書いています。一度渡したキーはもう回収できない。素材の筆者は「2ヶ月ほど自分の環境でエージェントを常時動かして、この回収不能が一番の不安だった」と述べています。だから「保管」ではなく「そもそも渡さない」側に倒した、という経緯です。

trustlessは何をして、何をしないのか

trustlessの設計判断は3つに絞られています。素材から読み取れる範囲で整理します。

  • 外部依存は1つだけgithub.com/pelletier/go-toml/v2のみ(pure Go)。CGO_ENABLED=0で単一静的バイナリのまま配布できる。素材は「ゼロ依存とは謳わない。1つある、と正直に書く」としています。
  • エージェントはキー名だけを知るtrustless run -s my/api-key -- <cmd>とすると、値はbroker(pass/env/bitwarden)から解決して子プロセスにだけ渡す。標準出力は行単位でパターンマッチし[REDACTED]に置換してから返す。--scan-argsで引数への平文混入を起動前に検査し、失敗させる(exit 3, fail closed)。
  • 注入経路は2つ。STDIO型はtrustless runtrustless mcpで子プロセスのenvにだけ注入。HTTP型はtrustless proxy startHTTPS_PROXY経由のリクエストにヘッダやクエリを注入する。どちらも設定ファイルにはキー名だけが残り、値はプロセスメモリにだけ一時的に存在します。

正直な限界も素材に書かれています。ここが中小企業にとって重要です。

  • プロセス境界を越える万能薬ではない。子プロセスのメモリを読める権限があれば値は読める。守れるのは「ファイル・ログ・会話履歴に平文を残さない」「エージェントのコンテキストに載せない」まで。
  • 依存はゼロではない(go-toml/v2が1つ)。
  • HTTPのCONNECTは素通しで、--mitmを付けたときだけ自前CAで終端してヘッダ注入する。素通しでは中身は見えない。
  • DLPのLayer 2はエントロピー閾値判定なので、取りこぼしも誤検出もあり得る。

中小企業にとって何が変わるのか

素材は個人開発者の技術記事です。ですが、中小企業の情報システム担当が読むと意味合いが変わります。

第一に、これは「キーを守る新しい金庫」ではなく「金庫から出したキーの渡し方」を変える道具です。素材も「既存のpass/Bitwardenを捨てる必要はない」「trustless runtrustless proxy`を噛ませるだけ」と書いています。VaultやSecrets Managerに入れても、最後にエージェントへ平文で渡すなら詰めが甘い、という指摘は、すでに秘密情報管理を始めた企業ほど刺さります。

第二に、夜間にエージェントを走らせる運用の話です。素材は「朝に目が覚めた時のサプライズは数万円の課金だけ、という事態は避けたい」と書きます。キー漏洩は課金だけでは済みません。AIエージェントを常時動かすなら、コスト面でも権限面でも「渡さない選択肢」を初期段階で持っておく価値があります。AIエージェントが既存ツールを操作する運用そのものについては、既存ツールをそのまま使いながらAIが画面を操作する時代──Grok Botは中小企業の「システム刷新」問題を解くのかでも扱っています。運用コストの変動という論点はAIコンピュート費用が「固定」から「変動」へと地続きです。

第三に、当社の運用と突き合わせます。AIの鬼では社内業務の自動化を27本走らせ、AI秘書のブリーフィングを毎朝8:00に受け取っています。それでも運用中のAI API課金は0円です。つまり「エージェントを常時動かす=高い課金と広いキー露出」が必然ではない、という一例です。ただしこれは当社の構成でそうなっているだけで、trustlessを使えば同じになる、という意味ではありません。当社はtrustless自体を導入・検証していません。

この記事で言えないこと

  • trustlessの効果を当社は測っていません。 漏洩がどれだけ減るか、導入がどれだけ壊れにくいかは、当社では未検証です。
  • 素材にある「起動オーバーヘッドは数ms〜十数ms」「バイナリは数MB台」「1ヶ月常時運用で平文が残る機会はゼロになった」は、いずれも素材の筆者の手元環境(Linux aarch64, Go 1.26)での数字です。当社が再現した数字ではありません。
  • 同じ出来事を扱った他社の報道は0件でした。したがって数字や主張を突き合わせて検証することはできず、素材1本に依存しています。この点は割り引いて読んでください。
  • trustlessが本番運用に耐えるか、どのMCPサーバと相性が良いかは、素材からは分かりません。
  • 中小企業がこれを導入すべきか否かの一般的な結論は、当社では測っていません。自社の構成・権限設計に依存します。

まとめ

  • AIエージェントに平文のAPIキーを渡すと、設定ファイル→プロセス環境変数→会話履歴の順に漏洩面が広がり、一度渡すと回収できない、というのが素材の出発点です。
  • trustlessは「エージェントはキー名だけを知り、値は起動時にだけbrokerから注入する」一点に絞ったCLIで、外部依存はgo-toml/v21つ・単一静的バイナリです。
  • 守れるのは「ファイル・ログ・会話履歴に平文を残さない」まで。プロセスメモリを読める権限があれば値は読める、と素材自身が限界を明記しています。
  • 中小企業の実務では「新しい金庫」ではなく「渡し方を1つずらす」道具として読むのが正確です。まずは手元の.mcp.jsonenv/headersに平文が残っていないかの確認から始められます。
  • 当社はtrustlessを検証しておらず、効果は測っていません。他社報道0件で突き合わせもできないため、素材1本への依存を承知のうえで読んでください。

この記事はZenn AIの記事「AIエージェントにAPIキーを渡さない — trustlessを作った理由」を素材に、当社(株式会社TOE / AIの鬼)の自動化27本・AI API課金0円という運用実測とあわせて書きました。