シークレットが置かれるのはOSのキーチェーン、
プロンプトでもリポジトリでもありません
AgentsRoomはAPIキー、トークン、データベースのパスワードを、OSのキーチェーンで暗号化したマシンローカルの保管庫に保存します。あなたは名前で参照するだけで、コマンドやエージェントが起動するときにアプリが値を解決します。
エージェントの詰まりを解くのに一番早いからといって、トークンをプロンプトに貼り付けるのはもう終わりです。シークレットには一度だけ名前を付け、あとはどこでも{{secret:NAME}}を使えば、値はあるべき場所に留まります。
AgentsRoomがシークレットを、コマンドからは使えて、それを要求したエージェントからは読めない状態に保つ仕組み。
どのプロジェクトにも、共有してはいけない値がいくつか出てきます:決済キー、データベースのパスワード、デプロイ用トークン、ステージング環境のAPIキー。AIコーディングエージェントが加わった瞬間から、そうした値は最悪の形で動き始めます。エージェントの詰まりを解くためにプロンプトへ貼り付けられ、エージェントが書いたスクリプトにハードコードされ、3コミット後にまとめて取り込まれるファイルに置かれます。
AgentsRoomのシークレットマネージャーは、その値の置き場所を1つに定めます。シークレットは名前と値の組です:一度追加すれば、ディスクに触れる前にAgentsRoomがOSのキーチェーンを通じて暗号化します。保管庫はホームフォルダにある1つのファイルで、所有者だけが読める権限で書き込まれ、作成されたマシンを離れることはありません。
それ以降、値を自分で扱うことは二度とありません。開発コマンドやエージェントの環境変数に{{secret:NAME}}と書けば、そのコマンドやエージェントが起動するときにAgentsRoomが実際の値へ置き換えます。エージェントは名前を一覧し、そのうち1つの注入を頼めます。仕事をするにはそれで十分で、値そのものが渡ることはありません。
AIエージェントだらけのマシンのために作られた保管庫
OSが暗号化し、名前で参照し、可能な限り遅い瞬間に解決します。
OSのキーチェーンによる暗号化
すべての値はElectronのsafeStorageを通じて暗号化されます。つまり暗号化キーを持つのはAgentsRoomではなく、OSのキーチェーンです。アプリが保存するのは暗号文で、復号はシステムに依頼します。あなたがすでに認証情報を預けている他のアプリケーションとまったく同じ仕組みです。
保管庫は1ファイル、所有者だけ
すべてのシークレットは~/.agentsroom/secrets.jsonという1つの保管庫にまとまり、所有者のみの権限(0600)で書き込まれ、変更のたびにアトミックに置き換えられます。クラッシュしても書きかけのファイルが残ることはなく、マシン上の他のユーザーアカウントが開くこともできません。
値ではなく名前で参照する
保存したシークレットは{{secret:NAME}}として使います:開発ターミナルのコマンドライン、エージェントに渡す環境変数、これまで認証情報を直接打ち込んでいたあらゆる場所で。画面に表示されるもの、同僚に見せられるものは、名前です。
起動時に、メインプロセスの中で解決
置き換えはプロセスの起動時に、Electronのメインプロセスの中で行われます。解決された値は起動されるコマンドの環境変数に入り、それ以外のどこにも行きません:ログにも、画面にも、ディスク上のファイルにも。
エージェントに見えるのは名前、値ではない
AIエージェントはシークレットの名前を一覧し、これから実行するものに1つ注入するよう頼めます。エージェントにも、インターフェース層にも、MCP経由でも、値を返すコードパスは存在しません。エージェントは参照を扱い、アプリがシークレットを扱います。
キーチェーンがなければ、保存もしない
使えるOSのキーチェーンがないマシンでは、AgentsRoomは平文へフォールバックせず、シークレットの保存を拒否します。黙って平文のファイルに劣化する保管庫は、保管庫がないより悪いので、そのフォールバックはそもそも存在しません。
設定ではなく設計として、マシンローカル
あなたのシークレットがAgentsRoomのサーバーに送られることはありません。確認すべき同期スイッチも、オプトアウトすべきクラウド保管庫もなく、鍵のバックアップはあなた自身のディスク以外のどこにも存在しません。保管庫はマシン上で作られ、そのマシンのためにOSのキーチェーンが持つ鍵で暗号化され、そこに留まります。ファイルだけをコピーしても、別のマシンで開けるものではありません。
シークレットを使うことと、シークレットを読むことの分離は、プロンプトに書かれた指示ではなくコードで担保されています。インターフェース層も、MCPツールも、すべてのエージェントも、シークレットを名前で語ります。参照を値に変えるのはElectronのメインプロセスだけで、しかもあなたが起動を頼んだプロセスの環境変数を組み立てている間だけです。認証情報の扱いに気を付けるようエージェントへ伝えるのは、期待にすぎません。認証情報を返す関数がないことは、保証です。
だからこそ、有料のAPIや本物のデータベースを相手にエージェントを働かせても無理がありません。エージェントはSTRIPE_SECRET_KEYという名前のシークレットが存在することを知り、実行したいコマンドへの注入を頼めます。それを出力することも、書いているファイルにコピーすることも、どこかに保存される会話へ漏らすこともできません。
貼り付けたトークンから、名前付きのシークレットへ
3ステップ、そして値は二度と現れません。
シークレットを一度だけ追加する
名前を付けて、値を最後にもう一度だけ貼り付けます。AgentsRoomはそれをOSのキーチェーンで暗号化し、~/.agentsroom/secrets.jsonの保管庫へ、所有者のみの権限でアトミックに書き込みます。使えるキーチェーンがないマシンでは、アプリはその旨を伝え、平文で書く代わりに拒否します。
{{secret:NAME}}として参照する
これまで値を置いていた場所で参照を使います:開発サーバーを起動するコマンド、あるいはAPIトークンが必要なエージェントの環境変数。設定に保存されるのは参照なので、そのまま眺めても安全です。
起動時の解決はAgentsRoomに任せる
コマンドやエージェントが起動すると、メインプロセスがそのプロセスの環境変数の中で参照を実際の値に差し替えます。ツール類は必要なものを受け取り、それを動かしているエージェントが知っているのは相変わらず名前だけです。
シークレットマネージャーが任意ではなくなるとき
貼り付けた認証情報が、本物のインシデントに変わる場面。
本物のキーが必要な開発サーバー
決済キーとデータベースのパスワードがなければ開発サーバーは起動しません。起動コマンドに認証情報ではなく{{secret:NAME}}を置けば、そのコマンドは通話中に画面へ映しても一瞬も慌てずに済むものになります。
有料のAPIを呼ぶエージェント
作業中にサードパーティのAPIへ到達するため、エージェントにトークンが必要になります。シークレットを名前でその環境変数に追加します:エージェントは動く環境を手に入れ、トークンはプロンプトにも、会話にも、エージェントが次に書くものにも入りません。
リポジトリに入り込まなくなるキー
よくある事故は、設定ファイルに書かれた認証情報を後のコミットがまとめて拾ってしまうことです。シークレットを名前で参照すれば、リポジトリで管理されるファイルに残るのは名前なので、ブランチをプッシュしても漏れるものがありません。
1台のマシン、たくさんのプロジェクト
OSのキーチェーンで守られ、あなたのユーザーアカウントだけが読める1つの保管庫が、開くすべてのプロジェクトに対応します。各プロジェクトは必要な名前を参照するだけで、認証情報のコピーがあちこちに散らばることはありません。
読めないシークレットを、エージェントはどうやって使うのですか?
認証情報を使うことと読むことは別の操作であり、AgentsRoomがエージェント向けに実装しているのは前者だけだからです。保管庫をMCPに公開しているツールはただ1つ、secrets_listだけで、それが返すのは名前です。そこからエージェントは、必要なコマンドや環境変数に{{secret:NAME}}と書きます。その置き換えを実行するのはエージェントではなく、アプリです。
意図的に用意していないのが逆方向です。シークレットの値を返すMCPツールはなく、インターフェース層が値を受け取ることもなく、会話に描き戻すものもありません。参照を実際の値へ変えるのはElectronのメインプロセスの中、プロセスが起動される瞬間だけで、その結果はそのプロセスの環境変数に入り、他のどこにも行きません。
実際の効果として、エージェントは本物のデータベースに対してテストスイートを走らせ、有料のAPIを呼び、ステージングにデプロイできます。認証情報が1つもそのコンテキストに入らないままで。あとから伏せるものもありません。そもそも何も露出していないからです。
AgentsRoom MCPを見るよくある質問
シークレットはどこに保存されますか?
ホームフォルダの~/.agentsroom/secrets.jsonという1つの保管庫ファイルの中です。各値はElectronのsafeStorageを通じて暗号化されるため、暗号化キーはOSのキーチェーンが保持します。ファイルは所有者のみの権限(0600)で書き込まれ、アトミックに置き換えられるので、クラッシュしても書きかけのまま残ることはありません。
AIエージェントは私のシークレットを読めますか?
読めません。エージェントはシークレットの名前を一覧し、コマンドや環境変数に1つ注入するよう頼めます。仕事を進めるにはそれで十分です。エージェントにも、インターフェース層にも、MCP経由でも、値を返すコードパスは存在しません。解決はElectronのメインプロセスの中だけで行われます。
シークレットはAgentsRoomのサーバーに同期されますか?
決してされません。保管庫は設計上マシンローカルです。シークレットがAgentsRoomのサーバーに送られることも、クラウドにバックアップされることも、モバイルアプリへ中継されることもありません。あなたのマシンで作られ、あなたのマシンのために暗号化され、そこに留まります。
コマンドの中でシークレットをどう使いますか?
値が入るはずだった場所に{{secret:NAME}}と書きます:開発ターミナルのコマンド、またはエージェントの環境変数です。AgentsRoomはそのプロセスの起動時に実際の値へ置き換え、設定に残るのは参照のほうです。
マシンにOSのキーチェーンがない場合はどうなりますか?
AgentsRoomはシークレットの保存を拒否します。値を平文でディスクに書くフォールバックは意図的に用意していません。黙って平文のファイルに劣化する保管庫は、暗号化の実体がないまま暗号化の安心感だけを与えてしまうからです。
これはプロジェクトの環境ファイルを置き換えるものですか?
AIエージェントが関わったとたんに痛くなる部分を解決します:認証情報をファイル、プロンプト、会話の外に保つことです。プロジェクトは実行時に必要なものをこれまで通り持ち、値そのものは保管庫に置かれて起動時に注入されます。エージェントが読めてコミットが拾ってしまうファイルの中に居座ることはありません。
保管庫のファイルをコピーされたら、中身を読まれますか?
別のマシンでは読めません。値はOSのキーチェーンが保持する鍵で暗号化されているため、ファイル単体では暗号文です。さらに保管庫は所有者のみの権限で書き込まれるので、同じマシン上の他のユーザーアカウントも開けません。
エージェントはシークレットにどのMCPツールを使いますか?
secrets_listです。そしてそれが唯一のツールです。このマシンに保存されたシークレットの名前を返すので、エージェントは何が存在するかを把握したうえで、開発コマンドや自分が起動するプロセスの環境変数の中で{{secret:NAME}}として参照できます。値を返すツールは存在しないため、エージェントが出力するものも、書いているファイルにコピーするものも、会話に漏らすものもありません。必要なシークレットが足りないときは、チャットに貼り付けるよう頼むのではなく、アプリで追加するよう頼んできます。
こちらもおすすめ
データベース接続
MySQLとMariaDBの接続を保存し、SSHトンネルやAWS SSMセッション経由でプライベートサブネット内のデータベースに到達して、AIエージェントにMCP経由でクエリさせましょう。デフォルトは読み取り専用、1回の呼び出しにつき1文、結果セットには上限があり、パスワードがエージェントに届くことはありません。
SSH接続
SSH接続を保存し、内蔵のSSHターミナルを開いて、Claude Code、Codex、Antigravity CLIをリモートサーバーやVPS上で直接実行できます。SSH鍵またはパスワード認証、プロジェクトごとの接続プロファイル、別のSSHクライアントは不要です。
開発ターミナル
プロジェクトごとのターミナルマネージャーとプロセスランチャー。バックエンド、フロントエンド、ワーカーをワンクリックで起動。シークレットは手で打ち込まず、起動時に注入されます。
AgentsRoom MCP
エージェントにAgentsRoom自体を操縦させるMCPサーバー:プロジェクト、ターミナル、バックログ、接続を、付随するガードレールとともに。
エージェントに渡すのはアクセス、鍵ではありません
AgentsRoomをダウンロードして、APIキーとパスワードをOSのキーチェーンで暗号化された保管庫に移し、あとはどこでも名前で参照しましょう。
コンパニオンアプリ:外出先でもエージェントを確認
Claude、Codex、Antigravity CLI、またはその他の AI プロバイダーを使用します。
バグや要望を公開バックログに直接送信できます。
実際の AgentsRoom の様子。