sure
人的生命是有限的,可是为人民服务是无限的,我要把有限的生命投入到无限的为人民服务之中去!——雷锋
花掉一百万美元,然后开源:Sure 是一个产品的遗腹子
先说一个不太常见的开局
大部分开源项目的文档,第一段讲功能。
这一份的第一段,讲一个公司怎么失败。
它说:Maybe Finance 的团队在 2021 到 2022 年的大部分时间里,做了一个功能完整的个人财务与财富管理应用。它甚至有一个叫「问顾问」的功能,能把用户接上一位真的 CFP 或 CFA——全都包含在订阅里。
然后它说:商业那一头没走通,所以他们在 2023 年年中停止开发。
没有铺垫,没有「我们学到了很多」。就是一句「没走通」。
项目地址:https://github.com/we-promise/sure
这个仓库叫 Sure,它自称「给每个人的个人财务应用」,括号里还有三个字:由每个人。
那三个字不是修辞。它是一份继承声明——这个应用的原作者不做了,现在由社区接着做。
一百万美元,买到了什么
文档把账算得很清楚:员工、外包、数据供应商、基础设施,加起来接近一百万美元。
一百万美元买到的,是一个真的能用的东西,而不是一个演示。
怎么判断「真的能用」?看那个「问顾问」的功能。要把用户接上一位持证的财务规划师,你得有排班、有合规、有会话记录、有计费。这不是一个 side project 会做的功能,这是一个相信自己在做订阅生意、并且准备长期服务付费用户的团队才会做的功能。
也正因为如此,后面的反转才更刺人。
三次尝试,三次没成
第一次,做产品。做成了,但商业模型不成立。
第二次,开源加自托管。团队把应用开源,目标是让用户免费自己部署,然后再推一个收小钱的托管版。
第三次,托管版。文档的原话是:他们确实上线了那个托管版——短暂地。
然后也没有然后了。作为一门可持续的 B2C 生意,它不成立。
于是有了第四次尝试,也就是这个仓库:一群人接手,把代码继续维护下去,看看它还能走到哪。
文档在这里没有煽情,只有一句「加入我们」。
但你要是读过足够多的开源项目文档,会知道这种语气有多罕见。大部分 fork 的说明是技术性的——同步上游、修 bug、加功能。而这一份的说明是叙事性的,它把来龙去脉全交代了,包括「我们也不知道这条路通向哪」。
它现在是什么
撇开历史,这个应用本身的功能是实的:一个可以完整运行的个人财务应用,用 Docker 自托管。
客户端有五种:浏览器、macOS 桌面应用、移动应用、API 客户端、以及 LLM agent。
最后这个值得停一下。一个记账应用为什么要给 LLM agent 开入口?
看那张首页截图就明白了:左边是两栏的仪表盘——现金流、净资产、支出与流出;右边是一个 AI 助手,正在回答一个关于储蓄的问题。
它不只是记录你的钱,它还想解释你的钱。而「解释」这件事,恰好是大模型擅长、而传统记账软件一直做得很难看的部分——那些软件会给你一张饼图,然后让你自己悟。
所以它把「问答」做成了一个客户端类型,而不是一个藏在设置里的小按钮。
一个记账应用,为什么要有 API
客户端那一句里,「API 客户端」四个字很容易被当成开发者的小福利。
但对财务类应用来说,API 是必须的。因为你的钱不在一个地方:银行、券商、信用卡、现金、还有那些你早就忘了的预付卡。要把它们收进同一个视图,靠手工录入是撑不过三个月的。
API 意味着你可以写脚本导入、可以把别的工具接进来、可以让一个 agent 每隔一段时间去核对某个账户。
而「LLM agent」作为一种客户端,指向的是另一件事:不只是把数据搬进来,而是让某个东西替你看着它。比如每月初提醒你「这个类别超了」,比如回答「如果我把这笔订阅砍掉,年底能多存多少」。
这两件事加起来,才是「客户端」这个词在这个项目里真正的含义:它不是五个界面,是五种和你的账本交互的方式。
性能:它把脏衣服晾了出来
有一节叫「性能问题」,开头一句几乎是自嘲:数据密集的应用,难免有性能问题。
然后它做了一件大多数项目不会做的事:开了一个公开的性能面板,展示在演示站点上观察到的有问题的请求,连堆栈一起给你看,方便排查。
这个决定的分量,比它听起来重。
性能问题通常是最不想外扬的东西。一个项目愿意把「我们哪些接口慢、堆栈长什么样」挂成一个公开页面,等于承认了两件事:我们知道哪里烂,而且我们没打算藏。
后面还跟了一句:任何有助于改善性能的贡献都非常欢迎。
这就把「自曝」变成了「招募」。会看堆栈的人,看到这个页面,可能就直接去提 PR 了。
顺便说,财务应用为什么会「数据密集」?因为它的大部分工作不是计算,是聚合。一个仪表盘要同时回答「这个月现金流如何」「净资产变化多少」「支出结构长什么样」,而这三个问题各自要扫一遍交易表。
数据一多,这类查询就会从「毫秒」滑向「秒」。这不是代码写得丑,是这类应用的宿命——所以它才需要一张公开的性能面板,而不是一句「性能优化中」。
上手:四条命令,一个演示账号
开发者那一节写得很紧凑。
要求三样:Ruby 版本看 .ruby-version,PostgreSQL 9.3 以上,Redis 5.4 以上,都建议用最新稳定版。
然后:
1 | cd sure |
四条命令,起一个完整的应用。
想看点真东西,可以再跑一条 rake demo_data:default 灌入演示数据,然后用 user@example.com 和 Password1! 登录。
演示账号直接写在文档里,密码就是那个带感叹号的弱密码——因为它只对本地演示数据有效。这种「不假装严肃」的写法,反而让人放心。
另外还给了 Mac、Linux、Windows 三份开发环境指南,以及 dev containers 的路子。
一键部署:三档,档位差在 AI
部署那一节最有意思。
它给了三个 Render 蓝图,每一档都分 latest 和 stable:
Sure - 无 AI。 部署 Web、Sidekiq worker、Render 的 Postgres 和 Key Value,AI 相关的 token 故意留空。
Sure - 简单 AI。 带 OpenAI 支持的 AI 设置、pgvector ready 的 Postgres、Sidekiq、Key Value;部署时 Render 会问你要 OpenAI 的 token。
Sure - 外部 AI。 用外部助手的设置,外加一个 AlphaClaw,在 Render 上管理 OpenClaw 网关。
这三档的排列方式,其实是在回答一个很现实的问题:你不想要 AI,能不能不用?
答案是能,而且给了你一个专门的按钮。第一档的说明里特意写了「AI 的 token 故意留空」——这句话是在承诺:这不是一个装门面的「关闭开关」,这是真的没配。
一个应用把 AI 做成可选的三个档位,而不是一个绕不开的核心,这件事本身就值得记一笔。
可以 fork,但别叫 Maybe
许可那一节,把边界划得很清楚。
这个仓库是那个已归档的 Maybe Finance 的社区分支。你可以在 AGPLv3 下自由 fork,但文档说了一句很人情的话:我们更希望你别走,留在这儿一起贡献。
然后是合规要求,两条:
一,必须包含原始的 AGPLv3 许可,并且在你的 文档里明确说明:这个分支基于 Maybe Finance,但与 Maybe Finance Inc. 没有关联,也未获其背书。
二,「Maybe」是 Maybe Finance Inc. 的商标,所以在分支仓库里——包括 logo——都不许使用。
而「Sure」不是商标,它指的就是这个社区分支。
这一段写得很专业。开源许可是版权层面的授权,商标是另一回事;很多人 fork 的时候会把这两件事混在一起,然后在某个时刻收到一封律师函。
一个社区的文档主动把这件事讲清楚,是在替它的下游挡刀。
财务数据,天生适合自托管
这一点值得单独说,因为它不是产品偏好,是领域特性。
大部分应用上云,用户得到的是便利。而记账这件事,上云的代价格外具体:你的收入、你的负债、你在哪家店花了多少钱、你每个月往哪个账户转了多少——这些东西凑在一起,几乎是一份完整的生活档案。
放在别人的服务器上,你只能选择相信。放在自己的 Docker 里,你至少知道它在哪。
而自托管在这类应用上还有个额外的好处:它可以活得比公司长。
一个托管服务关停,用户的数据通常只有两条路——导出一份 CSV,或者永远失去。而一个能自托管的代码库,只要还有人愿意维护,它就能一直跑下去。
这个项目本身就是这个论点的证据:公司退场了,应用还在跑。
那份 backstory,其实是在管理预期
回到开头那个不常见的开局:为什么一份技术文档要先讲一个公司怎么失败?
我猜有三个原因。
第一,法律上的诚实。 这是一个 fork,不是原创。把来路写清楚,既是对原作者的尊重,也是对自己用户的交代。
第二,预期管理。 如果你不知道这段历史,你可能会以为这是一个有商业支持、有路线图、有 SLA 的产品。而实际上它是一个社区维护的分支,维护者是谁、能投入多少时间,都不确定。
提前说清楚,比让用户三个月后自己发现要好。
第三,它在筛人。 一个愿意读完这段历史还决定装的人,大概就是那种会提 issue、会看堆栈、甚至会成为贡献者的人。而一个只想要「下载即用」的人,看完这段可能会走——那是好事,因为他本来也不会留下来。
开源项目的文档,本质上是一次自我介绍。而自我介绍里最有效的一句话,往往不是「我很强」,是「我是什么,以及我不是什么」。
最后
回到那个开局。
一百万美元、两年时间、一个能接真顾问的功能、一次开源、一次短暂的托管尝试——这些东西最后沉淀成了一份文档里的几段话,和一个还在被维护的代码库。
这件事有很多种讲法。可以讲成创业失败,可以讲成开源接力,可以讲成 AGPL 的价值。
但我更愿意把它讲成一句很朴素的话:软件的生命周期,比做它的公司长。
公司会关掉,订阅会退订,商业模型会被证伪。而一份能自托管的代码,会留在某些人的服务器上,继续记着他们的账。
Sure 这个名字起得也挺好。它不是什么野心勃勃的词,就是「确定」——你能确定这笔钱在哪,确定这个应用明天还在。
至于那句「给每个人,由每个人」,放在这个背景下就不再是口号了。它是在描述一个事实:原作者退场之后,写下这句话的人,已经不是当初那一批了。
