Vibe side project · Obsidian plugin
flomo2obsidianvibe 副产品
一个 Obsidian 插件,每 15 分钟把 flomo 里新写、新改的卡片拉进本地 vault:一条 memo 一个 Markdown 文件,图片下载到文件旁边,frontmatter 记着它从哪来。只增不删——flomo 继续是随手记的入口,vault 成为它的长期归宿。和上面的法律 agent 产品线没有关系,是同一套「agent 驱动开发」顺手做出来的第二件东西。
它长什么样
从左到右是一条卡片的旅程:flomo 里写下 → vault 里落地 → 插件设置页里的三个按钮。没有额外界面,一切都发生在 Obsidian 的设置面板与文件树里。
flomoMEMO · 全部
2026-08-20 09:14···
#阅读/卡片笔记 一张卡只说一件事,离开上下文也要能独立成立;摘录和自己的话分开写,回看时才分得清哪句是谁的。
IMG_0820.jpg
2026-08-19 22:40···
#工作/复盘 开庭前把证据目录按争点重排一遍,比按时间排更好用——法官问到哪一项,手指就在哪一页。
2026-08-19 08:05···
#随想 工具越轻,记的越多;整理放在另一处做。
2026-08-18 17:30···
#阅读/财报 三张表先看现金流量表,利润可以是观点,现金只能是事实。
2021-05 起 · 2,600+ 条● 已登录
flomo(来源)照常在手机或网页上随手记。插件只读它的网页接口——用登录后的 access_token,不需要 Pro 会员的写入 API。
Obsidianvault
flomo / 2026-08 / 20260820-091422-Ab3kP9xQ-一张卡只说一件事,离开上下文也要能独立成立.md
---
source: flomo
flomo_slug: "Ab3kP9xQ"
flomo_url: "https://v.flomoapp.com/mine/?…"
created_at: "2026-08-20 09:14:22"
updated_at: "2026-08-20 09:14:22"
tags:
- "阅读/卡片笔记"
---
#阅读/卡片笔记 一张卡只说一件事,离开上下文也要能独立成立;摘录和自己的话分开写,回看时才分得清哪句是谁的。

