刚入行做开发时,有位老前辈曾跟我说,摩尔定律同样适用于软件。那时我还不明白,我们持续讨论该如何解决问题,本身就是进步的轨迹;抱怨 J2EE、吐槽 NetBeans 太慢,对着表格布局和每次操作都要整页刷新的体验长吁短叹——这些日复一日的优化,同样是推动进步的引擎。
过去十八个月尤其如此,改进几乎从未停歇。Tab 补全让位于智能体编程,智能体编程又演化成了通过 Harness 管理智能体。我从一开始惊叹于生产力的飞跃,到如今已经进入状态,开始琢磨还能把这颗柠檬榨出多少汁来。
一些新的事实
单个开发者做出的项目,在质量和一致性上已经可以比肩大型开发团队。你完全可以、也应该构建量身定制的应用,而且不用太担心有经验的工程师如何上手:只要他们对自己的技术栈烂熟于心,很快也会知道该如何为你的项目贡献代码。但我最深刻的体会是,Harness 才是关键——它是我的预期与大语言模型能力相接的支点。
目前,我的整套配置由两份订阅(Cursor 和 Claude)支撑,需要时再用 Pi 补充。三者共享同一套 skills 和 AGENTS.md。虽然我使用三个 TUI,体验却是统一的。对我而言,这让模型真正成了商品:Claude 或 Cursor 里没有什么不可替代的秘方或特殊体验,是我保持生产力所必需的。因此,对于本月底从 Cursor 转向 Codex,我毫不焦虑。
成本优势
在商品化1时代,许多现成模型都能给出很好的结果;不过,自 deepseek-v4-flash-0731 发布以来,我一直主要依赖它。只有极少数情况下,我才会动用 Anthropic API 的预算来使用 Fable。
大部分维护工作和简单任务,我都可以交给 DeepSeek。只有在探索重要功能,或进行牵涉众多部分的大型重构时,我才会请前沿模型上场。最近,我了解到 prewalk2:这是 Can Bölük 提出的一种方法,在规划阶段和第一个任务中使用前沿模型,等模式确立后再把工作移交出去。我把它和 Building an Advanced Agentic Harness3 中 planner/worker/critic 的角色拆分结合了起来——让同一个提示词既规划、又执行、再自我批评,会混淆各自的目标,所以应当把每个角色隔离开来。我把这两种方法做成了一个 skill,并配套写了一个 Pi 扩展,可以在工作的任何阶段接手。
先由 exploration 产出一份 plan,并将其整理成明确的 DAG(有向无环图)任务列表。随后由 worker 接手,一次专注实现 DAG 中的一个节点。全部完成后,我会引入 critic,对已有实现做简化并提出质疑。这个阶段经常会给出足够有力的反对意见,让流程退回 worker 阶段。但 critic 满意之后,工作便会交给 promoter;它提醒我:在把成果妥善传达给其他人之前,这项工作还不算完成。
我加入 promoter 这一步,是为了弥补自己的一个弱点:总想发布完就立刻奔向下一件事。它会提醒我把已经完成的工作告诉大家。这个阶段我还需要 Fable 稍微帮一把,因为推广这件事很微妙,很容易搞砸;况且没人喜欢批评者,所以让前沿模型参与,可以让批评更有分量。
即使在任务最繁重的场景中,这套流程也让我的 Fable 用量降低了 75%。这感觉很合理,有点像一次 AI soak(长时间浸泡式使用)。依靠两份各二十美元的订阅,并在 Pi、DeepSeek 和偶尔注入的 Fable 之间灵活切换,我既能照顾好客户,也能切实推进自己的项目。
与产品 Harness 的连接
我的产品4 是一款相机应用:每次拍一张照片,就能轻松看到它被转换成矢量图。它的乐趣正来自简单。分辨率会降低,照片会被简化为不同明度的图层和形状。它保留上下文、去掉细节,让你自己重新把细节画回来。它的设计目标仅此而已。你可以把图打印出来,在上面作画;也可以导入 Procreate,在所有分层之中继续创作。
Harness 可以通过 poster-driver5 使用这项功能。在无头 Chrome 中打开它并驱动线上网站,就能把任何图像或拆解后的视频制作成海报。为这个应用编写脚本,就像加载一个网页一样简单。
一种过去只能用笨拙方案实现的高级用法,现在已经触手可及,而且用起来很有趣;这个功能还有大量空间值得探索:
# run from harness root
npm run make:animation artifacts/my-movie.mp4
大语言模型帮我理清了实现方法,并写好了一段保存在 Harness 里的脚本;这样它就能运行无数次,而不会继续消耗 token。因为 Harness 能够触达产品,产品也变得更强大了。它支持 File System Access API。在 Brave 中启用后,我正把自己的想法同步到工作目录。收割自己那些伤感男孩式歌词,独自在房间里唱给自己听。痛并快乐着。我还在探索另一种创意用法:制作一个以自家街区为原型的 3D Blender 环境,再把海报叠加到上面。那会成为场景、故事板,以及远超 Web 所能呈现的东西。
如今,这个应用仿佛真正变得完整可用,而一年前这根本不可能。创作者依然可以用 AI 的方式来使用一款非 AI 工具。创造过程中最好玩的那些部分,我们仍然可以留给自己。
拆解 Harness
我的整个工作日都在这个 Harness6 里度过。我把 nvim 配置映射进工作目录,这样大语言模型就知道我当前打开的是哪个文件,既能编辑它,也能在我这个游得还不够快的人需要时,帮我用对移动命令。我尝试用“夹具(jig)”来理解 Harness:大语言模型和我一起编辑配置,让我可以专注工作,同时又能坚持使用 Vim 命令。
这个 Harness 是自包含的,能够支持主目录之外的多种能力(沙箱、Web 界面、File System Access API、Docker、Deno 可执行文件等)。
这些概念在我脑中仍未完全成形,所以我一直把 npm start、cursor-agent 和 claude 称为 TUI,以便保持 Harness 这个概念的清晰。所有 TUI 共享同一个 Harness。
保持一切可审计非常重要,因此 TUI 都被要求把内容放在 artifacts/ 目录中。Cursor 用 .gitignore 忽略文件,我认为这很聪明,所以根目录必须不属于任何 Git 仓库。我有一个 skill,负责在 Harness 和 work 目录中的仓库之间同步。Skills、extensions 和 AGENTS.md 都是根目录中的一等公民,随时等待修改和扩展。TUI 必须遵守这些规矩。
brayness/
├── AGENTS.md
├── AGENTS.local.md
├── bin/
├── prompts/
├── plans/
├── skills/
├── extensions/
├── artifacts/
└── work/
├── realness/
├── blog/
├── brayness/
├── nvim/
└── ...
起初,我对 skills 的规定太过细致;现在我正学着减少那些具体要求,也逐渐意识到,越过某条界线之后,你只是在浪费 token,对这些铁疙瘩唠叨个没完。等 Harness 稳定下来,我需要采用更实证的方法来确认每项改动究竟产生了什么影响。
下面是其中一些 skill,按我的规划弧线分类。
explore
- nvim-buffers
- flexible-visual-system
- vault
- interview-prep
- vuetify-to-semantic
planner
- planning
- memory
- previous-work
- project-tooling
- brayness-sync
worker
- realness-design
- typography
- user-interface
- rust-best-practices
- agent-browser
- logo-finder
critic
- critic
- test-coverage
- simplify
- vue-inspect
promoter
- hyperframes
- readable
- zoom-to-ableton
- motion-systems
双脚重新踏回地面之后,我在 cursor-agent 或 Claude 里都不再感到迷失。我对工作流拥有了掌控权,也能塑造自己设计解决方案的方式。我在 Pi 中学到的东西,往往会反哺 Claude 和 Cursor 中的体验。有了 Pi,我相信任何问题都能靠 bash 一路解决。让 Harness 运行脚本,再由大语言模型协调这些脚本。
过去三个月里,我发现自己越来越常离开编辑器,转向终端。这背后似乎是多种原因恰好形成了和声:把代码放心交给智能体、换用 Ghostty,以及借助 nvim 对抗技能退化。这种程度的重新洗牌,通常足以让我的产出瘫痪;但现在,无论个人项目还是客户工作,质量和推进速度都达到了最高水平。一些小事也帮助我逐渐适应 AI 时代的工作体验,比如用分屏为长时间运行的智能体任务构建上下文。
政府封禁 Fable,并开始摆出一副要以家长式特权掌控整个行业的姿态,使这一切突然变得紧迫起来。我,以及大概另外十万名软件开发者,忽然都意识到必须分散模型访问渠道。于是,为了自由,我们集体决定试试这些中国模型。Pi 从一个我刚刚调通、还只是在随便把玩的工具,一跃成为整套配置中最重要的一环。
评论7
- https://www.emergingtrajectories.com/lh/commodification-and-circularity/
- https://stencil.so/blog/prewalk
- https://data4sci.com/blog/building-an-advanced-agentic-harness
- https://realness.online/about
- https://realness.online/poster-driver
- https://github.com/scott-fryxell/brayness
- https://news.ycombinator.com/item?id=49452346