跳转到主要内容
0.6.0-rc.0 的稳定版升级,src/ 无新增改动。v0.6.0 相对 0.5.x 是 breaking release —— trellis channel 多 agent 协作运行时、trellis mem 跨会话记忆 CLI,以及把 channel / task / mem 原语提取到 @mindfoldhq/trellis-core SDK。
多 agent 协作在 v0.6 升为一等原语。 trellis channel 提供 worker-supervisor 运行时(Claude stream-json + Codex app-server adapter)、~/.trellis/channels/ 下的持久事件日志、forum / thread 风格 issue 板、默认 OOM 防护,以及 @mindfoldhq/trellis-core/channel 暴露的生命周期 / 订阅 API。trellis init / trellis update 现在会把内置的 check / implement agent 定义自动下发到每个新装项目,因此 trellis channel spawn --agent check 开箱即用。详见下方 “多 agent 协作” 段。
Codex 用户 —— 0.6.0 升级注意事项:
  • [features.multi_agent_v2] 块在 0.6.0 移除(beta.21) —— Codex CLI 在 0.130 与 0.131 之间改了 features 反序列化协议,结构化表格只在 0.131+ 加载;0.130 及更早(含 Codex 桌面版自带 CLI)会报 data did not match any variant of untagged enum FeatureToml… 并中断 config 加载。trellis init / trellis update 不再写这个块 —— 使用 Codex 自身默认值。如有需要请在 ~/.codex/config.toml 自行调整。
  • codex.dispatch_mode: inline 成为默认(beta.1) —— Codex sub-agent 跑 fork_turns="none" 隔离模式,无法继承父会话的 task 上下文。现在主 Codex agent 直接改代码。需要 sub-agent dispatch 可在 .trellis/config.yaml 设置 codex.dispatch_mode: sub-agent 重新开启。
0.6.0 新支持平台:
  • Reasonix(DeepSeek-Reasonix) —— 第 15 个支持的 AI 编码工具,通过 trellis init --reasonix 启用。Skills 放在 .reasonix/skills/<name>/SKILL.md;slash 命令是平台内建。Sub-agent 形态 skill 带 runAs: subagent frontmatter 跑隔离 subagent 循环。关闭 #301
  • Pi Agent —— 原生 trellis_subagent 扩展 —— Pi 暴露 trellis_subagent(避开与社区包 subagent 的命名空间冲突),支持 single / parallel / chain dispatch 模式、原生进度卡片(Alt+O 详情视图)、节流实时更新、Trellis-agent 校验。关闭 #286#290
OpenCode 用户 —— reader 暂时不可用:
  • trellis mem 在 OpenCode 1.2+ 返回空 —— OpenCode 1.2 把会话存储改为 SQLite。beta.3 加了 SQLite reader 但其 better-sqlite3 原生依赖在无 C 工具链的机器上安装失败,beta.4 已回退。trellis mem list / search / extract 在 OpenCode 路径上返回空并打印一次性 stderr 警告;Claude 与 Codex 路径不受影响。完整 OpenCode reader 重做延后到 v0.6.0 之后。
GA 切口的已知上游问题(Trellis 侧暂不修复):
  • OpenCode 1.2+ SQLite 会话 reader —— 详见上方 <Note>,追踪到 v0.7+。
  • 延后到 v0.6 之后的 feature 请求 —— #193#318#320#325#326 等 tracker item 按 rc.0 切口明确推到 v0.7 或更晚。

多 agent 协作

Channel runtime —— 初版 CLI + adapter + 事件存储

trellis channel create | send | wait | spawn | run | list | messages | kill | rm | prune 是 v0.6 的核心新增。Claude stream-json 与 Codex app-server JSON-RPC adapter 把 provider 输出统一归一为 message / progress / done / error 事件,落盘到 ~/.trellis/channels/<project>/<channel>/events.jsonl,序号通过 lock 文件原子分配。

Thread / forum channel —— 持久 issue 板 / 论坛

事件型 channel 是一次性流;--type threads--type forum 提供持久的 issue / thread 风格讨论板,单 thread 有稳定 context:
  • channel post | threads | thread | forum 子命令族
  • channel context add | delete | list 管理稳定上下文
  • channel title set | clearchannel thread rename
  • 事件可携带 --description--context-file--context-raw(兼容旧的 --linked-context-* 别名)

--scope project|global 解析

每个 channel 子命令都接受 --scope project|global,显式指定存储到项目桶还是全局桶 —— 之前只能写项目桶。

