---
title: 我是如何搭建第一个 Dark Factory workflow 的
description: VPS 上的 Hermes、由 13 个任务组成的 kanban 图、在不同 profile 上完成的阶段间评审、通过 Telegram 与人类进行的 mini-brainstorm，以及最终的 bare-HTML 部署。第一个能跑通的 Dark Factory 工作流——经过几次调试运行后，现在无需人工调度即可走完所有阶段。
canonical_url: https://techmeat.dev/posts/how-i-built-the-first-dark-fabric-workflow
date: 2026-05-17
tags: dark-factory, hermes, kanban, workflow, claude-code, codex
language: zh
---

在[上一篇文章](/zh/posts/how-i-built-open-second-brain/)中，我介绍了 OpenSecondBrain——AI 代理所依赖的记忆层。记忆只是故事的一半，另一半是流程本身：谁做什么、谁审阅谁、什么算"完成"，以及这一切如何由聊天中的一句话启动。

今天我上线了第一个能跑通的版本：`new-project` workflow。我把一个想法带进 Telegram，最后得到一个完整搭建好的项目，包含文档、设计、计划，以及一个真实可访问的公开页面。

## 从外部看是什么样的

我带来一个想法。比如："给我的小工作室做一个单页落地页。"

然后我会回答几轮简短而有针对性的问题。先是头脑风暴本身：受众是谁、要突出什么、我偏好哪种技术栈、整体应该是什么感觉。接着，在每个阶段中再来几轮 4–5 个问题的短会话：当前文档作者缺什么，就问什么，免得他们凭空编造。

其他的事情都由工厂来做。在此期间我可以处理自己的事情。

## 卡片会动的看板

这一切中最直观的就是看板。当我对最终方案说"好"之后，编排器会一次性在看板上创建 13 张卡片，每个工作阶段一张。从那一刻起，一切都在我眼前发生。

卡片自己会动。先是第一张亮起来，标记为 `running`，我就知道某个 subagent 已经接手。几分钟后，这张卡片滑入 `done`，下一张随之亮起。每两个生产阶段之间一定有一张评审卡，而且必须由另一个 subagent 来接：写文档的人永远不审自己的工作。

有时评审不过。这时评审卡进入 `blocked`，旁边出现一张新的 fix-task 分给原作者，整条下游就乖乖等着。作者修改并关闭 fix-task 后，评审醒来重新读一次产物。可能通过。可能再次打回。最多两轮，然后升级到我这里。

最后我看着这块看板，几乎像在追一个快递包裹：现在在装配，现在在打包，现在在派送。只不过这不是一个快递员——而是好几个 subagent 同时在我的项目不同部分上干活。

## 最后会得到什么

流程结束时，我手上会有：

- 一份结构化的 `about.md`，抓住想法的核心；
- 包含功能性与非功能性需求的 `specs.md`；
- 包含技术轮廓的 `architecture.md`；
- 包含分阶段路线图直至 MVP 的 `plan.md`；
- 包含视觉识别、设计 token、字体排印与关键页面的 `DESIGN.md`；
- 一个项目专属的 GitHub 仓库，里面装着上述所有文件；
- 一个部署在 `<slug>.techmeat.dev` 子域名上的公开页面，目前只提供最简单的 HTML，把 `about.md` 镜像出来。这是一个承诺：项目存在，而且可达。

实现真正的功能则是另一个 workflow 的工作，那是下一个。这第一个的目标是把一个想法推进到"一切已描述、一切已商定、项目有自己的地址"的状态。之后就可以雇用工厂去做真正的开发了。

## 难点在哪里

我跑了好几轮调试。每一次都会冒出自己专属的可笑 bug：有个 subagent 想清理自己的工作目录，结果把自己的 shell 会话杀掉了；又或者它在某个阶段中间就开始实现功能，尽管实现根本不属于这个 workflow，而是下一个的事。每两轮之间我会去给 skill 打补丁再重启。到现在这个状态，整个周期可以从头到尾干净地跑完。

## 顺便一提，记忆也长大了

上一篇文章里我承诺，[OpenSecondBrain](https://github.com/itechmeat/open-second-brain) 是故事的另一半。那以后这一半已经成长不少，对工厂本身来说也很重要。

主要的变化是 OpenSecondBrain 现在多了一层"观察记忆"。以前我手工写进去，像写日记。现在 subagent 们顺手就把我的偏好记下来（比如"提交信息使用祈使语气"或"不要使用没有上下文的内部缩写"），把笔记丢进一个收件箱，每天 Hermes 代理跑一次 `dream`——一次后台 pass，把反复出现的观察提升为规则。这些规则会在每个下一个会话的开头自动加载，我也就不必再把同一件事重复二十次。

此外还有：在整个 OpenSecondBrain 知识库上的全文检索；每次 `dream` pass 之前的备份和回滚；记录每一笔付费操作的独立层（付了什么、为什么付、绑在哪里）；以及机器强制的保护，防止某个代理意外覆盖另一个代理的规则。这一切才让工厂成为可能：当某个 subagent 在写 `DESIGN.md` 时，它已经能看到我关于排印和界面的累积偏好。我只是某次在聊天里随口提到，OpenSecondBrain 把它们钉住了，现在它们会跟着每一个新项目一起出场，不用任何提醒。

## 接下来

`new-project` 只是 bootstrap。接下来会是 `new-feature`——一个 workflow，它接手一个已有的项目及其文档，把下一个功能推到生产。再之后是第三个，`bugfix`：分诊、复现、修复、验证、上线。三本 playbook 合起来，就是我面向一个人的 Dark Factory 版本：我带来一个想法或一份 bug 报告，最后产出一个能用的功能。

完整的工厂还在路上。但第一块已经组装好，并且跑得很稳。

把这些作为开源发布还为时过早：在这个阶段，它更接近研究，而不是成品。一旦整个项目搭建流程能稳定地跑下来，我会把所有东西开放出来。请在 [X](https://x.com/techmeat) 上关注我。