- 桌面应用
【免费下载链接】EcoPaste
🎉跨平台的剪贴板管理工具 | Cross-platform clipboard management tool
Forum(论坛)频道是 Trellis channel 多 Agent 协作运行时中一类"持久化、主题化"的频道:它以线程(thread)为单位承载跨 Agent 的协作历史,支持打开、评论、状态流转与总结归档,并配有独立的上下文(context)投影体系。本文以 EcoPaste 仓库内置的 trellis-channel 技能参考文档 forum.md 为主体,结合 command-reference.md、workflows.md 与 progress-debugging.md 等配套资料,完整讲解 forum 频道的创建、线程生命周期、读取视图、上下文管理、标题投影、线程重命名与内部变更日志模式,所有命令均可直接复制运行。
Forum 频道是什么:与普通 chat 频道的本质区别
Forum 频道在创建时通过--type forum指定,此后不可变更(immutable)。它不是普通的聊天流:其默认读取路径是forum 摘要 → 单个线程时间线 → 当前上下文的三级结构。
一个频道的类型通过channel create时的--type决定,且永远不会改变:
| 类型 | 特点 | 适用命令 |
|---|---|---|
chat(默认) | 扁平消息时间线;channel messages总是渲染事件流;--thread、--action等 forum 专用 flag 在此被拒绝 | send、wait等常规聊天命令 |
forum | 面向线程;channel messages不加过滤器时渲染线程面板摘要而非原始事件 | post、forum、thread、thread rename子命令仅适用于 forum 频道 |
两种类型共享同一套作用域(scope)模型:--scope project是默认值,作用于当前工作目录的项目桶(bucket);--scope global将频道放入跨项目的共享桶中。从 SKILL.md 的核心规则可知:作用域需要刻意选择——一个 global 板在项目列表中是看不见的,除非显式传入--scope global。
创建 Forum 频道
创建论坛频道的完整命令如下(对应 forum.md):
trellis channel create design-feedback \ --type forum \ --scope global \ --description "Cross-project design feedback board." \ --context-raw "One thread per design topic; close when resolved." \ --by main各参数含义:
--type forum:指定频道类型为论坛,创建后不可更改;--scope global:创建跨项目共享板;若只想作用于当前单个仓库,改用--scope project;--description:频道的稳定描述,作为频道的持久背景信息;--context-raw:频道级上下文,以纯文本形式内联传入(详见下文"上下文系统");--by main:记录创建作者,默认即main。
如果结合 command-reference.md 的create <name>参考,还有更多可选参数可供组合:--task <path>(关联的 Trellis 任务目录)、--labels a,b,c、--context-file <abs-path>(可重复)、--force(覆盖已有频道)、--ephemeral(默认列表隐藏、可被prune清理)等。其中--linked-context-file/--linked-context-raw是已废弃的别名,会被折叠进--context-file/--context-raw,并输出弃用提示。
线程生命周期:opened、comment、status、summary
线程(thread)存活于 forum 频道内部,每个线程由稳定的--thread <key>标识(惯例使用小写 kebab-case,如login-empty-state)。一个线程的第一个动作永远是opened,此后所有动作都复用同一个--threadkey。
完整动作示例
以下四段命令(见 forum.md)展示了一个线程从打开、评论、标记状态到写总结的完整生命周期:
# 打开线程(opened) trellis channel post design-feedback opened \ --scope global \ --as main \ --thread login-empty-state \ --title "Empty state on the login screen" \ --description "Track design feedback for the new login empty state." \ --labels design,login \ --context-raw "Spotted during the 0.4 release review." \ --text-file /tmp/thread-open.md # 追加评论(comment) trellis channel post design-feedback comment \ --scope global \ --as reviewer \ --thread login-empty-state \ --text-file /tmp/review.md # 更新状态(status) trellis channel post design-feedback status \ --scope global \ --as main \ --thread login-empty-state \ --status closed # 写入滚动总结(summary) trellis channel post design-feedback summary \ --scope global \ --as main \ --thread login-empty-state \ --summary "Adopted the option-B layout; ticket TRELLIS-123 owns the fix."关键语义区分
--description是持久的线程描述,回答"这个线程是关于什么的"这一问题。它在opened时设置,之后可通过重新运行post并带--description来编辑;--text/--stdin/--text-file是事件正文——即附加到该条时间线条目上的评论或载荷。从 SKILL.md 的规则看,长消息建议使用--stdin或--text-file,不要把长段中英混排文本直接放进位置参数,以免 shell 解释出错;--labels与--assignees是 CSV 且为"替换"语义——它们替换当前值,而不是追加;--summary是滚动线程总结。在status closed时设置--summary,是"带上下文地标记线程已解决"的标准做法;--thread对每个动作都是必需的(opened在实际使用中同样必需——不存在匿名线程)。
关于post的动作取值,command-reference.md 指出<action>在 CLI 表面是自由格式的,但约定俗成的取值包括opened、comment、status、labels、assignees、summary、processed;而action=rename会被拒绝,必须改用thread rename。
读取 Forum:forum、thread、messages 三种视图
Forum 频道提供了三个互相配合的读取入口(见 forum.md):
# 线程面板摘要(默认视图) trellis channel messages design-feedback --scope global # 按状态过滤列出线程 trellis channel forum design-feedback --scope global --status open # 查看单个线程的完整时间线 trellis channel thread design-feedback login-empty-state --scope global # 以原始事件流方式回放某个线程 trellis channel messages design-feedback --scope global --raw --thread login-empty-state阅读语义要点:
channel messages在不加过滤器时自动检测 forum 频道并渲染线程面板,而不是事件流;--thread/--action是 forum 专用过滤器,对 chat 频道会直接报错;channel forum列出线程的归约状态(reduced state),--status按当前线程状态过滤,--raw则每线程输出一行 JSON;channel thread <name> <thread>展示单个线程的时间线:头部是<thread> [<status>] <title>,随后是 description / labels / assignees / summary / timeline 行;--raw模式输出与events.jsonl中完全一致的事件 JSON,一行一条,适合审计与管道处理。
forum.md 还给出了一条重要协作习惯:如果对端说"我在论坛上评论了",应当先运行channel forum看哪个线程发生了变化,再用channel thread <name> <thread>钻取到具体线程——不要直接跳到临时解析events.jsonl。progress-debugging.md 更明确警告:forum 频道把多条逻辑线程复用在同一份events.jsonl上,手写解析会混淆线程、漏掉生命周期事件、无视 worker 的收件箱游标,因此论坛读操作一律走forum/thread/messages --thread/context list这些归约视图。
上下文系统:add、list、delete 与读取顺序
上下文(context)条目是持久化的背景信息,在读取频道或线程时始终在作用域内。它们不是时间线事件——上下文被单独投影,并为每一位读者重放。使用context子命令管理;旧的--linked-context-file/--linked-context-raw是废弃别名,会折叠进规范的--context-file/--context-raw。
添加上下文(Add Context)
# 频道级上下文(作用于整个论坛) trellis channel context add design-feedback \ --scope global \ --raw "Upstream feedback board; please link tasks before opening threads." # 线程级上下文(作用于单个线程) trellis channel context add design-feedback \ --scope global \ --thread login-empty-state \ --file "$PWD/.trellis/tasks/05-13-login-redesign/design.md"参数规则:
--thread <key>在频道级上下文与线程级上下文之间切换;--file路径必须是绝对路径,相对路径会被拒绝;--raw是内联纯文本内容;--file与--raw均可重复,add/delete至少需要提供其中一种;--as <agent>记录作者,默认main。
列出上下文(List Context)
trellis channel context list design-feedback --scope global trellis channel context list design-feedback --scope global --thread login-empty-state --rawlist上的--raw每行输出一条 JSON 条目(便于管道处理);不带--raw时输出人类可读的file <path>/raw <截断文本>列表。若存储为空,则打印(no context)。
删除上下文(Delete Context)
trellis channel context delete design-feedback \ --scope global \ --thread login-empty-state \ --raw "stale note"删除是按值删除而非按 id 删除:传入与添加时相同的--file或--raw值即可;重复该 flag 可在一次调用中删除多个条目。
推荐的读取顺序
读取一个线程时,自上而下按三层进行(见 forum.md):
- 线程
description(持久的"这个线程是关于什么"); - 上下文条目(频道级 + 线程级);
- 时间线(
opened、comment、status、summary)。
如果某个上下文文件缺失或不可读,要明确说明该情况并继续处理其余数据——不要编造其内容。
标题投影:title set / title clear
title把一个稳定的显示标题投影到频道上,而不重命名存储地址。传给每条命令的频道name始终保持不变(见 forum.md):
trellis channel title set design-feedback \ --scope global \ --title "Design feedback board" trellis channel title clear design-feedback --scope global要点:
title set必须提供--title;--as <agent>记录作者,默认main;- 这是一次展示层变更:工具与脚本可以继续使用原始频道名,不受影响。
线程重命名:thread rename
thread rename是当线程用错误 key 打开时(拼写错误、slug 命名约定不符等)的修正路径。线程不支持硬删除——重命名是官方支持的纠正动作(见 forum.md):
trellis channel thread rename design-feedback old-key new-key \ --scope global \ --as main注意:
--as <agent>是必需的;post <name> rename会被拒绝——必须使用thread rename。
删除纪律:forum 是追加式协作历史
不要把"删除单条评论"或"硬删除线程"建模为正常工作流。Forum 线程是追加型的协作历史(append-only)。要修正状态,请使用以下手段(见 forum.md):
| 目标 | 手段 |
|---|---|
| 标记线程已关闭 / 阻塞 | post ... status |
| 记录最终决议 | post ... summary |
| 重新打标签 | post ... --labels(替换整个标签集合) |
| 纠正错误的线程 key | thread rename |
这种设计保证了协作过程可以被完整追溯,任何修正都以"追加新事件"而非"抹除旧记录"的方式完成。
内部变更日志模式(Internal Changelog Pattern)
Global forum 频道的一个典型用途是内部发布 / 运行时变更日志:每个值得记录的变更对应一个线程,让历史可被按名字搜索(见 forum.md):
# 创建变更日志论坛 trellis channel create release-notes \ --type forum \ --scope global \ --description "Internal release and runtime changelog." \ --context-raw "One thread per notable change; close when shipped." \ --by main # 为某个版本记录一条线程 trellis channel post release-notes opened \ --scope global \ --as main \ --thread release-2026-q1 \ --title "Channel threads and forum UX in 0.6" \ --description "Forum channel UX shipped in the 0.6 line." \ --labels channel,release \ --text-file /tmp/release-notes.md务必使用稳定、描述性的线程 key(例如release-2026-q1、runtime-event-schema-change),这样后来的读者可以按名字找到它们。这也与 workflows.md 中的 Pattern E 对应:forum 频道适用于 issue 论坛、主题式反馈、发布待办、agent 发现与内部变更日志。
事件溯源与底层模型
Forum 频道是事件溯源(event-sourced)的:所有历史都追加写入events.jsonl,而forum、thread、context list、messages --thread这些子命令本质上是对同一份事件流的归约投影(reducer)。根据 command-reference.md 的事件模型一节,频道事件被CHANNEL_EVENT_KINDS白名单约束,包括:create、join、leave、message、thread、context、channel、spawned、killed、respawned、progress、done、error、waiting、awake、undeliverable、interrupt_requested、turn_started、turn_finished、interrupted、supervisor_warning。
论坛事件上的thread、action、标签字段由 forum 子命令负责折叠合并——这正是"绝不要直接解析 forum 的events.jsonl"的底层原因。其存储布局为~/.trellis/channels/<bucket>/<channel-name>/,内含events.jsonl、锁文件、各 worker 的log/pid/config/inbox-cursor等侧车文件(详见 progress-debugging.md)。正常协作流程中,Agent 只通过 CLI 与这些文件交互,直接文件读取仅保留给 CLI 本身可疑的极少数调试场景。
实战建议:作用域、接线与上下文恢复
综合 SKILL.md 的意图路由表,当你需要"开 issue 区 / topic 群 / changelog / board"或"看看某个 thread / linked context"时,本指南对应的操作路径是:
- 选择作用域:单仓库协作用
--scope project(默认);跨项目共享板用--scope global,并记住此后读取也必须带--scope global,否则在项目列表中看不到; - 打开线程前先接线上下文:用
--context-raw/--context-file或context add把相关背景(任务文档、设计稿)挂到频道或线程上,保证任何后来读取者都能看到同样的背景; - 接手既有线程时恢复上下文(对应 workflows.md 的 Pattern F):
trellis channel forum <board> --scope global trellis channel thread <board> <thread> --scope global --raw trellis channel context list <board> --scope global --thread <thread> trellis channel messages <board> --scope global --raw --thread <thread>- 读后输出约束摘要而非转录倾倒:概括用户层问题、影响当前仓库的上下文文件、当前版本与未来版本的需求差异、现有设计是否满足,以及下一步要追加的评论内容。
小结
Forum 频道是 Trellis channel 中管理"可长期追查、按主题归档"的协作记录的推荐形态。掌握它等于掌握四件事:用--type forum建板、用post四个动作驱动线程状态机、用context add/list/delete维护持久背景、用title set/clear与thread rename做展示层与命名修正。配合 command-reference.md 可查阅完整子命令与 flag 表,配合 workflows.md 可组合出 brainstorm、并行 review、变更日志等完整协作模式。把这一切约束在追加式历史与归约视图之中,论坛频道就会成为 EcoPaste 这类仓库在 AI 辅助开发工作流里可靠、可审计的协作底座。
- 桌面应用
【免费下载链接】EcoPaste
🎉跨平台的剪贴板管理工具 | Cross-platform clipboard management tool
相关推荐
Gopeed 开发协作指南:分支工作流、离线调试与 Flutter 国际化实战
Gopeed 开发协作指南:分支工作流、离线调试与 Flutter 国际化实战 导读 本文是一份面向 Gopeed 贡献者的开发协作指南,内容以仓库 CONTR
网络CLI后端基于 fairseq 的多样机器翻译混合专家模型(translation_moe)实战指南:训练、解码与评估
基于 fairseq 的多样机器翻译混合专家模型(translation_moe)实战指南:训练、解码与评估 本文围绕 fairseq 仓库中的 transla
桌面应用如何快速上手 go-logging:Go 日志库入门教程
如何快速上手 go logging:Go 日志库入门教程 go logging 是一个功能强大的 Go 语言日志库,它提供了灵活、可扩展的日志记录解决方案。作为
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考