Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions skills/lark-workflow-standup-report/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.sh text eol=lf
3 changes: 3 additions & 0 deletions skills/lark-workflow-standup-report/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
*.tmp
Thumbs.db
.DS_Store
274 changes: 179 additions & 95 deletions skills/lark-workflow-standup-report/SKILL.md

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions skills/lark-workflow-standup-report/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "Lark Standup Report"
short_description: "Generate sourced Lark daily and weekly reports"
default_prompt: "Use $lark-workflow-standup-report to generate today's sourced work report and create the Feishu document."
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# 日报模式规则

## 正文结构

自动化日报、飞书日报和用户未要求简版的日报正文必须包含:

1. `今日口述摘要`:用 3-5 句话概括本人当天真实推进、主要产出、关键风险和明日重心;不写没有证据的项目。
2. `今日推进明细`:按工作包列出事项、进展、产出、来源、状态;每个工作包默认只保留一行 `来源:`,把会议、群聊、云文档和本地证据合并到这一行。
3. `风险与阻塞`:没有明确阻塞时写“暂无明确阻塞”;每条风险默认只保留一行 `来源:`。
4. `明日计划`:最多 3 条,来自当天未闭环事项或用户明确计划;每条计划默认只保留一行 `来源:`。
5. `数据来源说明`:说明覆盖的日历、视频会议、群聊、云文档、本地 Agent/项目证据;列出未完整获取的数据源和未纳入的重要本地项目原因。

只有用户明确要求“简版/只要核心进展”时,才可省略 `今日口述摘要` 和 `数据来源说明`。数据覆盖情况仍必须写入本地执行记录、automation memory 或最终回复。

## 归因门槛

日报正文只写“本人主导、本人明确推进、本人实际产出、本人需要继续跟进”的事项。

一个飞书事项进入 `今日推进明细` 至少满足一项:

- 本人发出明确行动消息或决策消息。
- 本人组织或深度参与会议。
- 本人会议关联的逐字稿、纪要正文,或经逐字稿核验后的 Agent 摘要直接支撑事项。
- 本人创建或编辑相关文档。
- 本地 Agent 或项目目录有可验证产出。
- 用户显式说明该事项归自己负责。

全量群聊搜索只用于发现上下文和待关注事项。若没有本人发言、本人被 @ 后明确响应、会议参与证据或本地产出,默认放弃,不写入正式日报。

他人更新原型、修复 Bug、讨论技术路径时,即使与本人所在项目有关,也只能作为现有本人事项的背景/风险来源;不能单独写成“我推进了某某功能”。

对归属不确定的候选事项,降级到本地执行记录的“未纳入/待确认线索”,不要写入飞书日报正文。

## 自动化任务边界

日报自动化本身通常不是业务工作项。普通采集、整理、创建日报文档只写入执行记录或 `数据来源说明`,不得写入 `今日推进明细`。

只有当本次自动化产生以下内容时,才可写入 `今日推进明细`:

- 可复用流程改进。
- skill 规则修订。
- 跨团队材料。
- 自动化缺陷修复。
- 用户明确要求展示的自动化产出。

## 来源链接规则

- 日历、视频会议、云文档有 URL 或 AppLink 时,必须在相关事项的 `来源` 行直接用 Markdown 链接展示。
- 会议相关来源优先级:`逐字稿正文` > `Agent 基于逐字稿形成的摘要 + 本地补强证据` > `纪要正文/妙记链接` > `妙记 AI 总结/待办/章节(仅候选线索)` > `meeting app_link / 会议详情`。只要拿到了逐字稿,就不要再把 AI 摘要当主证据。
- 群聊来源也必须在相关事项下直接展示。若只有群聊入口链接而没有单条消息直达链接,使用 `来源:[群聊:群名](群聊入口URL)(时间范围;内容摘要:...)`。
- 私聊来源不要写成抽象的 `本人p2p消息`;正文和候选审查里优先写 `来源:与张三私聊(时间范围;内容摘要:...)`。如果拿不到联系人姓名,再退化为“未命名私聊联系人”。
- 不要把链接集中放在 `参考链接`、`来源索引`、`附录` 等章节。
- 不要在日报正文展示裸 `message_id`。若 CLI/API 不能获取单条消息直达链接,改为关键消息内容摘要。
- 禁止根据 `chat_id`/`message_id` 猜造消息直达链接。
- 同一事项的来源默认合并成一行,格式示例:`来源:[会议纪要](...);[群聊:Fiber产品](...)(17:06;确认 A/B 两端都可关联);D:\AICODING\AIEXCEL\docs\...`。

