他每天要重复同一个动作十几次:把代码助手的输出粘贴到文本编辑器,手动删掉多余的空格和断行。直到某天,他决定用代码终结这种"第一世界级别的烦恼"。

从重复劳动到自动化

打开网易新闻 查看精彩图片

开发者Simon Willison的习惯很典型——频繁从Claude Code或GitHub Copilot的命令行界面复制输出,存进个人笔记或发到Slack。但AI工具生成的文本总带着"尾巴":尾随空格、位置别扭的换行符

他的 workaround 是先粘贴到macOS的TextEdit里,手动清理。次数多了,烦。

于是ai-clean诞生了。一个命令行工具,专干一件事:接管剪贴板,自动修剪空白、修复断行。MIT协议开源,免费。

管道设计的收敛哲学

技术细节藏在清理管道的五步策略里。原文列出的核心规则包括:删除尾随空格、将混合内容行拆分为纯文本与纯边框、合并被错误断开的行、清理孤立边框行、移除首尾空行。

关键设计在第2到第5步——它们跑在一个不动点循环(fix-point loop)里。每一阶段的输出可能成为另一阶段的输入:一次尾随空格清理可能把混合行变成纯边框;一次行合并可能暴露新的前导空格。循环持续到完整遍历零变更为止。

收敛性有数学保证:每次变更严格缩减文档体积。Clean(Clean(x)) == Clean(x),二次清理必须是空操作。

模糊测试作为守门员

Willison写了个FuzzClean测试:向管道投掷随机字节,断言不变性成立。这个测试抓到了他原本发现不了的bug。

他的开发纪律很硬——触碰管道就跑30秒模糊测试。至今所有行为回归都被它拦截。

工具同时提供网页版演示:ai-clean.dev。同样的Go清理管道,编译成WebAssembly,纯客户端运行。粘贴、看效果、零后端。

为什么这件事值得看

ai-clean的体积小到可以忽略,但它的设计逻辑指向一个被低估的事实:AI编码工具的输出接口,至今仍是人机协作的摩擦点。

大厂把算力砸进模型能力,却放任"复制粘贴"这个高频动作停留在1990年代的剪贴板体验。Willison的解决路径不是等官方修复,而是用Unix哲学——做一件事,做好,管道化,可组合。

不动点循环和模糊测试的组合,更是个人项目少见的工程严谨度。这解释了为什么他能同时维护Datasette、LLM等数十个开源工具:基础设施的可靠性,来自对边缘 case 的系统性敬畏。

网页版的存在同样关键。它把CLI的能力民主化——非技术用户也能直观理解"我的剪贴板发生了什么"。这是开发者工具向更广泛场景渗透的标准路径。

工具已开源。Issues、PR、对启发式规则的吐槽,都欢迎。