在 flomo 中打开
flomo/
2026-08/
20260820-091422-Ab3kP9xQ-….md
Ab3kP9xQ-image-5f1c2a.jpg
20260819-224013-Qz7mN2eR-….md
vault(归宿)按月分文件夹,文件名 = 时间 + slug + 首行;图片下载到同一文件夹,用相对路径嵌入;frontmatter 让 Dataview、wiki 摄入都能按来源与标签检索。
设置Flomo Sync Local
flomo access_token登录网页版后在 DevTools 里取一次
••••••••••••
立即同步当前游标:2026-08-20 09:14:22
同步
全量下载/回填图片历史图片已回填;再执行会跳过已存在的
下载并回填
flomo 同步完成:写入/更新 2 条;下载图片 1 张
设置页(全部界面)七个设置项、三个按钮,对应命令面板里的三条命令。同步结果只用一条 Notice 汇报;token 失效时自动关掉定时,不反复弹错。
设计理念
flomo 的长处是「记」,Obsidian 的长处是「用」。插件只做把卡片从前者搬到后者这一件事,剩下的都交给 vault 里已有的工具(Dataview、搜索、wiki 摄入、agent)。
只增不删,单向流动flomo 里删掉的 memo 不会删本地文件,换掉的图片不会清旧图。vault 里的文件是你的,插件只负责往里放,不负责往外拿。
一个游标就是全部状态记住「最后一条的 slug + updated_at」,下次从这里往后拉;游标为空就等于全量。没有数据库,没有第二份索引——想重来,把游标清空即可。
文件名一次定终身首次落地时用「创建时间 + slug + 首行 36 字」取名,并在插件数据里记下 slug→路径。此后 memo 再怎么改,都写回同一个文件,vault 里指向它的链接永远不断。
图片必须落地flomo 返回的是会过期的 OSS 签名地址。插件下载原图(缺失时退到缩略图),用 slug + 文件 id 起稳定文件名,放在笔记旁边,Markdown 里只留 ./相对路径。已存在就跳过,永不重复下载。
frontmatter 可回溯source / flomo_slug / flomo_url / created_at / updated_at / tags 六个字段,页尾一行「在 flomo 中打开」。任何一张卡都能在两边互相找到。
用网页端自己的接口读取走 flomo 网页版的 /memo/updated/,请求按网页端相同的方式签名,凭据就是浏览器里那枚 access_token。不需要 Pro 会员开放的写入 API——插件本来也不写。
HTML 转 Markdown 自己写flomo 正文是一小撮 HTML:段落、换行、粗斜体、代码、引用、列表、标题、链接、图片。十几个标签,一个递归函数够用,不引第三方转换库。
token 失效就停手接口回 401 / 403 或登录失效业务码,插件记下时间、关掉自动同步、提示一次。重新填 token 即恢复。宁可停,也不每 15 分钟弹一次错。
零依赖,单文件整个插件是一份 700 行的 main.js,只用 Obsidian API 和 Node 的 crypto。没有构建步骤,改完保存、重载插件就生效——这是 agent 迭代它的前提。
怎么同步
定时器到点,一次同步分四步走。
flomo 网页接口/memo/updated/签名参数 · Bearer token
→按游标
分页
增量拉取latest_slug + updated_at每页 ≤ 200,先旧后新
→逐条
转换与落地HTML → Markdown图片下载 · frontmatter
→写文件
vault / flomo / YYYY-MM唯一真相源Obsidian 即时索引
| 遇到什么 | 怎么做 |
| 新 memo | 按创建时间取名落地,记下 slug→路径 |
| 改过的 memo | 按映射找到原文件,整篇重写;文件名不变 |
| 删掉的 memo | 不动本地文件(接口标了 deleted_at 的直接跳过) |
| 带图的 memo | 下载到笔记同文件夹,稳定文件名;本地已有就跳过 |
| 游标为空 | 等于全量:从 2021 年第一条开始翻页,翻到没有为止 |
| 旧版本升级 | 下一次同步顺带全量扫一遍,把历史图片补下来;也可手动触发 |
| token 失效 | 暂停自动同步,设置页显示失效时间;更新 token 即清除 |
七种情况,七行。整个插件没有「合并」——因为流动是单向的,vault 侧从不回写 flomo,也就永远不会有冲突要解决。
为什么叫 vibe 副产品
起因很朴素:flomo 从 2021 年用到现在,两千六百多张卡片,是随手记最顺手的地方;但 vault 里的知识库、agent、检索都看不到它们。市面上的导出方案要么手动、要么只导一次。于是让 agent 直接读 flomo 网页端的请求方式,写了这个插件——人只说了三件事:拉到 vault 里、每条一个文件、图片要能看。
- 2026-06首版:网页接口签名、游标增量、HTML 转 Markdown、按月落盘。当天启用,开始每 15 分钟跑一次
- 2026-080.3.0:图片从签名地址改为本地落地,加历史图片一次性回填;token 失效自动停手;slug→路径映射保证改动写回原文件
- 至今2,600 余条 memo、3,100 余张图片、41 个月份文件夹,在 vault 里安静地长着
一个顺手学到的教训:插件的状态文件(游标与 slug→路径映射)跟着 vault 一起被同步工具带到了另一台电脑上,两边都开着定时同步,就会生出一堆 _Conflict 副本。答案不是给插件加锁,而是只在一台机器上开自动同步——状态越少、越集中,这类问题越容易用一条约定解决,而不是用一段代码。这和 DailyNotes 的取舍是同一个方向:先把边界与流向讲清楚,代码就可以放心交给 agent 快速试错。
技术与状态
插件Obsidian 插件 API · 单文件 JavaScript · Node crypto(因此仅桌面端)。设置页 7 项,命令 3 条:立即同步 / 全量回填图片 / 重置游标。
数据vault 里 flomo/ 目录:2021-05 起 41 个月份,2,666 条 memo,3,182 张图片,约 1.3 GB。每条都带来源 frontmatter。
边界只读 flomo、只写 vault;不回写、不删除、不合并。依赖 flomo 网页端非公开接口,接口若变需要跟着改。
状态个人自用中,一台 Mac 上常驻运行。不上架社区插件市场,不分发;姊妹项目见 DailyNotes。