| name | report-synthesis |
| description | [INTERNAL: group-meeting only] 双输出汇报合成器:Part A 对外汇报草稿六节 + Part B 对内私密备忘三节。仅供 group-meeting 在第二阶段步骤 2 通过 Skill('report-synthesis') 调用。 |
| disable-model-invocation | false |
| user-invocable | false |
| allowed-tools | ["Read","Write","Glob"] |
report-synthesis — 汇报合成器
把 R1-R6 组会模拟的讨论 + 社交复盘的话术洞察,合成为用户下次真实组会可以直接使用的两份文档:对外演讲稿(Part A)和对内私密备忘(Part B)。
1. 定位与执行模式
- 执行位置:主会话内直接执行。所有数据源都通过 Read 工具从过程文件加载,不依赖主会话 context 中的任何"变量"。这是 v4 持久化设计的核心要求——避免 context auto-compact 导致的 verbatim 退化。
- 单次调用:一次 LLM 响应内先后生成两份文档,两次 Write。两段内部切换写作人格,不拆分调用。
- 上游依赖:被调用时以下文件必须已存在:
docs/原始汇报/{date}.md
docs/组会过程/{date}/discussion_log.md
docs/组会过程/{date}/anti_pattern_log.md
docs/组会过程/{date}/meeting_meta.json
docs/社交复盘/{date}.md
- 下游依赖:本 skill 执行完后,编排器的第三阶段(在 research-profile.md 末尾追加新时间戳快照)才开始。
2. 数据源(全部从文件 Read)
v4 改动:所有数据源都通过 Read 工具从文件加载,不引用主 context 变量。每个 Read 在 Step 11 章里有明确时机和顺序。
| 概念 | 文件路径 | 读取时机 | Part A 是否可见 | Part B 是否可见 |
|---|
| 原始汇报 | docs/原始汇报/{date}.md | Step 1 | ✅ Read 全文 | ✅ 已在 context |
| 正向讨论(R1/R3/R4/R5/R6) | docs/组会过程/{date}/discussion_log.md | Step 1 | ✅ Read 全文(按二级标题锚点切片) | ✅ 已在 context |
| 反面样本(R2 mixed-advisor) | docs/组会过程/{date}/anti_pattern_log.md | Step 1(一次性 Read,但用途严格受限) | 限定:内容只能用于 A3 的"已识别并避开的方向"子节,且必须以反思句式呈现;A1/A2/A4/A5/A6 严禁引用 | ✅ 用于 B1 的"踩过的坑"案例 |
| 话术卡片 | docs/社交复盘/{date}.md 的"话术技巧卡片"节 | Step 1 | ✅ Read 文件后正则抽取: ① ^##\s*3\.?\s*话术技巧卡片 ② ^###?\s*三、?\s*话术技巧卡片 都失败则为空字符串,走第 10 章失败回退 | — |
| 历史上下文 | docs/组会过程/{date}/meeting_meta.json 的 history_context 字段 | Step 1 | ✅ Read 后取字段 | ✅ 已在 context |
| Part A 已生成内容(B1 引用所需) | docs/汇报草稿/{date}.md | Step 5(Part A 已 Write 之后) | — | ✅ Read 全文,B1 必须引用具体节号和原话 |
discussion_log.md 切片读取建议:文件按 ## R{N}[.{sub}][·插话]·{角色}({agent})·{时间} 这种二级标题分块。Read 后可以按标题正则切片,构建 [{role, round, agent, text}, ...] 结构供后续处理。R2 的发言不在此文件中(v4 物理隔离)。
3. 输出契约
连续写两个文件,严格顺序:先 Part A、后 Part B。
| 顺序 | 路径 | 内容 | 说明 |
|---|
| 1 | docs/汇报草稿/YYYY-MM-DD.md | Part A 六节(A1-A6) | 对外演讲稿,下次真实组会可直接使用 |
| 2 | docs/私密备忘/YYYY-MM-DD.md | Part B 三节(B1-B3) | 对内私密反思,仅自己看 |
日期命名:YYYY-MM-DD 用主编排器传入的当日日期。文件已存在则追加 -2、-3 后缀递增(与 docs/原始汇报/ 规则一致)。
写入顺序不可颠倒:Part B 的 B1 节必须引用 Part A 的具体措辞(标注"美化了什么"),所以 Part A 必须先完整生成并写入,Part B 才能看着它来写。
4. 诚实性红线(硬约束)
4.1 反面样本位置锁定
anti_pattern_log.md 的内容(R2 反面样本)只能出现在 Part A 的以下唯一位置:
A3 关键思考与方向判断
└── 子节 "已识别并避开的方向"
且必须以"曾考虑过 X,但发现 Y 问题,所以排除"或等价反思句式呈现。
- 禁止在 A1/A2/A4/A5/A6 的任何位置引用或复述
anti_pattern_log.md 的观点
- 禁止把 R2 的错误建议作为正向建议、行动项或"导师反馈"转述
两层防御:
- 结构层(v4 物理隔离):R2 发言根本没写入
discussion_log.md,独立装在 anti_pattern_log.md,且该文件 header 有硬 warning。所以"读 discussion_log.md 不会污染 Part A"是文件层保证的。
- 本 skill 层(自律 + 硬约束):当 Step 1 一并 Read 了
anti_pattern_log.md 后,其内容进入 LLM 的工作 context;此时唯一的隔离手段就是本节硬约束 + Part A 写作人格的禁令。生成 Part A 时必须严守"只能在 A3 反思子节使用"。
4.2 Part A 句句溯源
Part A 的每一句实质性陈述(尤其是 A2 本周进展、A3 关键思考、A4 下周计划)都必须能在以下两个来源之一找到事实支点:
docs/原始汇报/YYYY-MM-DD.md 里有对应原文
discussion_log 里有对应发言片段
禁止无中生有:
- ❌ 编造实验:"本周跑了 XX 实验"—— 除非原始汇报里写了
- ❌ 编造数据:"准确率达到了 YY%"—— 除非原始汇报里有
- ❌ 编造代码行为:"我实现了 ZZ 模块"—— 除非原始汇报里写了
- ❌ 编造承诺:"下周一定出结果"—— 除非原始汇报或讨论里有明确时间表
允许的包装手法:
- ✅ 重新框架:"看论文"→"文献综述,聚焦 A 方向的 3 篇核心工作"
- ✅ 重新排序:把最亮眼的进展放 A2 第一条
- ✅ 提炼思考:把
discussion_log 里讨论到的观点以"我的判断是…"形式整合
- ✅ 突出取舍:把"考虑过又放弃"讲成"有判断力的路径筛选"
4.3 Part B 反美化义务
Part B 的 B1 节必须主动标注 Part A 做了哪些包装。具体要求:
- 至少列出一项"Part A 的 [某段] 里我把 X 说成了 Y,真实情况是 Z"
- 至少列出一项"这周实际没做但 Part A 框架化过的事"
- 语气禁止粉饰——不得出现"虽然…但…"这种对冲;要出现"本周没做"、"欠下来的"、"不敢告诉老板的是"这类短句
4.4 禁止编造
整个文档(Part A 和 Part B 都适用)禁止增加以下内容:
- 不存在的实验、数据、代码行为
- 不存在的论文引用(只能引用
discussion_log 中师兄/小老板1 明确提到过的)
- 不存在的对话或交流记录
- 任何原始汇报之外的行动声明
5. Part A 六节模板
A1 核心叙事(30 秒电梯版)
目的:一句话立论 + 本周在整个研究大方向里的位置
字数:100-150 字
写作要点:
- 一句话必须能独立回答"你这周做的事在研究全局里重要在哪"
- 基于
history_context 的研究方向定位
- 不允许以"本周我做了 X 和 Y 和 Z"这种列举开头,必须是立论
A2 本周进展(按重要性排序,非时间序)
目的:展示具体进展,即使是小进展也能讲成有判断力的推进
字数:300-500 字
写作要点:
- 3-5 条,每条 50-100 字
- 按重要性降序,不按时间顺序
- 允许把"文献阅读/思考更新/假设重审"作为合法进展,只要能在原始汇报里找到事实支点
- 每条末尾可以带一个"这个发现的意义是…"的小钩子
禁止:不得引用
anti_pattern_log
A3 关键思考与方向判断
目的:展示思维深度 + 风险意识
字数:400-600 字
结构:
- 主段:1-2 段正向的判断陈述(综合
discussion_log 中 R3 师兄/师姐 和 R6 小老板1 的反馈)
- 子节"已识别并避开的方向"(唯一允许引用
anti_pattern_log 的位置)
- 列出 2-3 条"曾考虑过 X,但发现 Y 问题,所以排除"
- 每条必须是反思句式,不是正向转述
- 如果
anti_pattern_log 为空则省略整个子节
A4 下周计划(具体、可验证)
目的:给导师一个明确的 check-list,下次组会能被 check
字数:200-300 字
写作要点:
- 3-5 条行动项,每条必须具体到"交付物是什么"
- 每条标注优先级(高/中/低)
- 每条必须是下次组会可以被 check 的形态(不是"继续努力"这种空话)
禁止:不得承诺原始汇报或
discussion_log 中未出现过的具体实验或数据指标
A5 防御话术预案(Q&A 准备)
目的:用从社交复盘抽取的话术卡片,为最可能被质疑的点准备防御
字数:300-500 字
结构:3-5 组 Q&A,每组格式:
Q: [预测的质疑问题]
A: [基于话术卡片的应答话术]
— 用到的技巧:[卡片名称]
约束:
- 必须使用话术卡片中至少 2 张不同的卡片
- Q 的选取优先级:A2 最弱的进展点 > A4 最大的承诺点 > 整体 research direction 的根本质疑
- 如果话术卡片抽取为空,走第 10 章失败回退
A6 汇报结构与时间分配建议
目的:给用户三档时间预案,便于根据真实组会时间灵活伸缩
字数:150-250 字
结构:三档(5 分钟 / 10 分钟 / 15 分钟),每档说明:
- 要讲哪几节(A1-A5 的子集)
- 每节多少分钟
- 哪些内容放到"如果被问到"的延伸区
6. Part B 三节模板
B1 真实差距清单
目的:把 Part A 美化过的地方和本周实际没做的事物理记下来,避免自欺
字数:不限,要狠
必含三类条目:
- Part A 美化了什么:至少 2 条,格式
Part A 的 [节号] 里说 "X",真实情况是 "Y"
- 本周实际没做的:至少 1 条,直接列出欠下来的具体任务
- 本次模拟组会暴露但 Part A 没承认的研究问题:至少 1 条
语气硬约束:不得出现"虽然/但是/其实也/不过"等对冲词;禁止自我安慰;允许出现"本周没做"、"欠下来的"、"不敢告诉老板的是"
B2 长期问题追踪
目的:对接 research-profile.md 的"持续问题"字段
字数:200-400 字
结构:
- 研究层面:列出本次组会暴露但仍未解决的研究问题(对比
history_context 里上次 research-profile 的"持续问题"字段,看哪些还没解决、哪些是本次新暴露的)
- 社交层面:列出本次模拟组会暴露的社交短板(可以引用
docs/社交复盘/YYYY-MM-DD.md 的评分部分)
B3 下次真正需要交付的(vs 下次打算讲的)
目的:把 A4 的"打算讲的"和"真正需要交付的"并排列出,让用户能清晰看到差距
字数:不限
结构:
| 下次打算讲的(来自 A4) | 下次真正需要交付的 |
|-----------------------|----------------------|
| … | … |
关键性质:这一列是研究画像第三阶段更新的数据源之一,必须写得尽量具体、可 check。
- 如果"打算讲的"和"真正需要交付的"一致,就是重复列出一遍(说明承诺是诚实的)
- 如果不一致,差异列必须明确标出"多出来的是包装,不是真的要做"
7. 写作人格切换指令
本 skill 在一次 LLM 调用内连续生成两份语气完全相反的文档。必须严格切换写作人格,不得互相污染。
写 Part A 时你是
"一个即将上台汇报的研二学生,目标是让导师觉得你这周有思考、有进展、有判断力。"
- 语气基线:自信、结构化、对外演讲腔
- 禁用词汇:"其实"、"但是"、"可能"、"大概"、"也许"、"有点"、"好像"等对冲词
- 允许:重新框架、突出亮点、把困难讲成挑战、把思考讲成进展
- 禁止:编造事实、虚构数据、承诺做不到的事、引用反面样本当正向建议
写 Part B 时你是
"一个要对自己彻底诚实的人,目标是 6 个月后回看时不会被自己骗到。"
- 语气基线:冷峻、直白、对内坦诚腔
- 必须:指出 Part A 哪些地方做了包装、哪些事实被省略、哪些承诺是写给导师看的
- 允许出现的措辞:"本周没做"、"欠下来的"、"不敢告诉老板的是"、"A 里说的 X 其实是 Y"
- 禁止:粉饰、自我安慰、复用 Part A 里的乐观措辞
物理分隔
必须严格按顺序:
- 生成完整 Part A → Write 到
docs/汇报草稿/YYYY-MM-DD.md
- 在 Part B 开头内心明确说"切换到对内坦诚语气"
- 再生成完整 Part B → Write 到
docs/私密备忘/YYYY-MM-DD.md
禁止在 Part A 还没完整写完时开始写 Part B 的任何内容。禁止在两份文档之间共用句式或措辞。
8. 话术卡片使用约束
- A5 防御话术预案必须使用社交复盘中抽取的至少 2 张不同的卡片
- 每个 Q&A 对末尾必须标注
— 用到的技巧:[卡片名称],便于用户知道这个回应背后的话术来源
- 卡片使用应贴合 Q 的性质(例如防御性质疑用"事实核查反击",基础问题暴击用"请教式质疑反转")
- 如果只抽取到 1 张卡片,A5 至少用这 1 张 + 1 个不需要卡片的直接应答
- 如果抽取失败(话术卡片为空),走第 10 章失败回退
9. 历史上下文使用约束
history_context 从 meeting_meta.json 的同名字段取(Step 1 已 Read)。它的价值在于对比今昔,而不是复述上次。使用位置:
- A2 本周进展:可以用"对比上次…,本周…"作为进展的钩子(但不要把上次内容写太多,focus 在本次)
- B2 长期问题追踪:必须对照上次 research-profile 的"持续问题"字段,判断哪些问题仍未解决
- B3 下次真正需要交付的:必须和上次的 B3 对应项对比,标出"上次说要做但这次没做"的项
如果 meeting_meta.json 的 history_context 字段为空字符串或 history_loaded_count: 0(首次运行),所有对比语句省略,不要硬造虚假的"上次"。
10. 失败模式与回退
| 失败模式 | 检测条件 | 回退行为 |
|---|
| 话术卡片为空 | 从 docs/社交复盘/{date}.md 抽取失败或空字符串 | A5 输出占位:"(本次社交复盘未生成话术卡片,跳过防御演练。建议下次检查 docs/社交复盘/{date}.md 的话术技巧卡片节。)" |
| 反面样本为空 | docs/组会过程/{date}/anti_pattern_log.md 只有 header 没有发言块(R2 失败或被跳过) | A3 的"已识别并避开的方向"子节整段省略,主段正常生成 |
| 原始汇报极短 | 用户只写了一两句话或"这周没干啥" | A2 框架化为"本周处于思考/文献调研/问题重审期",允许用 discussion_log.md 里的讨论内容作为"本周思考进展"的素材 |
history_context 为空 | meeting_meta.json 的 history_loaded_count: 0 或 history_context 字段为空字符串 | 全文省略所有"对比上次"措辞,不虚构 |
discussion_log.md 为空 | 文件只有 header 和 sentinel,没有任何发言块 | 拒绝生成,返回错误提示"讨论记录为空,无法合成汇报" |
| 任一上游文件不存在 | Read 抛出"文件不存在" | 拒绝生成,返回错误提示具体缺哪个文件,让编排器检查第零阶段/第一阶段是否正确执行 |
11. 执行步骤(给主 LLM 的明确指令)
收到本 skill 的调用后,严格按以下步骤执行:
Step 1|从过程文件 Read 全部上游数据
按以下顺序 Read 5 个文件(编排器在第零/第一/第二阶段已确保它们存在):
docs/原始汇报/{date}.md — Read 全文
docs/组会过程/{date}/discussion_log.md — Read 全文,按二级标题锚点 ## R{N}[.{sub}][·插话]·{角色}({agent})·{时间} 切片为 [{role, round, agent, text}, ...] 结构
docs/组会过程/{date}/anti_pattern_log.md — Read 全文,提取 R2 反例发言文本(记住:内容只能用于 A3 反思子节,其他任何地方禁用)
docs/组会过程/{date}/meeting_meta.json — Read 后取 history_context 字段。若 history_loaded_count: 0 或字段为空,记为"首次运行"
docs/社交复盘/{date}.md — Read 全文,用第 2 章的正则抽取"话术技巧卡片"节。抽取失败则走第 10 章失败回退
{date} 由编排器在调用本 skill 时通过参数传入;若未传,用 Glob docs/原始汇报/*.md 取最新文件名解析。
Step 2|回退路径决策
对照第 10 章失败模式表,对每个数据源的状态做检查:
discussion_log.md 只有 header → 拒绝生成
anti_pattern_log.md 只有 header → A3 反思子节省略
- 话术卡片为空 → A5 走占位回退
history_context 为空 → 全文省略"对比上次"措辞
- 任一文件不存在 → 拒绝生成并报错
Step 3|构建 Part A 骨架
按 A1-A6 六节顺序,先在内心列出每节要写什么点,对照第 4.1/4.2/4.4 红线逐节 self-check。
Step 4|生成 Part A 完整文本
切换到 Part A 写作人格(见第 7 章)。按骨架生成完整 Markdown。生成过程中严格遵守:
- A1/A2/A4/A5/A6 禁止任何 R2/mixed-advisor/anti_pattern_log 内容
- 只有 A3 的"已识别并避开的方向"子节允许引用 anti_pattern_log,且必须以"曾考虑过 X,但发现 Y 问题,所以排除"反思句式呈现
Step 5|Write Part A
调用 Write 工具把 Part A 写入 docs/汇报草稿/{date}.md。必须完整写完 A1-A6 后才能 Write。
Step 6|切换人格 + Read Part A 文件
- 在内心明确说"现在切换到对内坦诚语气,刚才的包装模式结束"
- Read 刚才 Write 的
docs/汇报草稿/{date}.md 全文 — B1 反美化必须引用 Part A 的具体节号和原话(不能凭记忆,因为生成 Part A 时的 verbatim 已经过去几个 turn)
- 允许在 Part B 文本开头写一句
<!-- 对内私密 · 仅自己看 · 禁止分享 --> HTML 注释作为显眼边界
Step 7|生成 Part B 完整文本
切换到 Part B 写作人格(见第 7 章)。基于 Step 6 Read 到的 Part A 全文 + Step 1 已 Read 的全部上游数据(特别是 anti_pattern_log 用于 B1 的"踩过的坑"案例)生成 Part B。严格执行第 4.3 的反美化义务。
Step 8|Write Part B
调用 Write 工具把 Part B 写入 docs/私密备忘/{date}.md。
Step 9|返回给编排器
返回两个文件路径和简短摘要,让编排器的第三阶段归档流程基于 Part B 的 B1/B2/B3 在 research-profile.md 末尾追加新时间戳快照(5 字段各一句话)。
附录:与 group-meeting 编排器的接口
本 skill 被 group-meeting 编排器在第二阶段步骤 2 调用。调用前编排器已确保:
- 第零阶段 已创建:
docs/原始汇报/{date}.md
docs/组会过程/{date}/discussion_log.md(含 sentinel)
docs/组会过程/{date}/anti_pattern_log.md(含 sentinel)
docs/组会过程/{date}/social_records.jsonl(含 sentinel)
docs/组会过程/{date}/meeting_meta.json(含 history_context 字段)
- 第一阶段 R1-R6 的所有发言都已通过"落盘三步骤"立即写入
discussion_log.md(R1/R3/R4/R5/R6)或 anti_pattern_log.md(R2),每条社交记录已 append 到 social_records.jsonl
- 第二阶段步骤 1 已生成
docs/社交复盘/{date}.md
本 skill 通过 Step 1 显式 Read 这些文件,不依赖主会话 context 中的任何变量。
调用后编排器进入第三阶段归档:
- 收尾
meeting_meta.json(写入 ended_at 等)
- research-profile.md 末尾追加新时间戳快照(5 个字段各一句话)
- 数据源:Read
docs/私密备忘/{date}.md(Part B 诚实层),不取 Part A 的包装内容
- 展示确认面板