自动化与脚本
在 Cursor 中安装原生生命周期钩子以实现会话上下文重载…
当需要在 Cursor 中通过 .cursor/hooks.json 注册确定性的原生钩子(会话启动重载上下文、下班提醒、git 活动缓冲、会话捕获草稿、受管路径保护、版本检查)时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
在 Cursor 中安装原生生命周期钩子特定
解决思路
- 用 `--list` 读取 `.cursor/hooks.json`(若存在),报告已注册的 groove 钩子以及 `.groove/hooks/cursor/` 中存在的脚本,然后退出。
- 用 `--disable <hook>` 从 `.cursor/hooks.json` 中移除指定钩子的条目(保留脚本文件),报告已移除/未找到,然后退出。
- 默认安装流程:先询问要启用哪些钩子(默认全部六个):`Which hooks to install? (all / comma-separated: context-reprime, daily-end-reminder, git-activity-buffer, block-managed-paths, version-check, session-capture)`,回车表示全部。
- 读取 `.cursor/hooks.json`(若存在)并按 JSON 解析(默认 `{"version": 1, "hooks": {}}`),绝不丢弃已有的非 groove 条目。
- 若 `.groove/hooks/cursor/` 目录不存在则创建,并对每个脚本执行 `chmod +x` 使其可执行。
- 对每个选中的钩子:写入对应的 shell 脚本,并把钩子条目合并进 `.cursor/hooks.json`。
- 将合并后的结果写回 `.cursor/hooks.json`。
- 输出安装摘要,逐项列出每个钩子的事件与目标脚本,以及 `.cursor/hooks.json updated`。
- 写入 `daily-end-reminder.sh`:读取 `hour=$(date +%H)`,若 `$CLAUDE_PROJECT_DIR/.groove/index.md` 存在且小时在 16–21 之间,则输出提醒运行 `/groove-daily-end`。
- 写入 `git-activity-buffer.sh`:从 stdin 读取 JSON,用 python3 提取 `tool_input.command`,若包含 `git commit` 则用 grep 提取 `-m "..."` 消息,`mkdir -p` 创建 `.groove/.cache`,把带时间戳的行追加到 `.groove/.cache/git-activity-buffer.txt`。
- 写入 `block-managed-paths.sh`:从 stdin 提取 `tool_input.file_path`,若匹配 `^(\.agents/skills/groove|skills/groove)` 则向 stderr 输出说明并以退出码 2 阻止写入。
- 写入 `version-check.sh`:用 `.groove/.cache/last-version-check-ts` 缓存时间戳,若距上次检查不足 3600 秒则退出,否则更新时间戳并调用 `bash "$CLAUDE_PROJECT_DIR/.agents/skills/groove-utilities-check/scripts/check.sh"`。
- 写入 `session-capture.sh`:确认 `.groove/index.md` 存在、git 可用且处于 git 仓库;收集自午夜以来的提交、`git diff --stat HEAD` 的工作区改动以及缓冲区内容;若三者皆空则删除 `.groove/.cache/pending-capture.md` 并静默退出;否则把提交、工作区改动和缓冲的提交消息写入 `pending-capture.md`。
- 按模板把钩子合并进 `.cursor/hooks.json` 的 `hooks` 键:`sessionStart` 运行 `groove-utilities-prime.sh --json`;`stop` 运行 `daily-end-reminder.sh` 与 `session-capture.sh`;`postToolUse` 中 matcher 为 `Shell` 的运行 `git-activity-buffer.sh`,另一个运行 `version-check.sh`;`preToolUse` 中 matcher 为 `Write` 的运行 `block-managed-paths.sh`。
- 合并时若 `hooks` 键已存在,则把 groove 条目追加到对应事件数组;追加前检查是否已存在相同的 groove 命令条目,避免重复。
- 绝不覆盖 `.cursor/hooks.json` 中的非 groove 条目。
- 绝不覆盖已存在的脚本,除非先展示 diff 并获得确认。
- 脚本使用 `python3` 解析 JSON stdin;若 python3 不存在,则跳过该钩子并警告。
- `block-managed-paths` 使用退出码 2(Cursor 阻止工具调用的约定)。
- 安装完成后提醒用户:钩子将在下次 Cursor 会话重启后生效。
- `.groove/hooks/cursor/` 遵循 `.groove/index.md` 中的 `git.hooks` git 策略。
- 若 `.cursor/` 目录不存在则创建。
适用边界 · 注意事项
- 未安装 Cursor 或无法使用 `.cursor/hooks.json` 原生钩子机制时。
- 环境中缺少 python3 时,依赖 JSON 解析的钩子(如 git-activity-buffer、block-managed-paths)无法工作。
- 项目未使用 groove 工作流(无 `.groove/index.md`、无 groove 技能目录)时,多数钩子无意义。