跳转到主要内容

定制 Workflow

.trellis/workflow.md 定义 Trellis 的开发流程:Phase 定义、skill 路由、每轮提醒、task.py 命令参考都在这一个文件里。Fork 工作流 = 改一个 markdown 文件,不用动 Python、不用改 hook、不用重发包。 0.5 之前,工作流行为分散在三处:hook Python 脚本、configurator TypeScript、命令 markdown;想 fork 一份”自己的工作流”得同时改三处才能自洽。0.5 把这三处收敛到 workflow.md 一个文件。

workflow.md 控制了哪些东西

所有注入路径都在运行时读 workflow.md——改完不用重 build。

改每轮面包屑

每轮注入的 <workflow-state> 块根据当前任务 status 提醒 AI 下一步该做什么。块本身和每个 phase 一起放在 ## Phase Index 下面,原地改即可。Hook 脚本只解析、不嵌内容,没有”内置兜底文案”可以漂移。
规则:
  • 标签 STATUS 对应 task.json.status。默认:planning / in_progress / completed,没活跃任务时走 no_task
  • 标签名短横线和下划线都支持(blocked / in-review / needs_qa 等)。
  • 某个状态没有匹配标签块时,hook 输出固定一行 Refer to workflow.md for current step.,AI 自己回去读 workflow 契约。用不到的块可以删。
  • task.py create 在写 status=planning 的同时也设置当前 session 的 active-task pointer,所以 [workflow-state:planning] 从下一轮就开始生效——brainstorm 和 planning artifact 阶段就能看到,不必等到 task.py start
  • 每个块保持简短(≈200 字节)。这是每轮都注入的,写长了 AI 每条消息都要付注意力代价。

加一个自定义状态

想要一个 blocked 状态,提醒 AI 不要硬猜而是先上报?
然后直接改 task.json 把状态设成 blocked
从下一条消息起,AI 每轮看到 blocked 面包屑。改回 in_progress 就恢复正常流。 task.py 的子命令只做默认状态流转(startin_progressarchivecompleted)。自定义状态在 task.json.status 里就是普通字符串——面包屑系统不要求预注册,task.py list --status <name> 也能按任意字符串过滤。

改 skill 路由表

### Skill Routing 下面的表是 AI 决定要不要加载 auto-trigger skill 时查的。
自己写了个 skill(见定制 Skill),在这里加一行就够:
不用改代码——下一个会话,AI 读到更新后的表就会按新路由选 skill。

加 / 改 Phase

Phase 段落都是普通 markdown。你可以:
  • 加一个 Phase 4: Review —— 定义 4.1、4.2 … step 和 how-to;再从面包屑引用([workflow-state:in_review])。
  • 把 Plan 拆成 A/B 两条分支 —— 把 step 编号改成 1A.1 / 1B.1;AI 按正文内容走。
  • 压缩 Finish —— 删你不关心的 step(比如去掉 3.2 debug retrospective)。
改完保持 Phase Index 和详细 Phase 段落同步——SessionStart 把两者都内联进去,AI 得看到一致内容。
get_context.py --mode phase --step X.Y 解析 ## Phase X 标题 + #### X.Y step 标题来提取正文。改名或改结构时,确保 step 锚点仍可解析(标题层级有语义)。

哪些东西不要

有几处约定被脚本依赖,改了会坏: 其他——措辞、顺序、加段、重写 how-to 正文——都可以随便改。

改动什么时候生效

Fork 不用重发包。把改过的 workflow.md commit 进仓库,团队下个会话就自动拿到新版。