Fabrika 发布:一个带红蓝队与盲测的软件工厂
Show HN: Fabrika, Opinionated Software Factory
Fabrika 发布 alpha 版本 0.1.0,采用 MIT 许可,把编码流程固定为一条由普通代码调度的流水线,构建者与检查者分属不同模型家族,例如用 Claude 构建、用 GPT 或 Gemini 检查。
为什么选择 Fabrika
为交付生产级代码而构建
- 每个阶段都有红队和蓝队 构建者和检查者来自不同的模型谱系。规范、计划和代码在呈现给你之前都会各自受到攻击。 团队
- 盲测 预言机仅根据规范编写验收测试,从不查看实现,因此通过就意味着契约得到了满足。 构建
- 密封隔离 每个智能体和每项检查都在各自的容器和工作树中运行,无法访问你的机器。你的检出永远不会被触碰。 隔离
- 集成供应链管理 每个新依赖都会通过 OSV 筛查漏洞和恶意包、许可证问题,以及仅发布数天的版本。 依赖
- 内置最佳实践指导 它会审视你的仓库如何进行 lint、类型检查、测试和引导,提出缺失的内容,并自行编写小的修复。 仓库就绪
为人类决策而优化
- 可视化规范审查 变更所触及的内容以图表形式呈现,每项标准都附有将如何验证以及撤销难度如何。 规范审查
- 上下文丰富的代码审查 代码通过要求它的标准抵达,旁边是背后的决策和反对意见,而不是从头阅读的 diff。 工作地图
- 成功证据记录 项目自身的检查、盲测、断路器探测和浏览器测试录像,全部保存在数据包中。 证据
- 代码库发现 竣工状态:架构、子系统和能力,从仓库中的每个文件读取并保持最新。 竣工状态
Fabrika 对比
你最喜欢的编码工具
工具可以完成每一步。工厂确保它 确实完成。
你的工具可以启动子智能体、编写测试并 检查自己的工作。它是否会这样做,以及 是否会以相同方式做两次,取决于会话。
Fabrika 则固定了流水线。流程是 规定的而非可配置的,这正是它能够 保证每个功能都经过红队测试、盲测和 项目自身检查的原因,由 普通代码决定接下来运行什么。
构建者和检查者,来自不同的模型谱系。
每个站点都是一个智能体,只负责一项工作和一条 提示词。构建者制造东西;检查者攻击已 制造的东西。Fabrika 希望这两支团队使用不同的模型 家族:例如,用 Claude 构建,用 GPT 或 Gemini 检查。
每个智能体只看到其工作所需的内容
一个 worker 获得整个分支以及 harness 拥有的所有工具。oracle 获得需求,但看不到任何代码。
模型与任务相匹配
一个读取并总结代码的 scout 可以运行在类似 Haiku 的模型上;规划构建的 architect 则需要类似 Opus 的模型。
你可以阅读和修改的提示词
每个角色都是一个在调用时加载的 Markdown 提示词,针对其岗位进行调优,并可在控制台中编辑。
仓库就绪: 批准检查
将 Fabrika 指向一个仓库,它会调查代码当前是如何被检查、测试和引导的:linter 和类型检查器、安全性和可访问性检查、单元测试、集成测试和面向用户的测试,以及像 AGENTS.md 和 CLAUDE.md 这样的 agent 指南。
它发现的每一项检查都会在一个未改动的检出上运行。 在你接受它们之前,不会构建任何东西,因为之后的每个功能都会以该基线为评判标准。一项检查不必是绿色的才能被接受:修复它、将其保持在当前数值,或判定它不适用。
构建:
观察,
不要干预。
architect 规划工作单元,plan checker 提出异议;只有当它们无法达成一致时,你才会在 计划评审 中看到计划。此后运行中途不再有输入。
两条通道彼此不可见地运行:worker 进行构建,而 oracle 根据规格编写测试。运行检查、运行 oracle 的测试,以及将修复拆分为不重叠的单元,都由普通代码完成,而不是由 agent 完成。
| 站点 | 团队 | 它做什么 |
|---|---|---|
| worker | builder | 编写代码及其单元测试。多个并行运行,每个都在计划中自己的单元内。 |
| integrator | builder | 将各个 worker 的单元合并为一个整体,并编写覆盖它们之间接缝的测试。 |
| oracle | checker | 仅根据规格编写验收测试,与 worker 并行进行。它从不查看实现。 |
| breaker | checker | 攻击结果:边界、失败路径、并发、恶意输入、字面上满足但实质上未满足的标准。它编写探针来证明失败。 |
| reviewer | checker | 提出反对发布的强有力理由:重复、破坏约定、不应有的抽象。 |
| arbiter | neither | 对每一项发现作出裁决:修复它、简化它、将其送回 oracle、判定其超出范围,或将其升级给你。它不能让一项发现消失。 |
| repairer | builder | 对 arbiter 送回的问题进行最小范围的修复,在一个受轮次、预算和挂钟时间限制的循环中。 |
| simplifier | builder | 简化正确但过于复杂的代码。之后所有内容都会重新测试。 |
| rapporteur | neither | 组装评审包。 |
功能评审: 对评审包作出裁决
回来的不是 pull request,而是一个 review packet:代码,外加一份结构化的论证,说明它做到了所规定的事。代码是通过提出要求的那个标准来抵达的。你审计这份论证,并对少数几个决定作出裁决,而不是从头读一遍 diff。
结果要么是一个你可以合并的分支,要么是又一轮工作。
这次运行无法自行解决的决定:被升级或无法修复的发现,以及任何你需要手动检查的事项。每一项都带有仲裁者的推理及其背后的证据,你带着理由去修复或驳回它。
建成后:
代码库,
逐文件阅读。
在改变一个系统之前,你需要对它有一个心智模型。一个 reader agent 读取每个文件,普通代码检查它报告的内容并将其连接成一张图,一个 cartographer 为这些分组命名。结果是一个架构、一组子系统以及一张能力地图,每一项都有一个稳定的三字母 id。
它在你要求时运行,之后只读取自它处理的上一次提交以来发生更改的文件。
三种皮肤,
一块板。
控制台有 default、day 和 night 三种,从报头切换,并由你的浏览器记住。皮肤是把一种底色移到另一种底色上,而不是反转页面:在 day 中,板加入地板;在 night 中,地板加入板。
选择一种皮肤,或在屏幕上拖动。
default 搪瓷板和它的轨道悬挂在涂漆的地板上;记录在地板上读取。
运行在你已有的订阅上。
Fabrika 以无头方式驱动 Claude Code 和 Codex,使用你的 Anthropic 和 OpenAI 订阅。任何 OpenAI 兼容的东西、OpenRouter 或你自己机器上的模型,都通过 OpenHands harness 运行。
订阅会被限流,所以每个团队都有一个后备 agent,当主路由拒绝时,工厂会切换到它。每个模型名称都放在一个文件里,factory.yaml。
它用于什么,以及不用于什么。
专为
- 一个人,或一个小团队,基本靠自己构建功能。
- 定义明确、自包含的功能,在进入工厂之前就已设计好。
- 在自己的机器上运行,作为单一用户。
尚未,或完全不
- 团队登录、协调工作流、云部署。
- 需要大量来回沟通的工作, 比如塑造用户体验或探索 问题空间。为此使用交互式代理 会话。
现状
Alpha 版,版本 0.1.0,MIT 许可。它尚未 经过实战检验,会有 bug。 大约一千二百个测试各自断言一个 使其值得运行的属性:不变量、隔离、修复循环、 控制台绘制的内容。
来源:Hacker News · tatiyants.com