会议摘要
工具: 步骤调用角色操作(
pm.*、email.*、calendar.*、docs.*、files.*、comms.*)。通过Context/agent-config.md→ 工具栈 及其指定的适配器(.claude/adapters/README.md)解析每个操作。角色设为none则跳过该步骤。
获取指定日期的所有会议,查找每个会议的笔记或转录,生成结构化摘要,并保存在本地。目标日期默认为今天;传入 "yesterday" 则处理前一天。
配置
在开始时读取 Context/agent-config.md。使用以下配置项:
timezone— 用于所有日期计算base_directory— 用于文件路径构建和幂等性检查calendar_exclusions— 要跳过的会议标题模式列表- 工具栈 → 会议笔记 — 会议内容的来源
读取目标文件(路径在 agent-config 中),用于在第 4 步识别项目和里程碑名称。
说明
按顺序运行所有步骤。除非明确告知暂停,否则不要在步骤之间请求确认。
第 1 步 — 获取目标日期的所有未摘要会议
阶段 A — 日历:获取会议列表
-
在用户的时区中计算目标日期。默认 = 今天;如果用户传入了 "yesterday",则减去一天。
-
calendar.events(目标日期开始, 目标日期结束)(在用户的时区中)。 -
过滤为仅真实会议。 移除满足以下条件的事件:
summary匹配calendar_exclusions中的某个模式- 是专注时间或工作地点块
attendees列表为空或仅包含用户(单人块)
-
按时间顺序排序(最早的在前)。这是要处理的会议的有序列表。
阶段 B — 幂等性检查
对于每个会议:
- 推导预期的笔记文件名:
YYYY-MM-DD - [会议名称].md,使用日历事件的summary。清理名称:将/、\、:和|替换为-,去除表情符号,合并重复空格。 - 检查
[base_directory]/Context/Meeting Notes/中是否已存在该名称的文件。 - 如果存在且已有
## Summary部分 → 跳过该会议。输出:"[会议名称] 的笔记已存在 — 跳过。" - 如果存在但为原始笔记(无
## Summary)→ 将其内容用作来源并继续。 - 如果不存在 → 进入阶段 C。
阶段 C — 查找会议内容
按此顺序检查来源,使用第一个有内容的:
- 原始笔记文件 — 来自阶段 B 第 4 步。
- 已配置的来源 — agent-config 中的每个条目 → 会议笔记来源,按顺序排列。常见的有:
- 日历附件 — 附加到事件的笔记文档 → 使用其文件 ID 调用
files.read。"未找到"表示未与用户共享 — 静默跳过 docs.meeting_notes(日期)— 按标题或时间窗口(±30 分钟)匹配;通过docs.read读取
- 日历附件 — 附加到事件的笔记文档 → 使用其文件 ID 调用
- 日历事件描述 — 仅当包含实际笔记时才使用,而不是仅议程或视频链接。
- 询问用户 — 将仍未获取到内容的会议列在一条消息中:"未找到以下会议的笔记:[列表]。粘贴任何希望摘要的会议的笔记或转录,或输入跳过。"
如果某个会议仍无内容 → 标记为 "无可用笔记" 并跳过。
阶段 D — 报告
处理完所有会议后,报告:
- 已摘要的数量
- 跳过的数量(附原因:已存在 / 无笔记)
第 2 步 — 读取上下文
在处理任何笔记内容之前,读取:
GOALS.md— 了解当前项目和目标Context/Memory/brain.md— 了解用户的思维方式、词汇以及他们对决策与讨论的区分
第 3 步 — 分析笔记内容
对于每个有内容的会议,提取四项内容:
A. 摘要 2–3 句话。结果优先:会议内容是什么,关键结果或转变是什么。不是讨论话题的列表——而是一个连贯的结果陈述。使用用户的语气:直接,无努力框架,以结果开头。
B. 决策 明确改变了方向、确定了某些事项或解决了未决问题的承诺。只有真正的决策——不是建议,不是可能性。格式:做了什么决定,谁做的(如可归因)。
C. 行动事项 具有指定负责人的具体后续步骤。对每个事项应用以下逻辑:
- 如果笔记高度确信指定了特定人为负责人 → 分配给他们
- 如果所有权不明确或共享 → 分配给用户
- 仅在会议中明确提到了项目管理事项或项目时(通过键、名称或清晰引用)才包含。不要推断或猜测——如果未提及,则项目列留空(
—) - 如果会议中提到了建议截止日期则注明,否则留空
D. 待定问题 / 阻碍 未解决的问题、提出的阻碍或推迟到未来会议讨论的话题。这些仅放入笔记文件中。
第 4 步 — 项目引用
仅在会议中明确提到了事项键或项目名称时才记录——通过键(例如 ENG-123)、名称(例如“入职改版里程碑”)或明确引用。
不要根据会议上下文推断、查找或猜测项目。空着比分配错误的好。
第 5 步 — 写入会议笔记文件
将摘要保存到 Context/Meeting Notes/,文件名格式为:
YYYY-MM-DD - [会议名称].md
使用日历事件的 summary 作为会议名称。
文件格式:
# [会议名称]
*[YYYY-MM-DD] | [时长(如有)] | [来自日历的参会者(如有)]*
## 摘要
[2–3 句结果优先的摘要。发生了什么以及改变了什么。]
## 决策
- [决策 1 — 如已知谁做出的]
- [决策 2]
## 行动事项
| # | 任务 | 负责人 | 项目 | 截止日期 |
|---|------|-------|------|----------|
| 1 | [任务描述] | [姓名 / 我] | [项目名称 (KEY-123) 或 —] | [日期 或 —] |
| 2 | ... | ... | ... | ... |
## 待定问题与阻碍
- [问题或阻碍 — 未解决的问题及其重要性]
## 上下文
[任何来自会议的背景、链接或框架,对未来参考有用。最多保留 3–5 条。]
如果来源是原始笔记(阶段 B 第 4 步),则将其保留在底部的 ## 原始笔记 部分下——永远不要删除用户的笔记。
在保存之前,为笔记添加 [[wiki-links]] 以实现 Obsidian 图谱连接:
- 所有提名的个人 →
[[姓名]] - 所有事项键 →
[[KEY-123]] - 关键概念、项目和跨笔记重复出现的主题 →
[[概念]] - 仅链接有意义的提及——不是每个单词,不在代码块或 URL 内部
向用户确认:"会议笔记已保存到 Context/Meeting Notes/[文件名].md"
第 6 步 — 接触点联动
保存后:
- 检查本次会议的任何决策或阻碍是否与
Tasks/中的开放任务相关——如果是,则内联注明。 - 如果提出的阻碍已经存在于
GOALS.md中作为已知阻碍,则标记:"此阻碍([名称])也曾在 [先前上下文] 中被提出。考虑它是否为系统性问题。" - 如果会议是与某位有文档在
Context/121s/中的指定人员进行的定期一对一会议,则在其文档中追加一条会议记录条目:日期、1 行摘要、新增的任何开放循环。
会议笔记包含个人数据,不应提交或推送。
第 7 步 — 在聊天中显示摘要
在本地保存所有笔记后,显示当天摘要的整体汇总。
结构:会议 → 主题 → 每个主题下的决策 + 行动。
📝 **会议摘要完成 — [YYYY-MM-DD]** | [N] 已摘要 | [N] 已跳过
*[会议名称]*
[主题 / 目标或里程碑]
决策
- [决策]
- [决策]
行动事项
- [任务] → [负责人] [截止日期(如已知)]
[主题 2]
决策
- [决策]
行动事项
- [任务] → [负责人]
笔记已保存到 `Context/Meeting Notes/`
分组规则:
- 第一级:会议名称
- 第二级:该会议中讨论的主题、目标或里程碑——使用纯名称,绝不使用裸事项键
- 第三级:决策和行动事项作为每个主题下的标量子部分
- 如果某个主题没有决策,则省略决策子部分。如果没有行动事项,则省略行动事项子部分。
- 如果会议只有一个主题,仍显示主题名称——不要折叠
- 在聊天摘要中省略行动事项中的项目列——它只应存在于笔记文件中
第 8 步 — 提供决策日志更新
仅当在所有摘要会议中提取了至少一个决策时才执行此步骤。
在一次消息中询问:
"是否要将这些决策中的任何一个记录到 PRD 的决策日志中?
今天的决策:
[会议名称] [主题] 1. [决策] 2. [决策]
如果是,请告诉我哪个文档(
Context/Document Hub/中的本地文件或 docs 工具中的页面)以及要添加哪些决策编号。"
跨所有会议按顺序编号决策,以便用户可以通过编号引用。
等待用户响应。
- 如果不 / 跳过:结束技能。
- 如果是:对他们指定的每个文档执行以下步骤。
对于每个提供的文档:
A. 获取文档
- 本地文件 → 读取。
- Docs 工具页面 →
docs.read。
B. 定位决策日志
扫描标题包含 "Decision Log"、"Decisions Log" 或 "Decisions"(不区分大小写)的部分。
- 如果存在包含表格的决策日志部分:将新行追加到其中。
- 如果存在决策日志部分但无表格:在标题下立即插入表格。
- 如果没有决策日志部分:在文档底部插入新的
## Decision Log部分和表格。
C. 构建行
对于用户选择的每个决策,创建一行表格:
| [YYYY-MM-DD] | [决策文本] | [状态] |
- 日期:会议日期。
- 决策:来自摘要的确切文本——不要转述。
- 状态:如果明确且最终则为
Decided。如果文本包含 "TBD"、"to be confirmed"、"pending"、"waiting on" 或标记为未解决,则为Pending。
如果表格尚不存在,先用以下表头行创建:
| 日期 | 决策 | 备注/状态 |
|-----|------|-----------|
D. 预览,然后更新
显示要添加的行。对于本地文件,直接写入。对于 docs 工具页面,等待用户明确确认,然后 docs.update(引用, "Decision Log", 行)——仅更改该部分。
E. 确认
"决策日志已更新至 [文档标题] — 已添加 [N] 条决策。"
边缘情况
- 未找到决策:写入 "未做出任何决策——讨论/更新会议。" 不要捏造决策。
- 未找到行动事项:写入 "无行动事项。"
- 会议是站会或小于 5 分钟:仍然运行摘要,但摘要保持 1 句话。
- 多个笔记匹配同一事件:使用最接近事件开始时间的笔记。
- 来源不可用:静默跳过并转到阶段 C 中的下一个来源。
- Docs 页面未找到(第 8 步):报告错误,要求用户再次检查 URL,并提供重试。
- 决策日志部分不明确(第 8 步):如果多个标题可能匹配(例如 "Key Decisions" 和 "Decision Log"),显示两者并询问追加到哪个。
- 重复决策(第 8 步):在插入前,扫描现有行。如果相同决策文本已存在,跳过并注明跳过。