AI

English

Zed と共通の AI の機能 (エージェントパネル、インラインアシスタント、プロバイダー) は Zed の AI の文書 を見る。この章は ForgeKairos が変えた点と足した点を書く。 制限の全体の図は AI と通信の制限の全体図 を見る。

既定でオフ

AI の機能はすべて、有効にするまでオフである。設定 → AI の先頭の エージェントを有効にする (設定 agent.enabled、既定 false) で有効にする。変更は再起動なしで効き、同じ場所で戻せる。

AI を切るのに disable_ai を使わない。一方向の切り替えで、戻せない。

  • 既定のモデルは設定していない。エージェントを有効にすると、認証済みの最初のプロバイダーを使う。 このため、動いているローカルの Ollama や LM Studio は設定なしで選ばれる。
  • 編集予測はオフ (edit_predictions.provider は "none")。
  • エージェントパネルは起動時に開かない (agent.starts_open は false)。

ローカル LLM

Ollama (localhost:11434)、LM Studio (localhost:1234)、llama.cpp (localhost:8080) は loopback で動き、 loopback は許可リストが常に許可する。同意も許可リストへの追加も要らない。OpenAI 互換と Anthropic 互換の サーバーは、カスタムのプロバイダーとして足せる。

自分で足したプロバイダーは、設定 → AI → LLM プロバイダー で、その見出しの鉛筆 (編集) とゴミ箱 (削除) の ボタンから後で変えられる。

  • 編集では API キーの欄は空で始まり、空のままなら保存済みのキーを使う。API URL を変えるとキーを入れ直させ (保存済みのキーを別の URL へ送らない)、古い URL 用に保存したキーをシステムのキーチェーンから消す。 API キーなしで接続する をオンにして保存しても、保存済みのキーを消す。どちらも、同じ URL を使うほかの プロバイダーがあればキーを残す。ホストが変わると同意をやり直させる。
  • 名前を変えると、エージェントの設定でそのプロバイダーを指す箇所と同意を新しい名前に移す。保存済みの スレッドは古い名前のまま。
  • 削除は確認してから行い、消えるもの (設定の項目、保存済みの API キー (同じ URL をほかのプロバイダーが使うなら 残す)、同意と許可リストのホスト、そのプロバイダーを指すモデルの選択) を示す。プロバイダー自身の画面の プロバイダーを削除 も同じ。
  • リリースチャンネル・OS・プロファイルの上書きで定義したプロバイダーは、ここでは編集できないと示す。

クラウドのプロバイダー

外部の AI プロバイダーを使う前に、入力と会話がプロバイダーに送られ、保存や学習に使われうるという警告を 出す。確認のチェックを入れるとそのプロバイダーが有効になる。それまでは何も送らない。

  • 警告には、そのプロバイダーに必要なホストと 許可リストに追加 のボタンを出す (外部通信の統制 を参照)。
  • 承諾したプロバイダーは acknowledged_external_ai_providers に記録する。項目を消すと警告が戻る。 承諾を取り消すと、ほかの承諾済みのプロバイダーが使わないホストを許可リストから外すか尋ねる。
  • プロジェクトの設定では承諾できない。
  • Copilot と Zed のホスト型の編集予測にも同じ承諾が要る。

Claude のサブスクリプション

内蔵の Anthropic プロバイダーは API キーだけを使う。Claude Pro / Max のサブスクリプションは Claude Code で使う。

  • Claude Code を起動 は、公式の改変していない Claude Code CLI を開く。エージェントが有効ならエージェント パネルのタブに、そうでなければターミナルパネルに開く。サインインは CLI の中で Anthropic 自身の手順で 行い、ForgeKairos は URL もトークンも扱わない。
  • ACP の Claude エージェントは、それ自身の /login でサブスクリプションのサインインができる。API キーでも 使え、両方あれば API キーを優先する。サブスクリプションのサインインを隠すには agent_servers.<id>.allow_subscription_sign_in を false にする。
  • 内蔵のエージェントと、後述の権限の判定にはサブスクリプションを使わない。

Claude Code 向けの IDE サーバー

ide_server.enabled (IDE サーバーを有効にする、既定でオフ) をオンにすると、ForgeKairos は Claude Code CLI が繋いでくる loopback のサーバーを 127.0.0.1 で動かす。外部へは接続しない。動いている間、ローカルの プロジェクトごとに ~/.claude/ide/<port>.lock を書く。

これを通して CLI は次のことができる。

  • ForgeKairos のタブで差分を開き、承認・却下する (書き込みは CLI が行う)
  • 診断、開いているエディター、選択範囲、ワークスペースのフォルダーを読む
  • ファイルを開く、保存する
  • 最後に失敗したタスクの出力の末尾を読む (ide_server.share_task_output)

ide_server.assist_tools (エージェントに IDE ツールを渡す、既定でオン) では、エージェントに MCP サーバー zed を渡す。ツールは highlightCode、annotateCode、startCodeTour、clearAnnotations、getHover、 getDocumentSymbols、searchSymbols、findDefinition、findReferences、getCallHierarchy、 getTypeLayout。注釈は保存せず、Esc で消える。シンボル検索はモデルも埋め込みも使わない。

内蔵のエージェントには、対応するツール hover、search_symbols、call_hierarchy、type_layout、 highlight_code、annotate_code、code_tour、clear_annotations がある。

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

