我的待办清单里,常年躺着一堆三周前写的事。
后来想明白了,不是懒,是记一件事的成本太高:打开 App ,找列表,选日期,挑分组。这一套点完,脑子里那个念头早跑了。人在外面更惨,只能先发给「文件传输助手」,回到电脑前再抄一遍,然后就忘了抄。
所以给自己写了个小工具,叫记事喵 TaskCat,用了一段时间,今天发 1.0 ,代码也一起开源了。

它只解决三件事
1. 坐在电脑前:⌥⌘T 一句话记下
在任何 App 里按 ⌥⌘T ,输入框直接弹出来。打一句「明天下午三点前交周报,进度先记 40%」,回车。标题、截止时间、进度、分组由 AI 拆好,人不用离开正在写的东西。不想经过 AI ,就按 ⇧↩ 原样存一条。
2. 人在外面:发一句微信就记下
给记事喵发「周四上午十点约牙医」,它把时间和分组理解好,回一条核对;回「确认 1 」,Mac 菜单栏和 iPhone 提醒事项同时出现,到点照常提醒。
带时间的指令一律先核对一眼,宁可多一步,也不记错日子。查「这周还有什么」、「任务 3 改到下周一」、「任务 1 标记完成」也在同一个对话里。
3. 清单不再是一堵墙
每天第一次打开,它不先甩给你 30 条待办,而是先用两三句话说:哪件逾期了,今天先做哪件。列表按「已逾期 / 今天 / 明天 / 7 天内」分段,逾期标红;「…」菜单里一键推迟到明天或下周一(保留原来的时刻);点错完成,底部有撤销。菜单栏图标旁的数字就是今天逾期加到期的件数。

大家大概会问的
数据存在哪? 不建服务器,不收集数据。任务存在系统「提醒事项」的专用列表里,选 iCloud 账户就自动同步到 iPhone ,到期由系统通知,Mac 关机也照样提醒。两台 Mac 之间的状态、进度、编号走你自己的 iCloud Drive 。
AI 用谁的? 你自己配。任何 OpenAI 兼容接口都行(自备 Key ),也可以接本地 Ollama ,数据完全不出本机。发给云端模型的只有相关任务的标题、状态、分组,备注一个字都不发。Key 只存在本机配置目录,不进备份、不跨机同步。不配模型也能手动管理全部任务。
微信是怎么接的? 先说清楚:微信入口是可选的桥接,适配的是第三方 SDK wechat_clawbot_sdk。安装包和仓库都不包含这个 SDK ,许可要你自己确认,需要自己准备运行环境,而且得 Mac 上的记事喵开着。不接微信,菜单栏部分完全可以独立用。
AI 听错了怎么办? 会改动任务的指令默认先确认;完成后可撤销;删除进回收站,可以按原编号恢复。每次修改都先写一条不可变的操作日志,再回读系统提醒事项确认写成功,微信重试同一条消息也不会重复执行。
开发里两件有意思的事
用自己的另一个工具「流量喵」抓到记事喵一天写了 4G 多的盘。 查下来是双机同步每 12 秒跑一次,每次把内容根本没变的文件逐个「原子写 + fsync 」重写一遍,还会把全部操作日志重放进一个临时目录做校验。文件只有几百字节,但 APFS 每次强制刷盘都连带元数据,放大成一天好几个 G 。改成内容没变就跳过、校验全部放内存后,空闲时实测两分钟 0 KB 。顺手补了一个测试,直接读进程自己的磁盘写入计数,防止回退。
每次更新都要重新授权提醒事项。 原因是临时签名( ad-hoc )每次构建签名都不同,macOS 把它当成新 App 。换成一张固定的自签名证书后,指定要求( designated requirement )稳定了,更新后授权保留;顺带让应用内更新只接受同一证书签名的新版本,比单纯核对 SHA-256 更靠谱一点。
技术栈和现状
- Swift + SwiftUI 原生,EventKit 存任务,不用 Electron ,安装包 3 MB 左右
- 299 项测试( pytest 驱动、编译真实 Swift 代码跑合成数据,不碰你的提醒事项和钥匙串)
- macOS 14+,Apple Silicon 实测过,Intel 还没验收
- 没有 Apple 公证,第一次打开要在「隐私与安全性」里点「仍要打开」
- 没有独立 iPhone App ,手机端就是系统提醒事项
- Apache-2.0
链接
- 官网(有个可以点的微信对话演示): https://tab16360.github.io/taskcat/
- GitHub: https://github.com/tab16360/taskcat
- 下载: https://github.com/tab16360/taskcat/releases/latest
一个人做的,肯定还有不少粗糙的地方。欢迎来提 issue 、拍砖,尤其想听听:你平时的待办是怎么记的,卡在哪一步。
记事这件事,本来就应该比忘记更容易