1.settings.jsonでのツール除外設定
設定ファイルに tools.exclude を設定することで、指定ツールを使用不可状態にできました。

また、Command restrictions に記載のある run_shell_command(command) を使用すれば、run_shell_command ツールでの指定コマンドの実行もブロックできました。
以下は設定イメージです。
"tools": {
"exclude": ["replace", "run_shell_command(rm)" ]
},
この tools.exclude ですが、Gemini CLI のドキュメントより非推奨とする旨が記載されています。
Policy engine の Decisions より、tools.exclude はレガシー扱いで非推奨とのことです。

Command restrictions より、特定のコマンドをブロックするには Policy engine の使用を促しています。

設定ファイルに tools.exclude を設定し、Gemini CLI を起動すると以下のメッセージが表示されることからも、この設定の使用は避けるべきです。

内容としては、tools.exclude は非推奨であり、バージョン 1.0 のリリースで Policy engine に統合予定とのことです。
⚠ Warning: tools.exclude in settings.json is deprecated and will be removed in 1.0. Migrate to Policy Engine: https://geminicli.com/docs/core/policy-engine/
2.Policy engineでの設定
Policy engine を使ったツール除外設定をやってみます。
Gemini CLI 等の利用バージョンは以下です。
- macOS:Tahoe 26.3.1
- Node.js のバージョン(
node --version):24.11.1 - Gemini CLI のバージョン(
gemini --version):0.34.0
では、~/.gemini/policies/ 配下に .toml ファイルを配置し、ルールを定義します。
ルール作成のシナリオは、
- Terraform のデプロイ実行は GitHub Actions 経由で行うため、AI によるローカルからの直接実行は禁止する。
- デプロイワークフローは管理者のみが変更できるファイルなので、AI によるローカルでの編集は禁止する。
とします。
ディレクトリ構成は以下です。
project/
├── .github/
│ └── workflows/
│ ├── deploy.yml # Terraformデプロイワークフローを定義
│ └── ci.yml
├── envs/
│ └── dev/
│ ├── README.md
│ ├── main.tf
│ ├── variables.tf
│ ├── provider.tf
│ ├── outputs.tf
│ └── terraform.tfvars
└── modules/
└── vpc/
├── main.tf
├── variables.tf
└── outputs.tf
.toml ファイルの中身は以下とします。
# GitHub Actionsのワークフローファイルへの書き込みを制限 [[rule]] toolName = ["write_file", "replace"] argsPattern = '\.github/workflows/.*\.yml' decision = "deny" deny_message = "このファイルへの書き込みはポリシーにより制限されています。" priority = 900 # run_shell_commandによるワークフローファイルへの編集系コマンドを制限 [[rule]] toolName = "run_shell_command" commandRegex = '(sed|awk|perl|python|echo|printf|cp|mv|tee).*\.github/workflows/.*\.yml' decision = "deny" deny_message = "このコマンドはポリシーにより制限されています。" priority = 900 # run_shell_commandによるapplyとdestroyコマンドを制限 [[rule]] toolName = "run_shell_command" commandPrefix = ["terraform apply", "terraform destroy"] decision = "deny" deny_message = "このコマンドはポリシーにより制限されています。" priority = 900
.github/workflows/ 配下の yml ファイルの編集を制限しています。
replace ツールのような編集系ツールでなく、run_shell_command 経由での編集系コマンドの実行も制限します。
run_shell_command 経由での terraform apply と terraform destroy についても制限しています。
Gemini CLI を起動し、以下をユーザープロンプトに入力、.github/workflows/ 配下の yml ファイルの編集がブロックされるか見てみます。
> .github/workflows/deploy.ymlのTerraformのバージョンを1.10.0に更新して

deploy.yml を編集しようとしましたが、ポリシーによって拒否されました。
コマンド指定の場合も拒否されることを確認しておきます。
> sed コマンドで.github/workflows/deploy.ymlのTerraformのバージョンを1.10.0に書き換えて

こちらもポリシーによって拒否されました。
最後に terraform apply の実行を入力しても拒否されるか見てみます。
> terraform applyを実行して

こちらについてもポリシーによって制限がかかり、実行拒否されることが確認できました。
3.まとめ
settings.json の tools.exclude を使ったツール除外設定およびコマンド制限は、本ブログ執筆時点ですでに非推奨となっています。
実際に tools.exclude を設定した状態で Gemini CLI を起動すると、非推奨の警告とともに、バージョン1.0のリリースで Policy engine に統合予定とのメッセージが表示されました。
ツールの除外やコマンドの実行制限は、Policy engine で設定するのが現在の推奨となります。