エージェントが実行するコマンドは常にサンドボックスの中で動く。エージェントはサンドボックスの外での実行を 求められない。サンドボックスを作れないときは、再試行か取り消しを選ぶ。

  • Windows は ForgeKairos の WSL の補助、Linux は bubblewrap、macOS は Seatbelt を使う。
  • ~/.ssh、.npmrc、クラウドの CLI の設定、ブラウザーのプロファイル、ForgeKairos 自身のデータなどの 資格情報は、サンドボックスの中から読めない。
  • 外部の ACP エージェントもサンドボックスの中で動く (Windows では WSL の中)。
  • リポジトリのメタデータを書く Git の操作 (コミットなど) はユーザーが行う。
  • サンドボックスのネットワークは許可リストで制限する。
  • サンドボックスを切る手段は agent.sandbox_permissions.allow_unsandboxed (既定 false) だけ。切っている 間は、すべてのコマンドで確認する。

サンドボックスの外で起動する

Claude Code や ACP エージェントを、ユーザーが自分でサンドボックスの外で起動できる。

  • エージェントパネルの + メニューの Claude Code をサンドボックスの外で起動…
  • 起動に失敗したときの通知や ACP の失敗のカードのボタン
  • パネルの ⋯ メニューからの起動し直し
  • agent.claude_code_run_outside_sandbox と agent_servers.<id>.run_outside_sandbox (どちらも既定 false、 ユーザー設定のファイルからだけ読む)

外で動いている間は常にバナーを出し、タブの名前にもそれを示す (例:「Claude Code (サンドボックスの外)」)。 サインインはふだんの ~/.claude のものを使う。ACP のスレッドの同意はスレッドごとに残り、AI のページの サンドボックスの外での起動の同意 で取り消せる。

ツールの権限

agent.tool_permissions.default は "confirm" (既定)、"allow"、"deny"、"auto" のどれか。 エージェントパネルのメニューには 確認する、AI が判定 (安全なら自動実行)、全自動 (サンドボックス内) がある。

  • "auto" は、操作ごとに別のモデル (agent.permission_judge_model、無ければ高速モデル、次に既定のモデル) に 10 秒の上限で尋ねる。答えが SAFE のときだけ確認なしで実行する。コマンドとパスがそのモデルの プロバイダーに送られるので、ローカルのモデルを勧める。
  • 次のものは、どのモードでも確認する: 組み込みの安全の規則と always_confirm の規則、サンドボックスの外の コマンド、サンドボックスの権限の昇格、.zed・グローバルの設定・スキル・シンボリックリンクへの書き込み、 プロジェクトの外のファイル操作。

プロファイルは 書き込み (既定)、質問、編集のみ、最小。編集のみはファイルを読み、編集するが、 ターミナル、fetch、削除、MCP のツールを持たない。

エージェントが書き込んだ後のプロジェクトのコードの停止

agent.pause_worktree_code_after_agent_writes をオンにすると、エージェントがプロジェクトのフォルダーに書き込んだ後、 そのフォルダー自身のコード (フォーマッター、ESLint、Python のインタープリター、rust-analyzer のビルドスクリプト) は、 変更を確認して 再開 を押すまで動かない。既定はオフで、オンにできるのはユーザー設定のファイルだけ。 止めているフォルダーがある間は、ステータスバーに件数が出る。押すと確認と再開の画面が開く。

MCP サーバー

設定 → AI → MCP サーバー で、各サーバーの状態の表示、接続の確認、追加ができる。ここで足したサーバーは ユーザー設定に入る。追加の画面には同梱のテンプレート (filesystem、github、playwright、fetch、memory) があり、必要なホストを出す。

プロジェクトの .zed/settings.json が定義する MCP サーバー、言語サーバー、外部のフォーマッターは、その中身を 承認するまで起動しない。中身が変わればまた確認する。承認の一覧は 設定 → 全般 → セキュリティ にあり、 取り消せる。session.trust_all_worktrees でも承認されない。

エージェントに見せないファイル

private_files (既定では .env*、*.pem、*.key、*.cert、*.crt、secrets.yml) や file_scan_exclusions に一致するファイル、プロジェクトの外のファイル、外を指すシンボリックリンクは、 エージェントのツールと添付から隠す。こうしたファイルについて、定義と参照は場所 (パスと行) だけを返し、 中身は返さない。同じパスの別の綴り (大文字・小文字、Windows の短い名前、Unicode の正規化) も同じに扱う。

定義・参照・呼び出し階層の 1 回の応答が新しく開くファイルは、1000 個・合計 64 MiB までにする。

添付

大きな添付は、agent.context_attachments の上限 (設定の一覧 を参照) の中で、アウトラインと 続きの読み方の案内にして送る。添付のチップには大きさの見積もりを出し、右クリックで 自動・全文・要約 を 選べる。ブランチの差分は要約して送り、全文はエージェントが git_diff ツールで読める。

モデルの選択

お気に入りのモデル (agent.favorite_models) があるときは、ほかのプロバイダーの群を件数付きの見出しに 畳み、使っているモデルの群は開いたままにする。検索は群の名前にも一致する。最下段の エージェント の節 から、Claude Code の起動や、ほかのエージェントでのスレッドの開始ができる。

信頼していないフォルダー

信頼していないフォルダーでは、エージェントのプロファイルを「最小」(ツールなし) に下げる。入力欄の上に 理由を出し、モデルにもツールが無い理由を伝える。フォルダーを信頼すると、すぐにツールが戻る。