2026年中氛围编程个人应用
摘要
Francis Irving 分享了他开发个人应用的经历,这些应用包括地点推荐、人脸记忆和音乐播放,使用的是基于本地优先的软件(结合 Yjs 和 Hocuspocus),并强调了 LLM 编程代理的好处。
<p><a href="https://lobste.rs/s/vvdveb/vibe_coding_personal_apps_mid_2026">评论</a></p>
查看缓存全文
缓存时间: 2026/08/21 08:56
# 2026年中期的氛围编程个人应用 - Francis Irving
来源:https://www.flourish.org/2026/08/personal-apps/
有几个移动应用我一直想要,而且相对来说专属于我个人。
[](https://www.flourish.org/uploads/2026/08/toucan-music.png)
Toucan Music 显示专辑封面
- **地点** – 当别人向我推荐餐厅或咖啡馆时,我长期以来都将它们添加到谷歌地图的列表中。这在某些方面很烦人,例如当选择列表时页面会缩小。而且我不喜欢将我的数据锁定在免费服务中。
- **人物** – 我有脸盲症,很难记住那些没见过几次的人。这在大都市中参加社交活动时尤其明显。这个应用的构想是帮助我记住每个人是谁,并通过间隔重复训练我识别他们的面孔。
- **音乐** – 这个应用是我在过去一周一时冲动做出来的。和许多人一样,我早就想在 Spotify 上将专辑整理到文件夹中(https://community.spotify.com/t5/Live-Ideas/Your-Music-Creating-quot-Collections-quot-of-Albums/idi-p/1885053)。在尝试转回购买 MP3 失败(因为太复杂)之后,我转而自己做了一个定制的 Spotify 播放器。
所以在过去一个月左右的时间里,我用氛围编程做出了 Toucan(https://toucan.flourish.org/)(选择“仅本地”即可试玩,您输入的任何数据都将保留在您的浏览器中)。值得一提的是,源代码在这里(https://sr.ht/~frabcus/toucan/)。但我并不是非常自豪地称之为“发布”——下文会详细说明。
## 架构
我上面描述的应用需要在移动端工作,并将数据同步到桌面端以便使用。通常的做法是创建自己的个人软件即服务,拥有自己的网络服务器和数据库,同时还要开发一个移动应用。
这感觉有些过头——笨拙、多余且扩展性不佳。我一直很喜欢(https://redecentralize.org/interviews/2014/03/26/12-michiel-unhosted.html)如今被称为本地优先软件(https://lofi.so/)的运动。其理念是数据主要存储在每个设备上,通过标准化的同步服务器在设备间传输。这使得操作极其快速,因为它们只需在本地执行。同步在后台发生。可以想象成类似 Dropbox,但用于数据库中的数据。
其中一些数据相当私密——尤其是人的面孔,甚至餐厅推荐上的名字。因此我更喜欢同步到我自己托管在优秀本地 ISP(https://www.mythic-beasts.com/)的服务器上。
我失望地发现并没有标准化的个人数据同步服务器软件——我原本期望至少能找到像 Nextcloud(https://nextcloud.com/)这样适度流行的软件。您可能没听说过它,但它是一个自托管的文件同步服务器(以及更多功能)。
最终 Fable 和我选择了 Yjs(https://yjs.dev/),这是最流行的本地优先协议。我想要一个简单的服务器,只写入 SQLite 数据库(这样我可以非常轻松地进行托管和备份)。Fable 找到了不那么知名的 Hocuspocus(https://github.com/ueberdosis/hocuspocus),它很简单且能完成任务(可惜后来发现它的格式在数据库文件中是不透明的二进制格式,但这是另一个故事)。
我花了一段时间思考是否能用 Rust(https://tauri.app/)编写 UI,但最终还是选择了简单的方案,制作了一个 Javascript 渐进式 Web 应用(PWA)(https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Guides/What_is_a_progressive_web_app)。当安装在我的 Android 手机上(通过 Chrome,出于某种原因在 Firefox 中无法工作)时,它就像一个真正的应用一样好用。Web 版和移动版是相同的代码,工作方式完全一样。即使有 LLM 编程代理,这也省去了很多麻烦。
## 基本流程
[](https://www.flourish.org/uploads/2026/08/toucan-places.png)
Toucan Places 在咖啡馆
我大部分使用的是每月 18 英镑的 Claude 计划,主要使用 Opus 模型。Fable 在初步规划方面帮了大忙,但我不确定这带来了多大改变。其中几个决定是错误的,后来被重构了。
到了现在这个阶段,我的流程在 LLM 编程中很常见。有一个 `plans/` 目录,任何较大的功能都先在那里设计。我编辑它,做出决定,然后清除上下文窗口,告诉代理去实现这个计划。
如果某件事是重大的 UX 或设计变更,我会让 Claude 制作一个包含不同设计选项的工件。这些工件的质量出奇地高,尤其是在经过几次迭代之后。
我在一个简单的待办事项文件(https://git.sr.ht/~frabcus/toucan/tree/main/item/TODO.md)中管理 bug 和任务。代理完成后会在上面打勾,然后我进行质量检查并删除它们。
大多数任务都在一个名为“打磨”的标题下。这是因为我必须提供大量的产品和 UX 详细反馈。我在日常使用应用时记下这些点。每个应用都有数十上百个条目。这是我目前认为这很难推广到其他人的一个重要原因——见下文。
我固执地没有升级到更昂贵的 AI 编程计划。我还有很多其他事情要做,而且我很喜欢被 5 小时窗口阻止,因为这**令人上瘾**。后来我了解到,当 token 用完时,你可以输入 `\!sleep 3h`(或任何时间),然后按 Ctrl+B 将其后台运行(否则你会得到一个 2 分钟的超时)。Claude 会在几小时后醒来,即使我不在,也会继续工作,同时其限制被重置。
## 如何让它做好工作
[](https://www.flourish.org/uploads/2026/08/snapshot-testing.png)
定制的快照测试工具
在 LLM 编程中,那些长期以来的良好实践变得更加重要。例如严格配置的类型检查和 100% 的测试覆盖率——参见 Jonathan Lange 的 Galahad 原则(https://jml.io/posts/galahad-principle/)了解为什么“100”尤其有魔力。
这些为代理提供了基本的反馈循环,它们现在能够合理地响应这些反馈。然而,如果你不要求它们,它们不会自行设置这些东西。至少现在还不会。
我曾在前端开发团队(https://www.memrise.com/)管理并编码多年,尽管我们做了很多好事,但我们从未真正实现快照测试。我一直想做这件事。
因此,很早的时候,Claude 就为 Toucan 创建了一个工具,使用无头浏览器对应用的每个页面进行截图。这非常好,部分作为集成测试,部分用于检查设计,部分用于我进行设计质量检查。有一个 Web 视图供我查看(供 LLM 的 JSON 格式),一个集成的像素差异比较工具,大量的过滤器和视图选项,基本性能测量,以及用于针对另一个分支进行快照的命令行开关。
这非常宝贵。
最终的结果是,几乎任何我要求代理做的事情……它都能完成。它通常会做出一些我不喜欢的美学选择,或者搞乱部分 UX。有时我不得不就数据结构或系统中缓存位置的选择与它争论。
但总的来说,它编写了东西。它没有破坏其他任何东西。现有的测试通过,新的测试被添加。它的水平相当于一位超级快速的高级软件工程师,尽管上下文感知能力较弱。至于达到那种水平,则要等到 2027 年底或 2028 年(https://www.dwarkesh.com/p/dario-amodei-2)。去年,在内心深处我并不认为它的编码能力会变得如此之好。
我遇到过一个严重的 bug。我从未测试过一个重新排序列表的新功能,我在外出时在手机上点击了它。它完全删除了列表及其所有内容!这个 bug 是因为在本地优先存储引擎中没有正确执行数组操作。代理帮助我恢复了数据,添加了各种日志功能以便查看同步情况,并更新了文档以明确避免再犯同样的错误。
最后,根据 Jyn(https://jyn.dev/)的建议,我添加了一个自我改进反馈循环。我的版本相当简单——在 `AGENTS.md`(https://git.sr.ht/~frabcus/toucan/tree/main/item/AGENTS.md)中有一个提示,告诉它将任何导致它困难的事情写入 `SELF-IMPROVE.md`(https://git.sr.ht/~frabcus/toucan/tree/main/item/SELF-IMPROVE.md)并记录相同问题出现的频率。然后我查看这个文件,看什么有意义,并安排改进。
这发现了诸如快照在视觉上不稳定、`node_modules` 中出现它会反复尝试绕过的变更、性能问题、缺少工具等问题。这感觉非常原始,但我预计我们未来几年都会花大量时间监督这类事情。“AI 开发者体验(https://youtu.be/2vQyg3jVIw0?si=K0jF08xcz0jxOdUx&t=1009)”。
## 重构
对国际标准和简洁性的追求驱使我尝试使用 Web 组件和纯 Javascript。我原本希望 Toucan 平台本身能够足够强大,使得应用可以是非常短的单 HTML 文件。但事与愿违,最终我意识到代码变得混乱,而且反正用 LLM 进行构建步骤既便宜又容易,所以我们进行了两次大的重构。
一次是转向 TypeScript,另一次是转向 Preact(一个更轻量的 React)。两次都很顺利——快照测试确保没有东西出错,事实上也确实没有。重构后一切都像素级完美一致。不过,我没有花太多时间手动检查代码质量——见下一节。
初始的图形设计相当粗糙。我费了很大力气才让它升级设计,但这是可能的。我不得不强迫它正确地创建共享组件。比我更有设计技能的人可以让它变得真正优秀。不过与我自己能做出的东西相比,它已经非常出色了。
## 未来
三个完整的移动应用,带有桌面版本。坦率地说,能以如此小的 effort 制作出来并且如此精致,这很惊人。
它们已经接近于其他人可以使用的东西。如果我是在五年前写的这些应用,我肯定会去营销它们并尝试获取用户。
但现在感觉有点……筋疲力尽?它们对我来说有点*太*氛围编程了。安装和设置有点*过于*独特。功能有点*过于*特定。
对我来说悬而未决的问题是,在代理编程的世界里,如何运营大型的协作开源项目?我真正想做的是让任何人都能轻松制作自己的定制化、有状态、同步的应用。这感觉很棘手,原因如下:
1. UX 和产品反馈是一项技能,仍然很难做到。移动端用户的期望很高,我认为很少有人会经历必要的反馈过程。
2. 跨平台应用框架仍然相当笨重。在 Web 和移动端上看起来不错的组件集有限,PWA 不为最终用户所熟悉,编码多个应用是专业且难以部署的。
3. 我并不真正觉得我拥有这个产品。如果我经营一家公司,这种担忧会小一些。但我没有仔细审查代码——我并不需要。在这个时代,人们对开源的期望是什么?我们如何传达这是一个高质量、会被维护的项目?我习惯了代码是开源中交付的关键部分。
4. 本地优先没有一个标准化的平台。我可以想象一个世界,拥有一个可以本地优先同步的个人数据存储像拥有电子邮件地址一样正常。但现实并非如此。目前不清楚如何在 2026 年开展可能实现这一目标的工作——仅仅开发它已经不再是一个强有力的地位信号了。
您认为如何才能使用 LLM 开发大型、开放的项目,从而真正使用户受益?
相似文章
Vibe coding 即将登陆你的手机
谷歌和苹果正将 AI 驱动的 'vibe coding' 引入移动端,允许用户通过自然语言提示创建自定义 Android 应用、小组件和快捷方式,正如在 Google I/O 2026 上所展示,并据报道将在 iOS 上实现。
@eng_khairallah1: https://x.com/eng_khairallah1/status/2055579146684936644
一份详细指南,解释了vibe编码的概念,并提供了使用Claude免费构建应用程序的分步教程,面向非程序员。
本地VibeCoding非常有趣..
一位程序员分享了使用本地LLM进行编码(VibeCoding)的个人实用规则清单,强调实验、任务分解、安全测试以及理解模型能力。技术栈包括llama.cpp和Qwen模型。
Vibe Coding 吃掉了我的作业:对AI方法在新建软件工程与编程中的评估
本文评估了‘vibe coding’(即使用自然语言提示通过AI智能体生成代码而无需人工审查)在新建软件工程任务中的可行性,并分析了现有用于衡量LLM编程能力的基准测试。作者开发了一套针对简单Python编程任务的评估套件,以提供有针对性的见解。
Vibe Buddy
Vibe Buddy 是一款专为 AI 编程设计的硬件产品,旨在改善开发者工作流程。