关于 blueprint-derive-rules
这是一个 Claude skill,可从 Git 历史提取项目约定并生成带范围的 Claude 规则,适用于提交记录较丰富的仓库。遇到决策冲突时优先采用较新的提交。
主要功能
- 01按日期和范围分析提交
- 02从不同提交类型提取决策
- 03按时间和频率解决冲突
- 04生成限定范围的规则文件
- 05将结果记录到 Blueprint 清单
适用场景
- 01从成熟项目提炼编码规范
- 02记录过往修复中的模式
- 03架构变更后更新规则
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ laurigates/ claude-plugins --skill blueprint-derive-rules安装后在 Claude Code 中输入/blueprint-derive-rules确认已加载。
附带文件REFERENCE.md
详细介绍
/blueprint:derive-rules
从 Git 提交历史中提取项目决策,并将其编写为 Claude 规则。发生冲突时,较新的提交会覆盖较旧的决策。
使用场景:从 Git 历史中推导隐式项目模式,建立一致的 AI 辅助开发指南。
用法:/blueprint:derive-rules [--since DATE] [--scope SCOPE]
何时使用此技能
| 在以下情况下使用此技能…… | 在以下情况下使用替代方案…… |
|---|---|
| 想从 Git 历史中提取隐式决策 | 根据需求创建规则(请改用 PRD) |
| 项目有大量提交历史 | 新项目,历史记录较少 |
| 建立项目编码标准 | 快速手动创建规则 |
上下文
- Git 仓库:!
git rev-parse --git-dir - Blueprint 已初始化:!
find . -path '*/docs/blueprint/*' -maxdepth 3 -name 'manifest.json' -type f - 提交总数:!
git rev-list --count HEAD - Conventional Commits 占比:!
git log --format="%s" - 默认位置的现有规则:!
find . -path '*/.claude/rules/*' -maxdepth 3 -name "*.md" -type f - Blueprint 子目录中的现有规则:!
find . -path '*/.claude/rules/blueprint/*' -maxdepth 4 -name "*.md" -type f
参数
解析 $ARGUMENTS:
--since DATE:分析指定日期之后的提交(例如,--since 2024-01-01)--scope SCOPE:聚焦于特定领域(例如,--scope api、--scope testing)
执行
执行完整的 Git 到规则推导工作流:
步骤 0:确定输出路径
从 docs/blueprint/manifest.json 中读取 structure.generated_rules_path(默认值为 .claude/rules/):
RULES_DIR=$(jq -r '.structure.generated_rules_path // ".claude/rules/"' docs/blueprint/manifest.json)
mkdir -p "$RULES_DIR"
后续所有读取、写入和冲突检查都使用 $RULES_DIR。此技能有意忽略父级 .claude/rules/ 中手写的文件(问题 #1043)。
步骤 1:验证前提条件
- 如果不是 Git 仓库 → 错误:“此目录不是 Git 仓库”
- 如果 Blueprint 尚未初始化 → 建议先运行
/blueprint:init - 如果提交较少(< 20)→ 警告:“提交历史有限;推导出的规则可能不完整”
步骤 2:分析 Git 历史质量
- 计算范围内的提交总数
- 计算 Conventional Commits 占比
- 报告质量:占比越高,从中提取的规则可信度越高
- 解析
--since和--scope标记以确定分析范围
步骤 3:提取包含决策的提交
使用并行 Agent 高效分析 Git 历史(参见 REFERENCE.md):
- Agent 1:分析
refactor:提交中的代码风格模式 - Agent 2:分析
fix:提交中的重复问题类型 - Agent 3:分析
feat!:和BREAKING CHANGE:提交中的架构决策 - Agent 4:分析
chore:和build:提交中的工具决策
按领域(代码风格、测试、API 设计等)、时间顺序(最新优先)和频率(最常见者优先)整合发现。
步骤 4:解决冲突
当多个提交涉及同一主题时:
- 使用模式匹配检测冲突:
git log --format="%H|%ai|%s" | grep "{topic}" - 应用解决策略:
- 较新者覆盖较旧者:以最新决策为准
- 频率较高者优先:如果 5 个提交支持 X,而 1 个提交支持 Y,则以 X 为准
- 破坏性变更优先:
feat!:优先于常规提交
- 将被覆盖的决策标记为“已取代”,并引用较新的决策
- 通过 AskUserQuestion 向用户确认重要决策
步骤 5:在 $RULES_DIR 中生成规则
对于每项决策,使用 REFERENCE.md 中的模板生成规则文件。将每个文件写入 $RULES_DIR/<filename>.md(配置的 structure.generated_rules_path):
-
提取源提交、日期和类型
-
确定置信度级别(根据提交频率和清晰度分为高/中/低)
-
生成可执行的规则说明
-
加入提交差异中的代码示例
-
引用任何已被取代的早期决策
-
必须:除非规则确实适用于所有情况,否则必须通过
paths:frontmatter 为每条生成的规则限定范围。 没有paths:的规则会在每个会话中加载,并污染无关工作的上下文。根据源信号选择paths::信号 来源 paths:值规则正文通过“从 <path>提取的模式”引用特定文件步骤 3/4 冲突解决 对该文件所在目录使用 Glob: <dir>/**/*.<ext>规则源自 chore(deps)/build:提交工具决策 Agent 锁文件和清单: package.json、pyproject.toml、Cargo.toml、go.mod、*.lock、biome.json等规则涉及某种语言( refactor:+ 仅包含 JS 的代码块)代码风格 Agent 语言 Glob: **/*.{js,jsx,ts,tsx}、**/*.py、**/*.rs规则涉及测试 测试策略 Agent **/*.{test,spec}.*、tests/**/*、test/**/*规则涉及 API 端点 API 设计 Agent src/{api,routes}/**/*、**/*controller*、**/*handler*规则涉及文档 文档 Agent docs/**、**/*.md规则重述了全局项目上下文(已在 CLAUDE.md 中) 任意 不要生成——这是 CLAUDE.md 的职责;中止生成该规则 规则确实适用于每个文件(例如通用的错误处理理念、安全意识) 少见 有意省略 paths:,并在规则正文中注明“全局规则”默认限定范围。自动推导的起点:提取规则正文中每个代码块引用的文件扩展名/目录根路径,并将其写入
paths:。写入前,请验证生成的 Glob 集确实能匹配工作树中的文件——如果匹配列表为空,说明推断的范围有误;请重新推导。
按类别生成单独的规则文件(规范文件名和默认 paths: 见 REFERENCE.md):
code-style.md、testing-standards.md、api-conventions.md、error-handling.md、dependencies.md、security-practices.md
步骤 6:处理与现有规则的冲突
仅检查 $RULES_DIR 下的现有规则是否存在冲突(绝不检查上级 .claude/rules/,其中可能包含与 blueprint 无关的手写内容):
- 如果发现冲突 → 询问用户:以 Git 派生规则覆盖现有规则,还是保留现有规则?
- 应用用户的选择:更新、合并或分别保留
- 在规则文件中记录冲突解决情况
步骤 7:更新任务注册表
更新 docs/blueprint/manifest.json 中的任务注册表条目:
jq --arg now "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
--arg sha "$(git rev-parse HEAD 2>/dev/null)" \
--argjson processed "${COMMITS_ANALYZED:-0}" \
--argjson created "${RULES_DERIVED:-0}" \
'.task_registry["derive-rules"].last_completed_at = $now |
.task_registry["derive-rules"].last_result = "success" |
.task_registry["derive-rules"].context.commits_analyzed_up_to = $sha |
.task_registry["derive-rules"].stats.runs_total = ((.task_registry["derive-rules"].stats.runs_total // 0) + 1) |
.task_registry["derive-rules"].stats.items_processed = $processed |
.task_registry["derive-rules"].stats.items_created = $created' \
docs/blueprint/manifest.json > tmp.json && mv tmp.json docs/blueprint/manifest.json
步骤 8:更新清单并报告
- 使用派生规则的元数据更新
docs/blueprint/manifest.json:时间戳、已分析的提交、生成的规则、源提交 - 生成完成报告,显示:
- 已分析的提交(数量和日期范围)
- Conventional Commits 的占比
- 按类别生成的规则
- 每条规则的置信度评分
- 已解决的任何冲突
- 提示用户选择下一步:审查规则、执行派生的开发工作流,或结束
Agent 式优化
| 上下文 | 命令 |
|---|---|
| 检查 git 状态 | git rev-parse --git-dir 2>/dev/null && echo "YES" || echo "NO" |
| 统计提交总数 | git rev-list --count HEAD 2>/dev/null || echo "0" |
| Conventional Commits 占比 | git log --format="%s" | grep -c "^(feat|fix|refactor)" || echo 0 |
| 提取决策类提交 | git log --format="%H|%s|%b" | grep -E "(always|never|must|prefer)" |
| 快速推导 | 对多领域分析使用并行 Agent(Explore) |
有关 git 分析模式、规则模板、冲突解决和详细流程,请参阅 REFERENCE.md。