conventional-commits
Conventional Commits
本技能用于在执行 git commit 前,为当前变更生成符合 Conventional Commits 1.0.0 的提交信息。
官方规范参考:https://www.conventionalcommits.org/zh-hans/v1.0.0/
默认语言要求:提交信息的人类可读内容使用中文。Conventional Commits 的结构化关键字仍保持规范要求的英文形式,例如 feat、fix、docs、BREAKING CHANGE。
目标不是机械套模板,而是让提交标题准确表达“这次提交的主要意图”。如果当前暂存区混入了多个不相关变更,优先拆分提交,而不是写一个含糊的大杂烩 message。
Workflow
-
先看本次提交的真实范围。
- 运行
git status --short、git diff --cached --stat,必要时查看git diff --cached。 - 只根据已经 staged 的内容写提交信息;不要把未暂存改动算进去。
- 如果 staged 里混入多个彼此独立的意图,优先建议拆成多个 commit。
- 运行
-
判断本次提交的主要类型。
- 新增用户可感知功能,用
feat。 - 修复 bug,用
fix。 - 只改文档,用
docs。 - 只改测试,用
test。 - 不改变行为的重构,用
refactor。 - 性能优化,用
perf。 - 构建、依赖、打包、运行时或外部工具链调整,用
build。 - CI 或自动化流程调整,用
ci。 - 纯格式调整且不改逻辑,用
style。 - 其他杂项维护工作,用
chore。 - 回滚既有提交时,优先用
revert。
- 新增用户可感知功能,用
-
决定是否需要 scope。
- scope 是可选的,但在能明显指出变更边界时应当加上。
- scope 应该是描述代码区域、模块、包、子系统或目录的名词,例如
api、parser、skills、readme。 - 不要为了凑格式写空泛 scope;如果范围并不清晰,可以省略。
-
写标题行。
- 使用格式:
<type>[optional scope]: <description>。 type默认使用小写。- 冒号必须是英文半角
:,后面跟一个空格。 description必须使用中文,写成简短摘要,聚焦结果,不要堆实现细节。- 标题不要以句号结尾,不要写成多个并列动作。
- 使用格式:
-
需要时补正文和脚注。
- 当只看标题无法说明动机、背景或关键实现时,再补正文。
- 正文与标题之间必须空一行。
- 正文内容默认使用中文。
- 需要引用 issue、review、兼容性说明等信息时,用脚注。
- 脚注放在正文之后,并与正文之间空一行。
- 常见脚注可使用
Refs: #123、Reviewed-by: name等 trailer 风格;脚注 token 可保留英文,说明值默认使用中文。
-
识别破坏性变更。
- 如果本次提交引入破坏性变更,必须显式标记。
- 可以写成
<type>(scope)!: <description>或<type>!: <description>。 - 如需进一步解释影响,补充脚注:
BREAKING CHANGE: <description>,其中说明内容默认使用中文。 BREAKING CHANGE必须使用大写。
Default Heuristics
- 一个提交只表达一个主要意图;不要把“新增功能 + 顺手重构 + 修文档”压成一个标题。
- 如果一个提交同时像
feat又像fix,回到 diff 重新判断主导意图;必要时拆 commit。 chore不是兜底垃圾桶。只在变更确实不属于更具体类型时再使用它。- 不要根据文件扩展名机械判断类型;例如改
README.md多半是docs,但改生成文档的脚本可能更像build或feat。 - 只修改测试来覆盖既有行为,通常是
test;如果是“为了交付新功能而顺带补测试”,主类型仍可能是feat。
Output Rules
- 默认先给出一个推荐标题。
- 如果正文或脚注确实有必要,一并给出完整提交信息块。
- 如果 staged 变更明显应该拆分,先指出建议的拆分方式,再分别给出每个 commit message。
- 如果仓库已经有
commitlint、发布脚本或团队扩展规则,在不违背官方规范核心结构的前提下优先兼容仓库现有约束。 - 除非仓库已有别的明确规范,否则不要发明团队私有 type。
- 除
type、可选scope和必要的结构化 token 外,默认不要输出英文描述。
Examples
feat(skills): 新增 conventional-commits 技能
fix(parser): 修复元数据加载器对空 scope 名称的处理
docs(readme): 补充技能安装流程说明
refactor(sync): 拆分远端解析与安装步骤
feat(api)!: 移除旧版令牌接口
BREAKING CHANGE: 客户端必须迁移到 v2 令牌交换接口。
Guardrails
- 不要在没看 staged diff 的情况下猜测提交类型。
- 不要把未暂存内容写进 commit message。
- 不要把多项无关改动包装成一个宽泛的
chore或misc。 - 不要遗漏破坏性变更标记。
- 不要为了追求简短而丢掉会影响审阅和发布的重要上下文。
- 不要把标题描述、正文说明或破坏性变更说明写成英文,除非用户明确要求其他语言。
More from why8023/agent-skills
python-use
定义 Python 环境管理和依赖管理的强制规范。当 Agent 需要使用 Python、创建虚拟环境、安装依赖、管理 Python 版本时必须应用此技能。强制使用 uv 工具,禁止 pip/conda,确保项目级环境隔离。
11nodejs-use
定义 Node.js 环境管理和版本管理的强制规范。当 Agent 需要使用 Node.js、管理 Node 版本、安装 JavaScript 依赖、处理 packageManager 或 Corepack、编写或读取 mise.toml / .mise.toml / .tool-versions,或将旧项目从 volta、fnm、.node-version、.nvmrc 迁移到 mise 时必须应用此技能。强制使用 mise 管理 Node.js 运行时,禁止手动安装 Node.js,确保项目级环境隔离。
10git-repo-normalize
Standardize Git repository line-ending handling before any Git-related work. Use whenever Codex is about to operate on a Git repo, including version bumps, releases, commits, tags, diffs, CI workflow edits, or investigation of LF/CRLF warnings. On the first handling of a repo, add or reconcile the root .gitattributes rule `* text=auto eol=lf`, renormalize tracked files, review the diff, and complete this normalization before continuing with other repo work.
8skill-authoring-sync
在 `why8023/agent-skills` 中央 skills 仓库中新增、更新或重命名一个 skill,并在完成后把该 skill 安装到某个业务项目根目录时使用。适用于“新建一个 skill”“把 skill 沉淀到中央仓库”“把中央 skill 安装到当前项目”“更新项目里已安装的某个中央 skill”等请求。覆盖 `skills/skill-name/` 目录创建、`SKILL.md` 与 `agents/openai.yaml` 编写、最小验证、按目标 skill 单独提交并 push,以及在目标项目中通过 `npx skills add why8023/agent-skills --skill skill-name` 做项目级安装或刷新。
4dependency-reuse-first
在代码功能开发场景中,先评估是否可复用流行、成熟、维护良好的第三方依赖、官方 SDK、平台能力或现成服务,再决定是否自行实现。当 Agent 收到新功能、新模块、协议或文件格式支持、基础设施集成、数据处理、认证授权、图表表格、抓取解析、缓存队列、测试辅助等开发需求,且存在“从零写一套”的风险时必须使用此技能。先做候选依赖调研与取舍,再开始编码。
3docling-word
使用 Docling CLI 解析 `.docx` Word 文件并导出 Markdown,同时把提取出的图片等附件统一整理到 Markdown 同级的 `attachments/` 目录。用于用户要求用 Docling 转 Word、要求通过 `uv tool install` 安装 Docling、或要求修正 Docling 附件路径与目录结构时。
2