mcpField
M
mutation-gate

mutation-gate

github.com/redhat-developerエージェントワークフロー1948 回インストール1 日前に更新
リポジトリ

mutation-gate について

mutation-gate は、外部への書き込み前に明示的な承認を得て、実行結果を報告するスキルです。実行前に、各操作の対象、正確なコマンド、プレビュー、前提条件、失敗時の処理、復旧計画を提示します。

主な機能

  1. 01予定する書き込みと正確な対象を列挙
  2. 02コマンド、ペイロードのプレビュー、前提条件を提示
  3. 03失敗時の処理と復旧計画を必須化
  4. 04提示した操作一式について承認を取得
  5. 05各操作の結果を順番に報告

活用シーン

  1. 01送信前のプルリクエストや Jira 変更の確認
  2. 02リポジトリやサービスへの一括更新の計画
  3. 03完了、失敗、スキップした書き込みの追跡

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/redhat-developer/rhdh-skills --skill mutation-gate

インストール後、Claude Code で/mutation-gateを入力して読み込まれたか確認します。

同梱ファイルagents/openai.yamlscripts/scan_credentials.py

詳細

RHDH 書き込みゲート

外部への書き込みとは、セッションを閉じるだけではユーザーが取り消せない操作です。たとえば、プッシュしたコミット、作成したプルリクエスト、Jira のステータス遷移、投稿したメッセージ、他の人のリポジトリで変更したファイルなどです。

読み取りは書き込みではありません。取得、トリアージ、分析、報告の依頼は読み取りの意図を示すものであり、何も承認するものではありません。

ゲート

1. 操作を明示します。 実行する操作をすべて、実行する順に列挙します。それぞれについて、次の情報を示します。

項目内容
対象変更する具体的な対象:owner/repo#412、RHIDP-1234、ブランチ名、チャンネル
コマンド実行するコマンドまたはリクエストそのもの。言い換えではありません
プレビュー反映される本文、ラベル、フィールド値、差分
前提条件すでに満たされている必要がある条件。実行の直前に確認し、満たされていなければ一連の処理を中止します
失敗時の対応この操作が失敗した場合、後続の操作をどうするか
復旧方法この操作の実行後に、取り消す方法または影響を封じ込める方法

会話内に表として表示します。承認はユーザーがすでにいる場所で行われるため、計画はファイルではなくユーザーに提示します。

復旧方法は必須であり、失敗時の対応とは異なります。 失敗時の対応では、まだ実行されていない操作をどうするかを示します。復旧方法では、すでに実行された操作をどうするかを示します。承認を求める前に記載してください。取り消し方を説明できない操作は、ユーザーが内容を知らずに承認することになります。本当に取り消せない場合は、その旨を明記してください。投稿したメッセージ、起動したパイプライン、公開したパッケージなどの場合は、「取り消し不可。メッセージは残ります」のように書きます。記載しないのは不可です。

会話履歴では読み切れないほど計画が大きい場合(複数のリポジトリにまたがるバージョン更新や、数十個のファイルに及ぶカタログ変更など)は、/handoff の規則に従ってオペレーティングシステムの一時ディレクトリに書き込み、絶対パスを表示します。ユーザーのチェックアウトには書き込まないでください。コミットに含まれるおそれがあります。

2. 明示した操作一式について承認を得ます。 ユーザーが承認するのは、提示された内容です。公開するという以前の意図があっても、正確な対象とペイロードが示されていない操作は承認されません。承認後に計画が変わった場合(対象の変更、操作の追加、本文の編集など)、それは新しい計画であり、改めて承認が必要です。

3. 実行し、すべての操作を報告します。 計画した順に、各操作について完了、失敗、スキップのいずれかを報告します。先行する操作の失敗により実行されなかった操作は、省略せずスキップとして報告します。書き込みの失敗は必ず報告し、内容を変えて密かに再試行してはいけません。

認証情報をプレビューに含めない

プレビューには実行されるコマンドを表示するため、貼り付けられたトークン、環境から展開されたトークン、ツールから返されたトークンが含まれる可能性があります。表示する前にスキャンしてください。

uv run scripts/scan_credentials.py <plan.json> --json
uv run scripts/scan_credentials.py --text "<a single command or body>"

認証情報のようなフィールドや値(認証ヘッダー、PEM 秘密鍵、ghp_、glpat-、xox、sk-、AKIA トークン、または任意の階層でシークレットを示す名前のフィールド)を見つけると、ゼロ以外の終了コードを返し、該当するパスを示します。報告するのはフィールドであり、シークレットそのものではありません。

計画に認証情報が含まれているのは、コマンドの組み立て方に問題があるということです。伏せ字にして続行してはいけません。実行時に認証済みツールからシークレットが供給されるように、構成を修正してください。

誰が実行するか

対象を担当するスキルが操作を実行します。Jira への書き込みが必要な呼び出し元は /rhdh-jira-update を呼び出します。Forge への書き込みが必要な呼び出し元は、コマンドを組み立てて自ら実行します。/rhdh-forge は Forge のペイロードを構築しますが、実行はしません。コマンドの構築方法を知っているモジュールが実行できないようにすることで、この分離によりゲートを確実に適用できます。

完了

ユーザーが承認したすべての操作に結果があり、結果が計画した順に並び、それぞれの対象が明記されていれば完了です。報告に含まれていない操作や、変更対象を示さずに報告された操作がある場合、ゲートは完了していません。

コメント