エージェントツールのガバナンス
- プラン: Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
この機能はベータ版です。予告なく変更される場合があります。詳細については、GitLabテスト規約を参照してください。
ツールガバナンスは実行時の境界で機能します。エージェントによるプロジェクトへのアクセスが許可された後、ツールが実行される前に、ガバナンスレイヤーが、ユーザーのロールとツールのアクションカテゴリに設定されたルールを参照し、その結果として決定されたモードを適用します。
バックグラウンドフローに対する強制は、機能フラグによって制御されます。詳細については、履歴を参照してください。
ツールは、次の3つのアクションカテゴリに分類されます:
- 読み取り: 情報の取得または表示のみを行うツール。
- 書き込み: リソースを作成または変更するツール。
- 削除: リソースを削除するか、元に戻せない形で除去するツール。
エージェントツールのガバナンス(ヒューマンインザループのガードレール)を使用すると、管理者は、各エージェントツールが実行時にどのように適用されるかを定義できます。エージェントがレビューなしで任意のツールを呼び出すことを許可する代わりに、各ツールを次の3つのモードのいずれかに設定できます:
- 常に許可: ユーザーにプロンプトが表示されることなく、ツールがサイレントに実行されます。
- 常に確認: ユーザーにインラインの承認カードが表示されます。アクションを続行するには、ユーザーが承認または拒否する必要があります。
- 常に拒否: ツールは完全にブロックされ、エージェントには表示されません。エージェントがそのツールを認識することはなく、ユーザーにプロンプトが表示されることもありません。
この機能はAgentic ChatおよびIDE拡張機能に適用されます。フローの場合、ガバナンスの強制はフローが実行される場所によって異なります:
- IDE拡張機能で実行されるフローの場合、GitLabはガバナンスルールを強制します。
- Duo Developerの基本フローのようなバックグラウンドフローの場合、GitLabはガバナンスルールを強制します。
デフォルトのガバナンスマトリックス
| 分類 | モード |
|---|---|
| 読み取り(GitLabリソース) | 常に許可 |
| 読み取り(ローカルファイル) | 常に確認 |
| 書き込み | 常に確認 |
| 削除 | 常に確認 |
GitLab MCPサーバーツール
この機能の利用可否は、機能フラグによって制御されます。詳細については、履歴を参照してください。
GitLab MCPサーバーによって公開されるツールは、GitLab Duo Agent Platformツールと並んで、mcpをソースとしてツール管理タブに表示されます。グループのツールガバナンスを設定するで説明されているのと同じ方法で、モードを設定します。
各ツールは、宣言されたアノテーションに基づいてアクションカテゴリに分類されます。更新すべき管理されたリストはないため、新しく追加されたMCPツールは自動的にガバナンスされます:
| ツール宣言 | カテゴリ |
|---|---|
destructiveHint: true | 削除 |
readOnlyHint: true | 読み取り |
readOnlyHint: false | 書き込み |
| どちらのアノテーションもなし | 削除 |
destructiveHint: trueとreadOnlyHint: trueの両方を宣言するツールは、削除として分類されます。カテゴリは表示されている順序で解決されるため、最も制限の厳しい宣言が優先されます。タブ上のツールは、GitLabエディション、ライセンス、および有効な機能によっても異なります。これらがMCPサーバーが公開するツールを決定するためです。
多くの機能は、GitLab Duo Agent PlatformツールとMCPサーバーツールの両方として存在します。2つのツールが異なる名前を持っていても、1つのモードが両方を管理します。例えば、create_merge_requestのモードを設定すると、MCPサーバーツールであるsave_merge_requestにも適用されます。GitLab Duo Agent Platformツールでモードを設定します。MCPサーバーツールを個別に検索して設定する必要はありません。
モードを設定しない場合、動作は変更されません。読み取り専用のMCPツールは事前に承認されたままです。書き込みおよび削除のMCPツールは、引き続き承認を求めます。
承認プロンプト(常に確認)
エージェントが常に確認に設定されたツールを呼び出すと、実行が一時停止し、インラインの承認カードが表示されます。カードには次の情報が表示されます:
- 実行されるツールの名前。
- ツールが実行するアクションの説明。
- 承認ボタンと拒否ボタン。
承認すると、ツールが実行され、エージェントが処理を続行します。拒否すると、ツールは実行されません。エージェントは拒否シグナルを受け取り、別の方法を試すか、処理を停止する場合があります。
拒否メッセージ(常に拒否)
エージェントが、ユーザーのロールに対して常に拒否に設定されているツールを呼び出そうとしても、そのツールはエージェントに提示されません。拒否されたツールがエージェントの計画に必要な場合、ガバナンスポリシーによってそのツールを使用できないことを示すエラーをエージェントが受け取ります。
ルールの解決とカスケード
ルールは、次のように具体性が高いものから低いものの順に解決されます:
- プロジェクトレベルのルール(設定されている場合)。
- グループレベルのルール(設定されている場合)。
- デフォルトのマトリックス値。
同じツールについて、プロジェクトレベルのルールはグループレベルのルールより優先されます。ただし、プロジェクトレベルのルールには、グループレベルのルールと同等か、それより厳しいルールのみを設定できます。グループレベルのルールはデフォルト設定より優先されます。いずれのレベルでもルールが設定されていない場合、ツールはデフォルトのガバナンスマトリックス値を使用します。
フェイルクローズの原則が適用されます。ルールを解決する際にガバナンスサービスで永続的なエラーが発生した場合、サイレントに実行を許可するのではなく、エージェントにはツールが一切提供されません。
グループのツールガバナンスを設定する
グループレベルのルールは、プロジェクトレベルでオーバーライドされていない限り、グループ内のすべてのプロジェクトに適用されます。
前提条件:
- トップレベルグループのオーナーロールを持っていること。
グループのツールガバナンスルールを設定するには:
- 上部のバーで検索または移動先を選択して、トップレベルグループを見つけます。
- 設定 > GitLab Duoを選択します。
- ガバナンスを変更を選択します。
- 各ツールについて、モードドロップダウンリストから、次のいずれかのモードを選択します: 常に許可、常に確認、常に拒否。
- 変更を保存を選択します。
変更は、プロジェクトレベルでオーバーライドされていないすべてのサブグループとプロジェクトに適用されます。
プロジェクトのツールガバナンスを設定する
プロジェクトレベルのルールは、そのプロジェクト内の同じツールに対するグループレベルのルールをオーバーライドします。
前提条件:
- プロジェクトのメンテナーまたはオーナーロールが必要です。
プロジェクトのツールガバナンスルールを設定するには:
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 左側のサイドバーで、設定 > GitLab Duoを選択します。
- ガバナンスを変更を選択します。
- 各ツールについて、ドロップダウンから次のいずれかのモードを選択します: 常に許可、常に確認、常に拒否。
- 変更を保存を選択します。
Model Context Protocol(MCP)サーバーのブロック
この機能はベータ版です。予告なく変更される場合があります。詳細については、GitLabテスト規約を参照してください。
ツールごとのガバナンスに加えて、グループのオーナーは特定の外部MCPサーバーからのすべてのツールをブロックできます。MCPサーバーがブロックされると、個々のツールガバナンス設定やユーザー承認に関わらず、そのサーバーからのツールは実行できません。
MCPサーバーのブロックの強制は、機能フラグによって制御されます。詳細については、履歴を参照してください。
インスタンスで強制が有効になっていない場合でも、MCPレジストリではサーバーがブロックされていると表示されます。ブロック自体は有効にならないため、サーバーのツールはGitLab Duo Agentic Chatで引き続き利用可能です。
ブロックは、チャットセッションのツールが組み立てられるときに適用されます。これは、ユーザーメッセージ、ツール承認、および新しいセッションごとに発生します。実際には、ブロックはユーザーの次のアクションで有効になります。ブロックが適用されたときに承認待ちのツール呼び出しは実行されず、次のメッセージ以降、ブロックされたサーバーのツールはエージェントに一切提供されません。すでに実行中のツール呼び出しは完了します。
ツールは拒否されるのではなく、サイレントに削除されるため、エージェントはポリシーメッセージを受け取りません。エージェントは欠落しているツールを自身の言葉で記述し、サーバーが再度許可された後でも、既存の会話中のエージェントは以前の会話に基づいてサーバーがブロックされていると主張する場合があります。新しい会話を開始するか、エージェントにツールの再試行を依頼してください。
ブロックはUI内のGitLab Duo Agentic Chatに適用されます。IDEおよびCLIクライアントは、ローカル設定ファイルを通じてMCPサーバーを設定します。この設定では制御されません。
これは常に拒否ツールガバナンスモードとは異なります:
- 常に拒否は個々のツールに適用され、プロジェクトまたはグループごとに設定されます。
- MCPサーバーのブロックは、そのサーバーからのすべてのツールに適用され、MCPレジストリで設定されます。これは、ユーザー承認またはツールガバナンスのいかなる設定も上書きします。
MCPサーバーをブロックする
MCPサーバーはグループレベルまたはプロジェクトレベルでブロックできます:
- グループレベル: グループ内のすべてのプロジェクトとそのサブグループに対してサーバーをブロックします。サーバーがグループレベルでブロックされている場合、プロジェクトレベルの設定でブロックを解除することはできません。
- プロジェクトレベル: そのプロジェクトに対してのみサーバーをブロックします。
グループのMCPサーバーをブロックする
前提条件:
- トップレベルグループのオーナーロールを持っていること。
グループのMCPサーバーをブロックするには:
- 上部のバーで検索または移動先を選択して、トップレベルグループを見つけます。
- 左側のサイドバーで、設定 > GitLab Duoを選択します。
- ガバナンスを変更を選択します。
- MCPレジストリタブを選択します。
- ブロックしたいMCPサーバーを見つけて、ブロックを選択します。
ブロックは、各ユーザーの次のメッセージまたは新しいチャットセッションから適用されます。ブロックされたサーバーからのツールは、グループとそのサブグループおよびプロジェクトのすべてのユーザーに対して削除されます。
プロジェクトのMCPサーバーをブロックする
前提条件:
- プロジェクトのオーナーロールを持っている必要があります。
プロジェクトのMCPサーバーをブロックするには:
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 左側のサイドバーで、設定 > 一般 > GitLab Duoを選択します。
- ガバナンスを変更を選択します。
- MCPレジストリタブを選択します。
- ブロックしたいMCPサーバーを見つけて、ブロックを選択します。
ブロックは、各ユーザーの次のメッセージまたは新しいチャットセッションから適用されます。ブロックされたサーバーからのツールは、プロジェクト内のすべてのユーザーに対して削除されます。同じサーバーが祖先グループでもブロックされている場合、グループのブロックが解除されるまで、プロジェクトでそれを許可しても効果はありません。MCPレジストリには、これらのサーバーが祖先によってブロックされていると表示されます。
既知の問題
- ガバナンスUIには3つのアクセスカテゴリがあります: Web(ブラウザベースのセッション)、ローカル(IDEおよびCLI)、およびRunner(CI/CD Runnerで実行されるバックグラウンドフロー)。Runnerアクセスは「常に許可」と「常に拒否」のみをサポートします。バックグラウンドフローでは、承認プロンプトに応答するユーザーがいないため、「常に尋ねる」は適用されません。Runnerルールが設定されていないツールは、デフォルトで「常に許可」になります。
- GitLab MCPサーバーによって提供される
searchツールは、GitLab Duo Agent Platformが個別の、より狭い検索ツールとして公開するものを集約します。これらのより狭いツールに設定されたルールはsearchには適用されません。MCP検索を制限するには、searchに直接ルールを設定します。