block-no-verify-hook
`--no-verify` やその他のバイパスフラグを使って git の pre-commit フックをスキップすることを AI エージェントに禁止する `PreToolUse` フックを設定します。コミット品質ゲートを強制する Claude Code プロジェクトのセットアップ時に活用してください。
description の原文を見る
Configure a PreToolUse hook to prevent AI agents from skipping git pre-commit hooks with --no-verify and other bypass flags. Use when setting up Claude Code projects that enforce commit quality gates.
SKILL.md 本文
No-Verify をブロックするフック
PreToolUse フック設定で、実行前にバイパスフラグの使用をインターセプトしてブロックし、AI エージェントが pre-commit フック、GPG 署名、その他の git セーフティメカニズムをスキップできないようにします。
概要
AI コーディングエージェント (Claude Code, Codex など) は --no-verify などのフラグを含むシェルコマンドを実行して、pre-commit フックをバイパスすることができます。これは lint、フォーマット、テスト、pre-commit フックに設定されているセキュリティチェックの目的を無くしてしまいます。block-no-verify フックは、実行前にバイパスフラグを含むツール呼び出しを拒否する PreToolUse ガードを追加します。
問題
AI エージェントがコードをコミットする際、フック失敗を避けるためにバイパスフラグを使用することがあります:
# これらのコマンドは pre-commit フックを完全にスキップします
git commit --no-verify -m "quick fix"
git push --no-verify
git commit --no-gpg-sign -m "unsigned commit"
git merge --no-verify feature-branch
これにより以下が可能になります:
- フォーマットされていないコードがリポジトリに入る
- Lint エラーがチェックを回避する
- セキュリティスキャンがスキップされる
- 署名されていないコミットが署名ポリシーをバイパスする
- テストスイートが回避される
ソリューション
.claude/settings.json に PreToolUse フックを追加して、すべての Bash ツール呼び出しを検査し、バイパスフラグを含むコマンドをブロックします。
設定
プロジェクトの .claude/settings.json に以下を追加します:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hook": {
"type": "command",
"command": "if printf '%s' \"$TOOL_INPUT\" | grep -qE '(^|&&|;|\\|)\\s*git\\s+.*--(no-verify|no-gpg-sign)'; then echo 'BLOCKED: --no-verify and --no-gpg-sign flags are not allowed. Run the commit without bypass flags so that pre-commit hooks execute properly.' >&2; exit 2; fi"
}
}
]
}
}
動作方法
- Matcher: フックは
Bashツール呼び出しのみをターゲットにするため、他のツール (Read、Edit、Grep など) に干渉しません。 - 検査:
$TOOL_INPUT環境変数には、エージェントが実行しようとしているフルコマンドが含まれます。フックはprintfを使用して入力を安全に渡し (echo の特殊文字の落とし穴を回避)、gitコマンドの直後に続く場合のみ--no-verifyまたは--no-gpg-signフラグをチェックします。 - ブロッキング: git コマンド内でバイパスフラグが見つかった場合、フックは終了コード 2 で終了してエラーメッセージを出力します。終了コード 2 は Claude Code にツール呼び出し全体を拒否するよう指示します。
- パススルー: バイパスフラグが見つからない場合、フックは終了コード 0 で終了してコマンドは通常通り実行されます。
終了コード
| コード | 意味 |
|---|---|
| 0 | ツール呼び出しの実行を許可 |
| 1 | エラー (ツール呼び出しは進行、警告が表示される) |
| 2 | ツール呼び出しを完全にブロック |
ブロックされるフラグ
| フラグ | 目的 | ブロック理由 |
|---|---|---|
--no-verify | pre-commit および commit-msg フックをスキップ | lint、フォーマット、テスト、セキュリティチェックをバイパス |
--no-gpg-sign | GPG コミット署名をスキップ | コミット署名ポリシーをバイパス |
インストール
プロジェクト単位のセットアップ
プロジェクトルートに .claude/settings.json を作成または更新します:
mkdir -p .claude
cat > .claude/settings.json << 'EOF'
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hook": {
"type": "command",
"command": "if printf '%s' \"$TOOL_INPUT\" | grep -qE '(^|&&|;|\\|)\\s*git\\s+.*--(no-verify|no-gpg-sign)'; then echo 'BLOCKED: --no-verify and --no-gpg-sign flags are not allowed. Run the commit without bypass flags so that pre-commit hooks execute properly.' >&2; exit 2; fi"
}
}
]
}
}
EOF
グローバルセットアップ
すべてのプロジェクトに適用するには、~/.claude/settings.json に追加します:
mkdir -p ~/.claude
cat > ~/.claude/settings.json << 'EOF'
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hook": {
"type": "command",
"command": "if printf '%s' \"$TOOL_INPUT\" | grep -qE '(^|&&|;|\\|)\\s*git\\s+.*--(no-verify|no-gpg-sign)'; then echo 'BLOCKED: --no-verify and --no-gpg-sign flags are not allowed. Run the commit without bypass flags so that pre-commit hooks execute properly.' >&2; exit 2; fi"
}
}
]
}
}
EOF
検証
フックがバイパスフラグをブロックすることを確認します:
# これはフックによってブロックされるはずです:
git commit --no-verify -m "test"
# これは通常通り成功するはずです:
git commit -m "test"
フックの拡張
さらにブロックするフラグを追加
追加のフラグ (--force など) をブロックするには、grep パターンを拡張します:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hook": {
"type": "command",
"command": "if printf '%s' \"$TOOL_INPUT\" | grep -qE '(^|&&|;|\\|)\\s*git\\s+.*--(no-verify|no-gpg-sign|force-with-lease|force)'; then echo 'BLOCKED: Bypass flags are not allowed.' >&2; exit 2; fi"
}
}
]
}
}
他のフックと組み合わせる
block-no-verify フックは他の PreToolUse フックと並行して動作します:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hook": {
"type": "command",
"command": "if printf '%s' \"$TOOL_INPUT\" | grep -qE '(^|&&|;|\\|)\\s*git\\s+.*--(no-verify|no-gpg-sign)'; then echo 'BLOCKED: Bypass flags not allowed.' >&2; exit 2; fi"
}
},
{
"matcher": "Bash",
"hook": {
"type": "command",
"command": "if printf '%s' \"$TOOL_INPUT\" | grep -qE 'rm\\s+-rf\\s+/'; then echo 'BLOCKED: Dangerous rm command.' >&2; exit 2; fi"
}
}
]
}
}
ベストプラクティス
- 設定ファイルをコミット --
.claude/settings.jsonをバージョン管理に追加すれば、すべてのチームメンバーがフックの恩恵を受けます。 - オンボーディングドキュメント -- プロジェクトの貢献ガイドにフックについて記載して、開発者がバイパスフラグがブロックされる理由を理解できるようにします。
- pre-commit フックと組み合わせる -- block-no-verify フックは pre-commit フックが実行されることを保証します。意味のある pre-commit フックが設定されていることを確認してください。
- セットアップ後にテスト -- テストコミットで意図的にトリガーしてフックが機能することを確認します。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- wshobson
- リポジトリ
- wshobson/agents
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/wshobson/agents / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。