From team-standards
Generates conventional git commit messages (feat/fix/refactor types, scope, Chinese body, author) for non-trivial staged diffs (>2 files/>30 lines or new/deleted files), prioritizing session edit intent over diffs. Enforced by hooks; auto-stage/commit/push only in team-standards repo.
npx claudepluginhub exception-coder/team-standards --plugin team-standardsThis skill uses the workspace's default tool permissions.
`hooks/check-git-commit-skill.js` 已经替你做了路由:
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Guides code writing, review, and refactoring with Karpathy-inspired rules to avoid overcomplication, ensure simplicity, surgical changes, and verifiable success criteria.
Executes ctx7 CLI to fetch up-to-date library documentation, manage AI coding skills (install/search/generate/remove/suggest), and configure Context7 MCP. Useful for current API refs, skill handling, or agent setup.
Share bugs, ideas, or general feedback.
hooks/check-git-commit-skill.js 已经替你做了路由:
M(仅修改现有文件,无 A/R/D)→ hook 直接放过 git commit,根本不会进本 skill,模型用一句清晰的 commit message 提交即可。阈值可用环境变量 TEAM_STANDARDS_TRIVIAL_FILES / TEAM_STANDARDS_TRIVIAL_LINES 调整。"skill":"team-standards:git-commit-standards" 调用记录,未调用直接 exit 2 阻断 → 你看到这套五步清单就意味着本次属于"大改"。核心原则:提交信息以当前会话的实际改动意图为准;diff 只是用来兜底校验"有没有遗漏"或"有没有出现你没碰过的文件"。不要把 diff 再翻译成文字——那是重复劳动,且会丢掉只在会话里有的 WHY(设计取舍、踩坑、跟用户对齐的结论)。
team-standards 特例(只作用于插件源码仓库): 仅当以下三项同时满足时,才自动完成 git add → git commit → git push:
team-standards / kpay-team-standards。skills/、hooks/、.claude-plugin/、.codex-plugin/、AGENTS.md、CLAUDE.md、README.md、docs/skill-flow*、docs/dev-log/。业务项目即使安装了 team-standards plugin,也绝不触发自动 stage、自动 commit、自动 push 或自动版本号递增。业务项目提交必须走普通确认流程。
授权边界: 自动 push 是本 skill 的行为规则,不等于可以绕过 Codex / Claude / IDE 宿主的命令审批。若宿主环境对 git push 启用了每次确认,仍会弹授权;只有宿主支持并保存了对应命令授权时,后续才可能免确认。
<type>(<scope>): <标题——用一句话说清楚做了什么>
<body——中文说明,解释为什么这样改、改了哪些地方、解决了什么问题>
Author: <姓名> <邮箱>
| 部分 | 规则 |
|---|---|
type | 必填,见下表 |
scope | 可选,填模块/功能名,如 order、user-auth |
| 标题 | 不超过 72 字符;动词开头;不加句号 |
| body | 必填;中文;说清楚改了什么、为什么改;多点用换行 |
| Author | 必填;格式:姓名 <邮箱>;只填真实提交者,禁止添加任何 AI 工具署名 |
| Type | 含义 | 示例场景 |
|---|---|---|
feat | 新功能 | 新增接口、新增业务流程 |
fix | Bug 修复 | 修复空指针、修复逻辑错误 |
refactor | 重构 | 不改变功能的代码改善,如提取方法、替换实现 |
perf | 性能优化 | 优化 SQL、减少 N+1 查询、加缓存 |
docs | 文档 | 修改注释、更新 Javadoc、更新设计文档 |
test | 测试 | 新增/修改单元测试或集成测试 |
style | 格式 | 不影响逻辑的格式调整(空格、换行、命名) |
chore | 杂项 | 依赖升级、配置修改、构建脚本 |
ci | CI/CD | 流水线配置变更 |
revert | 回滚 | 回滚某次提交 |
收到提交任务时,立即用 TodoWrite 创建以下五条待办项,逐条完成后标记:
[ ] 第一步:读取 git config user.name / user.email
[ ] 第二步:基于会话上下文确认改动范围;用 git diff --staged --name-only 兜底校验
[ ] 第三步:用会话已知的改动意图直接写 type / scope / body
[ ] 第四步:输出完整提交信息;team-standards 自动收尾场景记录"自动确认"
[ ] 第五步:执行 git commit;team-standards 自动收尾场景继续执行 git push
git config user.name
git config user.email
优先用会话上下文,不要直接全量读 diff。
a) 从对话历史归纳本次会话中你 Edit/Write 过的所有源文件,以及每个文件的改动意图。
b) 跑一次轻量校验:
git status --short
git diff --staged --name-only
c) 比对 staged 文件列表 vs 你在本次会话改过的文件:
| 情况 | 处理 |
|---|---|
| staged ⊆ 会话改过的文件 | 直接进第三步,不用读完整 diff |
| 出现你没碰过的文件(用户在 IDE 手动改 / 之前残留的 stage) | 对这部分文件跑 git diff --staged -- <file>,必要时问用户是否要一起提 |
| 工作区有未暂存变更 | team-standards 自动收尾场景执行 git add -A 后重新校验;其它场景暂停让用户先 git add |
| 当前会话被压缩过(关键改动上下文已丢失) | 降级:跑完整 git diff --staged + --stat 重建上下文 |
| 无任何变更 | 停止,不提交空 commit |
直接用会话里已知的改动目的填:
featfixrefactordocstestchorescope 从变更的包路径或模块名中提取(取最小公共前缀)。
body 段重点:
将完整提交信息输出给用户。
普通场景禁止在未收到用户确认的情况下执行 git commit。
使用 HEREDOC 方式传入提交信息:
git commit -m "$(cat <<'EOF'
type(scope): 标题
body 中文说明
Author: 姓名 <邮箱>
EOF
)"
提交信息末尾禁止追加任何内容,包括但不限于:
Co-Authored-By: Claude ...Generated by ...🤖 ...team-standards 插件源码仓库自动收尾场景在 commit 成功后继续执行:
git push
push 前必须确认 .claude-plugin/plugin.json、.claude-plugin/marketplace.json 版本一致;Codex 分发场景同时确认 .codex-plugin/plugin.json 已按变更类型递增。该版本号递增要求只适用于 team-standards 插件源码仓库,禁止在业务项目中套用。
出现以下念头时立即停止,回到对应步骤:
| 念头 | 现实 |
|---|---|
| "我已经改完了,直接全量 git diff --staged 再读一遍才放心" | 第二步明确:会话上下文优先,diff 只兜底;全量读是重复劳动 |
| "git config 肯定有值,跳过读取" | 必须执行命令确认,不能假设 |
| "提交信息很简单,不用确认直接提交" | 普通场景第四步确认是刚性要求;只有 team-standards 仓库自动收尾才免确认 |
| "业务项目安装了 team-standards,所以也自动提交推送" | 错。自动提交推送只作用于 team-standards 插件源码仓库 |
| "team-standards 改完先放着下次一起提" | 插件源码仓库要求小步提交并自动 push,避免累计大包变更 |
| "加上 Co-Authored-By 是好习惯" | 这是明确禁止的行为,立即删除 |
| "用户让我快点,可以省几步" | 用户说"提交"是 WHAT,流程是 HOW,不可跳过 |
feat(order): 新增订单支付状态回调接口
新增 PayCallbackController#callback() 接口,接收支付网关异步通知。
实现 OrderPayService#handleCallback() 处理支付结果,包含:
- 幂等校验(基于 payOrderNo 去重)
- 订单状态流转(待支付→已支付/支付失败)
- 发布 OrderPaidEvent 触发后续业务
Author: 张凯 <kai.zhang@example.com>
fix(user-auth): 修复 token 刷新时并发导致的重复登出问题
根因:TokenRefreshServiceImpl#refresh() 未加锁,并发请求同时判断 token 过期,
导致旧 token 被多次删除,后续请求因 token 不存在而被登出。
修复方式:对 userId 维度加分布式锁,确保同一用户同一时刻只有一个刷新操作执行。
Author: 李明 <li.ming@example.com>
refactor(payment): 替换 BeanUtils 为 MapStruct 转换器
将 PaymentServiceImpl 中 BeanUtils.copyProperties 替换为 PaymentConvert.INSTANCE 转换,
新增 com.example.payment.convert.PaymentConvert 接口。
无业务逻辑变更,仅优化转换方式,消除反射带来的类型安全隐患。
Author: 王芳 <wang.fang@example.com>
变更文件超过 5 个时,按模块分组描述,不逐文件列举:
feat(inventory): 新增库存预占与释放功能
【新增】
- InventoryReserveService 及其实现,支持库存预占、确认、释放三态流转
- inventory_reserve 表及对应 DO/Repository
【修改】
- OrderCreateServiceImpl#create():下单时调用库存预占接口
- InventoryController:新增预占查询接口
【依赖】
- 新增 com.example.inventory.feign.InventoryFeignClient,需同步部署库存服务
Author: 张凯 <kai.zhang@example.com>
Author 信息统一从当前仓库的 git 配置中读取,无需在 CLAUDE.md 中手动配置:
git config user.name # 例:张凯
git config user.email # 例:kai.zhang@kpay-group.com
每位成员在本机配置好 git 用户信息即可,Skill 自动读取。若仓库未配置,则回退读取全局配置(--global);若均为空,暂停并提示用户配置后再继续。