自动化与脚本

更新日期:2026-10-22

Plainva没有运行第三方代码的插件系统。取而代之,仓库本身就是扩展接口:你的笔记是纯Markdown,数据库是纯YAML(.base),OKF约定让每个文件都拥有可预测的结构。任何能够读写文件的东西,都可以扩展、生成或重新组织你的仓库,而不需要任何Plainva专属的API——不管是Shell脚本、Python程序、CLI工具、定时任务,还是AI助手。

本页说明如何安全地做到这一点。每个文件精确到字节级别的格式,另行记录在文件格式参考中;本页则是配套的实践说明——规则、工作流程,以及该交给AI助手哪些内容。

为什么用文件而不是插件沙盒

如果你想要某个Plainva本身不具备的功能,你不必等待插件出现——直接针对这些文件写一个小脚本即可。

安全地读取仓库

一切都是UTF-8文本:

读取从不需要小心——文本文件不会因为被读取而”损坏”。下面的规则说的全都是写入。

安全地写入仓库

遵循以下规则,Plainva(以及Obsidian)就会干净利落地接受你的更改。Plainva会监视仓库文件夹:外部写入通常会在一秒内被自动检测到并重新编制索引。

  1. 写入UTF-8。 新文件请使用LF换行符且不带BOM——Plainva自己就是这样写的。已经使用CRLF换行符或带有BOM的文件可以保留它们:Plainva两者都能读取,并且原样保留,在笔记被编辑或同步时也是如此。例外是仅由回车符(CR)构成的换行符——旧版Mac文件使用的形式:Plainva能读取这样的文件,但会在第一次修改它时用LF保存。它无法读取的是其他编码——一些Windows工具默认写入的UTF-16或Windows-1252。Plainva不会打开这样的文件:它会显示此文件不是文本,并提供交给系统程序打开的方式(在默认应用中打开;在手机上为分享),Plainva中的任何功能都不会向其写入文本——无论是保存、属性,还是重命名时改写的链接。版本历史会逐字节保存它,恢复或复制它时会复制其字节。若要在Plainva中编辑它,请在另一个程序中将其另存为UTF-8。如果你在某个文件中有未保存的更改时,另一个程序以其他编码保存了该文件,Plainva会把你的更改作为.CONFLICT文件保留在它旁边;随后比较界面会提供用冲突副本替换当前文件、保留两个文件和删除冲突副本。不过同步仍会将它原样传送——逐字节传送,就像图片一样:它不会被合并,如果两台设备同时修改了它,你的版本会被保留为一个.CONFLICT文件。
  2. 原子写入。 先把内容写入同一文件夹中的一个临时文件,再将其重命名覆盖目标文件。一篇写了一半的笔记(比如崩溃之后留下的)比完全不改还要糟糕。Plainva自身对每一篇笔记都是这样写入的。
  3. 保留OKF Frontmatter与未知的键。 重写一篇笔记时保留type和okf_version,并且绝不要丢弃你不认识的Frontmatter键——让它们原样经受住一次往返读写。不要去”整理”你看不懂的键。
  4. 绝不要碰.plainva/。 这个文件夹保存着Plainva的设备本地索引、备份、关系图固定信息和同步状态。它不属于你的内容,绝不能被你的脚本写入、同步或提交到Git。
  5. 遵守.base的规则。 一个.base只使用Obsidian的四个顶层键(filters、formulas、properties、views);每个视图都需要一个name;筛选条件是单根的。所有Plainva专有的数据都放在嵌套的plainva:子键之下。文件格式参考中有完整的契约,包括一个双向关联的示例。
  6. 不要与编辑器抢占文件。 如果一篇笔记正在Plainva中打开并且有未保存的修改,最好不要在同一时刻用脚本重写它。Plainva有冲突解决机制作为安全网,但最干净的做法是先让应用完成保存(或者去编辑那些当前没有打开的笔记)。

模式

几个常见的用途,全部都只是文件操作:

尽量让脚本保持幂等:运行两次不应该产生重复的内容。

把仓库交给AI助手

一个对仓库文件夹拥有读写权限的AI助手,正是这套设计所要应对的典型场景。要让它正确工作:

  1. 把文件格式参考交给它。 这份文档正是为机器读者而写的:OKF Frontmatter契约、属性→YAML的序列化方式、完整的.base模式(schema)及其硬性的Obsidian规则、index.md契约,以及安全规则——AI助手编辑文件而不破坏它们所需要的一切都在这里。
  2. 把它指向仓库文件夹,而不是.plainva/文件夹。 明确告诉它.plainva/是禁区。
  3. 要求它进行原子化的最小改动。 如果某个AI助手要为了修改一个属性而重写整篇笔记,它应该原样保留Frontmatter和正文中的其余部分。

因为这份契约是一份文档,而不是一个实时API,所以同样的说明适用于任何AI助手——无论离线还是在线。

安全要点回顾

另请参阅