Agent 技能库 / 工程协作
changelog-writer
从 git 提交区间生成面向用户的 CHANGELOG,自动按 feat/fix/perf/破坏性变更分类。
触发条件(frontmatter.description)
根据 git 提交记录生成面向用户的 CHANGELOG。当用户要求"写更新日志""生成 release notes""整理这周的改动"时使用。不用于写提交信息本身。
目录结构
changelog-writer/ ├── SKILL.md └── scripts/collect_commits.sh
安装方式
- Claude Code把技能目录复制到以下位置,重启会话后自动可用
~/.claude/skills/<技能名>/项目级可放 <项目>/.claude/skills/ - Claude.ai / Desktop下载 .zip 后在 设置 → Capabilities → Skills 上传需要开启 Skills 功能
- Hermes Agent放到技能目录,Hermes 启动时自动加载
~/.hermes/skills/<技能名>/ - 其它 Agent任何支持 SKILL.md 约定(YAML frontmatter + 步骤 + 脚本)的框架都可直接使用本质是一个带说明文档的脚本目录
下载的 zip 解压后是 changelog-writer/ 目录,直接整个放进去即可,不用改文件名。
技能包内容
--- name: changelog-writer description: 根据 git 提交记录生成面向用户的 CHANGELOG。当用户要求"写更新日志""生成 release notes""整理这周的改动"时使用。不用于写提交信息本身。 --- # 生成 CHANGELOG ## 什么时候用 - 要发版本,需要面向用户的变更说明 - 周期性地整理「这段时间改了什么」 - 需要把一堆 commit 变成人话 **不要用**:给单个提交写 message。 ## 步骤 1. **确定范围**:`git log <from>..<to> --oneline`,没有边界就问清楚 2. **跑采集脚本**:`scripts/collect_commits.sh <from> <to>` 3. **分类**:新功能 / 改进 / 修复 / 破坏性变更 / 内部(不写进用户可见部分) 4. **翻译成人话**:`fix: 修复 a.ts 里 null` → 「修复了在某些情况下崩溃的问题」 5. **标注破坏性变更**,并给出迁移方式 ## 输出格式 ``` ## v1.2.0 (2026-10-27) ### 新增 - ... ### 改进 - ... ### 修复 - ... ### ⚠️ 破坏性变更 - ...(迁移方式:...) ``` ## 验证 - 用户读得懂(没有内部文件名、没有 commit hash) - 破坏性变更必须出现 - 同一功能的多条 commit 合并成一条 ## 陷阱 - 把 `chore: bump deps` 写进用户可见更新日志 - 一条 commit 一条日志(用户不关心你拆了几次提交) - 漏掉破坏性变更 → 用户升级后炸
SKILL.md 说明(Agent 读到后照此执行)
# 生成 CHANGELOG ## 什么时候用 - 要发版本,需要面向用户的变更说明 - 周期性地整理「这段时间改了什么」 - 需要把一堆 commit 变成人话 **不要用**:给单个提交写 message。 ## 步骤 1. **确定范围**:`git log <from>..<to> --oneline`,没有边界就问清楚 2. **跑采集脚本**:`scripts/collect_commits.sh <from> <to>` 3. **分类**:新功能 / 改进 / 修复 / 破坏性变更 / 内部(不写进用户可见部分) 4. **翻译成人话**:`fix: 修复 a.ts 里 null` → 「修复了在某些情况下崩溃的问题」 5. **标注破坏性变更**,并给出迁移方式 ## 输出格式 ``` ## v1.2.0 (2026-10-27) ### 新增 - ... ### 改进 - ... ### 修复 - ... ### ⚠️ 破坏性变更 - ...(迁移方式:...) ``` ## 验证 - 用户读得懂(没有内部文件名、没有 commit hash) - 破坏性变更必须出现 - 同一功能的多条 commit 合并成一条 ## 陷阱 - 把 `chore: bump deps` 写进用户可见更新日志 - 一条 commit 一条日志(用户不关心你拆了几次提交) - 漏掉破坏性变更 → 用户升级后炸