obsidian-diary

Installation
SKILL.md

Obsidian 日记与待办管理

将当前会话的内容总结并写入 Obsidian 日记,同时搜索、更新、新增待办。

日记的目的是给人看的记录,不是 agent 工作日志。它的价值在于几个月后翻回来看还能知道那天发生了什么、为什么做了某个决策。所以必须做两件事:按主题组织(而不是按对话时间顺序平铺),合并相关事件(而不是一条一条回忆 dump)。

变体选择

根据会话内容判断使用哪个变体:

  • work → 公司项目、部署运维、代码开发、正式会议、团队协作
  • personal → 个人技术探索、学习笔记、投资、生活记录

为什么切分?受众和用途不同。 工作日志会被同事和管理层查看(或作为日报素材),需要正式、客观、按子系统组织。个人日记只有自己看,可以更轻松,按自己的兴趣领域组织。混合内容时拆分后分别写入两个变体——投资分析归 personal,线上故障排查归 work。

首次配置

脚本运行前需要配置文件 ~/.config/cnife-skills/obsidian-diary.json

当脚本输出 CONFIG_MISSING=true 时,执行以下流程:

  1. 询问用户每个 vault 的 Obsidian 根目录(本地绝对路径),例如:
    • work vault:/mnt/c/Obsidian
    • personal vault:/mnt/c/Obsidian
  2. 其余字段(diary_dirtemplateexclude_meta)使用默认值,除非用户明确要求修改
  3. 用 Write 工具创建配置文件(先确保目录存在):
{
  "vaults": {
    "work": {
      "base": "<用户提供的路径>",
      "diary_dir": "工作日志",
      "template": "日志模板.md",
      "exclude_meta": ["AGENTS.md", "任务.md", "日志模板.md"]
    },
    "personal": {
      "base": "<用户提供的路径>",
      "diary_dir": "个人日记",
      "template": "日记模板.md",
      "exclude_meta": ["AGENTS.md"]
    }
  }
}
  1. 创建完成后重新运行脚本。

脚本

所有文件系统操作通过 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)工具直接编辑日记文件

  1. 根据步骤 2d 确定每个主题的插入位置
  2. 已有章节 → 找到该章节末尾插入新 bullet
  3. 新章节 → 在日记末尾(待办块之后、其他已有章节之前或之后,按排序决定)插入 # 标题 + 内容

示例:

# 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 链接:[[日期文件名#任务标题]]

Related skills
Installs
16
Repository
cnife/skills
First Seen
Apr 17, 2026