obsidian-diary
Obsidian 日记与待办管理
将当前会话的内容总结并写入 Obsidian 日记,同时搜索、更新、新增待办。
日记的目的是给人看的记录,不是 agent 工作日志。它的价值在于几个月后翻回来看还能知道那天发生了什么、为什么做了某个决策。所以必须做两件事:按主题组织(而不是按对话时间顺序平铺),合并相关事件(而不是一条一条回忆 dump)。
变体选择
根据会话内容判断使用哪个变体:
- work → 公司项目、部署运维、代码开发、正式会议、团队协作
- personal → 个人技术探索、学习笔记、投资、生活记录
为什么切分?受众和用途不同。 工作日志会被同事和管理层查看(或作为日报素材),需要正式、客观、按子系统组织。个人日记只有自己看,可以更轻松,按自己的兴趣领域组织。混合内容时拆分后分别写入两个变体——投资分析归 personal,线上故障排查归 work。
首次配置
脚本运行前需要配置文件 ~/.config/cnife-skills/obsidian-diary.json。
当脚本输出 CONFIG_MISSING=true 时,执行以下流程:
- 询问用户每个 vault 的 Obsidian 根目录(本地绝对路径),例如:
- work vault:
/mnt/c/Obsidian - personal vault:
/mnt/c/Obsidian
- work vault:
- 其余字段(
diary_dir、template、exclude_meta)使用默认值,除非用户明确要求修改 - 用 Write 工具创建配置文件(先确保目录存在):
{
"vaults": {
"work": {
"base": "<用户提供的路径>",
"diary_dir": "工作日志",
"template": "日志模板.md",
"exclude_meta": ["AGENTS.md", "任务.md", "日志模板.md"]
},
"personal": {
"base": "<用户提供的路径>",
"diary_dir": "个人日记",
"template": "日记模板.md",
"exclude_meta": ["AGENTS.md"]
}
}
}
- 创建完成后重新运行脚本。
脚本
所有文件系统操作通过 scripts/obsidian-helper.py 完成,脚本路径相对于本 skill 目录。
必须使用 uv 运行(自动管理依赖):
uv run --script scripts/obsidian-helper.py --vault <work|personal> --action <action>
可用 action:
context— 一次调用返回所有上下文(路径 + 规则 + 待办 + 近期摘要 + 今日日记大纲)locate— 获取今日日记路径、模板路径、存在状态create— 确保今日日记存在,不存在则从模板创建todos— 扫描近期日志,列出未完成待办recent— 列出近期修改的日志文件(支持--limit N限制数量)read— 读取指定文件或今日日记
工作流
步骤 1:收集上下文(1 次调用)
uv run --script scripts/obsidian-helper.py --vault <变体> --action context
输出包含五个段落,一次拿齐:
- 路径信息:DIARY_PATH、DIARY_EXISTS、DATE
- RULES:对应变体的格式规则(自动从 references 文件读取)
- TODOS:近期未完成待办(14 天)
- RECENT:最近 2-3 篇日记的前 30 行摘要(了解近期上下文和写作风格)
- TODAY:今日日记完整内容,含大纲和内容摘要
如果 DIARY_EXISTS=false,脚本会自动从模板创建后再读取。
步骤 2:主题识别与聚合(最重要的步骤)
这是区分「流水账」和「好日记」的关键。不要直接按对话时间顺序写——先做主题分析。
2a. 列举所有 distinct topics
扫描整个会话(包括工具输出),列出所有独立的主题。例如今天的会话如果包含 install daisy → 分析中创智领 → 跑红利筛选 → 分析三只持仓 → CouchDB 部署 → Git 备份 → SMB 备份,第一轮清单是 7 个 topic。
2b. 聚合归域
把语义相近的 topic 合并为同一个主题域。判断依据:这些事是否属于同一个目的或领域?
| 散落的 topic | 聚合后的主题域 | 理由 |
|---|---|---|
| daisy 安装 / 中创智领分析 / 红利筛选 / 三只持仓分析 | 金融研究 | 都属于"用 daisy 做证券分析"这个会话目标 |
| CouchDB 架构评估 / 阿里云部署 / 踩坑记录 / 客户端配置 | Obsidian 同步方案部署 | 都属于"LiveSync + CouchDB 落地" |
| Git 备份 / Hermes SMB 备份 / cron 一览 | 基础设施配置 | 都属于"备份和自动化" |
合并规则:
- 同一主题域的多个事件合并为 1 个
# 标题,其下用子 bullet 展开 - 每个子 bullet 1-2 行,只写结论和关键数据,不要展开细节
- 明显不同域的事件不能硬塞在一起(daisy 技能本身是金融研究的一部分,但 CouchDB 部署就不是)
2c. 检查今日日记大纲(来自步骤 1 的 ## 大纲)
新内容能塞进已有章节的,不新开一段。 例如今天继续做投资分析,而日记里已经有 # 金融研究 段落,就在那个段落追加新 bullet,不要另起 # 金融研究(续)。
没找到对应章节的 → 创建新的一级标题,插入到日记末尾(待办块之后)。
2d. 排序
同一篇日记内,按重要性排序主题——通常工作/分析类在前、配置类在后。个人日记可以参考:投入时间多的 > 产出多的 > 顺手做的。
步骤 3:提取关键事件并写入
3a. 提取内容
每个主题域内,从会话中识别关键事件,每个事件 1-2 行:
| 事件类型 | 记录要点 |
|---|---|
| 实现了功能 | 功能名称 + 核心特性 + 关键技术决策 |
| 调研了方案 | 调研对象 + 结论 + 选型判断(为什么选 A 不选 B) |
| 修复了问题 | 问题 + 根因 + 修复方式 |
| 做了决策 | 决策内容 + 理由 + 放弃的替代方案 |
| 部署/配置 | 环境 + 关键参数 + 验证结果 |
为什么只写 1-2 行?日记是索引,不是完整文档。 详细配置、代码片段、完整对话记录在独立文件里,日记只写结论和 links。几个月后翻回来看,看到一行就能想起当天做了什么;细节可以通过 link 或搜索找回。
3b. 写入方式
使用 Edit(patch)工具直接编辑日记文件:
- 根据步骤 2d 确定每个主题的插入位置
- 已有章节 → 找到该章节末尾插入新 bullet
- 新章节 → 在日记末尾(待办块之后、其他已有章节之前或之后,按排序决定)插入
# 标题+ 内容
示例:
# context 输出显示:
## 大纲
6: # Genos Reg Server
8: ## 生产环境故障排查与修复
17: ## IGV 可视化 Access forbidden 修复
24: # OneReason Backend
# 新内容(Genos 部署记录)的第 6 行后有 # Genos Reg Server,应在第 17 行之前插入
# 新主题如 # CouchDB 同步部署 → 在文件末尾追加
更新已有段落(补充、修正、状态变更):
- 只修改与本次会话相关的段落
- 不修改无关内容
- 合并重复而非追加——如果今天已经记过"daisy 技能安装",补充结果时修改那条,不另起一行
更新历史待办:将对应文件中的 - [ ] 改为 - [x],添加 ✅ YYYY-MM-DD,同时在今日日记添加 Obsidian 链接:
- [x] 任务描述 ✅ 2026-04-19 完成于 [[2026年4月15日星期三##任务标题]]
为什么加日期?因为 Tasks 插件按完成日期查询。 不加日期的话,回看时只知道"做过",不知道什么时候做的,无法做周/月回顾。
3c. 新增待办
本次会话产生的新待办,添加到今日日记末尾:
- 格式:
- [ ] 描述 - 有计划日期时添加
📅 YYYY-MM-DD
步骤 4:确认
输出本次写入/更新的内容摘要:
- 新增的日记条目(按主题分组展示)
- 更新的待办(状态变化 + 链接)
- 新增的待办
如果本次没有实质性内容,询问用户是否仍要写入。
AI 噪音过滤
禁止写入以下内容:
| 禁止项 | 为什么禁止 |
|---|---|
| 验证流程("N 轮最终验证 APPROVE""XX 个测试用例全部通过") | 这些是开发过程中的中间状态,不是产出。结果是"功能交付"而非"N 轮验证" |
| 提交/推送操作("已提交并推送到 XX 分支") | Git 操作是工具行为,不是人的工作成果。只写"功能上线"或"MR 已创建" |
| AI agent 产物("沉淀 N 条规则到 AGENTS.md") | AGENTS.md 是模型间的通信协议,不是人的知识产出 |
| 开发阶段标记(Wave 1/2/3、"骨架创建"、"模块创建") | 阶段标记是开发过程中的临时分类,不是最终结果。直接写做了什么 |
| 配置文件路径、代码片段 | 细节在代码仓库里,日记只写结论和选型判断 |
只写: 做了什么 + 核心特性/关键决策 + 关键结果。保留有价值的信息:人名、技术选型判断(含被否的方案)、关键数据。
Obsidian 待办状态
使用 Tasks 插件标准状态:
| 标记 | 状态 | 用途 |
|---|---|---|
[ ] |
待办 | 未完成的任务 |
[x] |
已完成 | 完成的任务,末尾加 ✅ YYYY-MM-DD |
[-] |
已取消 | 不再需要的任务,末尾加 ❌ YYYY-MM-DD |
可选状态(按需使用):
[/]进行中 — 已开始但未完成[>]延期 — 推迟到以后[!]重要 — 高优先级[?]疑问 — 需要确认[h]搁置 — 等待外部条件
跨文件引用已完成待办时,使用 Obsidian 链接:[[日期文件名#任务标题]]
More from cnife/skills
skill-evaluator
>
17optimize-agents-md
AGENTS.md 编写与优化指南,遵循渐进式披露原则。当用户创建、修改或重构 AGENTS.md,讨论 AI agent 指令结构、规则放置位置,或提到「渐进式披露」「模块化」「AGENTS.md 最佳实践」时,务必加载此 skill。即使用户只是说「帮我写个 AGENTS.md」「优化一下这个配置文件」「拆分一下规则」,也应该使用此 skill。
13audit-hermes-agent-skills
>
10git-master
MUST USE for ANY git operations. Atomic commits, rebase/squash, history search (blame, bisect, log -S). Use when the user mentions commit, rebase, squash, git blame, bisect, who wrote, when was X added, find the commit that, git history, or any git-related operations.
8arch-wsl-cleanup
>-
5worklog
从多个数据源收集用户活动轨迹 → 分析并区分工作与个人内容 → 排版为 PDF → 投递到邮箱。触发词:「发日报」「生成日报」「发我的今天」「今日汇总」「日记 PDF」「每天总结」「保存日志」「生成日报发邮件」。当你发现用户需要做每日回顾、日志汇总、生成日报 PDF 并发送时触发。
4