## 本地 Agent 证据

本地 Agent 线索可能对应独立工作包,也可能只是补充现有飞书事项的证据。不得只写“使用了 Agent”,必须提炼事项、进展、产出、验证和状态。

若事项本身是本地 Agent 工作产出,并且有当天 `knowledge`、代码、脚本、测试、文档、构建产物、发布记录或可复核文件路径,本地 Codex / Claude Code 会话和这些产物可以作为该工作包主证据。

本地 Agent 来源在日报正文中应引用可读的证据摘要文件、项目 knowledge 文件、产物路径或可打开的线上地址;不要把完整 JSONL 日志或冗长命令输出贴入日报正文。

若本地 Agent 会话与当天某场会议直接相关,并且正文要写“会议讨论/会议确认/会议推进”的结论,才默认把它当作“会议事项补强证据”,用于:

- 帮助解释逐字稿中的术语、方案推演和后续产物。
- 交叉验证会议后是否形成了真实输出。

但它不能单独替代会议原始证据。没有逐字稿或会议元数据时,不能把本地 Agent 会话写成“会议已确认”的事实。

## 会议证据优先级

日报模式下,飞书会议不应天然弱于本地证据。默认按下列顺序使用会议证据:

1. 逐字稿正文,以及 Agent 基于逐字稿自行提炼的摘要。
2. 与该会议同主题的本地 Codex / Claude Code 会话、knowledge、方案文档,在会议事项归因场景中用于补强逐字稿结论。
3. 纪要文档、逐字稿文档或妙记链接。
4. 妙记 AI 总结、待办、章节,只能作为候选线索或检索导航,不应直接当最终结论。
5. `vc meeting get` 的会议主题、组织者、参会人、开始时间、共享文档。
6. `vc +search` 的会议搜索元数据。

若 1 获取失败,但 3-6 成功,正文可继续使用会议元数据;同时在 `数据来源说明` 中明确写“未获取逐字稿,仅使用会议元数据/链接,AI 摘要未作为主结论”。

## 会议 AI 摘要使用红线

- 妙记 AI 摘要、待办、章节属于飞书内置模型的二次总结,不是完全可靠的一手信源。
- 只要逐字稿可用,必须优先读逐字稿,由 Agent 自己总结,不得直接复述 AI 摘要原文。
- 若只有 AI 摘要没有逐字稿,必须再用本人消息、相关文档或本地 Agent 产物交叉验证;没有补强证据时,只能写成背景线索、风险或待确认项。
- 若 AI 摘要与逐字稿或本地产物冲突,以逐字稿和可验证产物为准。
163 changes: 163 additions & 0 deletions skills/lark-workflow-standup-report/references/lark-source-commands.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
# 飞书数据源与命令参考

执行前必须读取 `../lark-shared/SKILL.md` 了解 user/bot 身份和权限处理。本 skill 仅使用 `--as user`。

## 推荐脚本

日报优先运行。macOS/Linux 使用 `.sh`,Windows/PowerShell 使用 `.ps1`。

macOS/Linux 依赖 `bash`、`jq`、`python3`、`perl`、`lark-cli`。若 macOS 自带 Bash 版本过旧,可使用 Homebrew 安装新版 bash:`brew install bash jq python3`。

macOS/Linux:

```bash
scripts/collect_lark_daily.sh \
--date "YYYY-MM-DD" \
--start "YYYY-MM-DDT00:00:00+08:00" \
--end "YYYY-MM-DDTHH:mm:ss+08:00" \
--out-dir "work/daily_YYYY-MM-DD" \
--im-chunk-hours 1 \
--im-request-timeout-seconds 45 \
--im-max-failures-per-search 4
```

Windows/PowerShell:

```powershell
scripts/collect_lark_daily.ps1 `
-Date "YYYY-MM-DD" `
-Start "YYYY-MM-DDT00:00:00+08:00" `
-End "YYYY-MM-DDTHH:mm:ss+08:00" `
-OutDir "work/daily_YYYY-MM-DD" `
-ImChunkHours 1 `
-ImRequestTimeoutSeconds 45 `
-ImMaxFailuresPerSearch 4
```

脚本会采集日历、视频会议、会议详情、可用的会议纪要/妙记、当前用户、全量群聊、本人群聊、云文档,处理分页,脱敏原始 JSON,并生成 `source_manifest.json`。

群聊搜索慢时,脚本先采本人消息,再采全量群聊;全量群聊按时间片隔离失败。某个时间片超时只写入 `source_manifest.json.errors`,不得阻塞日历、会议、本人消息、云文档和本地 Agent 证据采集。

## 手工命令

仅在脚本不可用或需要调试时手工执行。

### 日历

```bash
lark-cli calendar +agenda --as user \
--start "<START>" --end "<END>" --format json
```

### 视频会议

```bash
lark-cli vc +search --as user \
--start "<START>" --end "<END>" --format json --page-size 30
```

`has_more=true` 时使用 `--page-token` 翻页。对高信号会议默认继续读取详情:

```bash
lark-cli vc meeting get --as user \
--params '{"meeting_id":"<id>","with_participants":true}'
```

若会议存在纪要或妙记,再继续读取:

```bash
lark-cli vc +notes --as user --meeting-ids "<meeting_id>" --format json
```

若已拿到妙记链接或 minute token,再继续读取:

```bash
lark-cli vc +notes --as user --minute-tokens "<minute_token>" --format json
```

日报模式下,会议证据默认优先级是:

1. 逐字稿正文。
2. Agent 基于逐字稿形成的自主摘要,以及同主题本地 Codex / Claude Code 会话、knowledge、产物在会议事项归因场景中形成的补强证据。
3. 纪要/逐字稿/妙记链接。
4. 妙记 AI 总结、待办、章节,仅作候选线索。
5. `meeting get` 的会议详情。
6. `vc +search` 搜索元数据。

`vc +notes` 或妙记拉取失败时不阻塞,直接降级到 `meeting get` 结果,但必须在 `source_manifest.json.errors` 和 `数据来源说明` 里写明。

只要拿到了逐字稿,就必须阅读逐字稿并自行总结,不要直接把飞书内置 AI 的妙记总结、待办或章节原文抄进日报。若只有 AI 摘要没有逐字稿,必须再用本人消息、云文档或本地 Agent 产物交叉验证;没有补强证据时,不得把 AI 摘要写成确定结论。本地 Agent 产出只有在引用会议结论时是补强;若它本身就是当天工作产出,仍可作为本地工作包主证据。

### 群聊消息

```bash
lark-cli im +messages-search --as user \
--sender "ou_<user_openid>" \
--start "<START>" --end "<END>" \
--page-size 50 --format json
```

```bash
lark-cli im +messages-search --as user \
--start "<START>" --end "<END>" \
--page-size 50 --format json
```

两条路径都必须翻页。重点提取本人发出的含链接、文档、结论、行动项的消息。忽略机器人消息、表情回复、纯社交闲聊。

如果搜索结果中只有 `message_ids`,并出现 `failed to fetch message details`,说明 user token 具备搜索权限但缺少消息详情读取权限。不要切换到 bot 身份;user 身份读取正文需要“基础读消息权限 + 按会话类型补充权限”。优先使用最小只读授权:

```bash
lark-cli auth login --scope "im:message:readonly im:message.group_msg:get_as_user im:message.p2p_msg:get_as_user"
```

授权后重新运行采集脚本。只有 ID 无正文时,日报不能把群聊内容写成确定结论。

### 云文档

```bash
lark-cli docs +search --as user --query "" \
--filter '{"open_time":{"start":"<START>","end":"<END>"}}' \
--page-size 20 --format json
```

筛选重点:

- 本人创建/更新的文档。
- 与本周或当天主线相关的文档标题。

## 文档创建

优先运行。macOS/Linux 使用 `.sh`,Windows/PowerShell 使用 `.ps1`。

macOS/Linux:

```bash
scripts/create_daily_doc.sh \
--markdown-path "outputs/工作日报-YYYY-MM-DD.md" \
--title "工作日报 YYYY-MM-DD 杜励承" \
--wiki-node "<日报父 Wiki 节点 URL>" \
--response-path "work/daily_YYYY-MM-DD/feishu_doc_create_daily_YYYY-MM-DD.json"
```

Windows/PowerShell:

```powershell
scripts/create_daily_doc.ps1 `
-MarkdownPath "outputs/工作日报-YYYY-MM-DD.md" `
-Title "工作日报 YYYY-MM-DD 杜励承" `
-WikiNode "<日报父 Wiki 节点 URL>" `
-ResponsePath "work/daily_YYYY-MM-DD/feishu_doc_create_daily_YYYY-MM-DD.json"
```

手工命令(v2):

```bash
lark-cli docs +create --api-version v2 --as user \
--parent-token "<日报父 Wiki 节点 token>" \
--doc-format markdown \
--content "@work/daily_YYYY-MM-DD/daily_doc_create_content.md" \
--format json
```

正文不要重复一级标题。
80 changes: 80 additions & 0 deletions skills/lark-workflow-standup-report/references/weekly-wbs-rules.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# 周报与 WBS 规则

## 周报简报模式

使用三段式:

```markdown
## 本周工作简报(YYYY-MM-DD ~ YYYY-MM-DD)

