这是篇内部分享。我自己从 vibe coding → Superpowers → GSD → vibe coding → Trellis 绕了一大圈,终于觉得找到了顺手的路子。下面是我现在的判断和具体做法,希望大家也能用起来。


一、为什么 AI 在前端开发里总差点意思?

这个问题我一直在纠结,现在的 AI ,不论是 Gemini、Claude,为啥 UI 总是千篇一律?为何审美总是不让人满意?AI 最终到底能否生成设计师级别的界面?

AI 最擅长的是“纯逻辑”

大模型在处理有明确输入输出的事情上,确实很强:写个函数、做个算法、处理数据、设计 API、写状态机……只要你把意图说清楚,AI 基本能一次写对,而且这个代码 AI 是有判断是否成功的一套标准的,就像理科,1+1 是确定的。

前端的业务逻辑部分也一样——数据请求、状态管理、工具函数,AI 写得又快又好。

但 AI 真的“看不见”界面

前端有大量工作不是纯逻辑:布局、间距、动画、响应式、视觉层次……

这里有个根本性的问题。

图像生成模型(比如 DALL-E、Midjourney、nano banana)是用真实图片训练的,它们对像素、构图、色彩有“直觉”。但大语言模型是用代码文本训练的,它看到的永远是 padding: 11px 这串字符,从来没真正感受过 11px 和 12px 在屏幕上差了多少。

它知道“平均意义上的好看”——因为读过无数 CSS 教程和 UI 库文档——但它完全不懂像素级的视觉决策。

所以现实就是:

  • 让 AI 写按钮的点击逻辑 → 很OK
  • 让 AI 调整按钮的视觉细节(内边距、阴影、hover 过渡时长)→ 你得不停地说“再大一点”、“阴影淡一点”,AI 每次都是在盲猜
  • 让 AI 做交互验收 → 它跑 lint 能过,但它根本不知道做出来的的 hover 动画是不是让人看着舒服,整个页面的布局是否融洽。

验收能力的天花板

这也是我放弃 Superpowers 的核心原因之一:它的质量体系建立在 TDD 上,但前端有太多东西是单元测试覆盖不到的

UI、交互,这些必须你亲自打开浏览器,点一遍看看。AI 帮你跑 typecheck 当然好,但别指望它能替你做视觉验收。

我的结论:在前端,AI 是超强的逻辑实现引擎,但不是视觉判断者。我们的工作流得建立在这个认识上,别假装 AI 什么都能干。


二、更深的问题:AI 其实不会“写代码”

这话似乎有点“过分”,AI 不是一直在帮我们写代码吗?但我觉得是事实。

AI 确实能写出“语法对、功能能用”的代码片段。但工程化的能力,它基本没有

  • 没有全局观:它不知道项目里已经有一个类似的工具函数,于是又写了一个
  • 没有架构判断:它不知道该把这个组件放 shared/ 还是 features/auth/
  • 没有历史记忆:两周前你们刚决定不用 useContext 做全局状态,改用 Zustand,AI 不知道,下次又写 Context
  • 没有演化意识:它写的代码能跑,但在你们项目的约定里就是个“异类”
  • 对话一结束就失忆:上一个 session 建立的所有上下文,新 session 一开全忘干净

这就是为什么 vibe coding 对个人开发者能 work(因为架构在自己脑子里),但对团队就不行——团队的知识、约定、决策不能只靠某一个人的脑子。

AI 需要的不是更聪明,而是被框在一个知识框架里,有人告诉它:这个项目的规则是什么,过去发生了什么,现在在哪个阶段,接下来该做什么。

这就是 Trellis 存在的意义。


三、为什么 Superpowers 和 GSD 没能解决问题

Superpowers

它的优点是真的:强制 AI 在写代码前先走设计流程,避免“收到需求就开写”。

但我遇到了两个硬伤:

1. 没有持久记忆。每个 session 是孤立的,设计文档、历史决策、团队约定——都不会自动带入下一次对话(除非你手动提及)。今天定的架构方向,明天的 AI 完全不知道。

2. TDD 和前端不太搭。Superpowers 的核心质量机制是测试驱动开发,但前端的验收难点不在单元测试,而在浏览器里的真实交互。强制 RED-GREEN-REFACTOR,在前端很多场景下就是浪费 token。

GSD

GSD 解决的是“context rot”——对话变长后 AI 丢失方向的问题。思路对,把工作拆小,在干净的上下文里执行。

但它本质上是个上下文管理工具,不是项目管理工具。它没回答:团队共识存在哪?规范怎么沉淀?新人怎么快速上手?多人协作怎么不踩坑?

Superpowers 和 GSD 都把 AI coding 当成“一次对话”,而 Trellis 把它当成“持续进行的工程工作”。


四、Trellis 的设计哲学:给 AI 一个可以随时加载的大脑

Trellis 的核心洞察很清晰:AI coding 本质是工作流和知识管理问题,不是聊天问题。