Worker 协调 —— wait 多 kind 过滤、超时预警、inbox API

  • channel wait --kind done,killed 支持多 kind 过滤
  • channel spawn --warn-before <duration> 在结束前发出 supervisor_warning 事件(默认 5 分钟提前量,0ms 可关闭)
  • @mindfoldhq/trellis-core/channel 导出 worker 生命周期 / 订阅原语:listWorkerswatchWorkersspawnWorkerrequestInterruptinterruptWorkerreadChannelEventswatchChannelsreadWorkerInboxwatchWorkerInboxWorkerInboxErrormatchesInboxPolicy
  • Codex worker 在 done 之前先记录完成的回答,且对非 interrupt 轮做 turn 序列化(turn_started / turn_finished / interrupt_requested / interrupted

Channel worker OOM 防护

长期运行的 worker 进程可能堆积撑爆内存。新增默认守卫:channel.worker_guard.idle_timeout(5 分钟)与 channel.worker_guard.max_live_workers(6)。每次 spawn 可通过 --idle-timeout / --max-live-workers 覆盖,也可走环境变量(TRELLIS_CHANNEL_WORKER_IDLE_TIMEOUTTRELLIS_CHANNEL_MAX_LIVE_WORKERS)。空闲 worker 被 kill 时事件 reason: "idle-timeout";turn 中的 worker 不会被 kill。

消息路由清理 + 持久 idempotency

Tag-based 路由跨 send.ts / wait.ts / provider adapterTag 仅保留在 channel events、worker inbox policy 与显式 to
重复写入产生重复 undeliverable 事件sendMessagepostThread 支持 idempotencyKey:同 key 重写返回原始 JSONL 事件,不产生 dup
Interrupt 走通用 adapter 编码Interrupt 独立 adapter 编码

Codex streaming deltas

Codex channel worker 现在透出 streamed item/agentMessage/delta 内容,progress 事件携带 detail.kindoutput|commentary|reasoning)、detail.stream_iddetail.phasedetail.text_delta。消费者按 stream_id 聚合 delta,把 kind:"message" 作为最终完整答案。

Channel runtime agent 定义自动下发

