14 工作流与平台¶
目标¶
选择合适的工作流模板和人工智能平台,并安全预览工作流切换结果。
适用范围¶
适用于初始化时选择平台、现有项目增加平台,以及在默认流程、测试驱动流程和频道协作流程之间切换。
前置条件¶
- 已安装对应人工智能工具并完成登录。
- 项目已初始化或准备初始化。
- 切换工作流前已查看
.trellis/workflow.md(当前工作流)是否有本地修改。
操作步骤¶
- 查看正式命令支持的平台:
当前提供 Claude Code(Claude 代码工具)、Cursor(Cursor 编辑器)、OpenCode(开放代码工具)、Codex(代码代理平台)、Kilo CLI(Kilo 命令行工具)、Kiro Code(Kiro 代码工具)、Gemini CLI(Gemini 命令行工具)、Antigravity(Antigravity 工作流)、Windsurf(Windsurf 编辑器)、Qoder(Qoder 工具)、CodeBuddy(CodeBuddy 工具)、GitHub Copilot(GitHub 编程助手)、Factory Droid(Factory Droid 工具)和 Pi Agent(Pi 代理)模板。
这些平台的模板深度不同;“可初始化”不等于所有平台都有同等的钩子和子代理能力。
- 初始化时显式选择平台:
不指定平台且使用 -y(自动确认)时,当前默认选择 Claude Code(Claude 代码工具)和 Cursor(Cursor 编辑器)。
- 查看工作流模板:
当前列表包含内置 native(默认工作流),以及市场中的 tdd(测试驱动工作流)和 channel-driven-subagent-dispatch(频道驱动子代理工作流)。市场模板需要网络,内容来源可能随市场更新。
- 安全预览另一个工作流,不替换当前文件:
research-trellis workflow --template tdd --create-new
diff -u .trellis/workflow.md .trellis/workflow.md.new
确认后再执行替换:
Codex(代码代理平台)缺省为sub-agent(子代理)调度,与PreToolUse(工具使用前)的主代理只读门禁保持一致。需要钩子时,在用户级~/.codex/config.toml(Codex 用户配置)启用:
重启 Codex(代码代理)后运行 /hooks(钩子审阅),逐项检查并批准 .codex/hooks.json(Codex 钩子配置)中的工作流注入和 Hermes(科研工作流)门禁。旧版 Codex(代码代理)使用 codex_hooks = true(旧钩子开关)。项目未信任、功能开关未开、未经 /hooks(钩子审阅)批准,或设置 TRELLIS_HOOKS=0(关闭钩子)、TRELLIS_DISABLE_HOOKS=1(禁用钩子)时,注入和门禁都不生效。
项目模板为 Codex 0.144.0(代码代理 0.144.0 版)及以上版本设置默认模型:主代理以及 planner/researcher/reviewer(规划、检索和复核代理)使用 gpt-5.6-sol(推理模型)和 high(高推理强度),coder/runner(编码和运行代理)使用 gpt-5.6-terra(执行模型)和 max(最大推理强度)。初始化和更新只维护两个带 Trellis 标记的配置块,分别保存顶层默认值和平台表配置;未标记的用户配置会原样保留并与受管块合并,用户自行选择的项目模型在更新和卸载时都不会被当成 Trellis 默认值删除。旧版 Codex(代码代理)只显示兼容警告,不阻止初始化。
codex.dispatch_mode: inline(Codex 主会话路由)是显式兼容模式,只改变普通 Trellis 提示路由,不会绕过已启用的 Hermes 写入和结束门禁,也不会提供操作系统隔离。
v0.7.1-beta.3(当前测试版)的 closure 任务仍可在各平台读取 Task Capsule(紧凑任务上下文),但可执行的 Agent Context Firewall(代理上下文防火墙)只正式支持 Claude Code(Claude 代码工具)和 Codex(代码代理平台)。其他平台保留原有 Trellis 上下文和代理行为,不宣称具备派发替换、结构化返回或状态确认门禁。
五个正式 Hermes(科研工作流)角色模板目前只为 Claude Code(Claude 代码工具)和 Codex(代码代理平台)提供。Claude Code(Claude 代码工具)可使用已批准的 PreToolUse / SubagentStop / PostToolUse(工具前、子代理结束、工具后)钩子完成派发替换和结果净化;Codex(代码代理平台)使用相同的紧凑派发与结果契约,并通过项目钩子限制主代理写入、直接执行和提前结束。Codex 的子代理输入仍依赖协议,不宣称完全硬隔离。
用户入口¶
科研版只保留少量用户可见入口。主代理先根据任务状态、当前工作包和自然语言请求自动路由;命令和技能只是明确入口或兼容入口,不能绕过状态、审计和人工决策门禁。
| 入口 | 用途 | 说明 |
|---|---|---|
continue(继续任务) |
恢复活动任务 | 读取紧凑任务状态并只推进下一动作 |
status(查看状态) |
查看阶段、工作包、阻塞和下一动作 | 只读,不会改变任务状态 |
handoff(写入交接) |
在暂停、切换会话或压缩上下文前生成交接摘要 | 推荐下发子代理写入 HANDOFF.md(交接摘要),不会关闭任务 |
finish-work(完成收尾) |
审计、关闭并归档已完成任务 | closure 任务必须先通过审计和关闭门禁 |
start(启动会话) |
兼容没有会话开始钩子的环境 | 支持钩子的主会话通常自动完成启动 |
Claude Code(Claude 代码工具)和其他原生命令平台会把这些入口显示为平台的命令形式;Codex(代码代理平台)使用同名技能入口。命令前缀由平台决定,不应把某个平台的前缀复制到另一个平台。
建议用户主动理解和调用的技能只有 grill-me(聚焦讨论)和 update-spec(更新规范)。其他技能按科研阶段和实际工作触发,不设每轮固定数量:需求确有缺口才使用 brainstorm(问题梳理);代码工作包才使用 before-dev(开发前准备)和 check(代码检查);tdd(测试驱动)必须由用户或任务策略明确选择;break-loop(失败归因)只处理重复技术失败;软件架构技能不能代替科研模型设计;正式实验和证据记录使用 hermes-research(科研记录)。技能不替代 closure 的状态、审计和关闭门禁。
- 逐平台能力和限制如下。“子代理”表示仓库会安装对应代理模板;“门禁”专指
hermes-runtime-guard.py(Hermes 运行时门禁),不包括只做上下文注入的同名钩子事件。
| 平台 | 主会话上下文 | 子代理与上下文 | PreToolUse / Stop(门禁) |
启用条件与限制 |
|---|---|---|---|---|
Claude Code(Claude 代码工具) |
SessionStart + UserPromptSubmit(会话开始和用户提交) |
正式 Hermes Agent 只传 job_id(工作编号),钩子替换提示并净化结果 |
完整 | 需平台读取项目设置;异步 Hermes Agent 被拒绝;环境开关可关闭 |
Cursor(Cursor 编辑器) |
sessionStart(会话开始)注入 capsule 和命令行上下文 |
支持;Task / Subagent(子代理工具)前推送 |
无 | 没有每轮 capsule;只有平台实际触发 .cursor/hooks.json(Cursor 钩子)时才注入 |
OpenCode(开放代码工具) |
chat.message(会话消息)注入会话摘要、每轮状态和 capsule |
支持;代理按派发首行自行读取 | 无 | 依赖 OpenCode 插件被实际加载;会话检索功能仍未实现 |
Codex(代码代理) |
UserPromptSubmit(用户提交),无会话开始注入 |
使用紧凑派发与结果文件,直接在当前工作区执行 | 写入、登记命令和结束条件 | 钩子需用户级开关、项目信任和 /hooks(钩子审阅);派发输入仍为协议约束 |
Kilo CLI(Kilo 命令行) |
手动运行 capsule | 无,主会话执行模板 | 无 | 依赖工作流文件和手动读取 |
Kiro Code(Kiro 代码工具) |
无通用主会话注入 | 支持;agentSpawn(代理创建)时推送 |
无 | 只注册代理创建钩子,无会话开始和每轮主会话钩子 |
Gemini CLI(Gemini 命令行) |
SessionStart + BeforeAgent(会话开始和代理前) |
支持;代理前置说明拉取 | 无 | 依赖 .gemini/settings.json(Gemini 设置)的当前钩子协议 |
Antigravity(Antigravity 工作流) |
手动运行 capsule | 无,主会话执行模板 | 无 | 依赖工作流和技能文件 |
Windsurf(Windsurf 编辑器) |
手动运行 capsule | 无,主会话执行模板 | 无 | 依赖工作流和技能文件 |
Qoder(Qoder 工具) |
SessionStart + UserPromptSubmit(会话开始和用户提交) |
支持;代理前置说明拉取 | 无 | 平台钩子失效时必须依赖派发首行 |
CodeBuddy(CodeBuddy 工具) |
SessionStart + UserPromptSubmit(会话开始和用户提交) |
支持;Task(代理工具)前推送 |
无 | 其 PreToolUse(工具前)只用于上下文,不是 Hermes(科研工作流)门禁 |
GitHub Copilot(GitHub 编程助手) |
SessionStart + userPromptSubmitted(会话开始和用户提交) |
支持;代理前置说明拉取 | 无 | VS Code(代码编辑器)代理钩子仍属预览能力,是否消费注入取决于安装版本 |
Factory Droid(Factory Droid 工具) |
SessionStart + UserPromptSubmit(会话开始和用户提交) |
支持;Task(代理工具)前推送 |
无 | PreToolUse(工具前)只用于上下文 |
Pi Agent(Pi 代理) |
TypeScript(TypeScript 扩展)在会话、输入和代理前注入 |
支持;扩展直接构造任务上下文 | 无 | 不安装 Python(Python 语言)平台钩子;依赖 pi-subagents(Pi 子代理包)和扩展加载 |
预期结果¶
平台文件按选择写入,工作流列表可读;使用 --create-new(创建新副本)时只生成 .trellis/workflow.md.new(工作流候选),原工作流不变。
失败恢复¶
- 只是
workflow --list(工作流列表)时市场失败:列表仍保留内置native(默认工作流)并显示警告。显式选择市场模板时,索引或文件下载失败会终止,不会静默改用native(默认工作流)。 - 工作流有本地修改:优先生成
.new(新副本)比较,不要直接--force(强制替换)。 - 平台没有自动注入:核对上表是否支持钩子、钩子是否启用,以及初始化是否真的选择了该平台;不支持自动注入的平台应按派发协议手动读取。
- 添加平台时已有配置:重复运行
research-trellis init --平台参数(平台初始化)会跳过已配置平台。
验证记录¶
- 日期:2026-07-15。
- 版本:
0.7.1-beta.3(测试版)。 - 更名前基准提交:
9f7dc8497b4782878d6fa7ac3b63eba5bde507df。 - 命令:
rg -n -m 1 "dispatch_mode|agentCapable|hasHooks" packages/cli/src packages/cli/test(平台能力核对)。 - 结果:常规平台能力表保留;代理上下文防火墙的正式范围收窄为 Claude Code 和 Codex,并使用相同的最小上下文语义。
- 未验证项:本轮未启动 14 种平台主机,也未访问远程工作流市场。