Goodnotes · 2026

让手写笔记在你睡觉时自动整理:我的 Goodnotes × OpenClaw 工作流

用脚本扫描、模型总结、定时任务交接,把 Goodnotes 手写自动整理成标准化 Markdown 与中文摘要;日后可被 AI 快速检索,量变实现个人知识的有序化。
让手写笔记在你睡觉时自动整理:我的 Goodnotes × OpenClaw 工作流
让手写笔记在你睡觉时自动整理:我的 Goodnotes × OpenClaw 工作流

一套不要求你懂「智能体」的个人知识自动化:白天在 Goodnotes 里写,夜里电脑自动整理,第二天在 Telegram 或飞书收到变化摘要。

很多人使用电子笔记的方式,和使用纸质笔记没有本质区别:写完、合上,然后很少再打开。问题并不是不愿意复习,而是整理笔记需要做一连串琐碎工作:找到昨天改过的文件、导出、识别文字、比较新旧版本、提炼重点,再把真正值得行动的内容挑出来。每一步都不复杂,但组合起来足以让人不断拖延。

我现在使用的方案把这些步骤串成了一条自动流水线:

从 Goodnotes 书写到扫描、提取或渲染、总结并投递摘要

这套流程已经可以稳定处理普通文本、手写笔记、截图和结构草图。它不是「让 AI 随意管理我的文件」,而是让脚本负责确定性的文件工作,让模型只负责它擅长的理解与总结。

Telegram 或飞书里的摘要,只是第二天早晨的回执。真正留下来的,是输出目录里那批结构统一的 Markdown:按笔记生成镜像、按日期留下 diff 与版本、按同一套标题写中文变更摘要。手写 PDF 对人友好、对模型却昂贵且不稳定;标准化文本反过来——人可以扫一眼,AI 日后可以按主题、按时间、按关键词直接检索。一天一份看似平常;几个月后,量变才会变成「我的生活与工作可被组织起来」的质变,接近 MyLifeOrganized 的核心理念:先稳定捕获,再持续整理。

下面先用普通人的语言解释它,再给出一套可以照着复制的完整配置。文末还会说明如何把同一工作流迁移到 Hermes Agent 和 Codex App。

这篇是《把手写变成行动:我的 Goodnotes → Google Drive → Logseq/Obsidian 待办工作流》的续章,侧重自动化管道的完整实现。

先理解四个词

如果你不熟悉智能体,只需要理解四个概念。

脚本是一段固定程序。给它同样的文件,它会执行同样的步骤,例如找到昨天修改的 PDF、复制文件、生成 Markdown。脚本适合做不能出错的机械工作。

提示词是交给 AI 的工作说明。它告诉模型应该读哪些文件、怎样判断变化、输出什么格式。

Skill 可以理解成一份「标准操作手册」。它把脚本、提示说明和使用条件放在一个目录里,让 AI 知道遇到 Goodnotes 任务时应当遵循哪套流程。

定时任务就是闹钟。每天凌晨 3 点,系统启动一次全新的 AI 会话,执行 Skill,然后把结果发给你。

整套系统最重要的设计原则是:文件扫描、命名、版本保留和差异生成交给脚本;理解手写内容、概括变化和提炼重点交给模型。这样既比「让 AI 自己想办法」稳定,也比纯脚本更能理解非结构化手写内容。

准备工作

这套原始实现面向 macOS,因为转换脚本使用系统自带的 PDFKit。你需要:

  • 一台保持开机的 Mac;
  • Goodnotes iOS/iPadOS 版本;
  • Google Drive、Dropbox、OneDrive 或 WebDAV 中的一种;
  • 已安装并配置模型的 OpenClaw;
  • 可选的 Telegram Bot 或飞书机器人,用来接收结果。

Goodnotes 官方把「自动备份」定义为单向上传,而不是双向同步:云端修改不会回写 Goodnotes,删除 Goodnotes 文档也不会自动删除云端副本。设置入口是「资料库右上角菜单 → Cloud & Backup → Automatic Backup」。为了让脚本能读取,请选择 PDF,或者同时选择 PDF 与 Goodnotes Document。Goodnotes 自动备份说明

