mcpField
G
groove-admin-cursor-hooks

groove-admin-cursor-hooks

github.com/andreadellacorteエージェントワークフロー6518 回インストール14 週間前に更新
リポジトリ

groove-admin-cursor-hooks について

groove の Cursor ネイティブフックをインストール、管理するスキルです。モデルを介さずセッションやツールなどのイベントに応じて動作し、既存の groove 以外の設定も保持します。

主な機能

  1. 016 種類の Cursor ライフサイクルフックを導入
  2. 02登録済みフックとスクリプトを一覧表示
  3. 03名前を指定してフックを無効化
  4. 04既存項目を保った設定のマージ
  5. 05Git の活動を記録しセッション記録を準備

活用シーン

  1. 01セッション開始時に groove のワークフローコンテキストを再読み込み
  2. 02指定時間帯に終業時の手順をリマインド
  3. 03groove 管理下のスキルパスへの編集をブロック
  4. 04後で確認するため Git のセッション記録を準備

インストール

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

$npx skills add https://github.com/andreadellacorte/groove --skill groove-admin-cursor-hooks

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

詳細

groove-admin-cursor-hooks

groove の Cursor ネイティブフックをインストールします。これらはモデルの外部で実行され、決定的かつ無条件に動作し、groove のアドバイザリー Markdown フック(.groove/hooks/start.md、end.md)を補完します。

特定のフックを削除するには --disable <hook> を使用します。現在の状態を表示するには --list を使用します。

実行結果

選択したフックは .cursor/hooks.json に登録され、シェルスクリプトは .groove/hooks/cursor/ に書き込まれます。フックはモデルを介さず、Cursor のライフサイクルイベントで自動的に実行されます。

利用可能なフック

名前イベントマッチャー動作
context-reprimesessionStart—prime スクリプトを --json 付きで実行します — セッション開始とコンパクションのたびに、完全なワークフローコンテキストが読み込まれるようにします
daily-end-reminderstop—現地時間が16~21時で、.groove/index.md が存在する場合、/groove-daily-end の実行を促すリマインダーを表示します
git-activity-bufferpostToolUseShellコマンドに git commit が含まれている場合、タイムスタンプ付きの行を .groove/.cache/git-activity-buffer.txt に追記します
block-managed-pathspreToolUseWritefile_path が .agents/skills/groove または skills/groove で始まる場合、説明メッセージとともにコード2で終了し、書き込みをブロックします
version-checkpostToolUse—1時間に1回、新しい groove バージョンがあるか確認し、groove-utilities-check を呼び出します
session-capturestop—このセッション中に Git のアクティビティ(深夜以降のコミット、作業中の変更、またはバッファー内のコミット)があった場合、次のセッションで確認するためのキャプチャの下書きを .groove/.cache/pending-capture.md にステージします。通知は表示されません。

手順

--list

.cursor/hooks.json が存在する場合は読み込みます。登録されている groove フックと、.groove/hooks/cursor/ に存在するスクリプトを報告します。終了します。

--disable <hook>

.cursor/hooks.json から指定されたフックのエントリーを削除します(スクリプトはそのまま残します)。削除済み、または見つからなかったことを報告します。終了します。

デフォルト(インストール)
  1. 有効にするフックを確認します(デフォルト:6つすべて)。

    Which hooks to install? (all / comma-separated: context-reprime, daily-end-reminder, git-activity-buffer, block-managed-paths, version-check, session-capture)
    Press enter for all.
    
  2. .cursor/hooks.json が存在する場合は読み込み、JSON として解析します(デフォルトは {"version": 1, "hooks": {}})。既存の groove 以外のエントリーを破棄してはいけません。

  3. .groove/hooks/cursor/ ディレクトリが存在しない場合は作成します。各スクリプトに実行権限を付与します(chmod +x)。

  4. 選択した各フックについて、シェルスクリプトを書き込み、フックのエントリーを .cursor/hooks.json にマージします。

  5. マージした結果を .cursor/hooks.json に書き込みます。

  6. 概要を報告します。

    ✓ context-reprime     — sessionStart hook → groove-utilities-prime.sh --json
    ✓ daily-end-reminder  — stop hook → .groove/hooks/cursor/daily-end-reminder.sh
    ✓ git-activity-buffer — postToolUse/Shell hook → .groove/hooks/cursor/git-activity-buffer.sh
    ✓ block-managed-paths — preToolUse/Write hook → .groove/hooks/cursor/block-managed-paths.sh
    ✓ version-check       — postToolUse hook → .groove/hooks/cursor/version-check.sh
    ✓ session-capture     — stop hook → .groove/hooks/cursor/session-capture.sh
    ✓ .cursor/hooks.json updated
    

シェルスクリプトのテンプレート

以下を .groove/hooks/cursor/ にそのまま書き込みます。差分を表示して確認を得ることなく、既存のスクリプトを上書きしてはいけません。

daily-end-reminder.sh
#!/usr/bin/env bash
# groove: stop hook — remind about /groove-daily-end during work hours
hour=$(date +%H)
if [ -f "$CLAUDE_PROJECT_DIR/.groove/index.md" ] && [ "$hour" -ge 16 ] && [ "$hour" -le 21 ]; then
  echo "groove: end of work hours — consider running /groove-daily-end"
