Journal / Open Source

一个你可以 fork 的读书记录

Gume 已开源、已上线,由出现的人共同建造。一个交付了数据库的广告人的笔记。

我上一次在这里写的东西,以一个断言收尾:给工具带上方法与意图,它就成为撬动真实工作的杠杆。

写在宣言里很容易。所以我们去验证了。

Gume 已经上线,代码开源。它是一个读书记录:记下你读过什么、正在读什么、还有什么等在书架上。它运行在一个近 30 万册葡语图书版本的目录之上。许可证是 AGPL-3.0。它在公开中建成,由一个不是程序员的广告人,与一个 AI 智能体结对完成。

而它是迄今为止,教会我最多的东西。

一屏说清它是什么

巴西读者被一个日渐朽坏的 Skoob 困了十五年,而所有替代品都是外国的、英语优先的、围绕错误的本能建造的。于是:

Gume 的书架:黑底上的书封,每本用一个词打分,而不是分数。
书架 / 封面是页面上唯一的颜色

一个书架。想读、在读、读过、放弃。重读。纸质与电子在同一处。拥有一本书和读一本书是两回事,这里分开计。

一种用词语打的分。Adorei、gostei、achei ok、não gostei、não terminei。从不是数字。星是刻度,刻度变成平均分,平均分变成排行榜,排行榜把阅读变成表演。

一条按时间的信息流,和一间可以闲逛的屋子。信息流只有你选择关注的人,中间不插入任何东西。另有一个探索标签页,装满你尚未关注的人的书架,打乱而非排序。发现在这里存在,只是不会来找你。

可以带走的文件。一次点击,文件就下载:JSON 和 CSV,包含你的书架、阅读日期、评价、书评(含私密的),以及你做过的每次目录修正。没有排队,没有邮件,没有"我们正在准备你的档案",那是打扮成关怀的摩擦。而且 CSV 使用 Goodreads 的导出列,Skoob、StoryGraph、Oku 和 Fable 都已认识的格式。导出只有在别的应用能打开时才算出口。没人能导入的私有 JSON,是一张排版漂亮的勒索信。

一张开放的图书图谱。元数据由读者修正,我们的意图是把它作为开放数据集发布回去。如果这个项目死了,数据应当比它活得久。

宣言是一张拒绝清单

产品有趣的部分很少是它拥有什么,而是它故意不做什么,哪怕做了会有效。

  • 没有点赞,没有粉丝数,没有连续打卡。也没有排行榜。你的主页上有一枚荣誉,但没有"谁读得最多"的名单。按已读书目排序的榜单,是一台让人在阅读上撒谎的机器。
  • 荣誉从不下跌,也从不看钟。没有"本月书目",没有赛季。停一年不损失任何东西。在生活变难时扣你数字的应用,是在惩罚居丧者、病人和刚有孩子的人,并让人为了保住本就属于自己的东西,去翻开一本不喜欢的薄书。
  • 弃读没有代价,评价不计分。读了且讨厌,与读了且热爱等值。如果 "adorei" 更值钱,应用就是在购买赞美。如果放弃有代价,就再也没有人会放下一本烂书。
  • 没有算法信息流。不排序,不插入。你的信息流是你选的人,按发生的顺序。想要陌生人时有专门的标签页,打乱而非排序。你走进去的发现,与走进你的发现,是两种不同的东西。
  • 没有联盟链接。没有广告。你的阅读史永不出售。
  • 没有召回式通知。朋友发布时我们会告诉你。我们不会告诉你,你的书架想你了。

以上每一条都是对收入的拒绝。这让它成为承诺,而不是偏好。

而这是我不打算粉饰的一条,因为它是整件事最诚实的接缝:存在一把梯子,它数的是书。铁、铜、银,向上,按你一生读过的书。所以是的,在一个宣称阅读不是表演的产品里,存在一个读得越多就越高的东西。

我们做的,是把梯子上让数字变得残忍的部分全部剥掉。没有榜单,所以没有要击败的人。永不下跌,所以停一年没有代价。从不看钟,所以没有月份没有赛季。无法排序,所以成不了榜。剩下的,是你作为读者一生的缓慢形状,只有你和早已认识你的人看得见。

