# Personal Worklog

> 个人工作小结（全天版）：扫今天所有 Claude Code 窗口的对话记录，按大项目自动聚类，提炼「你本人」做了什么——拆需求、拍板、纠正 AI、把控节奏、实测把关——写入飞书 wiki『每日个人总结』节点下的 `Worklog YYYY-MM-DD` docx。触发：「写今天的 worklog」「个人工作小结」「总结我今天做了什么」「我今天指挥 AI 做了什么」「写一份像人写的小结」「在日报基础上加个人版」。

- Skill: `jim4546/personal-worklog` (Agent Skill)
- Install (CLI): `npx skillmds@latest add jim4546/personal-worklog`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jim4546/personal-worklog/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: Jim4546 (https://skillmd.com/u/jim4546)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/jim4546/personal-worklog

---


# 个人工作小结（全天版）

把「AI 做了什么开发」翻面，提炼出**「你这个人」做了什么**——拆解需求、拍板决策、纠正 AI、把控节奏、实测把关——给领导看到人的贡献和工作逻辑。

## 核心原则（必须遵守）

1. **只写人做的事，不写 AI 的开发细节。** 主语是「人」，动词是 决策 / 否决 / 拍板 / 叫停 / 推动 / 实测 / 发现 / 指挥，不是 编写 / 实现 / 开发。
2. **不许拔高、不许编。** 每一条都要能在对话记录里找到出处。挑不出证据的点就不写。
3. **具体优先。** 「积极推进项目」这种空话没用；「否决了 X 建议、改成 Y」才可信。带上数字、原话、具体名词。
4. **核心决策点优先，不设条数硬上限。** 「这条拿掉工作逻辑链就断」就保留；可有可无的合并或砍掉。
5. **每一次否决 / 纠正 AI 单独成一条，绝不合并。** 这是「指挥 AI」最硬的证据。
6. **产物是草稿。** 收尾提醒用户：内容是 AI 起草的草稿，建议逐句改写成自己的话再正式提交。

## 工作流程（一条主线）

```
1. 扫今天所有 jsonl（双重过滤）
2. 自动聚类成 N 个大项目（路径关键词 + 共享专有名词）
3. ★ 归类预览 → 用户一句话确认 / 调整（唯一的确认环节）
4. per-window 并行提炼（subagent，按六维度抽取结构化要点）
5. 主 agent 合并：同大项目内合并去重；否决项不合并
6. 组装 docx 内容（结构见下文）
7. 写入飞书 wiki『每日个人总结』节点下的 `Worklog YYYY-MM-DD` 子 docx（已存在则覆盖）
8. 推送链接到「每日日报组」飞书群（与日报合并成一条发）
9. 输出文档链接 + 提醒「AI 草稿，请逐句改写」
```

---

## 步骤 1：扫今天所有 jsonl（双重过滤）

Claude Code 每个对话窗口都在 `~/.claude/projects/*/*.jsonl` 存了完整记录。

**双重过滤规则**：
- **过滤 1（mtime）**：文件最后修改时间在本地今天 00:00 之后。
- **过滤 2（内容）**：文件至少含一条 `timestamp` 在今天的 `type=="user"` 且 `isSidechain!=true` 的消息。

只取项目目录**下一层**的 `.jsonl`；忽略 `<uuid>/` 子目录里的 subagent 记录。

每个 jsonl 当作**一个窗口**，提取：
- `cwd`（判属于哪个项目）
- 全部 user 真文本消息（`message.content` 里 `type=="text"`）
- 时间戳范围

跳过纯 `<command-...>`、`Caveat`、`<system-reminder>`、`<task-notification>`、`tool_result` 项。
对于 `Base directory for this skill: ...` 这种 skill 加载提示，只保留末尾的 `ARGUMENTS:` 用户实际命令。

---

## 步骤 2：自动聚类成 N 个大项目

为每个窗口生成「指纹」：
- **路径关键词**：`cwd` 最后两段（如 `Desktop/知识库`）
- **专有名词**：前 5 条用户消息里出现的飞书 token、URL host、独有名词（项目名、人名、文档名等）

**聚类规则（并查集）**：两个窗口满足任一条件即合并到同一大项目——
- 共享 ≥1 个专有名词（飞书 token、独有项目名等）
- 路径关键词完全相同 **且** 时间窗口接近（≤4 小时间隔）

**注意**：仅"路径相同"不足以聚到一起——同一目录下的两个不同子任务应拆分。

每个大项目起一个**简短名称**（≤10 字），从共享专有名词或共同主题里挑。

---

## 步骤 3：归类预览（★ 唯一的确认环节）

向用户展示：

```
检测到今天有 N 个窗口，自动归为 M 个大项目：

📦 大项目 A：<名称>（X 个窗口）
  - <cwd 末段>（窗口标识 / 主要话题一句话）
  - ...

📦 大项目 B：<名称>（Y 个窗口）
  - ...

归类对吗？回复 ok 继续；或者告诉我怎么调整（"把 X 挪到 A"、"A 和 B 合并"等）。
```

用户 ok / 用户调整后再次 ok → 进入步骤 4。

---

## 步骤 4：per-window 并行提炼（subagent）

**对每个窗口并行启动一个 subagent**（`Agent` 工具，`subagent_type: general-purpose`），单条消息内多次 tool use 并行发起。

每个 subagent 任务：

> 读 `<jsonl 路径>`，按以下六个维度提炼「人做了什么」的结构化要点，返回 JSON：
> ```json
> {
>   "window_id": "<jsonl 文件 8 位前缀>",
>   "time_range": "<HH:MM-HH:MM>",
>   "points": [
>     {"dim": "需求定义|方案决策|节奏把控|实测把关|工具链升级|能力选型|任务指挥|历史资产复用", "text": "<一句话>", "evidence": "<用户原话片段 + 时间>"},
>     {"dim": "独立否决 AI 推荐", "text": "否决「...」，改为「...」，因为...", "evidence": "<原话 + 时间>"},
>     ...
>   ]
> }
> ```
> 要求：
> - 只看 `type=="user"` 且 `isSidechain!=true` 的消息。
> - 每一次否决 / 纠正 AI 单独成一条，不合并；标签固定为「独立否决 AI 推荐」。
> - 其他维度可有可无，能写则写；写不出证据的不写。
> - 不要堆报告腔，不要"我"，客观陈述。
> - 不要写 AI 干了什么；只写人的决策、否决、判断、推动、实测。

主 agent 收 N 份 JSON。

---

## 步骤 5：合并

按步骤 3 确认的聚类，把同一大项目的多个窗口的 points 合并：

- **同维度的可合并条目**：同维度且语义相近的多条要点 → 合并成一条，证据并列。
- **否决项绝不合并**：每条「独立否决 AI 推荐」原样保留，依次编号（一）、（二）、（三）……
- **核心决策点筛选**：拿掉一条不影响工作逻辑链 → 砍；保留下来的必须是骨架性的决策/动作。
- **窗口痕迹不要带出来**：合并后的产出里不出现 "窗口 A / B"、jsonl ID 等技术痕迹。
- **提取相关飞书文档链接**：扫该大项目内所有窗口的 user 消息，用正则 `https?://[^\s)]*feishu\.cn/(base|docx|wiki|sheets|file)/[A-Za-z0-9]+(\?[^\s)]*)?` 抓所有飞书云文档 URL；去重后按出现顺序保留前 5 条，组装到 `<h3>相关飞书文档</h3>` 节。对每个 URL，如果能从对话上下文推断出文档名/用途（如"书目录入 Base 表"），就作为 `<a>` 的链接文本；推断不出就用裸 URL。本文档自身的链接也要列出（标注"（本文档）"）。

---

## 步骤 6：组装 docx 内容（DocxXML 格式）

完整文档结构（**使用 HTML 风格标签**：要点用 `<ol><li>` **有序列表**体现先后逻辑、`<b>` 加粗维度标签；不要用 `<bullet>` / `<text_run>`）：

```xml
<title>Worklog YYYY-MM-DD</title>

<p><i>一句导语：今天跨 N 个方向（项目列表），本人主导了 X 项决策拍板、Y 次否决 AI 建议、Z 项实测把关。</i></p>

<h2>一、大项目 A 名称</h2>
<ol>
<li><b>需求定义</b>：……</li>
<li><b>方案决策</b>：对 N 个问题逐一拍板——……</li>
<li><b>独立否决 AI 推荐（一）</b>：否决「……」，改为「……」，因为……</li>
<li><b>独立否决 AI 推荐（二）</b>：……</li>
<li><b>实测把关</b>：亲自……，发现……</li>
</ol>

<h3>相关飞书文档</h3>
<ul>
<li><a href="https://...">文档名（base / docx / wiki / sheets）</a></li>
</ul>

<h3>本项工作逻辑</h3>
<p>① 拿到任务（含糊指令 / 链接 / 截图）</p>
<p>↓</p>
<p>② 读懂并定义成明确目标</p>
<p>↓</p>
<p>③ 逐项决策、选型、拍板（其中否决 / 修正 AI 建议）</p>
<p>↓</p>
<p>④ 亲自实测把关（发现并上报问题）</p>
<p>↓</p>
<p>⑤ 交付落地</p>

<h2>二、大项目 B 名称</h2>
<ol>
<li>……</li>
</ol>

<h3>本项工作逻辑</h3>
<p>① ……</p>
<p>↓</p>
<p>② ……</p>

<h2>原话证据</h2>
<ul>
<li>「……」——大项目 A，HH:MM</li>
<li>「……」——大项目 B，HH:MM</li>
</ul>
```

**关键约束**：
- 大项目标题用 **中文序号前缀**（一、二、三……），便于飞书目录侧栏一眼看到顺序
- 每个大项目必须含 `<h3>相关飞书文档</h3>` 小节，列出该项工作触及的飞书 base / docx / wiki / sheets 链接（提取方法见步骤 5 末尾）
- 要点必须用 `<ol><li>`（有序列表），不要 `<ul>` —— 编号体现先后逻辑
- **每个大项目独立的 `<h3>本项工作逻辑</h3>` 流程图**，不要全文档共用一个
- 原话证据保持 `<ul><li>`（无序），仅作为可追溯附录
- 流程图保持竖排文字+`↓`箭头格式；如果未来要框线图，走 `lark-whiteboard` skill 嵌入画板（当前不做）

参考既有日报模板 `daily-report/references/template-example.md` 的 DocxXML 写法。

**流程图规则**：竖排带序号的箭头流，每步独立 `<p>`；**禁止 ASCII 框线方块图**（飞书等非等宽字体会错位）。

**导语规则**：一句话，提到今天跨几个方向 + 关键数字（决策数、否决次数、实测次数）。

---

## 步骤 7：写入飞书

**硬编码 wiki 根节点**：

```
URL: https://t2rvx54o5x.feishu.cn/wiki/XAMewJpVniOSXSkEKaGcASM4nkg
title: 每日个人总结
node_token: XAMewJpVniOSXSkEKaGcASM4nkg
space_id: 7631109155675196628
```

### 7.1 检查今天的 docx 是否已存在

```bash
lark-cli wiki +node-list --as user \
  --space-id 7631109155675196628 \
  --parent-node-token XAMewJpVniOSXSkEKaGcASM4nkg
```

在返回的 `nodes` 里找 `title == "Worklog YYYY-MM-DD"`。

### 7.2a 不存在 → 创建

```bash
lark-cli wiki +node-create --as user \
  --space-id 7631109155675196628 \
  --parent-node-token XAMewJpVniOSXSkEKaGcASM4nkg \
  --obj-type docx \
  --title "Worklog YYYY-MM-DD"
```

返回里取 `data.obj_token` 备用。

### 7.2b 已存在 → 覆盖

终端打印 `⚠️ 覆盖已有 Worklog YYYY-MM-DD（旧版可从飞书版本历史找回）`，取已有节点的 `obj_token`。

### 7.3 写入正文（覆盖模式）

把步骤 6 组装的 DocxXML 写到临时文件 `worklog_<date>.xml`，然后：

```bash
lark-cli docs +update --api-version v2 \
  --doc <obj_token> \
  --command overwrite \
  --content @./worklog_<date>.xml \
  --as user
```

### 7.4 推送到「每日日报组」飞书群（固定，每次写完后必做）

写入成功后，**自动**把 Worklog 链接发到飞书群「每日日报组」（不需要再问用户）。

```
群名：每日日报组
chat_id：oc_03cc17c6ca043704f9fc252e6fe86623
```

**合并发送规则（重要）**：如果本次会话**也跑了 daily-report（日报）**，就把日报 + Worklog 两条链接**合并成一条消息**发，别发两条刷屏；用同一 `--idempotency-key "report-<date>"`。只跑了 Worklog 时只发 Worklog 一条。

```powershell
# 情况 A：日报 + Worklog 一起发（合并一条）
$md = @'
📋 **日报 · <date>**
[日报 · <date>](<日报url>)

📝 **Worklog <date>**
[Worklog <date>](<worklog url>)
'@
lark-cli im +messages-send --as user `
  --chat-id oc_03cc17c6ca043704f9fc252e6fe86623 `
  --markdown $md --idempotency-key "report-<date>"

# 情况 B：只发 Worklog
$md = @'
📝 **Worklog <date>**
[Worklog <date>](<worklog url>)
'@
lark-cli im +messages-send --as user `
  --chat-id oc_03cc17c6ca043704f9fc252e6fe86623 `
  --markdown $md --idempotency-key "worklog-<date>"
```

- `--idempotency-key` 防止重跑当天重复刷屏。
- chat_id 失效 / 群改名时，用 `lark-cli im +chat-search --query "每日日报" --as user` 重新查回。

### 7.5 输出

打印文档链接（`https://<host>/wiki/<node_token>` 或 `https://<host>/docx/<obj_token>`），加上小结：

```
✅ 已写入：<URL>
   - 大项目数：M
   - 总要点：N 条（其中独立否决 AI：K 次）
   - 工作逻辑：6 步

⚠️ 内容是 AI 起草草稿，建议在飞书里逐句改写成你自己的话。
```

---

## 边界情况

- **今天 0 个 user 消息**：报告"今天还没有实质用户输入，无须 worklog"，不写文档。
- **所有窗口加起来 0 条核心决策**：报告"今天对话以单向问答为主，未捕获到决策/否决/实测"，不写文档。
- **lark-cli 未登录 / scope 不足**：按 `lark-shared` skill 提示用户走 `auth login` 流程。
- **跨天边界**：以本地日期判定"今天"——`Worklog 2026-05-26` 严格对应本地 2026-05-26 00:00 起的对话。

---

## 附：纯 prompt 版本（不想用 skill 时）

复制下面这段进对话即可：

> 扫描 `~/.claude/projects/*/*.jsonl` 中今天修改的文件（双重过滤：mtime + 内容含今日 user 消息），按大项目自动聚类（路径关键词 + 共享专有名词），提炼出「我这个人」做了什么，写一份个人工作小结草稿。要求：
> 1. **按大项目分组**，每个项目一个小标题 + 一组要点；不设条数硬上限，但只写核心决策点。
> 2. 每条以**加粗维度标签**开头：需求定义 / 方案决策 / 节奏把控 / 实测把关 / 工具链升级 / 能力选型 / 任务指挥 / 历史资产复用。
> 3. 我**每一次否决或纠正 AI 的建议都单独成一条**，标签写「独立否决 AI 推荐（一）（二）…」，写明否决了什么、改成什么、为什么。
> 4. 只写我做的事（决策、否决、拍板、叫停、推动、实测、发现），不写 AI 的开发实现细节；无人称、不出现「我」。
> 5. 不许拔高、不许编，每条都要在对话里有出处；挑不出证据的不写。
> 6. 末尾配一个**竖排带序号的箭头流程图**（不要 ASCII 框线方块）。
> 7. 收尾附一段**原话证据**（带大项目 / 时间）。
> 8. 这是给我手写定稿用的草稿。