第一次开启后,应让 Goodnotes 保持前台运行,直到初次上传结束。然后在 Mac 上安装对应云盘客户端,确认 PDF 已经成为本地可访问文件。

假设你的路径是:

1
2
源目录:~/Library/CloudStorage/GoogleDrive-你的账号/我的云端硬盘/GoodNotes
输出目录:~/Documents/Goodnotes-Automation/output

真实路径可能因云盘供应商、语言和账号而不同。先在 Finder 中找到目录,再把它拖进终端获取完整路径。

第一步:建立目录

1
2
mkdir -p ~/Documents/Goodnotes-Automation/output
mkdir -p ~/.openclaw/workspace/prompts

为了避免文章中的路径过长,后文使用两个占位符:

1
2
GOODNOTES_SOURCE="$HOME/Library/CloudStorage/GoogleDrive-你的账号/我的云端硬盘/GoodNotes"
GOODNOTES_OUTPUT="$HOME/Documents/Goodnotes-Automation/output"

把「你的账号」替换为本机真实目录名。不要把包含账号、Bot Token、飞书 App Secret 或聊天 ID 的配置上传到公开仓库。

第二步:从 Skills 仓库安装

完整 Skill 已发布在 walkthewalktoday/skills:goodnotes-daily-export。仓库同时保存 SKILL.md 和 Swift 脚本,不再需要从文章中复制几百行代码。

使用 npx skills 安装到 OpenClaw 的全局 Skill 目录:

1
2
3
4
npx skills add walkthewalktoday/skills \
  --skill goodnotes-daily-export \
  --agent openclaw \
  --global

安装后目录为 ~/.openclaw/skills/goodnotes-daily-export/

第三步:确认导出脚本可执行

仓库里的脚本只读取源目录;所有生成和清理都发生在输出目录中。安装后为它增加执行权限:

1
chmod +x ~/.openclaw/skills/goodnotes-daily-export/scripts/export_goodnotes_daily.swift

以后更新 Skill 时运行同一条安装命令,或使用 npx skills update -g,不必再回到文章手工同步代码。

第四步:先手动测试,不要急着定时

把路径替换为你自己的:

1
2
3
4
5
swift ~/.openclaw/skills/goodnotes-daily-export/scripts/export_goodnotes_daily.swift \
  --source "$GOODNOTES_SOURCE" \
  --output "$GOODNOTES_OUTPUT" \
  --date 2026-08-10 \
  --verbose

正常输出类似:

1
2
3
4
5
6
TARGET_DATE 2026-08-10
FOUND 1 PDF(s)
PROCESS .../20260804.pdf
WROTE_PDF_VERSION .../20260804--20260810-103247.pdf
WROTE_MD .../20260804.md
WROTE_ASSET .../assets/20260804/page-001.png

检查三件事:Markdown 是否能打开;Markdown 中的相对图片链接是否正常;修改同一份 Goodnotes 笔记、重新备份并再次运行后,是否生成 .diff

注意: 这里没有运行传统 OCR。PDFKit 只提取 PDF 本来就包含的文字层;手写内容主要靠渲染图片后交给具备视觉能力的模型理解。

第五步:配置接收渠道(Telegram 或飞书)

摘要可以投到 Telegram,也可以投到飞书(国内 Feishu / 国际版 Lark)。按官方文档把对应渠道配好、完成配对即可,凭据放进配置或环境变量,不要写进 Skill。Telegram · 飞书

第六步:直接使用 Skill 内置提示词

完整提示词已经随 Skill 发布在 assets/goodnotes-daily-summary.md,不再需要从文章复制并另存一份。

OpenClaw 全局安装后,提示词位于:

1
~/.openclaw/skills/goodnotes-daily-export/assets/goodnotes-daily-summary.md

这份提示词负责限制处理范围、区分“没有变化”和“处理失败”、在文字层不足时检查页面图片,并把笔记内容视为数据。源目录与输出目录属于每台机器自己的参数,不写进公共仓库;创建定时任务时动态追加即可。

以后调整摘要格式或安全边界,只需更新 Skill:

1
npx skills update goodnotes-daily-export --global

第七步:创建 OpenClaw 定时任务