fi
git-activity-buffer.sh
#!/usr/bin/env bash
# groove: postToolUse/Shell hook — buffer git commits for memory log
input=$(cat)
command=$(echo "$input" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('tool_input',{}).get('command',''))" 2>/dev/null)
if echo "$command" | grep -q "git commit"; then
  msg=$(echo "$command" | grep -oP '(?<=-m ")[^"]+' | head -1)
  mkdir -p "$CLAUDE_PROJECT_DIR/.groove/.cache"
  echo "$(date '+%Y-%m-%d %H:%M') | ${msg:-<no message>}" >> "$CLAUDE_PROJECT_DIR/.groove/.cache/git-activity-buffer.txt"
fi
block-managed-paths.sh
#!/usr/bin/env bash
# groove: preToolUse/Write hook — block edits to managed groove paths
input=$(cat)
path=$(echo "$input" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('tool_input',{}).get('file_path',''))" 2>/dev/null)
if echo "$path" | grep -qE '^(\.agents/skills/groove|skills/groove)'; then
  echo "groove: blocked — '$path' is managed by groove update. Edit under skills/ and rsync to .agents/skills/." >&2
  exit 2
fi
version-check.sh
#!/usr/bin/env bash
# groove: postToolUse hook — check for new groove version (once per hour)
CACHE="$CLAUDE_PROJECT_DIR/.groove/.cache/last-version-check-ts"
mkdir -p "$CLAUDE_PROJECT_DIR/.groove/.cache"
now=$(date +%s)
if [ -f "$CACHE" ]; then
  last=$(cat "$CACHE")
  diff=$((now - last))
  [ "$diff" -lt 3600 ] && exit 0
fi
echo "$now" > "$CACHE"
bash "$CLAUDE_PROJECT_DIR/.agents/skills/groove-utilities-check/scripts/check.sh" 2>/dev/null || true
session-capture.sh
#!/usr/bin/env bash
# groove: stop hook — stage a session capture draft from git activity for next-session review
ROOT="${CLAUDE_PROJECT_DIR:-$PWD}"
[ -f "$ROOT/.groove/index.md" ] || exit 0
command -v git >/dev/null 2>&1 || exit 0
git -C "$ROOT" rev-parse --git-dir >/dev/null 2>&1 || exit 0

CACHE="$ROOT/.groove/.cache"
PENDING="$CACHE/pending-capture.md"
BUFFER="$CACHE/git-activity-buffer.txt"

commits=$(git -C "$ROOT" log --since=midnight --oneline 2>/dev/null)
changes=$(git -C "$ROOT" diff --stat HEAD 2>/dev/null)
buffered=""
[ -s "$BUFFER" ] && buffered=$(cat "$BUFFER")

# No activity → clear any stale draft and stay silent.
if [ -z "$commits" ] && [ -z "$changes" ] && [ -z "$buffered" ]; then
  rm -f "$PENDING"
  exit 0
fi

mkdir -p "$CACHE"
{
  echo "# Pending capture — $(date '+%Y-%m-%d %H:%M')"
  echo
  echo "## Commits since midnight"
  echo "${commits:-(none)}"
  echo
  echo "## Working changes"
  echo "${changes:-(none)}"
  if [ -n "$buffered" ]; then
    echo
    echo "## Buffered commit messages"
    echo "$buffered"
  fi
} > "$PENDING"

.cursor/hooks.json のテンプレート

これらを hooks キーにマージします。他のすべてのキーは保持します。

{
  "version": 1,
  "hooks": {
    "sessionStart": [
      {
        "command": "bash $CLAUDE_PROJECT_DIR/.agents/skills/groove-utilities-prime/scripts/groove-utilities-prime.sh --json"
      }
    ],
    "stop": [
      {
        "command": "bash $CLAUDE_PROJECT_DIR/.groove/hooks/cursor/daily-end-reminder.sh"
      },
      {
        "command": "bash $CLAUDE_PROJECT_DIR/.groove/hooks/cursor/session-capture.sh"
      }
    ],
    "postToolUse": [
      {
        "matcher": "Shell",
        "command": "bash $CLAUDE_PROJECT_DIR/.groove/hooks/cursor/git-activity-buffer.sh"
      },
      {
        "command": "bash $CLAUDE_PROJECT_DIR/.groove/hooks/cursor/version-check.sh"
      }
    ],
    "preToolUse": [
      {
        "matcher": "Write",
        "command": "bash $CLAUDE_PROJECT_DIR/.groove/hooks/cursor/block-managed-paths.sh"
      }
    ]
  }
}

マージ時に hooks キーがすでに存在する場合は、該当するイベント配列に groove のエントリーを追加します。重複を作成しないでください — 追加する前に、groove のコマンドエントリーがすでに存在するか確認します。

制約

  • .cursor/hooks.json にある groove 以外のエントリーを上書きしてはいけません
  • 差分を表示して確認を得ることなく、既存のスクリプトを上書きしてはいけません
  • スクリプトは python3 を使用して標準入力の JSON を解析します — python3 がない場合は、そのフックをスキップして警告します
  • block-managed-paths は終了コード2を使用します(Cursor では、ツールの使用をブロックするための規約です)
  • インストール後、フックを有効にするには次回の Cursor セッション再起動が必要であることをユーザーに伝えます
  • .groove/hooks/cursor/ は .groove/index.md の git.hooks Git 戦略に従います
  • .cursor/ ディレクトリが存在しない場合は作成します

コメント