外部通信の統制

English

ForgeKairos は、AI の機能が始める外部への通信を、許可したホスト以外は拒否する。許可するホストの一覧を ネットワーク許可リストと呼ぶ。

全体の図は AI と通信の制限の全体図 を見る。

許可リストが統制する範囲

許可リストは AI の機能が始める通信に効く。

  • AI のモデルのプロバイダーと編集予測のプロバイダー
  • エージェントの fetch と Web 検索のツール
  • MCP サーバー (HTTP と OAuth)
  • 外部エージェント (ACP) とそのバイナリーのダウンロード
  • エージェントをインストールする npm
  • エージェントがサンドボックスの中で実行するコマンド

エディター自身の道具は制限しない: 言語サーバー、フォーマッター、デバッグアダプター、拡張機能、それらの ための node と npm、本体の更新、リモートのサーバー、Git、内蔵ブラウザー (内蔵ブラウザー を参照)。

エディター自身の通信の印が無い要求は、AI の通信として扱う。

既定で拒否

統制の対象の要求は、ホストが許可リストのどれかに一致しない限り拒否する。loopback は常に許可する: 127.0.0.0/8、::1、::ffff:127.0.0.1、localhost (*.localhost は含まない)。このため、この PC で動く ローカル LLM のサーバー (Ollama、LM Studio、llama.cpp) は、許可リストが空でも使える。

リダイレクトは 1 hop ずつ許可リストで確かめる。別のホストへのリダイレクトでは、資格情報のヘッダー (authorization、cookie、x-api-key、api-key など) を外す。

次の組み込みの許可は、決まったパスに限って、許可リストに書かなくても通る。

  • 拡張機能のマーケットプレイス
  • ACP エージェントのレジストリとそのアイコン
  • ForgeKairos の GitHub Releases への更新の確認

許可リストの編集

設定 → ネットワーク → 外部通信の統制 → ネットワーク許可リスト を開く。ここでホストの追加・編集・削除、 ファイルの再読み込み、network_allowlist.json をエディターで開く (無ければ作る) ができる。変更は再起動 なしで効く。

ファイルは設定フォルダーの settings.json の隣にある。

OSパス
Windows%APPDATA%\ForgeKairos\network_allowlist.json
Linux$XDG_CONFIG_HOME/forgekairos/network_allowlist.json
macOS~/.config/forgekairos/network_allowlist.json
{
  "allowed_hosts": [
    "api.openai.com",
    "*.example.com",
    "[fd00::1]"
  ],
  // 省略可。省略すると true
  "proxy_child_processes": true
}
  • 項目は、ホスト名そのもの、*.domain (サブドメインだけ。そのドメイン自体は含まない)、IPv4 か IPv6 の アドレスのどれか。
  • 大文字・小文字と末尾のドットは区別しない。国際化ドメイン名は Punycode で比べる。
  • ポートは比べない。ホストを許可すると、すべてのポートを許可する。
  • コメントと末尾のカンマを書ける。
  • ファイルが無い・空・読めないときは loopback だけを許可する。誤った項目は飛ばしてログに出す。 ファイルを解析できないときは、設定ページから編集しない。

同意の画面からホストを足す

  • 外部の AI プロバイダーを有効にするとき、必要なホストと 許可リストに追加 のボタンを出す。 追加しなければ、そのプロバイダーへの通信は拒否のまま。
  • ACP エージェントのインストールと更新では、配布元のホストを調べ、許可リストに無ければ足す前に確認する。 更新のたびに調べ直し、インストールのときの同意は引き継がない。
  • MCP サーバーのテンプレートも、必要なホストを同じボタンとともに出す。

エージェントと MCP サーバー

ACP エージェント、MCP サーバー、エージェントをインストールする npm には、HTTP_PROXY と HTTPS_PROXY で loopback のプロキシを渡す (NO_PROXY は loopback)。このプロキシが通すのは allowed_hosts のホストと loopback だけで、組み込みの許可は使わない。プロキシの設定があれば、その先へ転送する。

  • "proxy_child_processes": false か、設定ページの AI エージェントの子プロセスにプロキシを適用 で 切れる。変更は、その後に起動する子プロセスから効く。
  • プロキシは、プログラムがプロキシの環境変数を読むことに頼る。読まないプログラムは制限できない。
  • エージェントの env の設定でプロキシの変数を指定しているときは、何も注入しない。

SSH のリモート

許可リストは手元の PC のものだけで、接続時と変更のたびにリモートのサーバーへ送る。リモートで動く ACP エージェントと MCP サーバーには、リモートのサーバーが自分の loopback のプロキシを立てる (Windows のリモートを除く)。

remote.relay_http_through_client (既定でオン) では、リモートのダウンロードを手元の PC 経由で行う。 インターネットに出られないリモートでも言語サーバーを取ってこられる。

エージェントのサンドボックス

サンドボックスの中のコマンドが届く範囲は、サンドボックス自身の許可を許可リスト (と loopback) で 絞ったもの。サンドボックスは許可リストを狭めることはできるが、広げることはできない。WSL と SSH の リモートでも同じ。変更は次のコマンドから効く。

内蔵ブラウザー

内蔵ブラウザーのパネルは、ターミナルと同じく人が操作するものとして、既定では制限しない。 browser.use_egress_proxy (内蔵ブラウザーを許可リストの対象にする) をオンにすると許可リストを通す。 ブラウザーを次に起動したときから効く。

テレメトリ、コラボレーション、更新

  • このビルドは Zed 社へテレメトリもクラッシュレポートも送らず、設定にも出ない。
  • コラボレーション (通話と画面共有) は ForgeKairos に組み込んでいない。
  • auto_install_extensions は空で、起動時に何もダウンロードしない。
  • auto_update はオフ。更新の確認は ForgeKairos の GitHub Releases だけに問い合わせる (インストールと更新 を参照)。
  • 編集予測はオフ (edit_predictions.provider は "none")。