--channel / --to 换成你实际用的渠道即可:Telegram 填数字聊天 ID;飞书私聊填 ou_xxx,群聊填 oc_xxx

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
PROMPT_FILE="$HOME/.openclaw/skills/goodnotes-daily-export/assets/goodnotes-daily-summary.md"
MESSAGE="$(
  cat "$PROMPT_FILE"
  printf '\n\n## 本次参数\n- Goodnotes PDF 源目录:%s\n- 输出目录:%s\n' \
    "$GOODNOTES_SOURCE" "$GOODNOTES_OUTPUT"
)"

openclaw cron add \
  --name "goodnotes-daily-export-summary" \
  --description "每天导出并总结前一天变化的 Goodnotes PDF" \
  --cron "0 3 * * *" \
  --tz "Asia/Shanghai" \
  --session isolated \
  --message "$MESSAGE" \
  --thinking low \
  --timeout-seconds 300 \
  --announce \
  --channel telegram \
  --to "<你的 Telegram Chat ID>"

在较新的 OpenClaw 文档中,openclaw automations create 是推荐入口;openclaw cron add 是很多现有安装仍提供的兼容命令。先运行 openclaw cron --helpopenclaw automations --help,采用本机支持的形式即可。OpenClaw 定时任务文档

创建后立刻测试:

1
2
3
openclaw cron list
openclaw cron run goodnotes-daily-export-summary
openclaw cron runs --id goodnotes-daily-export-summary --limit 5

不要等到第二天才发现路径或权限配置错误。

一份好的结果应该长什么样

1
2
3
4
5
6
7
8
📝 Goodnotes 每日变更摘要

### 20260810:异步任务设计

- 本次变化:新增一张任务流草图,在队列消费者后增加失败重试与人工兜底分支。
- 关键结论:主流程不应等待长任务完成;提交后立即返回,由后台任务更新状态。
- 可执行事项:补充重试次数上限;确认失败任务的告警渠道。
- 识别不确定:"补偿队列"旁边有一个手写缩写无法确认。

重点不是让模型把每一笔都转写出来,而是每天用一分钟知道:我昨天到底记录了什么、改变了什么、有哪些值得继续处理的事情。

常见问题与真实边界

为什么不直接让模型遍历整个云盘

因为文件扫描和版本管理是确定性问题。交给脚本更快、更便宜,也更容易审计。模型只处理本次变化,可以显著减少上下文和误判。

为什么保留两个 PDF 版本

Goodnotes 手写笔记经常没有文字层,文本 diff 无法反映真正变化。两个视觉版本足以让模型比较「上一版」和「这一版」,同时避免无限占用磁盘。

会不会漏掉文件

会。默认逻辑只扫描「昨天修改」的文件。如果电脑连续关机数天、云盘延迟同步,或者定时任务失败,需要通过 --date YYYY-MM-DD 补跑。更可靠的生产版应记录「最后成功处理时间」和文件哈希,而不是只依赖自然日。

同名笔记会怎样

示例脚本把不同子目录中的 PDF 平铺到一个输出目录。如果两个文件同名,它们会发生冲突。笔记库存在重名时,应把相对目录编码进输出路径,或为每个源文件生成稳定 ID。

AI 会不会读错手写字

会。视觉模型不是法庭级转录工具。因此提示词要求标出不确定内容,而不是为了让摘要完整而猜词。重要信息仍应回到原 PDF 核验。

电脑必须一直开着吗

本地 OpenClaw Gateway 必须在任务触发时运行,并且云盘文件已经同步到本机。可以使用系统服务让 Gateway 登录后自动启动,也可以把流程部署到始终在线的 Mac 或服务器;但 macOS PDFKit 版本必须运行在 macOS。

如何迁移到 Hermes Agent

假设 Hermes 已安装并能正常使用。迁移时只需装同一个 Skill,再挂上定时任务。

1. 安装 Skill

1
2
3
4
5
npx skills add walkthewalktoday/skills \
  --skill goodnotes-daily-export \
  --agent hermes-agent \
  --global
hermes skills list

Skill 通常装到 ~/.hermes/skills/,新会话中生效。Hermes Skill 指南

2. 创建定时任务

