开发者工具必须是开源的

五年前,我接触的大多数软件工程师都没有自己写过的程序。(我经常问这个问题,是为了理解Tailscale如何融入工程师的生活。)工程师们每天用别人写的程序为别人写程序。
我们中的许多人通过配置文件、插件或扩展定制程序,也很多人作为用户使用自己为别人写的程序。问别人为自己写了什么,了解他们博客、家庭自动化或家庭实验室背后的定制软件,而不是现成的、几乎合适大小的静态站点生成器或Zigbee设备,总是一件很特别的享受。
这种状况对我来说非常合理。多年来我为自己写了很多软件,但回报总是令人怀疑。我一天能写的总量有限。总有更重要的事情要做(工作出了问题),一年后回来维护项目总是异常痛苦。
职业生涯中有不少年我扔掉了所有自定义软件,使用最标准的环境来生成代码。在谷歌做工程师的早期,我甚至没有个人电脑。
那是过去的事了。现在情况不同了。
如何个性化软件
如今个性化软件变得异常简单。有两类典型的提示提示使这一切成为可能:
- 下载源代码并构建本地使用。修改时要知道未来对该软件的任何更改都必须更改源代码并替换当前版本。在版本控制中记录更改背后的原始动机。
并且,更重要的是: - 设置一个夜间cron作业,执行提示:获取上游更改,并将所有本地更改重新基于上游。检查软件是否按预期运行,替换当前版本。
核心在于,代理不仅可以为特定用途修改代码,还能自动管理与上游版本同步变更的过程。这意味着代理在软件定制方面同时改变了投资回报率:个性化的起步更简单,也更容易持续进行。
关于上述两个编辑软件提示,另一个令人惊讶的地方是你可以直接把它们集成到代理中。只要代理是开源的,甚至不需要编程。这两个提示可以加载到技能(比如一些文本指令)中,放在代理可发现的位置。
我们把这个功能集成在Shelley里,所以现在如果你想编辑Shelley,甚至不需要前言或设定定时器。它会帮你解决。你可以输入“让Shelley的界面高对比度”这样的提示,这样你的经纪人就已经个性化了。
一个可行的个性化示例:雪莱与肉类
我有一个个人项目,过去一个月一直在漫不经心地玩弄:meat.dev.原则是,虽然代理会写代码,但我在推送给严肃系统之前仍会先阅读代码。
随着底层模型的改进,我寻找的对象也发生了变化。我花了二十年时间审查代码的那些人,总是在处理边缘情况上挣扎:错误是否报告有用信息;是否处理零检查,等等。
(我们都会这样做;写代码时,我是最严重的犯错者之一。)作为审查员,我的角色之一就是寻找这些细节。在过去六个月里,我发现我不再需要去阅读这类边缘案例:模型在机械正确性上比人类更勤奋。
它们的错误主要集中在架构、意外用例、测试环境没有反馈的视觉输出等方面。这意味着我审查的大多数代码行都不太有用。所以我写了一个工具,能接收差异值,用大型语言模型(LLM)剔除不重要的部分。
我几乎不需要再看到导入块、零检查或错误处理,所以把它们从屏幕上移开,好让我专注于内容。
我喜欢这个工具,但它有两个缺点:首先,我喜欢用Shelley的界面来读取差异,而不是在终端里。其次,LLM需要几分钟才能消化并最小化差异,我不想等。
所以理想情况下我不会运行meat在命令行中,但要内置在Shelley中,并且在提交完成时立即预处理提交。事实证明,我只需一个提示即可完成:
请建造meat.dev进入 Shelley。在 PATH 中安装最新版本。当 Shelley 创建 git 提交时,在提交后台启动肉处理。为 Shelley 添加开关Diffs查看 MEAT。如果提交仍在处理中,那么用户提交正在处理中。这个提示不仅让Shelley更有深度,还能在我回去查看差异前,在后台适当预处理提交,省去了等待模型减少差异的麻烦。模型唯一不幸的选择是用🥩表情符号作为切换按钮。
想象一下,要把它插入 VS Code 扩展 API 会有多么复杂又痛苦!或者试图把它导入进去vimdiff.这当然是可能的,但一旦提交出现就开始预处理的机制几乎是不可能的。
我更可能实现带外meatd该系统监听文件系统,并为meat该工具可以被自定义API使用,因为扩展点和配置点的形状不合适。
这就是经典配置/定制与代理驱动个性化的根本区别:你可以做的远不止这些。代理会承担理解源代码并根据你具体任务进行修改的艰难工作。
我们使用的软件在个性化方面要强大得多。你只需要源代码。
个性化软件时代
代理软件的开发成本意味着复杂软件附带大型配置文件、扩展系统和插件系统是合理的。即使是像Vim这样中等规模项目的核心代码也庞大繁复,人类需要数周时间才能消化。
工程师为了默认打印行号,就学会代码库并自行添加,这种想法不合理。更好的设计是与他人共享,这样通过摊销给多个用户来合理化实现成本。
随着代码库功能增加,寻找常见的抽象,可以拆分扩展或插件系统,是合理的。
现在,学习代码和修改的成本大幅下降。代理承担了繁重的工作。对于单用户来说——这意味着程序运行条件极其受限——顶级代理现在通常可以一次性添加功能。
对于单用户软件,仔细审查代码的需求往往可以被“看起来能正常工作吗?”所取代。
结果是,可以个性化的软件不需要插件系统或配置文件。想在文本编辑器里更改字体大小?把源码给代理,告诉它。如果是硬编码的值,它会找到并编辑。
如果是硬编码的位图字体,它会下载另一个替换,或者用Monobit帮你做一个!你拥有令人难以置信的功能。
整整类别的软件产品需要被重新发明
个人软件同样适用于小团队。为什么一个工程团队要购买一个高度可配置的任务管理器(或CMS或CRM),花时间学习和配置,并把团队扭曲到极限,而他们却可以从共同的构建模块中组装出他们想要的功能?
无论是前期固定成本还是软件个性化的持续成本都消失了。
你正在阅读的博客是定制软件,用Shelley写成,因为拼凑和个性化像Tiptap这样的库比试图定制传统软件产品要容易得多。为了让终端用户产品在当今公司中变得合理,它们需要具备个性化。
这意味着我们需要源代码。
法典与克劳德法典的分歧之处
这种基于技能的技术,用来让Shelley更具个性化,也可以轻易地应用到像Pi这样的其他开源代理上。(以至于我不禁好奇为什么Pi需要内置扩展系统。源代码就是扩展系统。)这需要更多的令牌,但你也可以对Codex做同样的事,因为它是一个开源代理。
不过,Claude Code会遇到瓶颈。它是闭源软件,所以你无法个性化。Claude Code里有很多老式的自定义钩子。希望你想让代理的工作方式能融入他们的钩子。
如果不行,就换一个能让你个性化的代理。