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 で設定するのが現在の推奨となります。