最近,我又给自己的 Obsidian 知识库做了一个小改造:把 Obsidian 里的待办任务,同步到 MacBook 的“提醒事项”(Reminders)里。
项目名字叫 vault-reminders。
这个工具不是我一行一行手写出来的,而是用 Codex App 一路 Vibe Code 出来的。更准确地说,是我提出一个模糊的需求,Codex 帮我把它做成了一个本地 CLI 工具,并继续为这个工具配了一套 Agent Skill,让 Codex 以后也能稳定、安全地调用它。
这件事情的起点很简单:Obsidian 很适合记录任务,但它不擅长提醒任务。
Obsidian 里的 Markdown 任务可以写成这样:
- [ ] 预约xxx [due:: 2026-06-10] [reminder:: true]它能被 Dataview 查出来,也能出现在项目笔记、日记、会议纪要里。但问题是,到期的时候,它不会像系统提醒事项那样弹出来提醒我。
这就导致一个很尴尬的情况:任务明明被我记录下来了,但如果我没有主动去看那篇笔记,它还是可能被遗忘。
为什么不直接用提醒事项?
这时候自然会有一个问题:既然最终还是要提醒,为什么不一开始就直接在 Reminders 里创建任务?
答案是:因为很多任务不是凭空出现的,它们是从写作、思考、项目推进过程中自然长出来的。
比如我在 Obsidian 里写日记,写着写着突然想到:
明天要给学校回邮件; 某个医疗预约要提前确认; 公众号文章里有一段资料要补; 某个项目文档需要继续整理。
如果这时候切到提醒事项 App,再新建任务、填日期、选列表,整个写作思路就被打断了。
Obsidian 的价值在于,它是我的思考现场。任务不是一个孤立的条目,而是挂在上下文里的。
在项目管理里也是一样。一个项目笔记里可能同时有背景信息、决策记录、资料链接、下一步行动。如果我把行动项单独抽到提醒事项里,它就失去了上下文;但如果只留在 Obsidian 里,它又缺少系统级提醒能力。
所以,我真正想要的不是用 Reminders 替代 Obsidian,而是让两者分工:
Obsidian 负责记录上下文,Reminders 负责把我叫醒。
我对这个同步工具的要求
Reminders 只是一个通知界面。它可以响铃,可以弹通知,但它不是我的任务数据库。不做复杂的双向同步。
需要扫描 Obsidian Vault 里的 Markdown 文件; 识别其中带有 due日期的待办任务;只同步我明确标记为需要提醒的任务; 同步到 Apple Reminders; 不反向修改 Obsidian 笔记; 最后可以通过 launchd 定时自动运行。
开始 Vibe Code
这个工具的核心,就是一个本地命令行程序:vault-reminders。
它做的事情很简单:扫描 Obsidian Vault 里的 Markdown 任务,找到带有 due 日期、并且明确标记为需要提醒的待办,然后把它们同步到 MacBook 的 Reminders。
比如:
- [ ] 任务xx [due:: 2026-06-15] [reminder:: true]这里的 [due:: 2026-06-15] 表示任务截止日期,[reminder:: true] 表示这个任务需要同步到提醒事项。
我希望它遵守一个基本原则:Obsidian 是任务源头,Reminders 只是提醒界面。
所以 vault-reminders 是单向同步。它不会反过来修改 Obsidian 笔记,也不会把 Reminders 当成任务数据库。任务是否存在、是否完成、什么时候到期,都以 Obsidian 里的 Markdown 为准。
这个 CLI 主要有几个命令:
vault-reminders statusvault-reminders sync --dry-runvault-reminders syncstatus 用来检查当前配置和任务数量。
sync --dry-run 用来预演同步结果,只告诉我会创建、更新、完成哪些提醒,但不真正修改系统提醒事项。
确认没有问题之后,再运行 sync 执行同步。
后面还加上了 launchd 定时任务,让它可以每天自动同步。这样,Obsidian 里的重要待办就能自然流入系统提醒,而我不需要手动在两个 App 之间来回搬运。
再给 Codex 写一个 Skill
除了 CLI 本身,我还顺手给它配了一个 vault-reminders-sync Skill。 Codex App 本身也已经支持创建 Skill。你只需要告诉它安装 Github 上那个CLI,并为其创建一个Skill,它就可以自己搞定一切了。
所以这次其实做了两层东西:
第一层是 vault-reminders CLI,解决“Obsidian 任务如何同步到 Reminders”的问题。使用命令行即可完成同步。
第二层是 vault-reminders-sync Skill,通过 AI Agent 操作同步。
总结
这次做 vault-reminders,对我有一个特别意义:这是我第一次开通 GitHub,并创建了自己的第一个项目。它不是为了练习编程,而是为了解决自己的真实问题。
AI 个人软件时代正在到来。过去是人适应软件,现在每个人都可以根据自己的真实场景,个性化自己的工具系统。
夜雨聆风