@dzhng:我新的 AI 原生软件工程原则是尽可能多地删掉抽象层,在这一点上,a…

X AI KOLs Following 工具

摘要

dzhng 分享了他的 AI 原生软件工程原则——删除抽象层、用 Rust 编写应用并编译为 WASM、让编码代理自主运行 12 小时以上——以及他的可组合代理技能开源库(dzhng/skills),用于配合 Claude Code、Codex、Cursor 等 70 多种工具构建软件工厂。

我新的 AI 原生软件工程原则是尽可能多地删掉抽象层 到目前为止,我所有的 web 应用都是用 Rust 编写并编译成 WASM 的,UI 直接用 HTML 和/或原生 WebGPU 调用渲染 没有 React/Three.js/Next.js 或任何其他中间抽象层 我所有的精力都花在为每个应用编写定制的验证 harness 上,完整地量化性能/可用性/对编码代理来说什么是"好的",这样它就能在这些指标上做爬山优化 每次代理会话都通过我的 explore unknowns 技能(https://github.com/dzhng/skills)来规划,所有重大决策都提前确定,然后我就放手让代理自主跑 12 个多小时 到目前为止,我已经能独立交付一年前连想都不敢想的产品
查看原文
查看缓存全文

缓存时间: 2026/10/11 23:15

我新的 AI 原生软件工程原则是:尽可能删除更多抽象层。到目前为止,我所有的 web 应用都是用 Rust 编写并编译成 wasm 的,UI 直接用 HTML 和/或原生 WebGPU 调用来渲染——没有 React、Three.js、Next.js 或任何其他中间抽象层。我所有的精力都花在为每个应用编写自定义验证框架上,完全量化性能、可用性,以及对编码代理来说“好“的标准是什么,这样代理就可以在此基础上不断爬坡优化。

每次代理会话都通过我的 explore unknowns 技能来规划,所以所有重大决策都提前完成了,然后我就让代理自由发挥 12 个小时以上。到目前为止,我已经在独立交付一年前想都不敢想的产品了。


dzhng/skills

来源:https://github.com/dzhng/skills

技能

skills.sh

用于构建软件工厂的 AI 技能。

我的个人领域无关代理技能库,在每个项目中重复使用。小巧、可组合、可自由修改——适用于任何支持技能的框架:Claude Code、Codex、opencode、Cursor、duet 以及 70 多种其他框架。

npx skills add dzhng/skills

加上 --list 可以选择单个技能,或者将任何 skills/<类别>/<技能> 文件夹复制到你的框架技能目录中(例如 .claude/skills/)。

从克隆的仓库中,npm run install-skills 可以在不使用注册表的情况下执行相同操作:

npm run install-skills                 # 安装到 ~/.agents/skills,从 ~/.claude/skills 链接
npm run install-skills -- ../my-app    # 安装到仓库而非主目录
npm run install-skills -- --only write-spec,review ../my-app
npm run list-skills                    # 列出名称和类别

.agents/skills/<技能>/ 存放真实文件(扁平化,无类别区分,跨类别链接已重写以匹配);.claude/skills/ 是指向其中的相对符号链接,因此两个框架读取的是同一份副本。

重新运行会覆盖已安装的副本——如果你保留的是真实目录的 .claude/skills/ 则不会被修改,已经是符号链接的 .claude/skills 也保持原样。加上 --dry-run 可以先查看计划。

为什么

软件正在从任务转向工厂:代理自主追求目标,直到输出可以被信任。难点不在于将目标拆分为任务——而在于将其拆分为可以独立验证的部分,并且知道这些部分在哪里。这些技能就是用来运行这个循环的。

将未知视为战争迷雾:先绘制地形,将其划分为可以独立构建和验证的区域,然后递归地重新切分任何隐藏更多地图的部分。而且重新规划不会在规划结束时停止——规格说明是一份活文档,在实现过程中随时更新和重新切分,只要工作教会代理计划已经过时了。

每一部分都必须证明自己——架构审查、代码审查,以及与基线的视觉审查——然后循环才能继续。每次迭代都会更少出错,直到目标完成。

一次自主运行——3 天 18 分钟追求一个目标

证据:一次无人值守的 Codex 运行,在这些技能之上持续追求一个目标 3 天 18 分钟,不断切分和迭代直到完成。

如何使用

使用链式流水线来构建功能,使用研究循环来发现有效的方法,或者按需使用单独的技能。每个技能都可以独立使用。

完整循环——一个大功能,从头到尾

完整循环——探索、编写规格、无人值守构建、审查决策

  1. 绘制迷雾。 对想法运行 /explore-unknowns。它会按象限逐一采访你,并提供渲染好的选项、原型和决策表格让你反应,而不是要求你凭空想象。到最后你就知道这个功能应该是什么样的了。

  2. 固化。 对那张地图运行 /write-spec。大多数决策已经在上游完成,所以这一步主要是转录——我不会读这份规格。任何真正的新内容,它会先询问而不是自行决定。

  3. 构建。 启动循环:

    /goal /implement-spec specs/
    

    /goal 是让框架进入循环模式的命令——在 Claude Code 或 Codex 中操作相同——然后由规格来驱动。一个小功能几小时,一个大功能两三天。加上任何合适的框架:在 xyz 分支上,或者使用 /codex 作为实现者,而你保持为父级编排者和审查者。

  4. 审查决策,而不是差异。 运行结束时会整合 specs/<技能>/choices.md——代理在规格沉默处所做的每个决策,按信心最低排在前面。这就是审查界面。将修改意见发回,下一轮会重新审计:每次 AI 写代码时,你审查它的选择。其余部分自动触发:每个切片结束时的 /review 审查,任何视觉内容的 /screenshot-critique 和 /compare-screenshots,最后一个切片完成时的 /close-spec,以及当实现证明计划过时时的计划重新切分。

    预算:步骤 1–2 花 30 分钟到几小时,步骤 4 花 30 分钟到几小时。一个运行两天的任务,两端各约 2–3 小时。你的时间花在首尾,中间无人值守。

研究——通过快速实验学习

当下一个决策需要实验证据时,使用 Auto Research。它从一个快速、有启发性的任务开始,测试一小批假设,检查组合,并随着方法改进扩大覆盖范围。新的失败成为焦点;之前的任务变成回归检查。

/auto-research 相对于已保存的基线,每个任务的成本至少降低 15%,且不降低任务成功率。
从一个快速开发任务开始。

如果评估器、指标、基线或所需改进不明确,该技能会在实验前先询问。通过评估和达到改进目标是两个独立的要求。输出包括最佳已验证的工件和一张参数效果地图:测试了什么,哪些地方有帮助或有伤害,以及各改动如何相互作用。在研究准备好实现时,使用这些证据来指导规格。

单点使用——即兴路径

  • 一个头脑风暴最终变成了一个功能。 /explore-unknowns 在讨论结束时和开始时一样好用——运行它来清扫你们双方都没想到的角度,然后在步骤 2 接续循环。
  • 任何不是来自规格的代码修改。 一个临时修复,影响范围超出预期:先运行 /review(重构清理 → 代码审查 → 编写文档),然后 /audit-choices。当差异大到无法阅读时,决策账本是你仍然理解代码库现状的方式。

技能

工程——切分、构建、验证、重复

技能功能
explore-unknowns引导用户按象限逐一梳理任务的未知领域——先梳理已知的已知项,然后进行采访、提供可交互的工件,以及盲区扫描——最终形成一张完整的四象限地图。
auto-research通过快速、渐进的实验进行优化,产出一个已验证的候选方案以及一张参数效果和权衡地图。
write-spec将一个大型功能拆分为可独立验证、可人工审查的切片,带有 API 接缝和可试玩的检查点。
implement-spec构建一个已有规格直到完成,每次一个可审查的回合,并行委托独立的切片。
implement-spec-with-goal使用框架的目标功能,然后按照 implement-spec 完成。
implement-spec-with-codex让 Codex 编写代码来运行 implement-spec——你负责编排、集成和审查每一回合。
close-spec归档一个已交付的规格,并将其从构建计划重写为指向代码的持久化决策记录。
handoff-spec将一个正在实现中的规格移交给另一台机器或代理:将当前会话的所知写入规格,然后推送。用户手动调用。
refactor-clean通过将职责归拢到一个干净的概念来进行重构,而不是在问题旁边层层堆叠兼容性沉积物。
write-tests一次写一个曳光弹式的测试来锁定真实行为——而非实现细节、配置值或碰巧通过的样本。
audit-tests将契约映射到独立的测试证明,合并冗余覆盖,并在不失去回归保护的前提下移除仅测试用的机制。
audit-performance找出在没有进展的情况下被放大或重复的热点路径,按真实故障风险排序,并优先采用最小的有界修复来保持自愈能力。
write-docs将文档编写为原则和指引的词汇表,而不是代码的镜像(那终将腐烂)。
code-review审计一个差异中的过时命名、无效引用、不必要的复杂性,以及只叙述不解释的注释——以干净/不干净的判定结束。
audit-choices审计实现者所做的选择,而非其差异——一个纯粹的、从不阻塞的审计,其账本公开架构和代替用户做出的决策,审查决策而非代码。
retro进行一次编码会话复盘,并就代理的环境、检查、指引和信息获取提出改进建议。用户手动调用。
eli5用通俗的语言解释规格或修改,同时不失精确——这是其他技能借用的 ELI5 语体,用于独立的、走一遍场景式的解释。
review将一个已完成的修改作为一次通过来收尾——重构清理,然后代码审查,然后编写文档——序列化为一个单一判定。
codex使用本地 Codex CLI 作为独立的第二个代理进行审查以及(在明确要求下)委托实现。
claude使用 Claude Code(claude -p)作为独立的第二个代理进行咨询以及(在明确要求下)委托实现。
marketing-pages按页面类别编写、更新和审计营销页面的规则手册——活动落地页保持 noindex 且不被链接,只有一个 CTA;其他页面则凭内容获得站点地图条目、爬取轨道链接和规范的文案来源。

视觉审查——绝不凭感觉接受视觉效果

技能功能
design-with-images探索生成的视觉选项,保留选定的目标,然后对照目标迭代真实截图,直到实现的设计与之匹配。
compare-screenshots将截图与已批准的设计或预期结果进行比较;使用遥测数据定位差异,而非将历史基线视为正确。附带一个可复用的差异脚本,还能检测单张截图是否平坦、空洞或构图失当。
screenshot-critique在接受视觉工作之前,使用一个未预热的子代理作为第二双眼睛;在宣布一个报告的视觉缺陷已修复之前,这是强制步骤。
preview-shots在一个 macOS 预览窗口中打开一组精选的图片截图供用户查看。

技能编写——让技能本身保持锋利

技能功能
write-skills创建或修改代理技能:触发词、引导词、渐进式披露,以及需要裁剪的失败模式。
audit-agents审计或重写 AGENTS.md,使其只包含持久性原则,以迭代速度为核心。附带一个示例 AGENTS.md 与本技能包配合使用。
eval-skills使用黄金用例对技能进行评估——在全新子代理中盲跑、独立评审者,以及基于差距的修改。

图形

技能功能
renderer使用 TypeGPU/WebGPU 进行 GPU 渲染的架构规则——一个帧编排器、单一所有者、一个资源注册表、深度和合成契约,以及查看像素的验证。
launch-video用代码导演一部展示片级别的发布视频——一个从项目中生长出来的视觉概念,画面和合成的配乐锁定在同一个时间源上,以及一个能经受社交媒体压缩的预览帧。

许可证

MIT

致谢

感谢 Matt Pocock 提供的 retro 技能,此处复制后将其中的写作指南引用指向本仓库的 write-skills。同时也感谢 Matt 和 Thariq 提出的战争迷雾和探索地图概念,这些概念帮助塑造了这些技能。

lauren (@poteto): 代码库中从来都充斥着垃圾代码。我们一直对此心安理得,因为除了关键任务的“硬“(例如嵌入式)软件之外,代码很少需要完美。

软件工程是一种独特的工程形式,因为你常常在构建一个不断演进的东西,而且……

相似文章

重要建议:要有意识地重新思考过去关于“事情应该如何做”的每一个概念。一些想法、技巧,以及…… (原文内容在此处被截断)

X AI KOLs Timeline

# Nader Dabit 分享 AI 时代的生存法则:职业发展建议 Nader Dabit 分享了在 AI 时代蓬勃发展的心得:**专业分工正在瓦解**、**token 成本让实验几乎免费**,以及**云端 agent 将实现大规模扩展**,并呼吁开发者们拥抱 10x 工作流,同时避免产出“垃圾内容”(slop)。

AI代理是否正在成为新的软件抽象层?

Reddit r/AI_Agents

作者探讨了AI代理如何作为现有软件的新的抽象层,将用户交互从导航用户界面转向描述结果,从而减少将意图转化为可执行任务时的摩擦。