让知识库自己的运转:ZenNotes 可视化工作流管道与事件触发器完全指南
【免费下载链接】zennotesKeyboard-first local Markdown notes with Vim motions, diagrams, and MCP integration.项目地址: https://gitcode.com/gh_mirrors/zenn/zennotes
ZenNotes 是一款键盘优先的本地 Markdown 笔记应用,而它的**工作流(Workflows)**功能可以让你用可视化画布或纯文本方式,把"查找笔记 → 筛选 → 批量修改 → 写入报告"这类重复劳动变成一条可复用的自动化管道;从 2.55 版本起,事件触发器还能让管道在你保存、新建或移动笔记时自动运行。本文带你快速理解这套"让知识库自己运转"的完整机制。
工作流是什么:一个 Markdown 文件 = 一条自动流水线
每条工作流都是存放在.zennotes/workflows/下的一个普通.md文件:头部是 frontmatter(名称、触发方式、快捷键),正文是"一行一条管道"。它的设计哲学只有一条:线(wire)上流动的是笔记集合——每一段管道把一组笔记变换成另一组笔记,所以:
- 🧩调试免费:画布上每条线都实时显示当前有多少条笔记流过,点一下就能查看清单;
- ⚡️Dry-run 免费:筛选与读取不会改动文件,只有"改写/输出"节点才写盘,因此任何管道都能先预览完整 diff 再执行;
- ✍️画布与文本无损互转:布局由引擎自动计算,文件里没有坐标,键盘编辑器和可视化画布是同一份内容的两种视图,还能随 Vault 一起同步、diff。
一条典型管道长这样(=命名一条线,|把步骤串起来):
books = tag #book good = books | where rating >= 4 | sort finished desc good | render table title, rating, finished | write-section "inbox/Reading Log.md" "Finished"没有分支语法:两条语句引用同一条线,就自然形成分叉。完整的设计推演见 docs/ideas/workflows.md。
8 个内置模板:从"阅读日志"开始上手
ZenNotes 内置了 8 个开箱即用的模板(在 Workflows 视图点New workflow即可复制到你的 Vault),覆盖"回顾 / 清理 / 捕获 / 报告"四类场景:
| 模板 | 作用 | 快捷键 |
|---|---|---|
| Reading log | 把 #book 笔记按评分生成阅读日志表格 | <leader>wr |
| Inbox triage | 给一周未动的收件箱笔记打上 #triage | <leader>wi |
| Weekly review | 列出近 7 天改动,写入回顾笔记 | <leader>ww |
| Open loops | 汇总所有仍写着 TODO 的笔记 | <leader>wo |
| Archive finished projects | 把 status: done 的项目归档 | <leader>wa |
| Unfiled notes | 找出没被主标签认领的笔记 | <leader>wu |
| Tag cleanup | 把一个标签整体合并进另一个标签 | <leader>wc |
| Meeting index | 维护一份按时间排序的会议索引 | <leader>wm |
模板本身也是普通工作流文件,打开就能读、就能改——"运行 → 偷看 → 调一个筛选 → 自己写"就是官方推荐的学习路径。模板定义在 packages/shared-domain/src/workflows/presets.ts,每个模板开头都有一段人话注释解释整条管道在做什么。
节点词汇表:八类步骤覆盖"找、筛、排、变、写"
全部约 30 个节点按 8 类组织,注册表定义在 packages/shared-domain/src/workflows/nodes.ts:
| 类别 | 代表节点 | 一句话说明 |
|---|---|---|
| 数据源 Source | all、folder inbox、tag #book、search、current、selection | 打开一条管道,给出一条笔记集合 |
| 筛选 Filter | where rating >= 4、tagged/not-tagged、contains TODO、since 7d | 只留符合条件的笔记 |
| 排序 Order | sort updated desc、limit 25、dedupe | 控制顺序与数量 |
| 塑形 Shape | union、subtract | 合并或相减两条命名线 |
| 修改 Mutate | set status done、add-tag、move、rename、archive | 批量改写线上的每条笔记(必过 dry-run 确认) |
| 渲染 Render | render table、render list、render links、count | 把集合变成一段可写入的文本 |
| 输出 Sink | write-section、write-note、clipboard | 把结果落到笔记、区段或剪贴板 |
| 编排 Compose | 调用另一条工作流 | 子调用图必须是 DAG,保存时检测环路 |
刻意缺席的能力:没有代码节点、没有 Shell、没有网络请求——这意味着一条你没写过的工作流也是安全可读、可运行的。
事件触发器:保存笔记的瞬间,知识库自动整理
从 2.55 版本起,给工作流设置事件触发即可让它"自己跑",支持四种事件:
trigger: on note-saved—— 笔记保存后(连续自动保存会防抖合并成一次运行,约 1.5 秒后触发)trigger: on note-created—— 新建笔记时trigger: on note-moved—— 移动、重命名、归档、移入/移出回收站时(按新路径触发)trigger: on tag-added—— 某次保存为笔记新增了标签时
事件触发有几个对新手很关键的安全语义(详见 packages/app-core/src/lib/workflow-trigger.ts 与 packages/app-core/src/lib/help.ts):
- 每次运行只看被改动的那条笔记:
all、folder、tag等数据源都会收缩到这条笔记上,所以all | contains type: topic | move Topics的意思是"这条笔记如果声明自己是 topic 就归入 Topics",而不是每次保存都全库扫描; - 后台运行永不弹窗:正在编辑且有未保存改动的笔记会被跳过并给出轻提示,而不是打断你的输入;
- 每设备总开关:在 Settings → 工作流相关设置里可以一键静默本设备的所有事件触发器(对应 packages/app-core/src/components/SettingsModal.tsx 中的选项);工作流自身则用
trigger: manual或status: draft单独静音。
安全设计:先预览、再执行、可整次撤销
这是"让软件批量改我的笔记"这件事能不能被信任的关键,ZenNotes 给出的答案是:
- ✅默认 Dry-run:含修改节点的工作流执行时先展示完整 diff,确认后才落盘;
- ↩️整次运行一键撤销:每次运行都会记录所有文件的运行前字节,一个
u撤销整次运行,而不是逐节点回退; - 📒运行台账在磁盘上:写入记录在
.zennotes/workflows/.runs/下(路径、内容哈希、工作流、时间戳),既防止"写入→触发事件→再写入"的无限循环,也保证跨同步循环可控; - 🛡️部分失败自动回滚:管道中途出错时,默认连同已成功的步骤一起回滚——"半吊子应用"比"完全没应用"更难推理;
- 🔕永不静默:任何改动了文件的运行都会留下可见、可撤销、可关闭的记录。
键盘操作速查(Vim 键位第一天就有)
画布布局是计算出来的,所以全程无需拖拽,纯键盘即可完成编辑:
| 按键 | 动作 |
|---|---|
j/k | 沿管道链移动上/下一个节点 |
h/l | 横移到兄弟分支 |
o/O | 在下方/上方插入节点并自动接线 |
dd | 删除节点并自动修复连线 |
/ | 按名称跳转到节点或线 |
gp | 预览当前线上流过的笔记 |
<leader>wd | Dry-run 查看 diff |
<leader>wr | 运行工作流 |
u | 撤销整次运行 |
新增键位需在 packages/shared-domain/src/keymaps-catalog.ts 注册,并支持从config.toml覆盖。
三步上手清单 🚀
- 跑一条模板:打开 Workflows 视图 → New workflow → 选 "Inbox triage" → 运行,先看 dry-run diff 再确认;
- 改一个筛选:把
#project换成你自己的归档标签,体验"读得懂 → 改得动"; - 加一个触发器:给一条纯整理类工作流写上
trigger: on note-saved,从此保存即归档。
小贴士:
status: draft的工作流不会被触发器唤醒;想停掉某条管道,把触发方式改回trigger: manual即可。手动运行则永远可用(命令面板、快捷键或右键多选)。
引擎与解析器源码分别在 packages/shared-domain/src/workflows/engine.ts 和 packages/shared-domain/src/workflows/parse.ts,主进程侧的应用逻辑在 apps/desktop/src/main/workflow-apply.ts。没有代码节点、没有网络节点,是这条"信任阶梯"从第一天就立下的边界——也是你敢于让自动化真正接管知识库的底气。
【免费下载链接】zennotesKeyboard-first local Markdown notes with Vim motions, diagrams, and MCP integration.项目地址: https://gitcode.com/gh_mirrors/zenn/zennotes
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考