agent-email
Agent 专用邮箱统一管理:让 Claude Code、Codex 等平台的 Agent 用一套命令收发邮件、整理收件箱、分发任务。支持网易 ClawEmail(claw.163.com)和腾讯 Agent Mail(QQ…
本技能应在 GitHub 项目发布新版本时使用,覆盖版本号管理、CHANGELOG 同步、Release Notes 撰写、tag 创建、CI 构建监控、发布验证和历史清理全流程。适用于桌面应用、CLI 工具、Web 应用、库/SDK 等任何基于 GitHub 的软件项目。当用户提到"发布"、"release"、"打 tag"、"新版本"、"更新版本号"、"写 release notes"、"发布失败了"、"CI 挂了"、"Actions 配额告急"、"短时间内多次发版"、"monorepo"、"批量打包"、"多 skill 发布"、"skill
$ npx -y skills add cat-xierluo/legal-skills --skill release-workflow --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/release-workflowContext preview
The summary Claude sees to decide when to auto-load this skill.
本技能应在 GitHub 项目发布新版本时使用,覆盖版本号管理、CHANGELOG 同步、Release Notes 撰写、tag 创建、CI 构建监控、发布验证和历史清理全流程。适用于桌面应用、CLI 工具、Web 应用、库/SDK 等任何基于 GitHub 的软件项目。当用户提到"发布"、"release"、"打 tag"、"新版本"、"更新版本号"、"写 release notes"、"发布失败了"、"CI 挂了"、"Actions 配额告急"、"短时间内多次发版"、"monorepo"、"批量打包"、"多 skill 发布"、"skill
name: release-workflow description: 本技能应在 GitHub 项目发布新版本时使用,覆盖版本号管理、CHANGELOG 同步、Release Notes 撰写、tag 创建、CI 构建监控、发布验证和历史清理全流程。适用于桌面应用、CLI 工具、Web 应用、库/SDK 等任何基于 GitHub 的软件项目。当用户提到"发布"、"release"、"打 tag"、"新版本"、"更新版本号"、"写 release notes"、"发布失败了"、"CI 挂了"、"Actions 配额告急"、"短时间内多次发版"、"monorepo"、"批量打包"、"多 skill 发布"、"skill zip"、"专家套件 zip"时触发。也用于拒绝把 release 当作 CI 验证机制("打 tag 看一下")的反模式场景。不要用于非 GitHub 项目(如纯 GitLab / Gitea 项目)或无需 CI 的手动发布场景。 version: "1.6.3" license: MIT License - 详见 LICENSE.txt
软件项目的全流程发布工作流。适用于 GitHub 上的任何类型项目。
GitHub 项目的完整发布周期:从版本号确定到 CI 构建验证。CI 故障排查(`references/ci-troubleshooting.md`)和特定项目类型指南(`references/` 下各文档)作为发布流程的补充参考。
**与 git-workflow 的职责边界**:本技能只负责发版流程内的 CI 构建监控(第 4 步)与发布成本约束(配额红灯)。日常 Actions 配额治理——CI 分钟耗尽停挂止血、workflow 停挂/恢复、workflow_dispatch 化、仓级总闸——由 `git-workflow` §11 负责。发版中出现 CI 故障:构建产物/签名/发布链路问题读本技能;账号级配额治理问题转 git-workflow。
`config/projects.yaml` 集中管理各项目的发布配置(仓库、平台、自动更新、排除产物等)。发布时先读取对应项目配置,按配置决定构建矩阵和预期产物。模板见 `config/projects.example.yaml`。
带应用内更新的桌面项目,还必须读取 [真实升级与热修门禁](references/updater-hotfix.md):验签、旧客户端能力、进程回收、数据恢复和实际安装路径分别验收。
| 检查项 | 说明 | |--------|------| | 工作区干净 | `git status` 无未提交变更 | | 版本号一致 | 所有版本号文件(package.json / Cargo.toml / pyproject.toml 等)与 CHANGELOG.md 最新条目一致 | | CHANGELOG 已更新 | 包含目标版本的结构化条目 | | CI 工作流存在 | `.github/workflows/` 中有 release 相关工作流且 tag 触发配置正确 | | 本地测试门禁 | `npm test`(或项目对应单测命令)整体通过。**单条失败先重跑确认是否偶发**再定性:偶发 flaky(非本次改动引入的回归)修测试或单独跟进,不要因此阻塞发布;但若全量多次复现、指向真实回归,必须先修复再发版 |
任一条件不满足,先修复再继续。
**打 tag / 创建 GitHub Release 是把版本号给真实用户**,不是 CI 验证机制。**把 release workflow 当作"看 CI 跑没跑通"或"我下载个 artifact 自己测一下"是反模式,必须禁止。**
| 反模式 | 表现 | 为什么错 | |--------|------|----------| | **把 tag 当 smoke test** | "我改了一行,打个 tag 看看 CI 跑不跑得通" | 一次 release 吃掉 300+ 配额分钟,5 次测试 = 一月配额清零 | | **用 release 验证构建产物** | "我想看 .dmg 长什么样,必须跑 release" | 应该用专门的 preview / draft build workflow(见下) | | **同一天 / 24h 内发多个 patch** | v0.3.16 / 17 / 18 一天内连发,各是同一个 bug 的连续小修 | 全部攒到下次一起发,成本立省 60%+ | | **draft release 当"先跑一次试试"** | "我先 draft release 看 artifact 行不行" | draft 一样跑完整 CI,一样消耗配额,一样污染 release 历史 | | **单平台 dry-run 验构建** | "先跑 Linux dry-run 看看,不发全平台" | dry-run 一样消耗 CI 时间,开了口子就停不下来;改走 preview workflow | | **小改动发 patch** | "我改了 typo / 改了一行文档,必须 vX.Y.Z" | 纯 typo / 文档小改 / 单文件改动不构成发版理由,合并到下个有实质内容的版本 | | **"已经打 tag 了,跑都跑了"** | "v0.3.22 tag 已经推上去了,CI 反正也在跑" | "已经做了"不是继续做的理由;记录这次浪费并阻止下次重复 |
**A. 想验证 CI 跑不跑得通 / 看构建产物长什么样?**
**B. 真的有用户能拿到的修复要发?**
打 tag 之前,**必须回答下面 5 个问题**。AI 代理被请求发布新版本时,必须**主动**逐条打印最终候选自检结果;缺少该版本的明确发布授权时再请用户确认,不得跳过验证直接打 tag。
1. 这是给真实用户装的,还是只给自己看 artifact? 2. CHANGELOG 已经有结构化的本版本条目(不是空、不是单行 typo)? 3. 距上次 tag ≥ 24 小时? 4. 本次累计有 ≥ 1 个实质修复 / 特性 / 改动(纯文档 / typo / 单行 README 修改不算)? 5. 如果上述任一不满足:能合并到下次发版吗?
**第 1、2、4 问答“否”或关键证据未知:不要打 tag。第 3 问不足 24 小时,只有已复现的真实安装/更新阻断且用户明确授权的 hotfix 才可例外;说明原因、独立审查和完整候选验证结果,禁止用例外进行发行试错。**
**AI 代理实操规则**:打 tag 前显式列出五问答案,并绑定最终候选与验证。用户已明确授权该版本及 hotfix 范围时,沿用授权,不重复索取同一确认;未获授权时先完成可审阅候选再确认。授权不代替验证,禁止通过反复移动同一个 tag 排查问题。
| 借口 | 现实 | |------|------| | "我就看一眼,tag 一下马上回滚" | tag 推送已经触发了完整 CI,回滚 tag 不能退款 Actions 分钟 | | "用户催着要" | 用户不知道你的 Actions 配额,告诉 ta 合并到明天的成本和时间,让 ta 选 | | "反正之前都这么干" | 之前能用不等于现在合理,这正是 91% 配额的直接成因 | | "只有 release workflow 跑完整矩阵" | 加一个 preview workflow(成本是 release 的 10-20%),不要用 release 凑合 | | "draft release 不算正式发布" | draft 一样跑完整 CI、一样消耗配额、一样污染 release 历史 | | "小改动发 patch 很常见" | 纯 typo / 文档 / 单行不构成发版理由,合并到下个有实质内容的版本 | | "我已经打 tag 了,跑都跑了" | "已经做了"不是继续做的理由;记录这次浪费,阻止下次重复 | | "单平台先 dry-run 一下" | dry-run 一样消耗 CI 时间,开了口子就停不下来;改走 preview workflow | | "这次不一样,这次真的需要发" | SemVer 的 patch 版本本来就允许累积;下次发版不是更优解吗 |
**出现红灯先停止发行副作用并核对原因。真实 hotfix 频率例外见上文;保留失败证据,不自动删除或移动 tag,已公开版本不得覆写。**
patch 版本(X.Y.Z+1)可以是 **新功能累积**,也可以是 **hotfix 单一修复**。区分清楚才能避免「把 release 当测试」反模式。
判定信号:`gh run view --log-failed` 输出包含具体 error line(不是单纯的 `Timeout` / `Resource exhausted` 这种 transient 错误)。
build job 失败: - 输出含 E0599 / Cargo compile error / 链接错误 → 真实代码 bug,修代码再重打 - 输出含 "Timeout" / "Resource exceeded" / "Killed" → transient,可直接重试 publish job 失败: - 输出 "Missing signatures" + 产物清单缺 sig → 检查 includeUpdaterJson + bundle.targets(详见 tauri-release.md 红线 8) - 输出 "Signature not found for the updater JSON. Skipping upload..." → tauri-action 跳过整批 updater,检查 build 产物目录 - 输出 "Unable to download" / "rate limit" → transient 本地单测(vitest / jest)失败,发布前门禁: - 单条 "Timed out waiting for condition" 超时失败 → 大概率 flaky(轮询式 waitUntil + 动态 import 的异步链在测试环境下偶发跑不完),先重跑该文件确认;连跑仍偶发则修测试(轮询预算给足),不属于本次改动引入的回归,不阻塞发布 - 多条/全量复现、或错误指向具体代码行为 → 真实回归,先修代码再发版
最佳实践:先 `gh release view <tag> --json assets,isDraft,targetC
Agent 专用邮箱统一管理:让 Claude Code、Codex 等平台的 Agent 用一套命令收发邮件、整理收件箱、分发任务。支持网易 ClawEmail(claw.163.com)和腾讯 Agent Mail(QQ…
把一句自然语言(机票/高铁/开庭/会议/截止日期/聚会/看病等)或一张票据截图,自动变成苹果「日历」事件 + 一串按事件类型智能提前的「提醒事项」。在 macOS 上运行、经 iCloud 同步到 iPhone/iPad。当用户说「帮我加个日程/提醒」「机票…
律师案件看板。本地零依赖看板服务(案件总览、任务三态看板、期限预警、进度写回)+周研判分析。当用户说"打开看板/dashboard/案件面板/看下案件进度/给我案件周报研判"时使用。案件状态写入与上下文管理用 case-progress(/progress…
案件进度与状态台账管理。案件 case.yaml 的唯一写入引擎(新增任务、推进任务、登记期限、更新案件阶段、校验、存量迁移),Agent 会话的进度加载与写回契约,以及案件进度监控对账。当用户或 Agent…