如果你已经在用 Claude Code、OpenCode、Codex(不提 Aider 了)这类工具写代码,真正耗时间的往往不是“第一次生成”,而是 review 之后那几轮重复劳动:看评论、整理问题、切回分支、修代码、跑测试、再回写 PR。
software-factory 就是我为这段流程写的一个轻量系统。它不想变成另一个 GitLab,也不准备一上来就做成重型多租户平台;它只专注一件事:把 GitHub PR review 反馈变成一个可追踪、可自动执行、可本地运行的修复闭环。
为什么要做这个项目
现在很多 AI 编码工具已经能把“写代码”这一步提速很多,但团队协作里的瓶颈并没有消失。
一个典型场景是这样的:
- 开发者提交 PR
- reviewer 留下 review comment 或 issue comment
- 开发者或 AI 再去手动整理这些意见
- 回到本地修复,再跑测试,再 push
- 如果修得不完整,再重复一轮
问题不在于这条链路复杂到无法理解,而在于它太重复了。只要你已经接受“让 AI 参与改代码”,那下一步自然就是把 review 之后的修复过程也纳入自动化。
software-factory 的目标,就是把这段重复劳动抽出来,做成一个边界清晰的小系统。
它到底在做什么
一句话概括:software-factory 是一个围绕 GitHub PR 审查反馈闭环构建的轻量编排器。
它的核心链路大致是这样:
| |
这条链路里,每一层都只做一件事:
Hook负责记录受管开发会话,确定触发点GitHub Webhook负责感知 PR review、inline comment、issue comment 的变化Review Normalizer负责把零散反馈整理成结构化修复输入Agent Worker负责 checkout、修复、验证、提交、回写Thin Web负责展示最近任务、状态和错误摘要
我觉得这样实际上实现起来比较敏捷:它不是把所有逻辑塞进一个“大模型万能入口”,而是尽量把触发、归一化、执行、可视化拆开。这样以后你要替换 agent、增加策略或者接入别的触发源,成本会低很多。
它到底有多轻
我用最轻量的方式实现了 software-factory:
- 后端就是一个
FastAPI服务 - 状态存储先用
SQLite - 页面就是服务端渲染的 HTML template
- 主链路就围绕 GitHub PR review feedback 展开
- 本地就能把 service、worker 和数据库一起跑起来
换句话说,它更像一个能逐步扩展的 AI-native PR Autofix Orchestrator,而不是一个覆盖整个研发流程的大平台。
如果你看过我之前写的 使用 OpenCode + GLM-4.7 实现 GitHub PR 自动代码审查,应该能感觉到这条思路是一脉相承的:先把 runner 和模型跑起来,再把 review 之后的动作继续往前推。software-factory 只是把这条链路从“自动 review”再往前做了一步,开始处理 review 之后的修复闭环。
现在已经做到什么程度
从当前代码和文档来看,software-factory 已经不是一个只有想法的草稿,而是有比较完整主干能力的 MVP,也已经发了 v0.1.0 release。
目前已经完成的部分包括:
- 最小可跑骨架:FastAPI 服务、健康检查、基础 SSR 页面
- Hook 和 GitHub Webhook 入库:包括结构化解析、幂等去重、会话与 PR 关联
- Review Normalizer:把 review/comment 归一化成
must_fix、should_fix、ignore - Agent Worker 执行链路:checkout、跑检查命令、commit、push、回写 PR
- 稳定性模块:PR 锁、重试、最大自动修复次数限制、噪声评论过滤、日志归档
这意味着它已经覆盖了从“收到反馈”到“尝试修复并回写结果”的主路径。
我们也通过让 software-factory 自己优化 PR #59,验证了这套流程确实能跑通。
这件事最有意思的地方在于,
#59不只是一个普通 PR,它意味着 software-factory 已经开始参与 software-factory 自己的开发了。
另外我觉得比较实用的一点,是这个项目并没有把 Web 界面做成纯展示页。除了任务列表和详情,它还在往更可操作的方向走,比如运行详情、operator hints、手动 issue 提交、agent 设置这些入口,说明它的目标不是只做一条后台脚本,而是做一个真正可运维的小系统。
这个项目最有意思的地方
如果只是做一个“收到评论后调用 AI 修代码”的 demo,其实并不难。software-factory 更有意思的地方,在于它开始认真处理真实系统才会遇到的问题。
1. 它把“触发”分成了内部和外部两类
内部触发来自 Claude Code Hook,用来确定性记录开发会话;外部触发来自 GitHub Webhook,用来感知 PR review 的变化。这种拆分让系统知道“什么时候发生了开发动作”,也知道“什么时候出现了新的修复需求”。
2. 它没有直接把 review 原文丢给 agent
Review Normalizer 的存在非常关键。真实 review 往往很零碎,来源也不统一,里面还混杂噪声、重复评论和优先级差异。先做归一化,再把结构化结果交给 worker,比直接让 agent 消化原始事件稳定得多。
3. 它开始考虑 agent 运行时的工程问题
从 agent_runner 这条链路里能看到很多现实约束:worktree、校验命令、预先存在的失败用例、重试、日志、取消、不同 agent mode 的切换。这些内容说明这个项目关心的不是“AI 能不能写一段代码”,而是“AI 能不能在工程系统里稳定地完成一次修复任务”。
4. 它是 local-first 的
这个项目默认就强调本地运行、共享 DB_PATH、轻量状态存储和可视化页面。这种 local-first 设计对个人开发者和小团队很友好:你可以先在自己的环境里把闭环跑通,再考虑是否要把它推向更大的部署形态。
它适合什么人
我觉得 software-factory 现在最适合下面几类场景:
- 已经在 GitHub 上做 code review,希望减少 review 后重复修复劳动的个人开发者
- 小团队或内部工具团队,想先把 PR 自动修复闭环跑起来,而不是先上完整平台
- 在尝试把 Claude Code、OpenCode、OpenHands 之类 agent 纳入研发流程的人
如果你的目标是做一个覆盖 CI/CD、权限、审批、租户隔离、复杂报表的企业平台,那它目前显然还不是那个方向。但如果你要解决的问题足够具体:把 review feedback 自动变成下一轮修复动作,那这个项目的切口其实很准。
接下来还可以往哪里走
从文档里的规划看,software-factory 下一步最值得期待的,不是继续堆页面,而是补齐几个真正影响可用性的能力:
- 更完整的 E2E 和压力测试
- 多仓库支持和更细的策略控制
- 融合 GitHub Actions 之类 CI 信号
- 为不同仓库生成可复用的 runtime image,减少每次 run 的环境准备成本
尤其是“按仓库构建可复用运行时镜像”这个方向,我觉得很有价值。很多 agent 系统失败并不是因为模型不会修,而是因为运行环境不稳定、依赖不完整、工作目录和真实项目不一致。要让自动修复从 demo 走向日常可用,这一步迟早得做。
写在最后
对我来说,software-factory 最重要的不是它用了 FastAPI、SQLite 还是某个具体 agent,而是它试图把一个很真实、很重复、也很容易被忽视的研发环节单独拿出来优化:PR review 之后的修复闭环。
如果说很多 AI 编码工具解决的是“怎么更快写出第一版代码”,那 software-factory 解决的问题更接近“怎么把代码真正推进到可以合并的状态”。而这一步,恰恰是团队协作里最容易反复消耗人的地方。
所以我会把它看成一个很典型的项目:它不是为了证明 AI 会不会写代码,而是想验证 AI 能不能在真实工程流程里,稳定地处理 review 反馈,并把后续修复一步步推进下去。