cursor-hook-authoring について
cursor-hook-authoring は、Cursor Cloud Agent 環境で Git hook を扱う開発者向けの設計スキルです。hook の実行順、Co-authored-by 行の除去、導入とテストの要件を説明します。
主な機能
- 01hook の実行順を説明
- 02署名行の除去方法を規定
- 03インストーラー設定を案内
- 04lefthook との共存を説明
- 05検証手順を提示
活用シーン
- 01Cursor Cloud Agent のコミットメッセージ hook 設定
- 02自動付与された Co-authored-by 行の除去
- 03Cursor hook と lefthook の連携整理
- 04hook の導入と除去処理の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ philtzjp/ skills --skill cursor-hook-authoringインストール後、Claude Code で/cursor-hook-authoringを入力して読み込まれたか確認します。
詳細
プロジェクトの README よりCursor Hook 設計
発火タイミング
- Cursor Cloud Agent 環境で Git hook を追加・変更する
Co-authored-by:の自動付与と除去の連鎖を設計する- lefthook 等の既存 hook と Cursor 管理 hook の共存を整理する
Git hook と Cursor Cloud の commit-msg 連鎖
実行順
Cursor Cloud Agent は .git/hooks/<hook-name> を .dispatcher 経由で差し替える。commit-msg の実行順は次のとおり:
- ユーザー hook —
.cursor-original-hooks-pathが指すパス(通常.git/hooks)に同名 hook があれば先に実行 - Cursor 管理 hook —
$HOOKS_DIR/$HOOK_NAME.cursor*をファイル名の辞書順で順次実行
commit-msg の典型例:
| 順序 | ファイル名 | 役割 |
|---|---|---|
| 1 | commit-msg.cursor | シークレットスキャン(commit ブロック) |
| 2 | commit-msg.cursor.co-author | Co-authored-by: を自動付与 |
| 3 | commit-msg.cursor.co-author-strip | Co-authored-by: 行を除去(プロジェクト strip hook) |
MUST: strip hook のベース名は commit-msg.cursor.co-author-strip とし、commit-msg.cursor.co-author より辞書順で後になる命名にする。NEVER: commit-msg.cursor.strip-co-author 等、co-author より前に実行される名前を使用する。
strip hook 実装
- MUST: 除去ロジックは
.cursor/hooks/strip-co-authored-by.shに置く - MUST:
commit-msg.cursor.co-author-stripは当該スクリプトを呼び出す薄いラッパーとする - MUST: strip 対象は
Co-authored-by:/Co-Authored-By:行(大文字小文字不問)および直前の空行 - NEVER: コミットメッセージ本体(件名・説明)を削除しない
参考実装(.cursor/hooks/strip-co-authored-by.sh):
#!/usr/bin/env bash
set -euo pipefail
COMMIT_MSG_FILE="${1:?commit message file required}"
if [ ! -f "$COMMIT_MSG_FILE" ]; then
exit 0
fi
tmp="$(mktemp)"
trap 'rm -f "$tmp"' EXIT
awk '
BEGIN { skip_blank = 0 }
/^[Cc]o-[Aa]uthored-[Bb]y:/ { skip_blank = 1; next }
skip_blank && /^[[:space:]]*$/ { next }
{ skip_blank = 0; print }
' "$COMMIT_MSG_FILE" > "$tmp"
mv "$tmp" "$COMMIT_MSG_FILE"
trap - EXIT
install スクリプト
- MUST:
scripts/install-cursor-agent-hooks.shで strip 連鎖を Cursor hook ディレクトリへ配置する - MUST: install 先は Cursor が
.git/hooksを差し替えている実ディレクトリ(readlink -f .git/hooksで解決したパスの親、または.git/hooks/.cursor-original-hooks-pathと併用) - MUST:
commit-msg.cursor.co-author-stripに実行権限を付与する - IF: install 先が特定できない; THEN MUST: 手動で
$CURSOR_AGENT_HOOKS_DIRを指定して実行する
lefthook 多層防御
- IF: リポジトリが lefthook を使用する; THEN SHOULD:
commit-msgジョブに strip スクリプトを追加し、Cursor hook 連鎖と二重にCo-authored-by:を除去する - IF:
git-guard.sh等でgit commit --no-verifyを deny する; THEN MUST: strip 連鎖で--no-verifyなしにCo-Authored-By禁止を満たす - IF: force push を git-guard で制限する; THEN MUST: 履歴修正が必要な場合は
GIT_GUARD_ALLOW_FORCE_PUSH=1を一時設定し、作業後に元に戻す
テスト手順
- MUST:
scripts/install-cursor-agent-hooks.shを実行する - MUST: テストコミットを作成し、
git log -1 --format=%BでCo-authored-by:/Co-Authored-By:が含まれないことを確認する - MUST:
githubスキルのCo-Authored-By禁止ルールと矛盾しないことを確認する - IF: lefthook を使用する; THEN MUST:
lefthook run commit-msg --commit-msg-file /tmp/test-msgで strip を単体検証する
関連スキル
github: コミット author 指定、Co-Authored-By禁止、Hook 迂回禁止skill-escalation: スキル改変の上流提案refresh-skills: スキル追加時の整合性検査
コメント
Markdown 対応