Skip to content

3.1 实战一:变更总结技能包

引言

小王每天下班前都要回顾今天改了什么、有没有遗漏风险、提交信息怎么写。这个流程每天都在重复——完美的技能包候选


通用需求(所有工具适用)

变更总结能力应该做到:

  1. 自动获取当前 git diff 和未跟踪文件
  2. 总结主要变更(2-3 个要点)
  3. 标记潜在风险
  4. 建议提交信息

Claude Code 实现(详细示例)

创建 .claude/skills/summarize-changes/SKILL.md

markdown
---
name: summarize-changes
description: 总结未提交的变更并标记风险。当说"总结变更"、"看看改了什么"、"变更概览"时使用
disable-model-invocation: true
---

## 当前变更

!`git diff HEAD`

## 未跟踪文件

!`git ls-files --others --exclude-standard`

## 指令

1. 用 2-3 个要点总结主要变更(关注改了什么、为什么改)
2. 标记任何潜在风险:
   - 是否删除了重要代码
   - 是否修改了公共接口
   - 是否涉及安全敏感操作
3. 建议一条 conventional commits 格式的提交信息

设计决策解析

为什么设 disable-model-invocation: true

虽然总结变更是只读操作,但小王希望主动控制何时查看变更,而不是 Claude 在每次对话中自动触发。

💡 只读操作的 disable-model-invocation 判断原则

有副作用 → 必须 disable-model-invocation: true(部署、提交、发送消息)

只读操作 → 根据使用频率决定:

  • 高频只读(如代码 lint)→ 可自动触发,因为经常需要
  • 低频只读(如变更总结)→ 建议手动触发,避免干扰正常对话

为什么用 !git diff HEAD``?

Claude 需要看到实时的 diff 数据才能做出准确判断。如果只是写"请查看 git diff",Claude 还要自己执行命令——多一步,多一次不确定性。

为什么不把 git log 也注入?

git log 可能很长,会消耗大量 token。如果需要,可以单独写一个 /project-status 技能包(我们在 3.3 节会做)。


其他工具等效做法

Cursor 用户

在设置中创建 Custom Command,Prompt 内容:

markdown
请执行以下操作总结当前变更:

1. 运行 `git diff HEAD` 查看变更内容
2. 运行 `git ls-files --others --exclude-standard` 查看未跟踪文件
3. 用 2-3 个要点总结主要变更
4. 标记潜在风险(删除重要代码、修改公共接口、安全敏感操作)
5. 建议 conventional commits 格式的提交信息

Windsurf 用户

.windsurfrules 中添加:

yaml
change-summary:
  globs: "**/*"
  instructions: |
    当用户询问变更总结时:
    - 先执行 git diff HEAD 查看变更
    - 分析并总结主要变更(2-3 个要点)
    - 标记潜在风险
    - 建议提交信息格式

测试(Claude Code)

  1. 修改几个文件,不提交
  2. 输入 /summarize-changes
  3. 检查 Claude 的输出是否包含:变更总结、风险标记、提交信息建议

练习

🎯 练习题

(Claude Code 用户)在 summarize-changes 技能包中增加一个功能:显示当前分支名和与 main 分支的差异数量。

提示:

  • !git branch --show-current`` 获取分支名
  • !git rev-list --count HEAD ^main`` 获取差异提交数

(其他工具用户)为你的工具创建类似的变更总结能力。


本节小结

📌 本节核心要点

  • 变更总结技能包:5 行指令 + 2 个动态注入(Claude Code),覆盖日常变更回顾需求
  • 设计决策:只读也建议手动控制——避免干扰正常对话
  • 动态注入选择:只注入 AI 绝对需要的实时数据,避免 token 浪费
  • 其他工具:在 Prompt 中描述"执行命令获取数据"的要求,让 Agent 自行执行

思考题

  1. 如果你的项目用的是 pnpm 而不是 npm,这个技能包需要改吗?为什么?
  2. 你会把这个技能包放在项目级还是个人级?为什么?
  3. (其他工具用户)你使用的工具如何实现"主动控制何时查看变更"?有没有等价的禁止自动触发机制?

下一节预告

下一个实战更复杂——Issue 修复技能包。它会用到参数、动态注入和工具预授权(Claude Code 特性),覆盖一个完整的工作流。

下一节:实战二——Issue 修复技能包