Subagents
概要
メインの Gemini CLI セッションの中で動く特化エージェント。深いコードベース解析、ドキュメント参照、ドメイン固有の推論などを、メインエージェントのコンテキストやツールセットを汚さずに扱う。subagent は同名のツールとしてメインエージェントに公開され、呼び出されるとタスクを委譲し、完了後に結果を報告する。
仕様
特徴
- focused context: それぞれが独自のシステムプロンプトとペルソナを持つ
- specialized tools: 制限された、あるいは特化したツールセットを持てる
- 独立したコンテキストウィンドウ: 別のコンテキストループで動くため、メインの会話履歴のトークンを節約する
呼び出し方
- 自動委譲: メインエージェントは、タスクが専門に一致するとき subagent を使うよう指示されている
@構文で強制: プロンプトの先頭に@<subagent 名>を書く。CLI はそのツールを即座に使うようプライマリモデルを促す system note を注入する
組み込み subagent
| 名前 | 目的 | 既定 |
|---|---|---|
codebase_investigator | コードベースの解析、リバースエンジニアリング、複雑な依存関係の把握 | 有効 |
cli_help | Gemini CLI 自体・コマンド・設定・ドキュメントに関する知識 | 有効 |
generalist | メインエージェントから継承したツールと設定を使う汎用 subagent。多段・大量情報・調査と実行を両方要するタスク向け | 有効 |
browser_agent | アクセシビリティツリーを使ったブラウザ操作の自動化 | 既定で無効 |
codebase_investigatorなどの設定はsettings.jsonのagents.overridesで上書きできる
browser_agent
既定で無効。 settings.json の agents.overrides.browser_agent.enabled を true にする。
- 前提: Chrome 144 以降(最近の stable リリースであればよい)
- 基盤の
chrome-devtools-mcpサーバーは Gemini CLI にバンドルされ自動起動されるため、別途インストールは不要 - 初回起動時に同意ダイアログが出る。承認するまでブラウザセッションは始まらない。このダイアログは 1 回だけ出る
session mode(agents.browser.sessionMode):
| モード | 内容 |
|---|---|
persistent | 既定。~/.gemini/cli-browser-profile/ の永続プロファイルで Chrome を起動する。Cookie・履歴・設定がセッション間で保持される |
isolated | セッションごとに削除される一時プロファイルで起動する |
existing | 既に動いている Chrome にアタッチする。先に Chrome の chrome://inspect/#remote-debugging でリモートデバッグを有効にする必要がある。新しいブラウザプロセスは起動しない |
agents.browser の設定:
| 設定 | 型 | 既定 | 説明 |
|---|---|---|---|
sessionMode | string | "persistent" | Chrome の管理方法 |
headless | boolean | false | ヘッドレスで動かす |
profilePath | string | — | ブラウザプロファイルディレクトリのカスタムパス |
visualModel | string | — | visual agent 用のモデル上書き |
allowedDomains | string[] | — | ナビゲーションを特定ドメインに制限する |
disableUserInput | boolean | true | 自動操作中にブラウザウィンドウのユーザー入力を無効にする(非ヘッドレスのみ) |
maxActionsPerTask | number | 100 | タスクあたりのツール呼び出しの上限。到達するとエージェントは終了させられる |
confirmSensitiveActions | boolean | false | upload_file と evaluate_script に手動確認を要求する |
blockFileUploads | boolean | false | すべてのファイルアップロード要求を hard-block する |
セキュリティ:
- ドメイン制限:
allowedDomainsを設定すると、列挙したドメイン(*.接頭辞ならそのサブドメインも)にしか遷移できない。許可外ドメインへのアクセスは fatal error になりエージェントを即座に終了させる。許可ドメインをプロキシとして使う試み(クエリパラメータやフラグメント経由)も検出・ブロックしようとする - ブロックされる URL スキーム: 基盤の MCP サーバーが
file://、javascript:、data:text/html、chrome://extensions、chrome://settings/passwordsをブロックする - フォーム入力(
fill、fill_form)は、approval mode に関わらず常に policy engine 経由でユーザー確認を要求する confirmSensitiveActionsがtrueのときはupload_fileとevaluate_scriptも確認が要る
visual agent:
- 既定ではアクセシビリティツリーの
uidを使って操作する visualModelを設定するとanalyze_screenshotツールが使え、スクリーンショットを vision モデルに送って座標と要素の説明を得て、click_atで座標ベースの操作をする- visual agent は API キーまたは Vertex AI の認証が必要で、「Sign in with Google」では利用できない
sandbox 内での挙動:
- macOS seatbelt(
sandbox-exec)配下では、persistentとisolatedはheadless有効のisolatedに強制される(永続プロファイルに対する seatbelt のファイルシステム制限による権限エラーを避けるため)。sessionModeがexistingのときは上書きされない - コンテナ sandbox(Docker / Podman)ではコンテナ内に Chrome が無いため、
sessionModeが"existing"でない限り browser agent は無効になる。existingのときはhost.docker.internal:9222の解決済み IP 経由でホストの Chrome に接続する。ポート9222はハードコードされており変更できない
custom subagent
YAML frontmatter を持つ Markdown ファイル(.md)として定義する。本文がシステムプロンプトになる。
配置場所:
- project レベル:
.gemini/agents/*.md(チームと共有) - user レベル:
~/.gemini/agents/*.md(個人用)
frontmatter:
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
name | string | はい | エージェントのツール名になる一意な slug。小文字・数字・ハイフン・アンダースコアのみ |
description | string | はい | 何をするエージェントかの短い説明。メインエージェントがこの subagent を呼ぶか判断するのに使う |
kind | string | いいえ | local(既定)または remote |
tools | array | いいえ | 使えるツール名の一覧。ワイルドカード対応。省略すると親セッションのすべてのツールを継承する |
mcpServers | object | いいえ | この agent 専用にインラインで定義する MCP サーバー |
model | string | いいえ | 使うモデル。既定は inherit(メインセッションのモデル) |
temperature | number | いいえ | 0.0–2.0。既定 1 |
max_turns | number | いいえ | 返答するまでに許される会話ターン数の上限。既定 30 |
timeout_mins | number | いいえ | 最大実行時間(分)。既定 10 |
ツールのワイルドカード:
*: 利用可能なすべての組み込み・発見済みツールmcp_*: 接続中のすべての MCP サーバーのツールmcp_my-server_*: 特定の MCP サーバーのすべてのツール
隔離と再帰防止
- 独立した履歴: subagent の会話履歴はメインエージェントのコンテキストを膨らませない
- 隔離されたツール: 明示的に付与したツールにしかアクセスできない
- 再帰防止: subagent は他の subagent を呼べない。
*のワイルドカードを与えても、他の agent を見ることも呼ぶこともできない
subagent ごとのポリシー
- Policy Engine の TOML で、
[[rules]]ブロックにsubagentプロパティを足すと、そのルールを特定の subagent に限定できる subagentプロパティの無いルールはすべての agent に普遍的に適用される- subagent はポリシー照合上、仮想的なツール名として扱われるため、
toolNameに subagent 名を書いてアクセス自体を拒否することもできる - 注意: 出典内で TOML ポリシーのスキーマ表記が食い違っている。 この節の出典(subagents ページ)は
[[rules]](複数形)とaction = "allow"を使うが、Policy Engine のリファレンスは[[rule]](単数)とdecision = "allow" | "deny" | "ask_user"を documented schema としている(facts/gemini-cli/policy-engine.md)。下の 設定 の TOML 例は subagents ページからの逐語転記であり、どちらの綴りが実装上正しいかは出典からは判断できないため、実機で確認すること
管理
- 対話セッションでは
/agentsコマンドで有効化・無効化・再設定ができる(推奨) settings.jsonのagents.overridesで、特定 agent の有効・無効や run 設定(maxTurns、maxTimeMinutes)を恒久的に上書きするmodelConfigs.overridesのmatch.overrideScopeに subagent 名を指定すると、その subagent 向けのモデル設定を当てられる
説明文の最適化
メインエージェントは description を見て「関連する専門家か」を判断する。専門領域・使うべき場面・具体例を明示すると呼ばれやすくなる、とされている。
remote subagent と extension subagent
- Agent-to-Agent(A2A)プロトコルでリモートの subagent に委譲できる(詳細は Remote Subagents のドキュメント)
- extension は subagent をバンドルして配布できる
無効化
- subagent は既定で有効。
settings.jsonのexperimental.enableAgentsをfalseにすると無効になる
設定
---
name: security-auditor
description: Specialized in finding security vulnerabilities in code.
kind: local
tools:
- read_file
- grep_search
model: gemini-3-flash-preview
temperature: 0.2
max_turns: 10
---
You are a ruthless Security Auditor.
{
"agents": {
"overrides": {
"browser_agent": { "enabled": true }
},
"browser": {
"sessionMode": "existing",
"allowedDomains": ["example.com"]
}
}
}
{
"agents": {
"overrides": {
"security-auditor": {
"enabled": false,
"runConfig": { "maxTurns": 20, "maxTimeMinutes": 10 }
}
}
}
}
[[rules]]
name = "Allow pr-creator to push code"
subagent = "pr-creator"
action = "allow"
toolName = "run_shell_command"
commandPrefix = "git push"
{
"experimental": { "enableAgents": false }
}
関連
facts/gemini-cli/configuration.mdfacts/gemini-cli/policy-engine.mdfacts/gemini-cli/mcp-server.mdfacts/gemini-cli/extensions.mdfacts/gemini-cli/model.mdfacts/gemini-cli/commands.mdfacts/gemini-cli/sandbox.md