用途
该技能用于在安装 conan-skills 技能集之后,为其依赖的 Claude Code 钩子(hooks)完成配置。仅靠技能文件本身无法让 Claude 在每个会话开始时或每次工具运行前自动执行动作,必须通过钩子实现。该技能是仓库自带 scripts/link-skills.sh(维护者本地开发用)的面向最终用户的替代方案,供通过 npx skills add 安装的用户运行。
主要能力
配置两个钩子:
- caveman:SessionStart 事件。在每次会话开始时注入 caveman-mode 指令,用户无需手动输入 /caveman。该钩子通过已安装的符号链接实时读取 ~/.claude/skills/caveman/SKILL.md,因此对技能的编辑无需重新配置即可生效。
- git-guardrails:PreToolUse(Bash)事件。拦截每一条 Bash 命令,阻止破坏性 git 操作,包括 git push、git reset --hard、git clean -f、git commit --amend、git branch -D、git checkout . / git restore .。
使用方式
技能强调这是确定性配置任务,需严格按步骤执行,不得自行改动 JSON 结构、标记字符串或路径,因为 uninstall.sh 依赖它们进行清理。
前置条件:必须安装 jq(可用 command -v jq 检查),合并操作与钩子运行时都会调用它;若缺失应停止并提示用户先安装。技能必须已安装(~/.claude/skills/ 下存在符号链接),需检查 ~/.claude/skills/caveman/SKILL.md 是否存在,否则提示用户先运行 npx skills@latest add <user>/skills 并选择 caveman 和 git-guardrails-claude-code 技能。
步骤:
- 选择范围:询问用户是全局配置(所有项目,推荐,使用 ~/.claude/settings.json 与 ~/.claude/hooks/conan-git-guardrails.sh)还是仅当前项目(使用 ./.claude/settings.json 与 ./.claude/hooks/conan-git-guardrails.sh)。需告知用户 uninstall.sh 只自动清理全局位置,项目级钩子需日后手动删除。
- 确保配置文件存在且为有效 JSON:若文件为空或 jq 解析失败则写入 {},绝不整体覆盖文件,后续所有修改均通过 jq 合并以保留已有键。
- 添加 caveman SessionStart 钩子:命令带有 # conan-caveman-autostart 注释标记以便查找和移除,通过符号链接实时读取 SKILL.md 并包装为 additionalContext。使用 if … any(test(...)) 守卫保证幂等,重复运行不会添加重复项。
- 创建 git-guardrails 辅助脚本:将指定内容写入 $HOOK_DIR/conan-git-guardrails.sh 并 chmod +x。脚本自包含,不依赖技能内置脚本,因此不受技能内部布局影响。脚本读取 tool_input.command,若匹配 DANGEROUS_PATTERNS 中的任一模式则输出 BLOCKED 信息并以退出码 2 退出。
- 添加 git-guardrails PreToolUse 钩子:命令路径包含 conan-git-guardrails,作为 uninstall.sh 的匹配标记,同样使用幂等守卫。
- 验证:用 jq '.hooks' 查看两个钩子;用 git push 命令测试应输出 BLOCKED 且退出码为 2;用 git status 测试应无输出且退出码为 0。
- 向用户确认:报告范围与配置文件路径、caveman SessionStart 钩子已添加(实时读取 SKILL.md,编辑自动生效,下次会话生效)、git-guardrails PreToolUse 钩子及辅助脚本路径已添加。日后如需撤销,可在仓库根目录运行 ./uninstall.sh(加 --yes 跳过提示)。
适用场景
适用于使用 conan-skills 技能集、希望通过钩子自动启用 caveman-mode 并防止 Claude 执行破坏性 git 操作的 Claude Code 用户。
限制
需要预先安装 jq 与相关技能;项目级配置无法由 uninstall.sh 自动清理;钩子在下次会话才生效;收费、价格与其他平台支持情况暂未提供。