飞书日记助手 Skill
将用户提供的碎片化日记信息,按模块化格式整理成完整日记,自动写入用户自己的飞书知识库。支持完整的「提醒→暂存→整理→推送」日记工作流。
⚠️ 首次使用:配置检测
在处理任何日记请求之前,必须先检查用户的飞书配置状态:
1. 检查环境变量:
python3 -c "import os; print(os.environ.get('FEISHU_APP_ID','未设置'))"
2. 如果未配置 → 引导运行配置向导:
python3 scripts/setup.py
配置向导会依次引导:飞书凭据 → OAuth 授权 → 提醒时间设置。
3. 如果已配置但未授权 → 引导授权:
python3 scripts/feishu_auth.py
4. 配置完成 → 继续处理用户请求。
每个用户的凭据和授权相互独立,日记写入各自的知识库。
🔄 完整工作流
此技能包含四个相互关联的工作流:
| 工作流 | 触发方式 | 做什么 | |--------|---------|--------| | A. 碎片收集 | 用户发文字/语音 → 触发技能 | 语音转文字 → 暂存碎片到当日文件 | | B. 定时提醒 | 用户说"设置每日提醒" | 创建 cron 定时任务(含补归档检查) | | C. 凌晨整理 | cron 自动触发 (02:00) | 整理碎片 → 归档飞书 → 保存链接 | | D. 次日推送 | cron 自动触发 (08:30) | 提醒记录 + 推送昨日日记链接 | | E. 开机补归档 | 每小时检查 / 用户唤醒 | 检测未归档日期 → 自动补归档 |
工作流 A:碎片收集(实时)
当用户通过微信或其他渠道发送碎片化日记内容时,支持两种输入方式:
文字输入: 直接暂存。
语音输入: 微信语音消息会自动转为文字,按文字处理。
语音转文字由微信/QClaw 平台层自动完成,技能接收到的已是文本,无需额外处理。用户随时随地想起就发语音记录,完全不影响流程。
1. 暂存碎片:
python3 scripts/fragment_store.py append --content "用户发送的内容(语音已自动转文字)"
碎片追加到
~/.qclaw/diary_fragments/YYYY-MM-DD.md,每次追加带时间戳。
2. 简短确认: 仅回复一句确认(如 "📝 已记录~"),不要展开整理。碎片会在凌晨统一处理。
⚠️ 碎片收集阶段只暂存,不整理。用户错过定时提醒也没关系,随时想到随时发,文字语音均可。
工作流 B:设置每日提醒(用户说了"设置每日提醒"才执行)
用户首次配置完成或说"设置每日提醒 / 创建提醒 / 调整提醒时间"时,需要创建定时任务。
1. 读取配置:
cat ~/.qclaw/diary_fragments/config.json
或直接使用默认时间:08:30, 12:30, 15:00, 18:30, 23:00
2. 创建提醒 cron 任务(每个时间点一个):
使用 QClaw 内置 cron 工具,为每个提醒时间创建周期任务。参考 qclaw-cron-skill 的规则创建。
提醒消息模板:
你是一个贴心的日记提醒助手。
现在是用餐/休息时间,想问问你:
- 上午/下午过得怎么样?
- 有什么特别的事想记录下来吗?
- 有什么想法、情绪、观察?
随意说几句就好,我会帮你暂存,凌晨统一整理~
要求:(1) 不要回复 HEARTBEAT_OK (2) 不要调用 message 工具 (3) 直接输出提醒文字 (4) 控制在 2-3 句话以内
3. 创建凌晨整理 cron(02:00):
{
"action": "add",
"job": {
"name": "日记凌晨整理-飞书归档",
"agentId": "<当前agentId>",
"schedule": {"kind": "cron", "cron": "0 2 * * *"},
"sessionTarget": "isolated",
"payload": {
"kind": "agentTurn",
"message": "你是 AI 日记助手。现在是凌晨 2 点,请执行每日日记整理任务。\n\n**任务流程:**\n1. 读取今日碎片: python3 scripts/fragment_store.py read\n2. 如果无碎片,直接结束(不要输出任何东西)\n3. 按照「日记模板」将碎片整理成结构化日记,写入 /tmp/diary_content.md\n4. 写入飞书: python3 scripts/feishu_api.py create-diary --title \"YYYY年MM月DD日 | 标题\" --content-file /tmp/diary_content.md\n5. 保存链接: python3 scripts/fragment_store.py save-url --url \"飞书返回的wiki_url\"\n6. 清理碎片: python3 scripts/fragment_store.py clear\n7. 输出简短摘要: ✅ 日记已归档 + 链接\n\n要求:(1) 不要回复 HEARTBEAT_OK (2) 不要调用 message 工具 (3) 直接输出结果 (4) 如无碎片则静默结束"
},
"delivery": {"mode": "none"}
}
}
4. 创建次日早晨提醒 cron(08:30):
{
"action": "add",
"job": {
"name": "日记早晨提醒+推送昨日日记",
"agentId": "<当前agentId>",
"schedule": {"kind": "cron", "cron": "30 8 * * *"},
"sessionTarget": "isolated",
"payload": {
"kind": "agentTurn",
"message": "你是 AI 日记助手。现在是早上 8:30。\n\n**任务流程:**\n1. 获取昨日日记链接: python3 scripts/fragment_store.py get-url --date $(date -v-1d +%Y-%m-%d)\n2. 用温暖、鼓励的语气提醒用户开始新一天的记录\n3. 如果获取到了昨日日记链接,一并推送:「📚 昨日日记已整理好:<链接>」\n4. 简短即可,控制在 3-4 句话\n\n要求:(1) 不要回复 HEARTBEAT_OK (2) 不要调用 message 工具 (3) 直接输出文字"
},
"delivery": {"mode": "announce", "channel": "openclaw-weixin", "to": "<用户openid@im.wechat>"}
}
}
5. 创建补归档+补推送检查 cron(每小时 :17 分):
用户电脑如果凌晨 2 点或早上 8:30 关机了,这个 cron 会在开机后自动补上归档和推送。
{
"action": "add",
"job": {
"name": "日记补归档+补推送检查",
"agentId": "<当前agentId>",
"schedule": {"kind": "cron", "cron": "17 * * * *"},
"sessionTarget": "isolated",
"payload": {
"kind": "agentTurn",
"message": "你是 AI 日记助手。请执行补归档和补推送检查。\n\n**任务 A:补归档(处理未整理的碎片)**\n1. 检测未归档日期: python3 scripts/fragment_store.py list-pending\n2. 如无待处理 → 跳到任务 B\n3. 逐一处理每个日期:\n - 读碎片: python3 scripts/fragment_store.py read --date <日期>\n - 按模板整理 → /tmp/diary_content.md\n - 写飞书: python3 scripts/feishu_api.py create-diary --title \"<日期> | 日记\" --content-file /tmp/diary_content.md\n - 存链接: python3 scripts/fragment_store.py save-url --url \"<wiki_url>\" --date <日期>\n - 清碎片: python3 scripts/fragment_store.py clear --date <日期>\n\n**任务 B:补推送(推送未推送的已归档日记)**\n1. 检测未推送日期: python3 scripts/fragment_store.py list-unpushed\n2. 如无待推送 → 静默结束\n3. 逐一推送每条未推送日记:\n - 推送文字: \"📚 这是昨天整理好的日记,你可以复核一下。\\n<link>\"\n - 标记已推送: python3 scripts/fragment_store.py mark-pushed --date <日期>\n4. 输出摘要: ✅ 已补推送 N 天的日记链接\n\n要求: (1)不要回复HEARTBEAT_OK (2)不要调用message工具 (3)直接输出结果 (4)无待处理则静默结束"
},
"delivery": {"mode": "none"}
}
}
💡 关机错过凌晨归档 → 补归档。关机错过早晨推送 → 补推送。全自动,用户无需任何操作。
6. 创建完成后回复摘要:
⏰ 每日提醒已就绪!
📋 提醒时间:08:30, 12:30, 15:00, 18:30, 23:00
🌙 凌晨 02:00 自动整理归档
🌅 次日 08:30 推送昨日日记链接
🔄 每小时检查补归档(关机错过也不怕)
📱 支持随时发送文字或语音碎片
💡 随时对龙虾说话或发语音,比如"上午开了产品会,讨论了下季度规划..."
工作流 C:凌晨自动整理(cron 触发,无需用户操作)
每日 02:00 自动执行,完整流程:
1. 读取当日碎片:
python3 scripts/fragment_store.py read
2. 如果无碎片 → 静默结束,不输出任何内容。
3. 获取自动信息:
- 日期和星期:根据系统当前日期(注意:凌晨处理的是前一天的碎片)
- 天气:通过 IP 定位获取城市,查询当日天气
- 地点:根据 IP 定位推断
4. 按模板整理日记 → 写入 /tmp/diary_content.md(模板见下方「日记模板」章节)
5. 写入飞书知识库:
python3 scripts/feishu_api.py create-diary \
--title "YYYY年MM月DD日 | 日记标题" \
--content-file /tmp/diary_content.md
6. 保存日记链接供次日推送:
python3 scripts/fragment_store.py save-url --url "飞书返回的wiki_url"
7. 清理碎片文件:
python3 scripts/fragment_store.py clear
工作流 D:次日早晨推送(cron 触发,无需用户操作)
每日 08:30 自动执行:
1. 获取昨日日记链接:
python3 scripts/fragment_store.py get-url --date $(date -v-1d +%Y-%m-%d)
2. 如果无链接 → 静默结束。(昨天没有记录)
3. 组合推送内容:
🌅 早上好!新的一天开始了~
📚 这是昨天整理好的日记,你可以复核一下:
<昨日日记链接>
4. 标记已推送:
python3 scripts/fragment_store.py mark-pushed --date $(date -v-1d +%Y-%m-%d)
这样如果 8:30 关机错过推送,补归档 cron 能检测到未推送的日记。
5. 推送渠道: 微信(openclaw-weixin),用户通过龙虾接收。
工作流 E:开机补归档 + 补推送(自动容错)
用户电脑如果在凌晨 2 点或早上 8:30 处于关机状态,补归档 cron(每小时 :17 分)会在开机后自动补救。
触发时机:
- 电脑开机后,QClaw 启动,补归档 cron 在下一个 :17 分触发
- 用户主动发消息给龙虾 → AI 先检查 pending 再处理
任务 A:补归档(有碎片但未整理)
# 检测
python3 scripts/fragment_store.py list-pending
# 逐一处理每个日期:读碎片 → 整理 → 飞书归档 → 存 URL → 清碎片
python3 scripts/fragment_store.py read --date <日期>
python3 scripts/feishu_api.py create-diary --title "YYYY年MM月DD日 | 补归档日记" --content-file /tmp/diary_content.md
python3 scripts/fragment_store.py save-url --url "<wiki_url>" --date <日期>
python3 scripts/fragment_store.py clear --date <日期>
任务 B:补推送(已归档但早晨推送被错过)
# 检测
python3 scripts/fragment_store.py list-unpushed
# 输出格式: 日期|链接
# 逐一推送,文案固定为:
# "📚 这是昨天整理好的日记,你可以复核一下。\n<link>"
# 标记已推送
python3 scripts/fragment_store.py mark-pushed --date <日期>
完成摘要示例:
✅ 已补归档 2 天的日记
✅ 已补推送 3 天的日记链接
• 06-12: https://my.feishu.cn/wiki/xxx
• 06-13: https://my.feishu.cn/wiki/yyy
• 06-14: https://my.feishu.cn/wiki/zzz
💡 关机期间错过的归档和推送,开机一小时内全部补上。推送文案固定为「这是昨天整理好的日记,你可以复核一下」
📝 日记模板
严格按照以下模块化结构生成 Markdown 日记文件 /tmp/diary_content.md:
# 🗓 YYYY年MM月DD日 星期X | [自动总结标题 ≤15字]
## 📍 基础信息
- **日期/星期**:YYYY年MM月DD日 星期X
- **地点**:[城市]
- **天气**:[气温] | [风力] | 湿度[xx]% | [阴晴]
## 💓 今日核心情绪
- **主导情绪**:[情绪]
- **分时段情绪曲线**:
- 🌅 上午:[情绪] [表情]
- ☀️ 下午:[情绪] [表情]
- 🌙 晚上:[情绪] [表情]
## 📊 效能自评雷达图
| 维度 | 状态 | 详情 |
|------|------|------|
| 😴 睡眠 | [✅/⚠️/📉] | [时长+质量] |
| 💼 工作 | [✅/⚠️/📉] | [产出+数据] |
| 🏋️ 健身 | [✅/⚠️/📉] | [训练+数据] |
| 🥗 饮食 | [✅/⚠️/📉] | [情况+评价] |
## 📝 今日流水账与高光时刻
### 🌅 上午
- **做了什么**:
- **收获/问题**:
### ☀️ 下午
- **做了什么**:
- **收获/问题**:
### 🌙 晚上
- **做了什么**:
- **收获/问题**:
### ✨ 高光时刻
1. **[事件]** — [意义]
## 🧠 思考与复盘
- [深层思考,关联自身]
- ⚠️ [问题/困惑]
- 🆙 [改进方向]
## 📚 知识输入和金句
- **来源**:[名称] — [观点]
- **金句**:> "[原文]" — 感悟:[理解]
## 👥 今日接触的人(含虚拟/听闻/见闻)
| 人物 | 来源 | 我的思考/判断 |
|------|------|---------------|
## 👁️ 今日观察
- 🔍 **产品/商业**:[现象] → [分析]
- 🔍 **行业/趋势**:[现象] → [分析]
## 💡 灵感碎片
- 💡 [灵感] — 关联:[工作/生活]
整理要求:
- 真实落地,有细节有数据,保留用户提供的所有具体信息
- 善用符号图标(⚠️📉🆙✅)标注状态,分点清晰
- 工作/生活双兼顾,输入→输出→思考闭环
- 从小事延伸到深层认知,提炼可复用方法论
- 日记标题自动总结 ≤15 字
- 严禁泛化或省略用户提供的任何细节
依赖
- Python 3.9+
requests库(pip install requests)- 飞书应用凭据,需配置环境变量:
export FEISHU_APP_ID="你的飞书应用ID" export FEISHU_APP_SECRET="你的飞书应用密钥" - 飞书 OAuth 用户授权(运行
python3 scripts/feishu_auth.py)
脚本参考
| 脚本 | 用途 |
|------|------|
| scripts/setup.py | 首次配置向导(凭据 + 授权 + 提醒时间) |
| scripts/feishu_auth.py | 飞书 OAuth 授权 / 刷新 token / 查看状态 |
| scripts/feishu_api.py | 创建日记到飞书知识库 |
| scripts/fragment_store.py | 碎片暂存 / 读取 / 日记链接管理 |
注意事项
- 碎片存储路径:
~/.qclaw/diary_fragments/YYYY-MM-DD.md - 配置存储路径:
~/.qclaw/diary_fragments/config.json - Token 存储路径:
scripts/.feishu_user_token.json - 知识库名称:
AI Diary Assistant 日记库(自动创建/复用) - 凌晨整理的日记日期为前一天(
date -v-1d) - 语音输入:微信语音自动转文字,无需额外配置
- 关机容错:错过凌晨归档后,开机一小时内自动补归档
- 碎片安全:碎片持久化在本地
~/.qclaw/diary_fragments/,关机不丢失 - 补归档检测:
list-pending比较碎片文件与_url标记文件,只处理未归档的日期 - 建议定期运行
python3 scripts/feishu_auth.py --status查看 token 有效期
Scan to join WeChat group