trellis channel spawn --agent check 之前会在切换到 channel-driven-subagent-dispatch 工作流后报 Agent 'check' not found —— 因为没有命令负责下发 .trellis/agents/{check,implement}.md(关闭 #323)。现在 trellis init / trellis update 默认把平台无关的 .trellis/agents/{check,implement}.md 写到每个新装项目。trellis workflow --template <id> 在工作流引用了缺失的 .trellis/agents/<name>.md 时打印非阻塞警告(检测见 utils/agent-refs.ts)。

Memory (trellis mem)

初版 trellis mem CLI

AI 之前无法回忆 Claude Code / Codex / OpenCode 的历史会话内容 —— 历史只锁在各平台磁盘格式里。新增 trellis mem list | search | context | extract | projects 直接读各平台的会话文件,剥离 hook 注入 / AGENTS.md 前言 / 工具调用噪声,支持 --since--cwd--platform--json 过滤。处理 Claude compaction 摘要与 Codex compacted 事件。84 个单元测试;语句覆盖率 81.89%。

--phase brainstorm|implement|all 切片

AI 回忆某个历史 task 时往往只想要规划讨论或只想要实现部分,不需要全 transcript。mem extract <id> --phase brainstormtask.py createtask.py start 之间;--phase implement 是反过来;--phase all 是默认。多 task 会话以 --- task: <slug> --- 分隔。Claude 和 Codex 支持;OpenCode 回退到完整对话。mem list / mem extract 速度提升 5–9×。--phase 解析器处理 $(... --slug NAME) 替换、单条 Bash 命令多次调 task.py、以及 commit-message heredoc 里出现 task.py start

跨日 session 窗口正确性

29MB Claude 会话从 N–1 日开始、仍在 N 日写入时,--since <N 日> 返回 0 条匹配,尽管会话当日实际写了 19 条匹配 turn。过滤逻辑从 “session 创建时间落在区间” 改为 inRangeOverlap(start, end, filter) —— [created, updated][since, until] 有交集就匹配。移除了错误优化的 codex filename-ts 短路。新增 23 个测试覆盖 5 种区间关系 × 3 个平台。

OpenCode 1.2+ reader → 降级

beta.3 加了 SQLite reader,但 better-sqlite3 原生依赖在无 C 工具链的机器上安装失败,beta.4 回退。OpenCode 路径的 tl mem list / search / extract 现在返回空并打印一次性 stderr 警告。Claude 和 Codex 路径不变。完整 OpenCode reader 重做延后到 v0.6.0 之后。

Core mem API 入 SDK

@mindfoldhq/trellis-core/mem 导出 listMemSessionssearchMemSessionsreadMemContextextractMemDialoguelistMemProjects,各平台 adapter 在 packages/core/src/mem/adapters/ 下。CLI 退化为薄壳。

内置 trellis-session-insight skill

AI 即使在用户清晰表达 “我们之前讨论过” 时也不一定会主动调 trellis mem。新增内置 skill 教 AI 何时调用 trellis mem(过往方案回忆、决策检索、跨会话延续、熟悉 bug 调试、自我模式识别、finish-work 复盘),中英文触发短语逐字保留。故意不规定固定回写文件 —— AI 当下判断是直接引用 / 更新 prd.md / design.md / 交给 trellis-update-spec 等。自动下发到所有支持平台。

SDK 提取 (@mindfoldhq/trellis-core)

Core SDK 包

Channel 与 task 原语之前锁在 CLI 二进制里,Node 消费者和外部集成拿不到。新发布的 @mindfoldhq/trellis-core 包暴露 /channel/task/testing 子路径导出。CLI 依赖它;两个包共享一个 git tag、一个 npm dist-tag、一个 release 版本号。

双包发版流水线

环节实现
发版顺序.github/workflows/publish.yml 先发 @mindfoldhq/trellis-core 再发 @mindfoldhq/trellis
Preflight / bump / publishrelease-preflight.jsbump-versions.jsrelease.js 适配双包
发版后校验verify-npm --package all 校验两个包都已在公共 npm 注册表

可复用 channel + mem API

@mindfoldhq/trellis-core/channel/mem 暴露上面 1d 与 2e 提到的生命周期 / 订阅 / inbox / 检索原语。

平台覆盖

  • 总计 15 个平台。新增:Reasonix(DeepSeek-Reasonix),通过 trellis init --reasonix 启用。Sub-agent 形态 skill 带 runAs: subagent frontmatter,Reasonix 把它们当隔离 subagent 循环 spawn。/skill trellis- cmdRefPrefix{{CMD_REF:start}} 解析为 /skill trellis-start(关闭 #301)。
  • Pi Agent 扩展成熟:新增 trellis_subagent 工具(避开 subagent 命名空间冲突),支持 single / parallel / chain dispatch 模式,原生进度卡片(renderResult,按 THROTTLE_MS 节流),Alt+O 详情视图,isTrellisAgent() 校验,有界 stdout/stderr 缓冲。<workflow-state><session-overview> 每次 inputbefore_agent_start 自动注入。项目级 .pi/settings.json 覆盖防止全局 npm:pi-subagents 干扰当前 Trellis 项目(关闭 #246、#249)。
  • Codex dispatch 默认改为 inline(原 sub-agent)。codex-inline / codex-sub-agent 虚拟平台驱动正确的 workflow.md 分支;UserPromptSubmit 里的 <codex-mode> banner 标明当前模式。.codex/config.toml 不再写 [features.multi_agent_v2] 块 —— 使用 Codex 自己的默认值(修复 Codex CLI ≤ 0.130 config 加载中断)。
  • OpenCode TRELLIS_CONTEXT_ID 按 shell dialect 选前缀:PowerShell $env:TRELLIS_CONTEXT_ID = …、Git Bash / MSYS / Cygwin export TRELLIS_CONTEXT_ID=…、其余 env TRELLIS_CONTEXT_ID=…。Sub-agent 上下文隔离;active task 通过 session context / Active task: 提示 / 单会话回退解析。
  • Cursor sessionStart 顶层发 additional_context(Cursor 期待的 schema);移除不支持的 beforeSubmitPrompt hook 与拷过来的 inject-workflow-state.py
  • GitHub Copilot SessionStart 不再携带过时的 systemMessage;走支持的 hookSpecificOutput.additionalContext

工作流 + 规划

之前 Trellis 每轮都会静默创建 task,连闲聊都不放过,把任务列表污染严重。现在无 task 状态下的轮次会先做请求分类:
  • 简单 / 小:只问要不要建 Trellis task;不建就跳过 Trellis
  • 复杂:请求许可建 task 并进入规划;拒绝则澄清范围或建议拆得更小

规划工件 (prd.md / design.md / implement.md)

复杂 task 不再把所有内容塞进单一 PRD。task.py create 默认建 prd.md。复杂规划走:
  • prd.md —— 需求、约束、验收标准、不在范围内
  • design.md —— 边界、数据流、契约、tradeoff
  • implement.md —— checklist、验证命令、review gate
task.py start 之前完成。implement / check 的上下文加载顺序在 hook-push、pull-prelude、Pi 扩展、OpenCode plugin、inline 五种模式下保持一致:jsonl entries → prd.md → design.md → implement.md

父子 task 树

.trellis/workflow.mdget_context.py --mode phase --step 1.1 文档化了带独立可验证子任务的父任务树用法。[workflow-state:planning][workflow-state:planning-inline] breadcrumb 同步更新。trellis-brainstormtrellis-meta skill 涵盖该模式。

工作流模板(可选 + 可切换)

之前只有一个内建 workflow.md,没法切口味。新增 trellis init --workflow / --workflow-sourcetrellis workflow 切换命令。内置模板:nativetddchannel-driven-subagent-dispatch。也可通过 workflow-resolver.ts 走 marketplace。当前激活的工作流仍然是 .trellis/workflow.md

Check agent 先读规划工件

Check agent 之前可能没看 PRD / design / implement 就照 spec 盖章。现在 check agent 必须读 prd.md,可选读 design.md / implement.md。覆盖:Claude Code、Cursor、OpenCode、Gemini、Kiro、Qoder、CodeBuddy、Droid、Pi(trellis-implement.md + trellis-check.md)。

Workflow-state 工具路由 —— agent vs skill

[workflow-state:in_progress] 之前模糊了 sub-agent 类型与 skill,导致 agent 尝试调用不存在的 trellis-implement / trellis-research skill。现在 trellis-implementtrellis-research 只声明为 sub-agent 类型;trellis-update-spec 声明为 skill;trellis-check 两种都有(代码改动后做验证应优先用 Agent 形态)。

Updater (trellis upgrade + spec 刷新 + 可配置 hook)

trellis upgrade 命令

升级提示之前直接抛出原始 npm install -g @mindfoldhq/trellis@…,用户得自己猜 channel。新增 trellis upgrade 按当前 CLI 版本匹配 npm channel(latest / beta / rc)。flag:--tag <tag> 指定 dist-tag/version;--dry-run 预览。校验输入,POSIX 路径避免 shell 插值,Windows 走 cmd.exe /d /s /c,失败时打印 npm/PATH 排障信息。Session-start hint 现在指向 trellis upgrade

Registry-backed .trellis/spec 刷新

trellis init --template <id> 从 registry 拉的 spec 模板之前在 trellis update 上拿不到 registry 更新(关闭 #315)。现在 trellis init --template <id> 把 spec source + template id 持久化到 .trellis/config.yaml 的新 registry.spec 块。trellis update 读这个块,把配置的 spec registry 下到临时目录,再走现有的 hash / 冲突 / “你改过” 流程。支持直连 spec registry 与 marketplace 风格 registry,含 SSH 和自托管 Git。新工具:utils/registry-config.ts

.trellis/config.yaml 可配置 hook

之前 hook 与 channel runtime 的项目级配置散落或缺失。.trellis/config.yaml 现在驱动:
  • session_commit_message / max_journal_lines / session_auto_commit(journal 自动 commit 形态)
  • hooks.after_create / after_start / after_finish / after_archive(task 生命周期上的用户 shell 命令)
  • channel.worker_guard.idle_timeout / max_live_workers(channel OOM 防护)
  • codex.dispatch_mode: inline | sub-agent
已存在项目在 trellis update 时会通过 configSectionsAdded 收到注释掉的模板块。

Updater 加固(模板归属、hash 跟踪、workflow.md 整文件刷新)

initializeHashes() 现在从 startRecordingWrites() 输出里取平台 / 根文件,不再扫 .codex/ / .claude/ 等目录。pruneOrphanManifestKeys()updateuninstall 之前清理过期 orphan。trellis init / uninstall$HOME 下默认拒绝运行(覆盖:TRELLIS_ALLOW_HOMEDIR=1)。trellis update 把 hash 跟踪的 .trellis/workflow.md 当整模板刷新(修复升级版 Codex 装机带过期 [Codex] 块的问题)。Hook 模板在 Windows 强制 UTF-8(python -X utf8 + stdio reconfigure 用替换错误模式)。

内置 skills

trellis-channel

新增内置 capability skill,教 AI 何时调用 trellis channel —— 多 agent 协作、live worker dispatch、跨 agent review、进度巡检、forum / thread 板、channel 日志排障。SKILL.md 加 5 个 reference 文件(workflows、forum、workers、progress-debugging、command-reference)。通过 getBundledSkillTemplates() 目录扫描自动下发到所有支持平台。

trellis-meta

按 v0.6 架构重写。SKILL.md 前言新增 channel runtime、trellis mem、双包 SDK 三块;description 触发短语覆盖 bundled-skill 自动下发流程。新增 references/local-architecture/multi-agent-channel.mdreferences/local-architecture/bundled-skills.md,说明 channel 与其他原语的取舍、状态去向、.trellis/config.yaml channel.* 旋钮、bundled vs project-local 归属与覆盖约定。platform-files/platform-map.md 新增 Reasonix 行(第 15 个平台)与 Pi 原生 trellis_subagent 标注;customize-local/change-skills-or-commands.md 把平台路径表从 6 平台扩到 13 平台,列出四个内置 skill 的反碰撞规则。

trellis-spec-bootstrap

trellis init 之后默认 spec 模板需要项目特定内容;之前用户得自己找并装 marketplace skill 来从真实代码库 bootstrap .trellis/spec/(关闭 #296)。新增平台无关内置 skill 在 templates/common/bundled-skills/trellis-spec-bootstrap/,提供仓库分析、spec 任务规划、spec 撰写、MCP 设置的源代码索引。trellis init / trellis update 在所有平台自动安装,替代旧的 cc-codex-spec-bootstrap marketplace 入口。beta.23 的 rename-dir migration 把已装的拼错目录(trellis-spec-bootstarp)跨 13 个平台 skill 根(.claude/skills/.cursor/skills/.opencode/skills/.agents/skills/.kiro/skills/.qoder/skills/.codebuddy/skills/.github/skills/.factory/skills/.pi/skills/.agent/skills/.windsurf/skills/.kilocode/skills/)改名到位。

trellis-session-insight

详见 Memory § trellis-session-insight 内置 skill

Bug 修复

trellis-implement / trellis-check 在缺失 Exa MCP 时不再静默跳过注册

内置的 trellis-implementtrellis-check agent 定义之前显式声明了 mcp__exa__web_search_examcp__exa__get_code_context_exa。Claude Code 的 tools: 解析器在显式 MCP 工具名解析失败时静默跳过 agent 注册 —— 任何没装 Exa MCP 的用户会丢掉所有 Trellis sub-agent,主 agent 自己干活而不 dispatch。 修复:
  • trellis-implementtrellis-check 去掉两个 mcp__exa__* 条目。这两个 agent 不需要外部 web search;工具列表收缩到 Read, Write, Edit, Bash, Glob, Grep
  • trellis-research 把原先的 mcp__exa__* + mcp__chrome-devtools__* 折成单一 mcp__* 通配。Claude Code 懒解析通配(无匹配时不静默跳过),所以 research 自动适配用户配置的任意 MCP,源模板不再锁死某个 provider。
  • Copilot transformer(mapLegacyToolToCopilot,在 packages/cli/src/configurators/shared.ts)补上对应 mcp__* 分支,下发完整 Copilot MCP 等价工具集。
OpenCode agent 文件用不同的权限映射语法(mcp__exa__*: allow),不存在静默跳过问题,故意保留不变。关闭 #302

破坏性变更与升级

breaking gate 在 0.6.0-beta.0 触发——那一份 manifest 携带 rename + delete migration chain。0.6.0 manifest 本身 breaking: falsemigrations: [](rc.0 → GA 源码零改动),但从任意 0.5.x 升上来的用户在 manifest 链走查时会穿过 0.6.0-beta.0.json,那一站是 breaking。必须带 --migrate 才能正确穿过链。

RC 稳定化

v0.6.0 GA = 0.6.0-rc.0,src/ 零改动;不再切 rc.1。breaking 工作在 0.6.0-beta.0 已完成,rc.0 到 GA 之间没有新的源代码变更。

升级

从 0.5.x:
trellis update --migrate
--migrate 必加 —— 0.6.0-beta.0 的 breaking-change gate 在遍历 migration 链时触发。rename / delete migration 经 hash 校验,本地改过的文件保留并警告,只清理原版 Trellis 写入的文件。每条 confirm prompt 的 reason 字段会内联说明版本特定的判定原因。 从任意 0.6.0 预发布版本(beta.X / rc.X):
trellis update
普通 trellis update,clean version bump,不需要 flag。 安装:
npm install -g @mindfoldhq/trellis