### 【本周核心】
3-8 条;每条含事项和背景/目标。

### 【关键产出】
最多 5 条;每条含产出和价值。

### 【待跟进】
最多 5 条;每条含阻塞/下周重点和原因。
```

每条结论必须附带来源标注:

```markdown
- 来源:[会议:<会议主题>](URL)(YYYY-MM-DD)
- 来源:[群聊:<群名>](群聊入口URL)(YYYY-MM-DD HH:mm;内容摘要:<关键结论/行动项>)
- 来源:[文档:<文档标题>](URL)(YYYY-MM-DD 更新)
- 来源:[日历:<日程标题>](URL)(YYYY-MM-DD)
```

若周报需要创建飞书文档,必须先生成本地 Markdown,再创建到周报父节点下,并保存响应到 `work/weekly_YYYY-MM-DD_YYYY-MM-DD/`。

## WBS 填报模式

当用户提到 WBS、研发 WBS、多维表格、按条目填表,或提供 WBS Base/wiki 链接时进入 WBS 填报模式。

本地 Markdown 草稿必须包含:

1. `口述汇报摘要`:保留可口述的周报内容,每条保留来源标注。
2. `目标表格要求分析`:Base/table/view、字段要求、可写字段、只读字段、视图筛选限制。
3. `本周证据`:会议/妙记、群聊、本人创建或更新的云文档、关键打开文档。
4. `候选 WBS 条目`:逐条列出任务名称、任务描述、负责人、分工、任务级别、起止日期、进度、预计工时、实际工时、相关文档链接、待确认字段。
5. `建议合并/拆分`:只作为建议,不等同于实际写表清单。
6. `实际写入计划`:用户要求写表时列出完整写入条目。

缺少 `候选 WBS 条目` 时,不能作为写表依据。缺少 `口述汇报摘要` 时,视为不完整草稿。

## WBS 任务级别

- 候选 WBS 条目和实际写入计划中的 `任务级别` 默认填写 `二级`。
- 写入/推送到 Base 时,`任务级别` 必须统一写入 `二级`;不得因为任务重要性、项目层级、周报表述或旧草稿值写入 `一级`。
- 如果草稿或历史计划里已有 `一级`,构造 `lark-cli base +record-upsert` payload 前必须覆盖为 `二级`,并在执行记录中说明已按规则统一。

## WBS 默认入口

若用户未提供 WBS 链接,默认入口:

`https://fiber-doctor.feishu.cn/wiki/YOlrw2Ir1imq7QkLsspcKIZ3nig?table=tblvypvD754NJFgh&view=vewa0doZVe`

执行时必须解析真实 `obj_token`、校验字段结构和视图限制,不能直接假设 URL 参数可写。

## 写表护栏

- 用户说“不要直接写”“先在本地 MD 写一下”时,禁止写入 Base。
- 用户明确要求“直接加到表格”时,才可新增记录。
- 本地草稿有 N 条候选,默认写入 N 条;不得擅自只写“推荐精简版”。
- 写表前必须明确区分候选条目、建议精简版、实际准备写入条目。
- 写表前必须检查实际 payload:所有 `任务级别` 均为 `二级`,否则禁止执行 `record-upsert`。
- 用户要求“不填关联项目”时,关联字段必须留空。
- 写入后必须读取目标视图或记录核验,并报告新增记录 ID、写入条数、留空字段和核验文件路径。

## WBS 排除

用户可声明 `不写入 WBS` / `排除项目` / `填 WBS 时不要写...`。

排除清单只影响 WBS 候选条目和实际写表,不影响日报/周报正文,除非用户明确说“日报也不要写”。

写入前对候选条目的任务名称、任务描述、项目名、相关文档、群聊、会议、URL、Codex 线程名、工作目录和摘要做匹配;命中项不得写入 Base。

执行记录写明:

`WBS 写入前已按用户要求排除:<raw>(命中:<字段>,候选条目:<任务名称>)`
Loading
Loading