用 K8s 理解 Trellis
如果你熟悉 Kubernetes,这篇文档会帮你快速理解 Trellis 的设计思想。
目录
一、K8s 核心概念速览
1.1 命令式 vs 声明式
命令式:描述”怎么做”| 维度 | 命令式 | 声明式 |
|---|---|---|
| 关注点 | 过程(How) | 结果(What) |
| 执行者 | 用户编排每一步 | 系统自动调谐 |
| 幂等性 | 需要额外处理 | 天然幂等 |
| 错误恢复 | 需要用户介入 | 系统自愈 |
1.2 控制循环
K8s 的核心是 控制循环(Control Loop):二、Trellis 与 K8s 的类比
2.1 架构对应
2.2 核心组件对照
| Kubernetes | Trellis | 说明 |
|---|---|---|
| YAML Manifest | Task 目录 | 声明期望状态 |
| Controller | Dispatch | 按阶段编排执行 |
| Reconciliation Loop | Ralph Loop | 验证未通过就继续循环 |
| Pod/Container | Agent | 实际执行单元 |
| ConfigMap | jsonl + Hook | 注入配置/上下文 |
| Actual State | 最终代码 | 经过调谐后的产物 |
2.3 关键洞察
K8s 解决的问题:基础设施的复杂性 —— 用声明式屏蔽底层细节,Controller 负责调谐。 Trellis 解决的问题:AI 开发的不确定性 —— 用声明式定义期望(prd.md + 规范),Ralph Loop 负责调谐。 两者的共同点:- 用户只声明”要什么”,不操心”怎么做”
- 系统持续调谐,直到实际状态符合期望
- 出现偏差时自动修复
接下来,第三章将详解调谐机制(Hook + Ralph Loop),第四章将展开完整工作流(Phase 1-4)。
三、调谐机制详解
Trellis 的调谐由两个机制配合完成:Hook 注入 和 Ralph Loop。3.1 Hook 注入
时机:每次调用 Subagent 时自动触发 作用:将 jsonl 中引用的文件内容注入到 Agent 的上下文- 避免上下文过载(Context Rot)—— 只注入当前阶段需要的内容
- 可追溯 —— jsonl 记录了每个 task 用了哪些上下文
- 解耦 —— Agent 不需要自己搜索,专注于执行
3.2 Ralph Loop
本质:一个程序化的质量门禁,拦截 Agent 的停止请求,验证未通过就强制继续。 触发时机:Check Agent 尝试停止时 流程:- 程序验证可靠 —— lint 通过就是通过,不依赖 AI 的判断
- 可配置 —— 不同项目可以配置不同的验证命令
- 防止无限循环 —— 最多 5 次迭代,超过强制放行
- 复杂的架构问题或逻辑 bug 可能需要人工介入
- 依赖规范文件的质量,规范不清晰则检查效果有限
四、完整工作流
4.1 阶段总览
4.2 异常路径
如果 Check Agent 报告无法修复的问题,Dispatch 可以调用 Debug Agent 进行深度分析。这不是默认流程,而是异常处理。五、为什么这样设计
5.1 一键启动完整工作流
/trellis:start 或 /trellis:parallel(Claude Code 专有)一键启动,AI 自动完成整个流程:
5.2 开发规范的持续沉淀
5.3 防止上下文腐烂
上下文过多会导致 LLM:- 分心(Distraction)—— 被无关信息干扰
- 混淆(Confusion)—— 信息相互矛盾
- 冲突(Clash)—— 新旧信息打架
- implement 阶段:需求 + 相关代码
- check 阶段:开发规范
- finish 阶段:提交检查清单
5.4 程序化质量控制
5.5 可追溯
| 记录 | 内容 |
|---|---|
| jsonl | 每个 task 用了哪些上下文 |
| workspace | 每次 session 的工作内容 |
| task.json | task 的完整生命周期 |
总结
| 概念 | K8s | Trellis |
|---|---|---|
| 期望状态 | YAML Manifest | Task 目录 (prd.md + jsonl) |
| 执行单元 | Pod/Container | Agent |
| 调谐循环 | Controller | Dispatch + Ralph Loop |
| 配置注入 | ConfigMap | Hook + jsonl |
| 最终产物 | Running Pods | 符合规范的代码 |