这是一场干净的胜利吗?不是。数书的梯子可以用薄书刷上去,我知道。这是我们有意背负的张力,而不是假装解决了的问题。如果你认为我们换错了,这个论点属于一条 issue,而它会得到认真的回答。

而许可证让承诺成真。如果托管实例哪天不再遵守这张清单,你拿走代码,拿走数据,自己运行。

出口正是意义所在。

正是出口,让留下有了分量。

工具写不出的那部分

这才是我真正要说的。

AI 击穿了写代码的成本。它没有击穿犯错的成本。这是两种不同的经济,而 2026 年谈论此事的几乎所有人,仍在给它们标同一个价。

举这次构建里的一个例子,也是至今仍让我不安的那个。

目录导入器读了 Open Library 三个转储文件中的两个,从未打开第三个。作者们住在第三个文件里。于是数万本书落进数据库时无人认领,而被提议的下一步,是把它们当作孤儿删除。福楼拜。托尔斯泰。Torto Arado。因为一个文件没被读,就要从图书馆里被抹去。

没有报错。没有红色构建。没有崩溃。所有测试通过,指令被精确执行。只有一个自信、快速、错误的答案,几秒内送达,还附着一份整洁的清理方案。

它被拦下,是因为有人在同意焚烧之前,问了一句那堆东西里是什么。

智能体写下了我写不出的几千行代码,也只差一个问题就删掉了托尔斯泰。

两件事都是真的。只向你兜售其中一件的人,是在向你兜售什么。

所以稀缺的资源不是代码。是写入之前问出的那个问题。是知道共享的记录不属于你、不可覆盖。是注意到供应商的键是出处而不是身份,因为 Open Library 有三个不同的托尔斯泰键,没有一个是他本人。

那叫判断力。它是唯一没有变便宜的东西。

于是仓库学会自卫

如果维护者不是程序员,任何防护都不能依赖维护者审阅 diff。我读 diff 抓不出 bug,假装可以就是演戏。

所以防御必须是结构性的。这就是方法,它迁移到我们运营的每一家公司:

  • 决策写在代码之前。每个艰难的选择都住在决策日志里,附带推理,用平实的葡萄牙语。没有新论据就不重启旧案。一个失忆的智能体加一个有记忆的仓库,是可行的一对。两个失忆者不行。
  • 授权只住在一个文件里,脚本会在检查出现在任何其他地方时弄断构建。不是约定。是闸门。
  • 有 700 多个测试,重要的那些不测函数,它们扫描代码库。一个会在界面开始说开发者语言("schema"、"endpoint"、"Phase 4")时弄断构建,因为 Gume 对读者说话。一个会在路由未经决定就生而公开时弄断。一个会在徽章可能因阅读而获得、或某枚徽章比另一枚更亮时弄断。一个在除获准文件外的一切地方禁用无时区日期函数,因为那个 bug 曾把一本书归档到错误的年份。还有红队攻击系统,交换 UUID,试图读写他人的数据行。
  • CI 就是审阅者。零人工批准。绿了就发。这不是盲信,恰恰相反:是拒绝假装一枚人类的橡皮章算得上控制。

这个教训超出读书应用。当生成免费时,整个工作向上游移动:决定什么永远不可为真,并把它编码在无法被遗忘的地方。赢下这十年的组织,不会是提示词最好的那批,而是约束可执行的那批。

我图什么

我直说,因为假装这是纯粹的利他,本身就是另一种表演。

我经营一家把 AI 用在影响力、科学、应用 AI 与电影上的工作室。我出售关于 AI 的判断。你无法出售一件你只是让别人去做过的事情的判断。

所以我亲手建了整条纵深,起初很糟,而且公开。Schema 设计。授权。30 万行上的三元组搜索、以及它为什么慢(我猜是防抖;我错了;智能体测了,是一个外部调用堵住了按键)。Postgres 迁移。CSP 头。CI。设计系统。社区治理。许可证选择。部署。

