自动化与脚本

更新日期:2026-07-15

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

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

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

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

安全地读取仓库

一切都是UTF-8文本:

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

安全地写入仓库

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

  1. 写入UTF-8无BOM,使用LF换行符。 默认使用UTF-16或CRLF的Windows工具产生的文件,会被Plainva在每次同步时都视为已更改。
  2. 原子写入。 先把内容写入同一文件夹中的一个临时文件,再将其重命名覆盖目标文件。一篇写了一半的笔记(比如崩溃之后留下的)比完全不改还要糟糕。Plainva自身对每一篇笔记都是这样写入的。
  3. 保留OKF Frontmatter与未知的键。 重写一篇笔记时保留typeokf_version,并且绝不要丢弃你不认识的Frontmatter键——让它们原样经受住一次往返读写。不要去”整理”你看不懂的键。
  4. 绝不要碰.plainva/ 这个文件夹保存着Plainva的设备本地索引、备份、关系图固定信息和同步状态。它不属于你的内容,绝不能被你的脚本写入、同步或提交到Git。
  5. 遵守.base的规则。 一个.base只使用Obsidian的四个顶层键(filtersformulaspropertiesviews);每个视图都需要一个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助手——无论离线还是在线。

安全要点回顾

另请参阅