Skip to content

Gemini CLIでツールの事前確認を制御する方法

Claude Codeと同じように、Gemini CLIでもツールの実行確認を制御できる。

具体的には、.gemini/settings.json 等に以下の設定を追加する。

{
"tools": {
"allowed": ["run_shell_command(go test)"],
"exclude": ["run_shell_command(git push)]
}
}

tools.allowed に書いたツールは事前の確認なく実行が可能になる。tools.exclude は確認されるのではなく、ツールが検出されなくなる。どこにも現れないツールは decision=ask_user に相当するのだろう。tools.core もあるが、tools.allowed との違いが分からない。

ツールは run_shell_commandweb_fetch のような内部ツール名を意味する。内部ツール名は /skills コマンドで調べられる。このとき、さらにコマンド単位または絞り込みを行うために引数を与えることもできる。

run_shell_command // すべてにマッチする
run_shell_command(git status) // git statusだけにマッチする

ドキュメントはとても探しづらいが、ルールはこの辺りに書かれている。

これによると、run_shell_command は前方一致でマッチする。Claude Codeでは任意の引数を許容するとき

---
allowed-tools: Bash(go test:*)
---

のように表記するが、Gemini CLIでは特にワイルドカード等を書かなくてもいい。また、シェルの && 演算子などでコマンドを結合する場合も、分解したそれぞれのコマンドでマッチさせているようだった。

Policy engineのドキュメントによると、こちらでも同様の設定が行えるらしいが試していない。

[[rule]]
toolName = "run_shell_command"
commandPrefix = "git "
decision = "ask_user"
priority = 100