它由两套系统构成,共享同一批文件:

.trellis/
├── spec/           ← 团队规范库(AI 的长期记忆)
├── tasks/          ← 任务驱动的需求文档(AI 的工作上下文)
├── workspace/      ← 每个开发者的 session 日志(AI 的短期记忆)
└── workflow.md     ← 工作流契约(AI 的行为边界)

整个目录通过 git 管理,是团队共享的知识资产。

每次打开新 session,AI 不是从零开始——它从文件里重新加载:你是谁、上次做了什么、项目有哪些规范、现在的任务到哪一步了。这就解决了“AI 每次都是新生儿”的痛点。

Trellis 对 AI 的约束方式也很巧妙:它不是塞一大段 prompt 告诉 AI “你应该怎样”,而是用 JSONL 精确控制每个 agent 在执行具体任务时能看到哪些上下文

// implement.jsonl — 实现这个任务前 AI 必须先读这些文件
{"file": ".trellis/spec/frontend/component-guidelines.md", "reason": "组件规范"}
{"file": ".trellis/spec/frontend/state-management.md", "reason": "状态管理约定"}
{"file": "src/components/UserCard/", "reason": "现有组件写法参考"}

这意味着 AI 在动手之前,已经知道了这个任务需要的所有规则,而不是靠“你是一个优秀的前端开发者”这种空话。


五、我是怎么用 Trellis 的(具体步骤)

第一步:初始化(只做一次,但最重要)

npm install -g @mindfoldhq/trellis@latest
cd 你的项目
trellis init -u yourname

初始化后,AI 会分析现有代码,帮你把已有的规范提取到 .trellis/spec/ 的模板里。重点要填这几个文件:

.trellis/spec/frontend/
├── component-guidelines.md   # 组件写法:函数式还是类组件、Props 规范、禁止事项
├── state-management.md       # 状态管理:Zustand/Context 的使用边界
├── type-safety.md            # TypeScript 规范:any 怎么处理,类型声明放哪
└── directory-structure.md    # 目录结构:按功能分还是按类型分

规范质量直接决定 AI 输出质量。好的规范长这样:具体、有代码示例、有禁止项、有原因。

### 状态管理约定

**原则**:组件内状态用 useState,跨组件共享用 Zustand store,禁用 Context 做业务状态。

**原因**:Context 在大项目里容易导致非预期的重渲染,统一用 Zustand 方便调试。

**示例**
- ✅ `const { user, setUser } = useUserStore()`
- ❌ `const { user } = useContext(UserContext)`

第二步:日常任务流

打开 Claude Code → Hook 自动触发,AI 从文件里加载上下文:

Hi yourname!昨天完成了登录页(commit abc1234),
包括 LoginForm 组件、JWT 拦截器、接口对接。
今天想做什么?

描述任务 → AI 先建文档,再写代码:

“做用户资料页,支持修改头像和昵称”

AI 不会立刻写代码,而是先在 .trellis/tasks/05-20-user-profile/ 里创建:

  • prd.md:需求说明和验收标准
  • info.md:技术设计(用什么组件模式、改哪些文件)
  • implement.jsonl:本次任务要读的 spec 清单

这时候你可以介入了。看一眼 prd.md,确认 AI 理解对了需求,再让它继续。这是“面向文档开发”的核心——你审查的是意图和规则,而不是盯着 AI 一行一行写代码。

实现阶段 → AI 按 spec 写代码,你不用盯着。

前端特有的验收分工

AI 验收:
  ✓ lint 通过
  ✓ typecheck 通过
  ✓ 组件结构符合 component-guidelines
  ✓ 状态管理符合 state-management 约定

你来验收(打开浏览器):
  □ 头像上传预览正常吗
  □ 昵称输入框 focus/blur 动画流畅吗
  □ 移动端布局对吗
  □ 错误状态(网络失败、格式不对)显示合理吗

完成后运行 /trellis:finish-work

AI 会自动把本次任务里发现的新规律写进 spec。比如这次做了头像上传,发现了一个通用的文件处理模式,就沉淀进去:

### 文件上传模式

选文件后用 FileReader 做本地预览,上传成功后用返回的 URL 替换本地 blob,
避免上传后二次请求。参考 AvatarUpload 组件实现。

下次任何人做文件上传相关功能,AI 都会自动遵守这个模式。

第三步:团队协作

# Alice 做完功能,spec 自动更新了
git add .trellis/spec/
git commit -m "docs: add avatar upload pattern"
git push

# Bob pull 之后,AI 自动继承 Alice 的所有规范
git pull
# /start → AI 读到最新的 spec,Bob 的代码自然和 Alice 的风格一致

每个人有独立的 workspace journal,互不干扰。Spec 变更建议走 PR,像对待代码一样认真。


六、省 token 的小技巧:RTK + CodeGraph

Trellis 本身已经通过 JSONL 精确控制上下文,但 Claude Code session 里还是有很多 token 浪费在命令输出的噪音上。配合两个工具能省不少钱。

