mcpField
G
git-guardrails

git-guardrails

github.com/dedalus-erp-pasエージェントワークフロー121 回インストール
リポジトリ

git-guardrails について

git-guardrailsは、Claude CodeのPreToolUseフックを設定し、AIエージェントによる指定の危険なGitコマンドを遮断するスキルです。プロジェクト単位と全体の設定、遮断パターンの変更、動作確認に対応します。

主な機能

  1. 01指定した破壊的なGitコマンドの遮断
  2. 02プロジェクト単位または全体へのフック設定
  3. 03遮断パターンのカスタマイズ
  4. 04許可・遮断コマンドによる設定確認
  5. 05端末での手動コマンド実行には非干渉

活用シーン

  1. 01エージェントによる変更のプッシュ防止
  2. 02ハードリセットやブランチの強制削除への対策
  3. 03新規プロジェクトへのGitガード追加
  4. 04手動実行が必要なGit操作のカスタマイズ

インストール

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

$npx skills add https://github.com/dedalus-erp-pas/foundation-skills --skill git-guardrails

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

同梱ファイルreference/block-dangerous-git.sh

詳細

Git ガードレール

PreToolUse フックを設定し、Claude Code が危険な git コマンドを実行する前に検知してブロックします。

前提条件

  • jq:フックのスクリプトがツール入力を解析するために必要です。brew install jq または apt-get install jq でインストールしてください。
    • 重要: jq がインストールされていない場合、フックはフェイルオープンとなり、すべてのコマンドが許可されます。セットアップ後は、必ず jq が利用可能であることを確認してください。

このスキルを使うタイミング

次のような場合に有効化してください:

  • AI エージェントによる破壊的な git 操作の実行を防ぎたい
  • Claude Code に git の安全フックを追加したい
  • git push、git reset --hard、その他の危険なコマンドをブロックしたい
  • 新しいプロジェクトをセットアップしており、git 操作にガードレールを設けたい

ブロックされるコマンド

次のコマンドは実行前に検知され、ブロックされます。

パターン説明
git pushすべての push 形式(未レビューの push を防止)
git push --force強制 push(リモートの履歴を書き換えます)
git push --force-with-lease強制 push の形式の一つ
git reset --hardコミットされていない変更をすべて破棄します
git clean -f / git clean -fd未追跡ファイルを完全に削除します
git branch -Dマージ確認なしでブランチを強制削除します
git checkout .作業ツリーの変更をすべて破棄します
git restore .作業ツリーの変更をすべて破棄します
main/master に対する git rebase保護されたブランチの rebase を防ぎます

ブロックされると、Claude にはこれらのコマンドを実行する権限がないことを伝えるメッセージが表示されます。必要な場合は、ユーザーが手動で実行してください。

セットアップ手順

ステップ 1:適用範囲を確認する

ユーザーに、このプロジェクトのみ(.claude/settings.json)にインストールするか、すべてのプロジェクト(~/.claude/settings.json)にインストールするかを尋ねます。

ステップ 2:フックスクリプトをコピーする

同梱のスクリプトは次の場所にあります:reference/block-dangerous-git.sh

適用範囲に応じて、対象の場所にコピーします。

  • プロジェクト:.claude/hooks/block-dangerous-git.sh
  • グローバル:~/.claude/hooks/block-dangerous-git.sh

実行可能にします。

chmod +x <path-to-script>
ステップ 3:設定にフックを追加する

該当する設定ファイルに追加します。

プロジェクトスコープ(.claude/settings.json):

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/block-dangerous-git.sh"
          }
        ]
      }
    ]
  }
}

グローバルスコープ(~/.claude/settings.json):

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/block-dangerous-git.sh"
          }
        ]
      }
    ]
  }
}

設定ファイルがすでに存在する場合は、既存の hooks.PreToolUse 配列にフックをマージしてください。他の設定を上書きしないでください。

ステップ 4:カスタマイズについて確認する

ブロック対象のパターンを追加または削除するか、ユーザーに尋ねます。必要に応じてコピーしたスクリプトを編集してください。

ユーザーが追加を希望することの多い例:

  • git stash drop をブロックする(stash の誤削除を防止)
  • git tag -d をブロックする(タグの削除を防止)
  • git push は許可し、--force 形式のみをブロックする
ステップ 5:インストールを確認する

フックが動作することを確認するため、簡単なテストを実行します。

echo '{"tool_input":{"command":"git push origin main"}}' | <path-to-script>

期待される結果:コード 2 で終了し、stderr に BLOCKED メッセージが出力されます。

安全なコマンドでもう一度テストします。

echo '{"tool_input":{"command":"git status"}}' | <path-to-script>

期待される結果:コード 0 で終了します(許可)。

動作の仕組み

Claude Code は、ツールの呼び出し前に実行される PreToolUse フックをサポートしています。このフックは次の処理を行います。

  1. ツール入力を JSON として stdin で受け取ります
  2. jq を使って command フィールドを抽出します
  3. コマンドを危険なパターンのリストと照合します
  4. 一致した場合、コード 2 で終了します(Claude にコマンドがブロックされたことを伝えます)
  5. 一致しない場合、コード 0 で終了します(通常どおり実行できます)

重要な注意事項

  • このフックは AI エージェントが実行するコマンドのみをブロックします。ユーザーは引き続き、ターミナルで任意の git コマンドを手動で実行できます。
  • ブロック対象のパターンは正規表現で照合されるため、git push は git push origin main --force も検知します。
  • jq がインストールされていない場合、スクリプトはフェイルオープンとなり、すべてのコマンドが許可されます。jq が利用可能であることを確認してください。
  • このフックは git の設定を変更せず、Claude Code のツール呼び出しを検知するだけです。

コメント