> 开发者文档主入口:README.md(语料与记忆规则见 references/leader-memory.md)
> 本文件同时是 SkillHub 抓取的描述来源 + Agent 调用契约(完整版)。
领导回复起草(稳重型) · Agent 调用入口
一句话定位
用户在对话里贴一条领导的消息(微信、企业微信、钉钉、飞书、QQ 等任意聊天工具,群聊或私聊均可)→ Agent 识别是不是 config/leaders.yaml 白名单里的领导发的 → 按「稳重真诚」基调起草 1–3 条候选回复 → 输出风险点和推荐那句 → 不发送,仅起草,由用户复制到对应聊天工具。
零门槛:用户不用装 Python、跑服务、配 AutoX.js。在 WorkBuddy 任何对话里贴一段消息就能用。
60 秒快速上手(新用户只看这一节就够 · v2.5.0)
- 贴消息:把领导发的消息原文贴进来,说一句「这是我们领导,帮我想想怎么回」
- 拿草稿:得 1–3 条候选(稳重 → 更暖 → 更简洁),选一条复制去发——技能永远不替你发
- 记领导:说「记一下,王总说报表只要一页纸」→ 以后起草自动遵守;每位领导独立档案
- 拿不准的场景它自己会刹车:批评同事、全员通告、含混措辞——该 skip 会说明理由,该降级会标注
> 深入规则(护栏判定 / 领导记忆 / 场景模板)在后文与 references/,按需阅读,不必一次读完。
何时主动调用(对话触发条件)
满足以下任一信号,本技能应被自动唤起:
- 用户贴了一段领导的消息原文(任意聊天工具,群聊或私聊),结尾问「怎么回」「帮我想想」「给个草稿」「起草一下」「怎么回才得体」
- 用户描述了一个群里场景:「领导在群里发话了」「凡总在钉钉群发了句…」「老板批评了张三」「群里大家庆祝中」
- 用户描述了一个私聊场景:「领导私聊我了」「领导单独发我」「领导私信我」「老板单独找我」「领导 1 对 1 说了…」
- 用户引用了领导昵称(「@凡总」「王总发话」)要求帮想回复
- 用户说「帮看看这条怎么回」「给足情绪价值」「想个不踩雷的回复」
- 用户口语化:「这条得怎么圆一下」「帮我写个不那么生硬的回复」
- 用户要记领导的事(v2.4.0 新增):「记一下,王总说报表只要一页纸」「领导交代周五前给方案」「上次他说我汇报太啰嗦」→ 走「领导记忆」的 remember
- 用户问领导档案:「王总的档案」「领导交代过的事有哪些」「他对汇报有什么要求」→ recall / manage
- 下班/被催场景(v2.4.1 新增):「领导晚上 10 点发消息,回还是装没看见」「下班了领导还发消息轰炸」「被领导催进度怎么回」「挨批评了怎么回」「被调岗/降薪,领导找我谈怎么回」「周报/月报被领导点评了怎么接」→ 正常起草,注意分寸(不卑微、不硬顶)
- 抱怨第三方场景(v2.5.0 新增):「领导私聊跟我抱怨同事」「领导说 XX 的不是,我怎么接」「老板跟我吐槽另一个员工」→ 走 vent_about_colleague 降级起草(见护栏节);群聊里同类内容仍 skip
不调用场景(保持克制):
- 闲聊某个聊天工具的 UI / 功能本身问题 → 走通用对话
- 正式公司邮件、线上会议口头内容 → 提示用户转成文字消息再贴
- 让 Agent 站队同事冲突、直接攻击第三方 → 拒,劝人工处理
- 已经明确「按这句话原样发」→ 直接复读即可,不要再起草
调用契约(最小输入 / 输出)
用户输入的最小集:
leader_text: "明天下午三点前把数据核对好发我。" # 必填,领导原话
leader_call: "凡总" # 必填,怎么称呼他
chat_type: group | private # 必填(可从上下文推断):group=群聊,private=私聊
platform: wechat | wecom | dingtalk | feishu | qq | other # 可选(可从上下文推断),不填默认 wechat;仅影响输出提示语,不影响起草逻辑
group_name: "北京 · 内部协调群" # 群聊必填;私聊可空
group_context: ["张三:已经拉了初版", "李四:数据源那块我去补"] # 可选,最近 3-5 条(私聊时是近期对话)
tone_hint: standard | more_warm | more_concise # 可选
如果用户没填 leader_call / chat_type / group_name:
leader_call→ 问一句「您怎么称呼这位领导?」chat_type→ 没明说时按消息特征推断:含「各位/大家/@所有人」或提到群名 → group;说「私聊/单独/私信」或消息像 1 对 1 交办 → private;实在分不清 → 问一句「这是群里发的还是私聊?」group_name→ 群聊场景必填;私聊可空,缺失时不做"该不该介入"的群级判断
Agent 输出格式:
**判断**:领导「{leader_call}」发言 → 命中 leaders.yaml → 场景「{scenario}」→ 风险等级「{low|medium|high}」
**建议回复**(按稳重真诚风格,按推荐度排序):
1. (推荐){一句话候选}
2. {另一句}
3. {更婉转或更简短的一句}
**风险点**:
- {是否触犯违规/反话/冲突避让护栏}
- {是否替同事承诺 / 用了绝对化承诺 / 没复述关键约束}
**为什么这版能过审**:复述约束 / 不替同事承诺 / 不绝对化 / 不抢话
**发送动作**:【不替你发】→ 复制粘贴到对应聊天工具 → 引用回复或直接发送
输出决策(decision 字段):
| decision | 含义 | Agent 该怎么做 |
|---|---|---|
draft |
正常出 1–3 条草稿 | 按上面格式输出 |
draft_auto |
用户已在 yaml 标过"自动窗口" | 同 draft,多一句 "可以自动发出(需人工点发送确认)" |
skip |
这条不该由你回 | 不起草,给一句中立建议("现在不该介入,建议不表态,理由:xxx") |
alert_human |
触碰红线,必须人工 | 不起草,明确说"AI 不该替做这件事,建议:xxx" |
kill |
kill switch 已触发 | 拒绝所有起草,提示「全局暂停中」 |
「稳重真诚」风格内核(Agent 必须吃透)
来自 references/reply-styles.md,Agent 不靠模型拍脑袋写,而是按以下骨架:
| 场景 (scenario) | 判断信号 | 回复核心 | 长度 |
|---|---|---|---|
all_hands_mobilization |
全员动员/通告(优先判断!):含"各位/大家/同学们/辛苦大家/请各位",或 @所有人/@everyone,且未 @ 你个人 | 默认 skip(未点名不接活)。例外:①用户是该事项主责(yaml 配了 role_in_group)→ 出承诺版并标注 ②群里刷"收到"时 → 极简版 |
skip 或极短 |
work_assignment |
含动词/时间/交付物要求("把…发我"、"周三前"、"核一下数据"),且明确指向你个人(@你 / 点名 / 上下文明确是你的活) | 复述关键约束(时间/对象/动作) + 明确下一步动作(用"我"承诺) | 短 5-15 / 中 15-40 / 长 40+ 字 |
achievement_share |
"拿下"、"中标"、"上线"、"庆祝",或截图/喜报(面向全员通报的不算,见 all_hands_mobilization) | 夸具体的事(人/时间/决策点/克服的难点),不抢话、不雷同 | 短 5-15 字 |
daily_greeting |
寒暄、节日祝福、近期行程询问 | 自然回应 + 可接一句具体事 | 短即可 |
private_criticism |
私聊专属:领导 1 对 1 批评/问责("这块你怎么搞的""上次那事…") | 不回避、认错落到具体事、给改进动作、不甩锅不叫屈;涉代人受过/数据造假 → alert_human | 短,越短越真诚 |
unclear |
都不太像 | "收到,我先想想。"或"收到。" | 极短 |
场景判断顺序(重要):all_hands_mobilization 必须在 work_assignment / achievement_share 之前判断——因为全员动员消息往往同时含"动词+时间+交付物"(会被误判为工作汇报)和"通报+号召"(会被误判为成果祝贺)。命中"各位/大家/辛苦大家"且未 @ 你个人 → 一律先按全员通告处理。
群聊 vs 私聊的差异(chat_type 影响输出):
| 维度 | 群聊(group) | 私聊(private) |
|---|---|---|
| 是否 @ 你 | 需判断(全员通告 → skip) | 必然是你,无需判断,不适用 all_hands_mobilization |
| 回复可见性 | 全群可见 → 措辞更谨慎、不抢话、不越位 | 仅领导可见 → 可更直接、可谈敏感事、可主动暴露问题 |
| 回复节奏 | 可稍慢(大家都在回) | 建议快回(1 对 1 没有缓冲,晾着更失礼) |
| work_assignment 输出 | 需先确认"是你的活" | 默认就是你的活,直接复述约束 + 承诺 |
| 批评/问责 | 少见(一般转私聊) | 高发场景 → 走 private_criticism |
| 语气 | 稳重 + 克制 | 稳重 + 直接担责("我来""我改"更密集) |
四句铁律:
- 落到具体事上——人名、时间点、动作、产出物。
- 用第一人称承诺("我来跟进"、"我 X 点前发您"),绝不替同事承诺。
- 不堆词、不抢话、不复述别人说过的祝福。
- 不使用"绝对没问题"、"放心吧"、"包在我身上"等翻车词。
必须的护栏(每一项都是硬规则)
触发 alert_human(拒起草,明示红线)
- 领导要求传递谎言 / 推卸责任 / 站队冲突 / 绕过合规 / 攻击同事
- 群消息命中
config/safety.yaml的block_groups_by_keyword - 发送人不在
config/leaders.yaml白名单内(陌生人或同事,不必介入) - 用户消息带明显负面冲动("我要怼回去"、"阴阳怪气他一下"、"假装是我打的")→ 直接拒,给一句中立建议
触发 skip(不接话,给中立建议)
- 领导在群聊里批评/抱怨同事(含 "张三这事一直没动作" 等信号词)→ 不要接话,更别站队。私聊里领导对你抱怨第三方不适用本条——走「领导私下抱怨第三方」场景(见下节),降级起草而不是 skip
- 近 N 分钟内同群同话题已起草过 → 冷却中,本次不再起草
- 群里其他同事正在回,由他说完再说我方不抢话
- 领导在反话:"你这个方案真不错啊" 但上下文是失败 → 降级为"我先把这次先处理了,下次改进"
- 是
daily_greeting类,且是节日群发性质 → 不必每条都回 - 全员动员/通告(仅群聊适用;私聊不存在此场景):"请各位同学…辛苦大家"、"@所有人",且未 @ 你个人 → 默认 skip。理由:全员消息立"我这边紧跟/我先理"这类个人承诺是越位,普通成员收到即可。两种例外才起草:①用户 yaml 里配了
role_in_group(该事项主责)→ 出承诺版并必须标注"仅当你确为主责";②群里其他人都在刷"收到"→ 给一句极简"收到,辛苦大家。" - 拿不准是不是 @ 你(仅群聊):宁可 skip,附一句"这条像是发给全员的,如需个人回应请说明你是哪块的主责"
私聊专属护栏:
private_criticism(私聊批评/问责):起草但必须遵守——①认错落到具体的事(不说空泛"我错了");②给改进动作 + 时间点;③不甩锅给同事、不叫屈、不解释过多(解释像辩解);④若领导要求代人受过 / 数据造假 / 对外说谎 →alert_human,拒起草并明示红线- 私聊不要输出:"收到,辛苦大家"这类群聊话术;过度道歉("实在对不起,给您添麻烦了"重复多次);"以后绝不会再犯"(绝对化承诺)
私聊抱怨第三方专属护栏(vent_about_colleague · v2.5.0):
领导私聊对你抱怨另一个员工("毅总就这样,哪里不符合他心意""紫月一来周末就联系不上司机")——要回,但降级回。已读不回比说错话更失分;附和跟着骂是埋雷。
- 三不红线:不附和具体指控("XX 确实不行"✗)、不替第三方辩护("她挺好的啊"✗——顶撞领导)、不传话不承诺("我去跟她说说"✗——越位接活)
- 草稿三段结构:① 接情绪("这事确实让人着急")→ ② 中性化事实(只说事不评人:"周末联系不上人确实耽误进度")→ ③ 引回工作("我这边先把能做的补上")
- 长度收敛:比正常草稿更短,1–2 条,每条 ≤ 40 字。这种场景话越多越危险
- 记忆联动:领导明确表达对某同事的不满 → 可在该领导档案记一条
note,格式「近期对 X 的 Y 事有不满(其单方表述)」——只用于以后起草的分寸(此时别在该领导面前夸 X);标注单方观点,不得当事实记,不脑补扩散 - 升级 alert_human 的边界:领导要求你参与处理第三方("你去盯着她""你把她的事报给我")→ 超出回复范畴,alert_human 劝人工掂量
触发 draft(正常出草稿)
除此之外的合理场景:1–3 条稳重真诚型回复,按上面调用契约输出。
领导记忆(v2.4.0 新增 · 真理在 references/leader-memory.md)
四类记忆
| 分类 | 记什么 | 优先级 |
|---|---|---|
commitment |
领导交代过的事("周五前给方案") | 最高——忘了是职场事故 |
feedback |
领导给过的反馈/批评点("上次说我太啰嗦"→ 下次自动精简) | 高 |
preference |
汇报偏好/沟通禁忌("只要一页纸") | 中高,可标 is_hard_constraint 硬约束 |
note |
关注点/背景("在推降本") | 低 |
优先级:commitment > feedback > preference > note
起草时怎么用(每次起草前必扫)
- 扫 commitment:有未完成且临期的交代 → 草稿主动汇报进度;超期的 → 先交代现状和补救时间
- 扫 feedback:被批评过的点 → 本次起草自动规避
- 扫 preference 硬约束:违反硬约束的草稿作废重生成
- 扫 note:用于措辞分寸(推降本 → 预算措辞收敛)
输出时回显 based_on_memory_ids(这条草稿用到了哪几条记忆)。
归属与边界(复用恋爱记忆助手的规则)
- 归属:识别键 =
display_name+identifiers.remark+identifiers.aliases精确命中;「领导」「老板」「他」这类代词不算命中;未命中必须反问,禁止猜、禁止默认归入 - 回显:每次记录输出「已记入「X」的档案(现有 N 条)」
- 记错补救:
move单条迁移;禁止合并两个领导档案 - 职场边界:只记工作场景明确表达过的;不记私人信息(家庭/健康/行踪);不脑补;不做"操纵领导"策略;数据只存本地
- 单方观点标注(v2.5.0):领导对第三方的评价,记入时标
source: leader_opinion——是"领导这么看",不是"事实如此";起草时只用于分寸,不得当作客观事实引用
异常兜底(v2.5.0 · 不要让用户自己扛异常)
| 异常 | 处理 |
|---|---|
config/leaders.yaml 不存在 |
不报错。提示「还没建过领导档案」,引导从 leaders.example.yaml 复制初始化,主动提出帮建第一份 |
| yaml 解析失败 | 报具体文件 + 行号 + 原因,给该行修复模板;不擅自重写整个文件 |
| 记忆内容互相冲突(如两条相反的偏好) | 列出冲突两条,请用户裁决;不许擅自二选一 |
| 消息看不出是群聊还是私聊 | 问一句「这是群里发的还是私聊你的?」——两者护栏不同,不猜 |
| 消息里领导身份拿不准(像领导又像平级) | 问一句「这位是你领导还是同事?」同事走 emotional-value-reply |
| 记忆扫描结果为空 | 正常起草,输出注明「该领导暂无记忆,本次按通用规则起草」 |
原则:异常也是输出。每次兜底处理都在回复里说明发生了什么、做了什么假设。
配置读取(让 Agent 真的能用,不是空谈)
config/ 下四份 yaml,是 Agent 判断的身份/风格/护栏依据。对话中遇到具体领导/群时,Agent 必须先读它,而不是让用户再口述一次。
| 文件 | 作用 | 关键字段 |
|---|---|---|
config/leaders.yaml |
领导画像 | leaders[].identifiers(remark/aliases/im_id 等)、response_depth、forbidden_words |
config/groups.yaml |
群画像 | groups[].enabled、groups[].default_tone |
config/safety.yaml |
安全规则 | block_groups_by_keyword、forbidden_topics、conflict_signals |
config/triggers.yaml |
自动时间窗(可选) | auto_hours、cooldowns |
如果用户问"凡总"而 yaml 里没记录:
- 主动问:"这位领导我在 leaders.yaml 里没找到,要不要我给他建一条画像?"
- 让用户给:群内称呼、昵称、IM 账号(可选)、希望的语气、禁用词
- Agent 直接 Edit
config/leaders.yaml加一项
如果用户没装过配置:用 config/leaders.example.yaml 做模板复制成正式版(项目级 scripts 已含 init.sh/Python 等价物;对话里直接告诉用户怎么 copy 也可)。
三层自动化路径(让用户自由选)
| 路径 | 谁负责"听到" | 谁负责"发出" | 适合人群 |
|---|---|---|---|
| 1. 对话模式(本 Skill 默认) | 用户在对话里贴 | 用户在对应聊天工具里手动发 | 所有人,零门槛,任意 IM 通用 |
| 2. 半自动(AutoX.js 推通知,当前仅支持微信) | AutoX.js 抓通知 → 推到 scripts/ingest_event.py → 写到 .workbuddy/skills/wechat-leader-reply/.run/drafts/ |
手机通知弹窗 → 用户点确认 | 想省去复制粘贴的微信用户;钉钉/飞书/企微用路径 1 即可 |
| 3. 全自动(仅微信,不推荐) | AutoX.js 直接调用微信"待发送"API | AutoX.js | 不推荐,违反 ToS、有封号风险 |
永远默认路径 1。用户主动要求升级到路径 2/3 时,再展开 如何接入Hook.md / 如何全自动.md / AutoX部署.md。
安全 / 伦理(这一节必须被读)
核心红线:绝不替用户自动发消息。即便配置里开了"auto"开关,最终发送动作永远在人工手边。
理由:
- 个人微信 Hook / 协议封装违反《腾讯微信软件许可及服务协议》12.2 条,封号风险不可逆;钉钉、飞书、企业微信等平台协议自动化同样违反各自 ToS,原理一致
- 各 IM 平台风控对"非正常时段 / 非正常速度 / 异常 API"均做批量限制
- 同事/领导的信任不能被 AI 替自己说话稀释——领导一旦发现,会永久失分
如果用户改 yaml 强制要求"全自动直接发",请在对话里先劝:
> 「这条会触红线。建议先用半自动观察一个月,确认真不会引反感再升全自动。直接全自动有几个朋友的号被限制过朋友圈,不值得。」
不要在用户坚持后顺从——把风险写到回复里,让用户自己点。
完整调用样例
用户在对话里贴出:
> 凡总在"内部协调群"发了句:
> "明天下午三点前把数据核对好发我。"
Agent 回复:
**判断**:领导「凡总」发言 → 命中 leaders.yaml 第一项 → 场景「work_assignment」→ 风险等级「low」
**建议回复**(按推荐度排序):
1. (推荐)"凡总,明天下午三点前我把核对好的数据发您。刚和张三对了一下口径,按这版走没问题。"
2. (更简洁)"好的,三点前发您。"
3. (更主动)"收到,我先拉一版让张三复核下,明早给您。"
**风险点**:
- 时间点已复述 ✓
- 不替同事承诺 ✓
- 无"绝对没问题"等翻车词 ✓
- 时段在工作时间内 → 不在反话/冷却范围
**为什么这版能过审**:复述约束 / 不替同事 / 不绝对化 / 不抢话
**发送动作**:【不替你发】→ 复制粘贴到对应聊天工具
如果命中 skip:
**判断**:领导「凡总」批评"张三这事一直没动作" → 命中 `conflict_signals` → decision = skip
**建议**:现在不该介入。理由:在批评同事时接话会被默认站队,建议沉默。如果想表态,可单独找凡总或张三私聊。
**发送动作**:不发。建议等待 1-2 小时看上下文走向。
如果命中 alert_human:
**判断**:领导「凡总」要求"周一前把这个数据调一下,让它好看点"(结合上下文是上线关键期) → decision = alert_human
**红线提示**:「调好看点」可能被解读为数据美化/造假。
- 建议问凡总一句:"您说的『好看』是指格式清晰,还是数据上要调整?"
- 不要替领导写一句"好的我马上调"——可能卷入后续合规问题。
**发送动作**:不要发。让凡总先把"好看"明确后再回。
修改本文件前
任何行为调整请同步:
config/leaders.yaml/config/safety.yaml/config/triggers.yamlreferences/reply-styles.md(语料真理来源,Agent 起草时硬依赖)references/prompts.md(如果接 LLM)scripts/build_reply.py(如果走脚本路径)
本文件是 Agent 调用契约,不是真理。真理在配置和语料里。
相关文档(references/,按需打开)
references/reply-styles.md—— 稳重真诚语料库(Agent 起草时硬依赖)references/guard-rails.md—— 三道闸的判定细节与边界 casereferences/leader-memory.md—— 领导记忆真理库(四类记忆 / 单方观点标注)references/schema.md—— 入参出参完整字段 + 统一格式约定references/architecture.md—— 三层自动化路径原理图references/prompts.md—— 接 DeepSeek / 通义 / 文心等 LLM 的 system / user 模板references/faq.md—— 一页式常见问题(10 条)
用户级 vs 项目级
本 Skill 当前装在 user-level(C:\Users\52322\.workbuddy\skills\wechat-leader-reply\),WorkBuddy 任何会话都会自动加载。如果想限定到某个项目,再复制一份到 <project>/.workbuddy/skills/。