一键导入
notify
Send structured notification to team IM channel (WeChat Work webhook) — project-aware / per-project install
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Send structured notification to team IM channel (WeChat Work webhook) — project-aware / per-project install
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
流程编排引擎。推进 task.json.flow 步骤(init/check/complete/reset)并维护任务级事件流 task.json.events(emit/check/recent)。触发关键词:flow advance、推进流程、当前步骤、初始化流程、emit event、查事件、task.json.events、flow-engine。
TAPD 统一入口 skill。工单拉取、共识管理、子任务回填、事件驱动同步。触发关键词:tapd、初始化、ticket sync、共识、Wiki 评审、子任务、工时回填、QA 通过、QA 打回、TAPD 事件、契约推送、同步工单、拉工单。
产出结构化 handoff 工件,让新 session 无痕接续当前任务。ctx-guard 阻断或主动切换 session 时使用。触发关键词:context reset、上下文重置、新开 session、切换 session、handoff。
运行架构适应度函数检查代码结构、契约、依赖方向。在代码修改前后使用,确保不引入架构违规。触发关键词:fitness、架构检查、适应度、lint、代码质量检查。
工作流熵管理。清理 stale TAPD cache、孤立 _index 条目、过期 task report。每日定时或手动触发。触发关键词:gc、垃圾回收、清理、cleanup、定时清理。
Git 操作统一入口。分支生命周期(create/merge/cleanup)、worktree(create/remove)、提交推送(commit-push)。按 docs/git-brance-spec.md + Conventional Commits 中文规范执行。触发关键词:创建分支、合并到 dev、合并到 uat、删除分支、清理分支、git push、commit、推送代码、worktree、提交代码。
| name | notify |
| description | Send structured notification to team IM channel (WeChat Work webhook) — project-aware / per-project install |
| disable-model-invocation | false |
| installed-from | agent-dev-standard@cf04193 |
| adr-ref | ADR-005-skill-tier-semantics (notify = core / per-project / 每项目独立 SKILL.md 含 project-specific webhook + project_name) |
通过企业微信 Webhook 向团队 IM 渠道发送结构化消息。可被其他 skill 在关键节点调用。
Project-aware: 每个项目独立装一份 SKILL.md。install.sh 从 <project>/docs/env.yaml(或 <project>/env.yaml)读 project.name + notify.qiwei_webhook 替换 Chopard-bde + https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c43a1730-bbee-4f7a-86a0-d54396b639ef 占位符 / 装好后无占位符残留。
$ARGUMENTS:通知类型,可选值:
release — 发布通知(业务项目 / build + commit 清单)audit — 审查完成通知(/audit 全量审查报告生成后)close — Issue 关闭通知fix — 分拣完成通知issue — 今日 Issue 汇总(按 label 自动分类)governance — Governance milestone 通知(元层项目 / ADR Accepted / 多 issue 闭环 broadcast)qa-test — 转测通知(任务开发完成后通知 + @ QA 验收 / flow notify-qa-test 步骤调用)consensus-review — 共识/spec 评审请求通知(flow consensus-push 第三步调用 / @ roles_required)custom <message> [--at <role|名字>...] — 自定义消息;--at 显式指定 @ 对象(角色 pm/be/fe/qa 或中文名)https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c43a1730-bbee-4f7a-86a0-d54396b639ef(install.sh 从 <project>/docs/env.yaml notify.qiwei_webhook 替换)Chopard-bde(install.sh 从 <project>/docs/env.yaml project.name 替换)占位符
{{...}}在 install.sh 装载时替换为项目实际值。装好后 SKILL.md 应无{{残留(per Module 02 安装时 sed substitution)。
原则:消息中存在"明确的待办责任人"才 @,纯 FYI 广播不 @。 判定按下表,先于消息发送执行:
| 通知类型 | 是否 @ | @ 谁(角色 → team_roles) | 判定依据 |
|---|---|---|---|
qa-test | ✅ 必 @ | qa | 转测 = QA 的待办 |
consensus-review | ✅ 必 @ | task.json.tapd.roles_required(排除发起人自己) | 评审 = 被 @ 角色的待办 |
audit | 条件 @ | 待修复(BE)> 0 → @ be;待确认(PM)> 0 → 加 @ pm | 报告统计字段 |
fix | 条件 @ | 转 Issue(代码)> 0 → @ be | 分拣结果计数 |
issue | 条件 @ | "等 PM 确认"非空 → @ pm;"BE 可关闭"非空 → @ be | 分类计数 |
release | 默认不 @ | 含 breaking 变更/需回归验证字样 → @ fe + qa | 内容信号 |
close / governance | ❌ 不 @ | —(FYI 广播) | — |
custom | 显式优先 | --at 指定 > 内容含"请 <角色/名字> 处理/确认/评审/验收"句式 → 映射对应角色 | 显式参数 > 语义推断 |
@ 执行机制(企微约束,2026-06-04 实测背景:TAPD 评论 at-who 经 API 不触发通知,企微是唯一可靠通知通道):
企微 webhook 的 markdown 消息不支持 @,只有 msgtype=text 支持 mentioned_mobile_list(手机号)/ mentioned_list(企微 userid 或 "@all")。因此所有需 @ 的通知统一双发:
env.yaml.tapd.team_roles.<role>,每项取中文名("许迪智(DDXu)" → 许迪智);若 @ 对象 == 通知发起人本人,从列表剔除(自己不 @ 自己)env.yaml.notify.qiwei_mentions(扁平 [{name, mobile}],该文件已 gitignore 不入仓)按 name 匹配取 mobile,组成 mentioned_mobile_listmentioned_mobile_list);全空 → 跳过 @ 并 WARN:@ 对象(<名字列表>)在 notify.qiwei_mentions 的 mobile 未填,跳过 @,请在 env.yaml 补手机号(不阻断流程)mobile 全空的 fallback 选项(2026-06-05 session-review):debeers 等项目实测
qiwei_mentions预填了成员名但 mobile 全空(本地未填),导致 @ 始终降级为纯 markdown。企微text的mentioned_list也支持企微 userid 与"@all",二者均不依赖手机号:
- 若能拿到 userid(可经 wecomcli-contact skill 按姓名查),建议给
qiwei_mentions增补userid字段,mobile 空时 fallback 用mentioned_list;- QA 转测这类"群里所有人都该看"的场景,mobile/userid 都缺时可退到
"mentioned_list": ["@all"]。 上述为可选增强(需人工决策是否引入 userid 字段 / 是否接受 @all 噪声),当前默认行为仍是"全空跳过 @ + WARN",不阻断。
# 双发第 ② 条:text + @(模板,所有类型通用)
curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c43a1730-bbee-4f7a-86a0-d54396b639ef" \
-H "Content-Type: application/json" \
-d '{
"msgtype": "text",
"text": {
"content": "<一句话待办,如:请评审上述契约 / 请验收上述需求>",
"mentioned_mobile_list": ["<手机号1>", "<手机号2>"]
}
}'
consensus-review / qa-test / dev-complete(及 release 含设计变更时)的 markdown 主消息必带 TAPD 文档链接,从 task.json.tapd 取并以 [显示名](url) 格式呈现:
| 文档 | 字段来源 | 显示名 |
|---|---|---|
| 共识文档 | consensus_wiki_url | 共识文档 |
| spec 技术设计 | spec_wiki_url | spec 技术设计 |
| TAPD 工单 | {tapd_base}/{workspace_id}/prong/stories/view/{ticket_id} | TAPD 工单 |
缺失字段(未推 wiki / 无 spec)则跳过对应行,不留空链接。qa-test 至少带共识文档 + spec(QA 据此对照验收);consensus-review 带被评审文档对应链接。
触发时机: /release Step 6 后置处理
curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c43a1730-bbee-4f7a-86a0-d54396b639ef" \
-H "Content-Type: application/json" \
-d '{
"msgtype": "markdown",
"markdown": {
"content": "## 🐳 <font color=\"info\">Chopard-bde 发布通知</font>\n**环境:** <font color=\"info\">dev</font>\n**分支:** origin/<branch>\n**构建:** <font color=\"info\">#<build-number> SUCCESS</font>\n**时间:** <YYYY-MM-DD HH:MM>\n\n### 🐰 提交清单(<count> 个 commit)\n<逐行:commitId 简写 — msg>\n\n### 🐰 修复的问题\n<从 commit msg 中提取 Issue 编号,如 #55 #56>\n\n> <font color=\"comment\">🐱 请 FE/QA 关注本次变更</font>"
}
}'
触发时机: /audit 全量审查报告生成后(仅高优先级发现 > 0 时触发)
curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c43a1730-bbee-4f7a-86a0-d54396b639ef" \
-H "Content-Type: application/json" \
-d '{
"msgtype": "markdown",
"markdown": {
"content": "## 🐧 <font color=\"warning\">Chopard-bde 审查报告</font>\n**轮次:** 第 <N> 轮\n**阶段:** <spec / architecture / api / behavior / integration>\n**日期:** <YYYY-MM-DD>\n\n### 🐧 统计\n- 总发现:<font color=\"warning\">**<total>**</font>\n- 缺失:<missing> · 偏差:<deviation> · 风险:<risk>\n- 🐰 高优先级:<font color=\"warning\"><high-count></font>\n- 🐰 回归:<regression-count>\n\n### 🦊 需要关注\n- 待修复(BE):<count>\n- 待确认(PM):<count>\n- 已排除:<count>\n\n> <font color=\"comment\">🐱 详见 docs/audit/<report-file></font>"
}
}'
触发时机: /close Step 4 关闭 Issue 后(手动 /notify close 触发 / 不自动)
curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c43a1730-bbee-4f7a-86a0-d54396b639ef" \
-H "Content-Type: application/json" \
-d '{
"msgtype": "markdown",
"markdown": {
"content": "## 🐰 Chopard-bde Issue 已关闭\n<font color=\"info\">**#<number>**</font> <title>\n**类型:** <gap/bug>\n**处理人:** BE\n\n### 🐼 决策摘要\n<一句话决策内容>\n\n### 🐰 关联更新\n- 共识文档:<font color=\"info\"><已更新 / 无需更新></font>\n- 模块文档:<已更新模块名>\n- commit:`<hash>`\n\n> <font color=\"comment\">🐱 该 Issue 已闭环</font>"
}
}'
触发时机: /fix Step 4 汇总后(手动 /notify fix 触发 / 不自动)
curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c43a1730-bbee-4f7a-86a0-d54396b639ef" \
-H "Content-Type: application/json" \
-d '{
"msgtype": "markdown",
"markdown": {
"content": "## 🐹 <font color=\"warning\">Chopard-bde 发现分拣完成</font>\n**来源:** <report-file>\n\n### 🐹 分拣结果\n- <font color=\"info\">🐰 文档直接修:<count></font>\n- <font color=\"warning\">🐰 转 Issue(代码):<count></font>\n- 🐰 转 Issue(等决策):<count>\n- <font color=\"comment\">🐰 标记排除:<count></font>\n\n### 🦊 需要关注\n<列出转 Issue 的高优先级项,含 Issue 编号>\n\n> <font color=\"comment\">🐱 代码修复请通过 /issue 处理</font>"
}
}'
触发时机: 手动 /notify issue
执行逻辑:
concepts/label-scheme.md §3 状态机分类):
be-confirmed(已修复,待关闭)fe- 前缀(FE 处理中)be-reviewed 但无 pm-reviewed(等 PM 回复)pm-reviewed 但无 be-confirmed(BE 开发中)state:open 或无状态 label)curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c43a1730-bbee-4f7a-86a0-d54396b639ef" \
-H "Content-Type: application/json" \
-d '{
"msgtype": "markdown",
"markdown": {
"content": "## 🐰 Chopard-bde Issue 日报\n**日期:** <YYYY-MM-DD>\n**Open Issues:** <font color=\"info\"><total></font>\n\n### 🐼 BE 可关闭(<count>)\n<逐行:#N title>\n\n### 🦊 FE 负责(<count>)\n<逐行:#N title>\n\n### 🐧 等 PM 确认(<count>)\n<逐行:#N title>\n\n### 🐹 BE 进行中(<count>)\n<逐行:#N title>\n\n### 🐦 待分拣(<count>)\n<逐行:#N title>\n\n> <font color=\"comment\">🐱 分类依据:Issue label 状态</font>"
}
}'
空分类处理: 某分类下无 Issue 时,该分类整段不出现在消息中(不显示空列表)。
触发时机: 手动 /notify governance(元层项目 / standard 自身 dogfood / ADR Accepted / 多 issue 闭环时手动触发)
适用场景:
与 release 的区别:
release 聚焦 build / commit / FE-QA 协作(业务项目)governance 聚焦 governance milestone / ADR / 团队 workflow impact(元层项目)curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c43a1730-bbee-4f7a-86a0-d54396b639ef" \
-H "Content-Type: application/json" \
-d '{
"msgtype": "markdown",
"markdown": {
"content": "## 🐼 <font color=\"info\">Chopard-bde Governance 进展</font>\n**日期:** <YYYY-MM-DD>\n\n### 🐳 关键里程碑\n<逐行:milestone name + 简短 impact>\n\n### 🐰 Issue 进展(若有)\n- 闭环:<count> 个 / 含 <issue 编号列表 简写>\n- ADR Accepted:<count> 个 / 含 <ADR 编号 + 主题>\n\n### 🦊 团队影响\n<逐行:对团队 workflow 的关键 impact / 用人话短句>\n\n### 🐱 致谢\n<逐行 reporter / contributor — 排名不分先后 / 贡献不分大小>\n\n> <font color=\"comment\">🐱 详见 release-log / CHANGELOG [Unreleased] 段</font>"
}
}'
触发时机: flow notify-qa-test 步骤(tapd-dev-complete 之后) / 手动 /notify qa-test
@ 机制: 按 §「@ 判定规则(通用)」执行——本类型必 @ qa,markdown + text 双发。 文档链接: 按 §「文档链接规则」,markdown 必带共识文档 + spec 技术设计链接(QA 据此对照验收)。
# ① markdown 富文本(转测内容)
curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c43a1730-bbee-4f7a-86a0-d54396b639ef" \
-H "Content-Type: application/json" \
-d '{
"msgtype": "markdown",
"markdown": {
"content": "## 🐳 <font color=\"info\">Chopard-bde 转测通知 · 请 QA 验收</font>\n**需求:** <需求标题>\n**状态:** <font color=\"info\">已实现 → 待验收</font>\n\n### 🐰 接口\n`<METHOD> <path>`(<入参说明>)\n\n### 🐰 部署\ndev #<build> SUCCESS · uat #<build> SUCCESS\n\n### 🦊 验收要点\n<逐行验收点>\n\n> <font color=\"comment\">🐱 详见 TAPD 工单 <ticket_id></font>"
}
}'
# ② text + @ QA(仅当 qiwei_mentions.qa 非空;mentioned_mobile_list 取该数组)
curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c43a1730-bbee-4f7a-86a0-d54396b639ef" \
-H "Content-Type: application/json" \
-d '{
"msgtype": "text",
"text": {
"content": "请验收上述需求:<需求标题>(已部署 dev/uat)",
"mentioned_mobile_list": ["<QA手机号1>", "<QA手机号2>"]
}
}'
通讯录:
env.yaml.notify.qiwei_mentions= 扁平[{name, mobile}](已 gitignore,不入仓)。角色成员名取自tapd.team_roles.<role>,按name在通讯录查mobile。发送取mobile,全空则只发 markdown 不 @。
触发时机: flow consensus-push 第三步(推 Wiki + TAPD 评论留痕后) / spec-push 后 / 手动 /notify consensus-review
@ 机制: 按 §「@ 判定规则(通用)」执行——@ 对象 = task.json.tapd.roles_required 各角色成员(剔除发起人本人),markdown + text 双发。
背景: TAPD 评论 at-who 经开放 API 发送不触发通知(2026-06-04 一手实测,详见 commands/tapd.md §@ 人格式约定),评审请求的可达通知由本类型承担,TAPD 评论仅留痕。
# ① markdown 富文本(评审内容)
curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c43a1730-bbee-4f7a-86a0-d54396b639ef" \
-H "Content-Type: application/json" \
-d '{
"msgtype": "markdown",
"markdown": {
"content": "## 📋 <font color=\"warning\">Chopard-bde 共识评审请求</font>\n**需求:** <需求标题>\n**文档:** <font color=\"info\"><contract/spec> v<N></font>\n**评审人:** <roles_required 成员名单>\n\n### 🦊 评审要点\n<逐行要点,含范围/关键决策/变更摘要>\n\n📄 <a href=\"<wiki_url>\">文档 Wiki</a> · <a href=\"<story_url>\">TAPD 工单</a>\n\n> <font color=\"comment\">🐱 通过请在工单评论 [CONSENSUS-APPROVED];打回请评论 [CONSENSUS-REJECTED:原因]</font>"
}
}'
# ② text + @ 评审人(mentioned_mobile_list 按通用规则提取)
curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c43a1730-bbee-4f7a-86a0-d54396b639ef" \
-H "Content-Type: application/json" \
-d '{
"msgtype": "text",
"text": {
"content": "请评审上述契约:<需求标题>(Wiki v<N>),通过请在 TAPD 工单评论 [CONSENSUS-APPROVED]",
"mentioned_mobile_list": ["<评审人手机号>"]
}
}'
触发时机: 手动 /notify custom <message> [--at <role|名字>...]
@ 机制: 按 §「@ 判定规则(通用)」执行——--at 显式指定优先;未指定时按内容语义推断(含"请 <角色/名字> 处理/确认/评审/验收"句式 → 映射对应角色);均无则只发 markdown 不 @。
curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c43a1730-bbee-4f7a-86a0-d54396b639ef" \
-H "Content-Type: application/json" \
-d '{
"msgtype": "markdown",
"markdown": {
"content": "## 🐦 Chopard-bde\n<message>\n\n> <font color=\"comment\">🐱 <YYYY-MM-DD HH:MM></font>"
}
}'
根据通知类型 / 从当前上下文中提取信息填充对应模板:
/fix 分拣输出提取[Unreleased] + Issue closed 列表 + ADR Accepted 列表组装(适用元层 dogfood 场景)curl -s -o /dev/null -w "%{http_code}" -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=c43a1730-bbee-4f7a-86a0-d54396b639ef" \
-H "Content-Type: application/json" \
-d '<json-payload>'
{"errcode":0,"errmsg":"ok"} → 发送成功在当前操作的输出中标注"已通知团队"。
| Skill | 调用时机 | 通知类型 | 触发条件 |
|---|---|---|---|
/release | Step 6 后置处理 | release | 按门槛判断 — 语义优先(feat/fix/perf/BREAKING 必发)/ 阈值兜底(commit ≥ 3 发)/ 30 分钟内合并 |
/audit | 全量审查完成后 | audit | 条件触发 — 仅高优先级发现 > 0 时发送 |
tapd-full flow notify-qa-test 步骤 | tapd-dev-complete 之后(任务开发完成+部署后) | qa-test | 总是发 — QA 是明确收件人 + 行动项(验收),符合推送纪律"✅ 可推";@ QA 走 mentioned_mobile_list(QA 名取 team_roles.qa → 通讯录 qiwei_mentions 查 mobile,空则仅 markdown) |
以下场景不自动通知:
/close — GitHub Issue 本身有通知机制 / 不重复/fix — 内部分拣 / 对方不需要行动 / 等 release 时汇总issue — 人工触发 / 按需了解全局 Issue 状态governance — 元层 dogfood / 手动触发 / 不在常规 skill 调用链
disable-model-invocation: false— 允许其他 skill 执行时自动触发通知 / 不需要用户手动输入/notify。
close / fix 模板保留但不自动触发 / 需要时通过 /notify close / /notify fix 手动发送governance 模板专用元层项目(standard 自身 dogfood)/ 业务项目不主动触发| 元素 | 用法 | 含义 |
|---|---|---|
| 🐳 鲸鱼 | 标题图标(release 类) | 蓝色 / 明亮 / 积极 |
| 🐰 兔子 | 二级图标(数据项) | 白色 / 双模式高可见 |
| 🐱 猫咪 | 引导语图标(末尾 > 引用) | 黄色 / 提醒动作 |
| 🐧 企鹅 | 标题图标(audit 类) | 黑白高对比 |
| 🦊 狐狸 | 二级图标(需要关注) | 橙色 / 提醒 |
| 🐼 熊猫 | 标题图标(governance / close 类) | 黑白对比 / 元层稳重 |
| 🐹 仓鼠 | 标题图标(fix 类) | 工作仓库感 |
| 🐦 小鸟 | 标题图标(custom) | 轻快 / 通用 |
<font color="info"> | 中性信息 | 绿色 / 积极 |
<font color="warning"> | 需要关注 | 橙色 / 引起注意 |
<font color="comment"> | 末尾 > 引用 | 灰色 / 辅助提示 |
美学原则:
<font color> 标签限定关键信息(总数 / 高优先级 / 警示)> <font color="comment"> 引用作为收尾(避免信息长尾噪声)推送基于人性 / 默认是"不打扰" / 按场景判据决定是否发 / 不要为发而发。
注意力是稀缺资源。spool / release-log / CHANGELOG / Issue 状态变化 / commit history 都能让关注的人主动查 / 不需要被实时打扰。频繁推送制造"还有事没处理完"的紧迫感 / 反而压低团队整体效能;推得多 = 重要信号被稀释。
| 场景 | 推送? | 理由 |
|---|---|---|
| 内部 SOP / concept / rule / protocol 升级 | ❌ 不推 | 关注的人自己看 release-log / spool |
| PP / registry / 内部档案落档 | ❌ 不推 | 纯内部追溯 |
| 内部 triage / 路由 / 分流动作 | ❌ 不推 | 协作动作 / 不打扰 |
| Issue close 含外部 contributor 致谢 | ✅ 可推(克制) | 给反馈源认可 / 限单条 / 不带营销语 |
| 阻塞性 bug fix / 安全发现 / 需团队立即知情(明确收件人 + 行动项) | ✅ 可推 | 打断成本 < 沉底成本 |
| 周末 / 节假日的日频任务 | ❌ 不推 | 工作日才有 dev 状态 / 协作礼貌 |
业务发布 /release 通知(build 号 + commit 清单) | ✅ 推(项目内已有惯例) | QA / FE 等待回测的明确收件人 |
| handoff / skill 模板默认塞 notify step | ❌ 应删除 / 改为按判据决定 | 反习惯性套用 |
governance template 推内部 PP 落档 / 内部 concept 升级(5-28 B-1 / B-3 实证)close template 推非外部 contributor 的内部 close(5-28 B-2 实证 / #24 是内部 surface)notify skill)" 在 handoff / skill 模板内feedback_notify_discipline.md(参考 / 不引绝对路径)| 日期 | 修订 | 责任人 |
|---|---|---|
| 2026-05-28 | 加 §推送纪律(notify-discipline)段 — 铁律 + 场景判据表 8 行 + 反模式 4 项 + handoff/skill SOP 4 项 + 关联 / source: 5-28 spool-review surface 处置批次 incident(B-1+B-2+B-3 共 3 次企微打扰 / 用户拦截) | standard EL via SA handoff 2026-05-28-notify-discipline-skill-upgrade.md(B-4) |