GitLab Duo CLIをカスタマイズする
- プラン: Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
GitLab Duo CLIは次のカスタマイズをサポートしています:
- フックを使用すると、GitLab Duo CLIのライフサイクルにおける特定のタイミングでカスタムコマンドを実行できます。
- カスタムスラッシュコマンドを使用して、CLIをワークフローまたはユースケースにより適応させます。
- プラグインを使用して、Agent Skills、カスタムスラッシュコマンド、およびModel Context Protocol(MCP)サーバーをマーケットプレイスからインストールします。
- GitLab Duo Agent Platformに合わせて設定されたカスタム手順を、ワークフロー、コーディング標準、またはプロジェクト要件に合わせるために使用します。
フック
- ステータス: 実験的機能
フックを使用すると、GitLab Duo CLIのライフサイクルにおける特定のタイミングでカスタムコマンドを実行できます。
たとえば、環境に関する情報を収集するスクリプトを実行して、新しいチャットセッションごとに追加のコンテキストを挿入できます。
GitLab Duo CLIは、次の2つのレベルでフックをサポートしています:
- ユーザーレベル(グローバル): すべてのプロジェクトに適用されます。
- プロジェクトレベル: 特定のプロジェクトにのみ適用されます。チェックアウトされたリポジトリから任意のコードが実行されるのを防ぐため、プロジェクトレベルのフックはデフォルトで無効になっています。
ユーザーレベルとプロジェクトレベルの両方のhooks.jsonファイルが存在する場合、CLIはフックをマージし、ユーザーレベルのフックを先に実行します。
セキュリティ上の理由により、機密性の高い環境変数(GITLAB_TOKEN、GITLAB_OAUTH_TOKEN、CI_JOB_TOKEN)はフックプロセスから除外されます。
フックの実行
フックが実行されると、GitLab Duo CLIは次の処理を行います:
セッションメタデータを含むJSONオブジェクトを、コマンドの標準入力に送信します:
{ "session_id": "abc-123", "cwd": "/path/to/project", "transcript_path": "", "hook_event_name": "SessionStart", "source": "startup" }フックプロセスに対して、環境変数
DUO_SESSION_IDとDUO_PROJECT_DIRを設定します。セッションの追加コンテキストとして、コマンドの標準出力を収集します。
フックは、標準出力にプレーンテキストまたはJSONオブジェクトを返すことができます:
{
"hookSpecificOutput": {
"hookEventName": "SessionStart",
"additionalContext": "Your context string here"
}
}フックがゼロ以外のステータスで終了した場合やタイムアウトした場合、その内容は警告としてログに記録されますが、セッションの開始はブロックされません。
フックを作成する
GitLab Duo CLIはSessionStartイベントをサポートしています。このイベントは、新しいセッションの開始時または既存のセッションの再開時に実行されます。
フックを作成するには:
hooks.jsonファイルを作成します。- ユーザーレベルのフックの場合:
- LinuxまたはmacOSでは、
~/.gitlab/duo/hooks.jsonにファイルを作成します。 - Windowsでは、
%APPDATA%\GitLab\duo\hooks.jsonにファイルを作成します。
- LinuxまたはmacOSでは、
- プロジェクトレベルのフックの場合、プロジェクトのルートに次のファイルを作成します:
<project>/.gitlab/duo/hooks.json
- ユーザーレベルのフックの場合:
ファイル内でフックを定義します。
フックをトリガーする各
SessionStartイベントソース(startupまたはresume)に対して、マッチャーグループを作成します。各マッチャーグループには、オプションの正規表現
matcher値とコマンドフックの配列が含まれます。フィールド 説明 matcherオプション。イベントソース( SessionStartの場合はstartupまたはresume)に対してテストされる正規表現。すべてに一致させる場合は省略します。hooks[].type"command"である必要があります。hooks[].command実行するShellコマンド。 hooks[].timeoutオプション。タイムアウトまでの秒数。デフォルト: 30。 例:
{ "hooks": { "SessionStart": [ { "matcher": "startup", "hooks": [ { "type": "command", "command": "cat ~/.my-coding-preferences.md", "timeout": 10 } ] } ] } }
プロジェクトレベルのフックがある場合は、GitLab Duo CLIを起動するときにフックを有効にします:
glab duo cli --enable-project-hooksduo --enable-project-hooksまたは、環境変数を設定します:
export GITLAB_ENABLE_PROJECT_HOOKS=true
カスタムスラッシュコマンド
頻繁に使用するプロンプト用のカスタムスラッシュコマンドを作成できます。
GitLab Duo CLIは、次の2つのレベルでカスタムスラッシュコマンドをサポートしています:
- ユーザーレベル: すべてのプロジェクトに適用されます。
- プロジェクトレベル: 特定のプロジェクトにのみ適用されます。
ユーザーレベルのコマンドとプロジェクトレベルのコマンドが同じ名前を共有している場合、プロジェクトレベルのコマンドが優先されます。カスタムスラッシュコマンドは、組み込みのスラッシュコマンドやAgent Skillsのスラッシュコマンドをオーバーライドできません。
カスタムスラッシュコマンドを作成する
カスタムスラッシュコマンドを作成するには、Markdownファイルを作成します。
ファイル名がコマンド名となり、ファイルの内容がプロンプトになります。
たとえば、daily.mdという名前のファイルを作成すると、/dailyコマンドが作成されます:
commandsディレクトリを作成します:- プロジェクトレベルのコマンドの場合、プロジェクトのルートにディレクトリを作成します:
<project>/.agents/commands/。 - ユーザーレベルのコマンドの場合、次のいずれかの場所を使用します:
- GitLab Duoの他のカスタマイズファイルとともにコマンドを保存する場合:
- LinuxまたはmacOSでは、
~/.gitlab/duo/commands/にディレクトリを作成します。 - Windowsでは、
%APPDATA%\GitLab\duo\commands\にディレクトリを作成します。 GLAB_CONFIG_DIRまたはXDG_CONFIG_HOMEを設定している場合、$GLAB_CONFIG_DIR/commands/または$XDG_CONFIG_HOME/gitlab/duo/commands/を使用します。両方が設定されている場合、GLAB_CONFIG_DIRが優先されます。
- LinuxまたはmacOSでは、
- 他のAIツールとコマンドを共有する場合:
- LinuxまたはmacOSでは、
~/.agents/commands/にディレクトリを作成します。 - Windowsでは、
%USERPROFILE%\.agents\commands\にディレクトリを作成します。
- LinuxまたはmacOSでは、
- GitLab Duoの他のカスタマイズファイルとともにコマンドを保存する場合:
- プロジェクトレベルのコマンドの場合、プロジェクトのルートにディレクトリを作成します:
そのディレクトリにMarkdownファイルを作成します。ファイル名にはコマンド名を使用します。コマンド名は文字または数字で始める必要があり、使用できるのは文字、数字、ハイフン、アンダースコアのみです。
ファイルにプロンプトを追加します。
オプション。ファイルの先頭にあるYAMLフロントマターに
descriptionフィールドを追加します。説明は、スラッシュコマンドメニューでコマンドの横に表示されます。たとえば、
daily.mdで定義された/dailyコマンドは次のようになります:--- description: Prepare a daily report --- Use `glab todo list` to fetch my open TODO items. Give me a concise morning report ranked by priority.GitLab Duo CLIを再起動します。CLIは起動時にカスタムスラッシュコマンドを検出します。
カスタムスラッシュコマンドを使用する
インタラクティブモードで、プロンプトにスラッシュコマンドを入力し、Enterを押します。GitLab Duo CLIは、ファイルの内容をプロンプトとして送信します。
コマンド名の後に入力したテキストは、プロンプトの末尾に追加されます。
カスタムスラッシュコマンドが実行する内容をカスタマイズするには、追加のテキストを使用します。
例: /daily prioritize my milestone deliverables。
プラグイン
- ステータス: 実験的機能
GitLab Duo CLIに機能を追加するためにプラグインを使用します。
プラグインは、GitLab Duo CLI用の拡張機能をバンドルするディレクトリです。プラグインは、Agent Skills、カスタムスラッシュコマンド、およびMCPサーバーをバンドルできます。
マーケットプレイスは、Gitリポジトリまたはローカルディレクトリ内の利用可能なプラグインのカタログです。marketplace.jsonファイルには、利用可能なプラグインとそれらの場所がリストされています。
プラグインを使用するには、それを含むマーケットプレイスを登録し、そのマーケットプレイスからプラグインをインストールします。プラグインは<plugin>@<marketplace>として識別されます。
既存のコミュニティプラグインエコシステムとの互換性のため、GitLab Duo CLIは.claude-plugin/marketplace.jsonファイルも読み取ります。既存のプラグインマーケットプレイスは、変更なしでGitLab Duo CLIと連携します。
前提条件:
- GitLab Duo CLIをセットアップします。
- Gitリポジトリからマーケットプレイスを追加する場合は、Gitを使用します。
マーケットプレイスを登録する
プラグインをインストールする前に、それを含むマーケットプレイスを登録する必要があります。
プラグインを初めて使用すると、GitLab Duo CLIは公式のGitLabマーケットプレイスであるgitlab-duo-pluginsを自動的に登録します。このマーケットプレイスを削除した場合、GitLab Duo CLIは再度登録しません。
マーケットプレイスを登録するには:
glab duo plugin marketplace add <source>duo plugin marketplace add <source><source>は次のいずれかです:
| ソースタイプ | 形式 | 例 |
|---|---|---|
| Gitリポジトリ | git cloneが受け入れるURL。オプションで#<ref>を追加して、ブランチまたはタグを固定します。 | https://gitlab.com/group/marketplace.git#stable |
| ローカルディレクトリ | 絶対パスまたは相対パス。~はホームディレクトリに展開されます。 | ~/marketplaces/internal |
例:
glab duo plugin marketplace add https://gitlab.com/example-group/example-marketplace.gitglab duo plugin marketplace add ~/marketplaces/internalduo plugin marketplace add https://gitlab.com/example-group/example-marketplace.gitduo plugin marketplace add ~/marketplaces/internalGitLab Duo CLIは、marketplace.jsonファイル内のnameフィールドによってマーケットプレイスを識別します。
マーケットプレイスからプラグインを自動的に更新する
マーケットプレイスからインストールしたプラグインを自動的に更新するには、--auto-updateオプションを指定してマーケットプレイスを登録します:
glab duo plugin marketplace add <source> --auto-updateduo plugin marketplace add <source> --auto-updateGitLab Duo CLIが起動すると、このマーケットプレイスからインストールされたプラグインが、確認なしでバックグラウンドで更新されます。プラグインが更新されると、GitLab Duo CLIは新しいバージョンを読み込むために再起動を促します。
登録されているマーケットプレイスをリストする
登録済みのマーケットプレイスをリストするには:
glab duo plugin marketplace listduo plugin marketplace list各マーケットプレイスについて、GitLab Duo CLIは以下を表示します:
- マーケットプレイスのソース。
- マーケットプレイスが最後に更新された日時。
- マーケットプレイスが持つプラグインの数。
- マーケットプレイスの自動更新が有効かどうか。
利用可能なマーケットプレイスプラグインをリストする
マーケットプレイスが提供するプラグインをリストするには:
glab duo plugin marketplace show <name>duo plugin marketplace show <name>各プラグインについて、GitLab Duo CLIはバージョン、説明、およびプラグインがインストールされている場所(存在する場合)を表示します。
マーケットプレイスを更新する
マーケットプレイスのカタログをそのソースから更新するには:
glab duo plugin marketplace update <name>duo plugin marketplace update <name>マーケットプレイスを削除する
登録されているマーケットプレイスを削除するには:
glab duo plugin marketplace remove <name>duo plugin marketplace remove <name>マーケットプレイスを削除すると、そこからインストールしたすべてのプラグインもアンインストールされます。
プラグインのインストールと管理
プラグインをインストールする際に、スコープを選択します。スコープは、GitLab Duo CLIが更新する設定ファイルと、インストールが適用される対象を決定します。
| スコープ | 設定ファイル | 用途 |
|---|---|---|
user(デフォルト) | <config dir>/plugins.json | すべてのプロジェクト用のプラグイン。 |
project | プロジェクト内の.gitlab/duo/plugins.json | チーム共有のプラグイン。このファイルをリポジトリにコミットします。 |
local | プロジェクト内の.gitlab/duo/plugins.local.json | 個人の、プロジェクトごとのプラグイン。このファイルを.gitignoreに追加します。 |
<config dir>は、LinuxおよびmacOSでは~/.gitlab/duo、Windowsでは%APPDATA%\GitLab\duoです。
登録されているマーケットプレイスからプラグインをインストールするには:
glab duo plugin install <plugin>@<marketplace> [--scope user|project|local]duo plugin install <plugin>@<marketplace> [--scope user|project|local]--scopeを指定しない場合、GitLab Duo CLIはuserスコープを使用します。
例:
glab duo plugin install my-plugin@my-marketplaceglab duo plugin install my-plugin@my-marketplace --scope projectduo plugin install my-plugin@my-marketplaceduo plugin install my-plugin@my-marketplace --scope projectインストール後の有効化状態
プラグインをインストールすると、GitLab Duo CLIは、プラグインがスコープの設定ファイルで有効になっているかどうかを記録します。初期状態を決定するために、GitLab Duo CLIは優先順位の高い順に以下を使用します:
- 対象スコープまたはより広範囲のスコープで以前にプラグインに対して記録した有効または無効の設定。たとえば、プラグインを無効にし、アンインストールし、その後再インストールした場合、プラグインは無効のままになります。
- プラグインのマーケットプレイスカタログエントリにある
defaultEnabled値。 - プラグインの
plugin.jsonマニフェストにあるdefaultEnabled値。
これらのいずれも設定されていない場合、プラグインは有効になります。
インストールされているプラグインをリストする
インストールされているプラグインをリストするには:
glab duo plugin listduo plugin listインストールされているプラグインはスコープごとにグループ化され、各プラグインが有効になっているかどうかがリストに表示されます。
プラグインを有効または無効にする
プラグインを有効、無効、またはアンインストールする際に、その名前だけで識別子を識別できます。複数のマーケットプレイスから同じプラグイン名がインストールされている場合は、完全な<plugin>@<marketplace>識別子を使用します。
インストールされているプラグインを有効または無効にするには:
glab duo plugin enable <plugin> [--scope user|project|local]
glab duo plugin disable <plugin> [--scope user|project|local]duo plugin enable <plugin> [--scope user|project|local]
duo plugin disable <plugin> [--scope user|project|local]複数のスコープでプラグインを有効または無効にする場合、最も特定のスコープが優先されます: local、次にproject、次にuser。
プラグインを更新する
プラグインを、そのマーケットプレイスから利用可能な最新バージョンに更新するには:
glab duo plugin update <plugin>@<marketplace>duo plugin update <plugin>@<marketplace>更新は、プラグインがインストールされているすべてのスコープに適用されます。
プラグインをアンインストールする
プラグインをアンインストールするには:
glab duo plugin uninstall <plugin> [--scope user|project|local]duo plugin uninstall <plugin> [--scope user|project|local]アンインストールすると、プラグインは設定から削除されます。
インストール済みのプラグインを使用する
プラグインをインストールして有効にすると、GitLab Duo CLIは次回起動時に、プラグインがバンドルするすべてのものを検出します:
- スキルは他のAgent Skillsと同じ方法で利用可能になります。
- カスタムスラッシュコマンドがスラッシュコマンドメニューに表示されます。組み込みスラッシュコマンド、Agent Skillsスラッシュコマンド、および独自のカスタムスラッシュコマンドは、同じ名前のプラグインコマンドよりも優先されます。
- MCPサーバーは、設定済みのMCPサーバーとともに読み込まれ、同様にツールの承認が必要です。サーバーの出所を識別するために、GitLab Duo CLIはサーバー名にプラグイン名をプレフィックスとして付けます。
マーケットプレイスを作成する
マーケットプレイスを作成するには、Gitリポジトリまたはローカルディレクトリのルートにmarketplace.jsonファイルを追加します。例:
{
"name": "my-marketplace",
"owner": {
"name": "Your Name"
},
"plugins": [
{
"name": "my-plugin",
"source": "./plugins/my-plugin",
"description": "A short description of the plugin."
}
]
}pluginsの各エントリは、sourceをマーケットプレイスのルートに対する相対パスに設定し、./で始める必要があります。
プラグインを作成する
プラグインは、オプションのplugin.jsonマニフェストと、プラグインがバンドルする拡張機能(スキル、カスタムスラッシュコマンド、MCPサーバー)を含むディレクトリです。
plugin.jsonマニフェストは次のフィールドをサポートしています:
| フィールド | 必須 | 説明 |
|---|---|---|
name | はい | プラグイン名。 |
version | いいえ | プラグインのバージョン。 |
description | いいえ | プラグインの簡単な説明。 |
defaultEnabled | いいえ | インストール時にプラグインがデフォルトで有効になるかどうか。 |
例:
{
"name": "my-plugin",
"version": "1.0.0",
"description": "A short description of the plugin.",
"defaultEnabled": true
}既存のコミュニティプラグインとの互換性のため、GitLab Duo CLIは.claude-plugin/plugin.jsonからマニフェストも読み取ります。
プラグインに拡張機能をバンドルするには:
- スキル: プラグイン内の
skills/<skill-name>/ディレクトリにSKILL.mdファイルを追加します。SKILL.mdファイル形式については、スキルを作成するを参照してください。 - カスタムスラッシュコマンド: プラグイン内の
commands/ディレクトリにMarkdownファイルを追加します。ファイル名はコマンド名で、ファイル形式はカスタムスラッシュコマンドと同じです。 - MCPサーバー: プラグインのルートに
.mcp.jsonファイルを追加します。ファイル形式はMCP設定形式と同じです。プラグイン内のファイルを参照するには、プラグインがインストールされているディレクトリに解決される${DUO_PLUGIN_ROOT}変数を使用します。
たとえば、スキル、カスタムスラッシュコマンド、およびMCPサーバーをバンドルする1つのプラグインを持つマーケットプレイスリポジトリは次のとおりです:
my-marketplace/
├── marketplace.json
└── plugins/
└── my-plugin/
├── plugin.json
├── .mcp.json
├── commands/
│ └── my-command.md
└── skills/
└── my-skill/
└── SKILL.mdGitLab Duo CLIは、プラグインのバージョンを優先順位の高い順に以下から決定します:
- プラグインの
plugin.jsonにあるversionフィールド。 - マーケットプレイス
marketplace.json内のプラグインのエントリにあるversionフィールド。
どちらのフィールドも設定されていない場合、プラグインのバージョンはunknownです。