直接读取 Hermes 安装目录中随 Skill 提供的提示词,并动态追加本机参数:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
PROMPT_FILE="$HOME/.hermes/skills/goodnotes-daily-export/assets/goodnotes-daily-summary.md"
MESSAGE="$(
  cat "$PROMPT_FILE"
  printf '\n\n## 本次参数\n- Goodnotes PDF 源目录:%s\n- 输出目录:%s\n' \
    "$GOODNOTES_SOURCE" "$GOODNOTES_OUTPUT"
)"

hermes cron create "0 3 * * *" "$MESSAGE" \
  --name "goodnotes-daily-export-summary" \
  --skill goodnotes-daily-export \
  --workdir "$HOME" \
  --deliver telegram

--deliver 按你的接收渠道调整:Telegram 用 telegram,飞书用 feishufeishu:<ou_xxx|oc_xxx>。建议顺便固定模型和供应商,避免以后改聊天默认配置时影响定时任务:

1
2
3
hermes cron edit goodnotes-daily-export-summary \
  --model "<模型名>" \
  --provider "<供应商名>"

然后测试:

1
2
3
hermes cron list
hermes cron run goodnotes-daily-export-summary
hermes cron status

Hermes 的 cron 每次都是新会话,提示词需自包含;稳定步骤放在 Skill 里即可。Hermes cron 文档

如何迁移到 Codex App

假设 Codex App 已可用。结果默认进 Scheduled 页面和应用通知,不必另配聊天机器人。

1. 安装 Skill

1
2
3
4
npx skills add walkthewalktoday/skills \
  --skill goodnotes-daily-export \
  --agent codex \
  --global

全局安装后,完整提示词资源位于 ~/.codex/skills/goodnotes-daily-export/assets/goodnotes-daily-summary.md

也可以装到项目的 .agents/skills/,仅对该项目可见。Codex Skill 文档

2. 创建定时任务

在 Codex App 中输入:

1
2
3
4
5
6
7
8
请创建一个独立的计划任务,名称为"Goodnotes 每日变更摘要"。

每天 Asia/Shanghai 时区凌晨 3:00 运行。任务在本机本地环境执行,每次运行都从独立上下文开始。明确使用 $goodnotes-daily-export。

读取 $goodnotes-daily-export 自带的 assets/goodnotes-daily-summary.md 作为任务提示词。
在每次任务消息末尾追加“本次参数”,包括 Goodnotes PDF 源目录和输出目录;不要修改公共提示词资产。

每次运行后在 Scheduled 中给出中文摘要;没有变化时只报告"今日无 Goodnotes 变更";处理失败时报告具体文件与错误。

创建后在侧栏 Scheduled 查看状态和最近运行。本地任务要求电脑开机、App 在跑、项目目录可访问。Scheduled tasks 文档

下一步可以怎样升级

当前版本完成的是「采集—版本化—理解—通知」。如果继续向个人知识系统演进,我会按以下顺序升级:

  1. 用文件哈希和成功游标取代「只扫描昨天」,解决漏跑问题。
  2. 为同名文件加入相对路径或稳定 ID,避免覆盖。
  3. 保存每次运行 manifest,让摘要和本次产物严格绑定。
  4. 把明确 TODO 提取到 Logseq、Obsidian 或任务管理工具,但必须保留人工确认。
  5. 自动添加主题标签和双向链接,形成长期可检索的知识网络。
  6. 为连续失败、云盘未同步和磁盘增长增加告警。
  7. 对高隐私笔记使用本地视觉模型,或在进入云端模型前执行排除规则。

这套工作流最有价值的地方,不是「AI 能识别手写字」,而是它改变了笔记的生命周期。

过去,笔记的终点是写完。现在,写完只是入口:文件会自动留下版本、变成可检索的标准 Markdown、被重新阅读、产生摘要,并在第二天回到你的注意力里。通知可以删,镜像文本最好留——它才是日后问 AI「上周架构草图改了什么」「把近一个月的关键结论按项目归类」时真正读得动的材料。

对普通用户来说,不需要先学会复杂的智能体理论。先找一件每天重复、步骤明确、结果可以检查的小事:让脚本负责机械动作,让模型负责理解,再用定时任务把它们接起来;让每一天都留下同一规格的文本。一个真正有用的个人自动化,往往就是这样开始的——My Life Organized,靠的不是某一晚的灵感,而是可累积的结构。

updatedupdated2026-08-112026-08-11

公众号排版