人们说的 T 型,只有纵向为真时才成立。我的纵向是广告、定位、品味、对一块屏幕的读感。我缺的是这个十年真正要求的横向:对机器足够熟练,以识破它自信的谎言;对流程足够有品味,把工作结构成让谎言被运气之外的东西抓住。

这不是从 AI 课程里学来的。是凌晨两点,当子串过滤器即将删掉荣格的时候学会的。

还有第二个理由,更小也更诚实:我读书。我重新开始阅读,为了压下焦虑。有效。我想要的应用不存在,于是为学习而造的东西,成了我每天真正在用的东西。这不是巧合。只有这种项目能活过无聊的中段。

邀请

Gume 生来就该由使用它的人建造。这是全部前提,而此刻正缺人手。

你可以不写一行代码就做贡献,而今天这是最有价值的帮助。目录来自一个开放档案,抵达时并不完整:近 26.6 万个版本没有封面,数千个没有年份、没有出版社。这不会自己修好,也不需要程序员。它需要一个手里正拿着那本书的人。

"o que falta" 页面:目录上公开的工作,从你自己书架上的书开始。
/ 公开的工作,从你自己书架上的书开始

打开 o que falta,从你自己书架上的书开始。此刻地球上只有你能修好它们,因为只需把书翻过来。每次修正都署你的名字,永远记在那本书的页面上。你的名字会进入贡献者页面,与写代码的人同一张名单、同一个字号。

贡献者页面:照料目录的人和编写代码的人,并排同权重。
谁在做 Gume / 目录与代码,同页同大

修一张封面,与一个 commit 等值。

如果你写代码:good first issue 标签是真的。每一条都写明它是什么、为何重要、要碰哪个文件、怎么测试。没有一条需要先理解整个应用。

  • 最小的:ISBN-10 转 ISBN-13。一个纯函数、一个新文件、一个测试。而它堵上一个真实的洞:今天每本 2007 年前出版的书,都会从 30 万册的目录旁掠过,变成重复条目。
  • 最有价值的:导入器。StoryGraph、Skoob、LibraryThing、Kindle、Kobo。标准是无损:日期、评价、书评文本、书架、ISBN。半途而废的迁移,是人们永远离不开一个早已不适合自己的平台的头号原因。
  • 最难也最需要的:图书数据。匹配、去重、封面、非英语目录。毫无光鲜。它是护城河,决定陌生人的第一次搜索是否奏效。

你不需要申请领取 issue。评论 "peguei essa" 就上。在分支上干活,开 PR,CI 来裁决:零人工批准,绿了就发。用了 AI 智能体就直说,不必羞愧,我们也在用:那只是告诉测试该往哪里更用力地看。

如果你认为某条拒绝是错的,开一条 issue。Schema、计划与设计系统之所以公开,正是因为它们日后改起来昂贵,而现在争论起来便宜。

为什么这是一家 4/RL 公司

Gume 不赚钱,也没打算赚。将来会有支持它的方式,且它将是可选与纯装饰的:主页上的一枚标记,仅此而已。支持永不解锁功能。付费者与不付费者,用的是完全相同的 Gume。

那一家工作室为什么要发布它?

因为"真的"是一个标准,而我们名字里的斜杠,是每个项目必须跨过的那条线:从承诺到证明。开源是这场跨越最严酷的版本。当任何人两条命令就能克隆并验证时,你无法谎称它能用。当技术栈摆在桌面上时,你无法谎称你懂它。当许可证把"在你违背原则那天 fork 你"的权力交给陌生人时,你无法谎称产品有原则。

我们造的其他一切都要经过客户、合同、NDA。这一个,经过你。

Gume 是刀刃的名字。会切割的那部分。

没人磨的刀不会一夜生锈。它慢慢失去锋刃,而且一直看起来完全像一把刀。你只有在它切不动它一直切得动的东西时才会发现。

头脑同理。工作室也同理。

头脑永不
失去锋刃

Gume 由 4/RL Co. 维护,托管于 gume.club。AGPL-3.0。欢迎 fork。