RTK(Rust Token Killer)

原理:坐在 AI 和 shell 之间,拦截命令输出,过滤掉所有对 LLM 没用的噪音,把压缩后的结果传给 AI。

不用 RTK:
  git status → 40 行输出 → AI 看到 ~2000 tokens

用 RTK:
  git status → RTK 过滤 → AI 看到 ~200 tokens(“ok main, 3 modified”)

我实测过:一个 30 分钟的 Claude Code session,token 使用从约 150k 降到约 45k,省了 70%

安装很简单,零侵入——它通过 Claude Code 的 PreToolUse hook 透明拦截,你照常用 git status,AI 自动收到压缩版:

# 安装
brew install rtk-ai/tap/rtk
# 然后在 Claude Code 里启用 hook,之后什么都不用改

省 token 最明显的场景:测试命令(只显示失败的,通过的折叠)、git diff(去掉空行和无意义变更)、ls(只显示文件名,去掉权限/时间戳)。

CodeGraph

原理:AI 探索陌生代码库时,要反复调用 grep、glob、Read 来理解结构——每次调用都消耗 token,而且 session 结束后这些“知识”全消失,下次又要重新探索。

CodeGraph 用 tree-sitter 预先把代码库解析成符号关系图(函数调用、类继承、模块依赖),存在本地 SQLite 里,通过 MCP 暴露给 AI。

不用 CodeGraph:
  AI 要找 UserService 的所有调用方
  → grep、glob、Read 反复调用 52 次
  → 花 3 分钟,消耗一堆 token

用 CodeGraph:
  AI 调用 codegraph_explore("UserService")
  → 一次查询,立刻返回完整调用关系
  → 94% 更少的 tool calls,速度快 77%

实测数据(跨 7 个真实开源项目):平均节省 35% 费用、59% 更少 token、70% 更少 tool calls。

# 安装
npx @colbymchenry/codegraph init -i
# 之后每次代码变更后 sync 一下
codegraph sync

三者结合的效果

Trellis JSONL:只给 AI 本任务需要的 spec(不把整个仓库塞进去)
     +
RTK:过滤命令输出噪音(git/test/ls 的冗余内容)
     +
CodeGraph:代码结构查询从文件扫描变成图查询(大幅减少 explore tool calls)
     ↓
一个正常 session 的 token 使用能降低 60-80%

七、我的一点核心感悟:面向文档开发

在一个人 vibe coding 的那段时间,我发现一个有意思的现象:即使没有任何工具辅助,只要我脑子里有清晰的架构,通过对话也能做出质量不错的代码。

但这个“脑子里的架构”没法传给团队,也没法传给下一个 AI session。

所以我越来越觉得,在 AI coding 时代,文档的重要性已经超过了代码本身

  • 代码是文档的执行结果,AI 可以从文档生成代码
  • 但文档需要人来定义、审查、维护
  • 文档错了,代码就错;文档准确,代码就对

我们的工作模式可以变成:

我们定义文档(需求、规范、架构决策)
    ↓
AI 根据文档生成代码
    ↓
我们审查:文档是否准确?代码是否符合文档?
    ↓
发现新规律 → 更新文档 → 下次 AI 自动遵守

Trellis 把这个循环工程化了。.trellis/spec/ 是活文档,随着每次任务结束自动更新;.trellis/tasks/ 是需求文档,开发前先有文档再有代码;workflow.md 是工作流契约,约束 AI 在什么阶段做什么。

我们不再是写代码的人,而是定义规则、审查规则、保持规则更新的人。

这不是让我们变懒——而是把时间花在机器做不好的地方:架构判断、视觉决策、交互验收、规范制定。这些才是前端工程师真正的价值。


八、给团队的一点建议

现在就可以做的

  1. 找一个项目 trellis init,把现有规范整理进 .trellis/spec/
  2. 装 RTK,Claude Code session 立刻省钱
  3. 仓库大的话考虑加 CodeGraph,减少探索成本

值得养成的习惯

  • 每次 finish-work 的时候认真看 AI 提议更新哪些 spec,这是知识沉淀的关键时刻
  • Spec 变更走 PR,像对待代码一样对待规范
  • 新功能开始前先看 prd.md,而不是直接看代码

需要调整的预期

  • AI 验收 lint/typecheck,人工验收交互体验——这个分工很合理,别指望 AI 替你点浏览器
  • Spec 写得越细,AI 越听话;写得越模糊,AI 越凭感觉——投入写规范是 ROI 最高的事情

附:工具清单

工具作用安装
Trellis项目 wiki + AI 工作流约束npm install -g @mindfoldhq/trellis
RTK过滤命令输出噪音,省 60-90% tokenbrew install rtk-ai/tap/rtk
CodeGraph预索引代码关系图,减少 explore tool callsnpx @colbymchenry/codegraph init -i

以上基于 Trellis v0.5、RTK v0.28、CodeGraph 最新版,详细可参考 docs.trytrellis.app