news 2026/10/6 1:50:12

Trellis Session Insight 触发模式全解:AI Agent 何时调用 `trellis mem` 找回历史会话

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Trellis Session Insight 触发模式全解:AI Agent 何时调用 `trellis mem` 找回历史会话
  • 桌面应用

【免费下载链接】EcoPaste

🎉跨平台的剪贴板管理工具 | Cross-platform clipboard management tool

项目地址:https://gitcode.com/ayangweb/EcoPaste
点击查看免费下载

导读

本文以 triggering-patterns.md 为骨架,系统讲解 AI 编码 Agent 如何在对话中识别"该翻历史了"的信号,并通过trellis memCLI 从过去会话中召回方案、决策与教训。读完你将掌握六大正向触发模式及其双语语料、配套的召回命令、五类绝对不该动用mem的反模式,以及贯穿全局的 The Bar 判断基准,可直接用于训练自己或你正在调教的 Agent 的"检索直觉"。

背景:trellis mem是什么

在进入触发模式之前,先明确被触发的工具。根据技能主文档 SKILL.md 的定义:

  • trellis mem是一个本地 CLI,为用户的 Claude Code、Codex、Pi Agent 历史对话日志(各平台存放在~/.claude/projects/、~/.codex/sessions/、~/.pi/agent/sessions/下的 JSONL 文件)建立索引,支持 list(列出)、search(搜索)、按 Trellis 任务边界切分、以及 dump 清洗后的对话。
  • 一切读取均在本机完成,任何内容都不会被上传;mem对平台 JSONL 存储是只读的,既不做远端同步,也不编辑代码或文件。
  • 它被设计成一个能力技能(capability skill),而非工作流(workflow):没有固定输出文件、没有强制回写步骤、没有"每次收尾必须跑一遍"的规矩。mem返回什么、怎么用,是对话当下的一次判断。

而本文的主角 triggering-patterns.md 正是这套技能里用来校准 Agent 直觉的触发语料库——SKILL.md 明确指引:训练直觉时随时翻阅它。

触发模式的本质:按意图分组,而非按表面措辞

triggering-patterns.md开篇给出一个关键方法论:模式按措辞背后的"意图"分组,而不是按表面词句分组;同一个意图会以不同语言、不同语体出现。因此文档刻意同时收录英文与中文语料,目的就是让 Agent 跨语言地识别意图,而不是死记某个固定句式。

校准口诀是:如果用户消息命中了以下任一模式,而你却没有想到mem,那你很可能是漏掉了一次显而易见的召回("you probably missed an obvious recall")。

六大正向触发模式详解

模式一:过往方案回忆(Past-solution recall)

触发场景:用户在问"我们(我)以前是怎么解决这个问题的"。答案藏在过去的对话里;代码库只呈现结果,不呈现推理过程。

典型语料:

  • "How did we solve this last time?"
  • "What did we end up doing about X?"
  • "We dealt with this once already, didn't we?"
  • "上次怎么解的?"
  • "之前是怎么搞定 X 的?"
  • "我记得以前修过类似的"

召回路径(Reach):

trellis mem search "<symptom keyword>" --global --limit 10

先以"症状关键词"跨本机全项目搜索,然后用context钻进最接近的命中会话查看上下文。--global的作用是打破项目边界(默认只搜当前项目cwd),--limit 10限制输出行数,避免噪声淹没结果。

模式二:决策检索(Decision retrieval)

触发场景:用户引用一条只存在于旧对话、不存在于任何已提交文件中的决策——它没有写进prd.md或spec/,只留存在 brainstorm(头脑风暴)窗口里。

典型语料:

  • "What was the decision on X?"
  • "Did we decide to use Postgres or SQLite?"
  • "The rationale for choosing X over Y was…?"
  • "我们当时为啥选了 X 而不是 Y?"
  • "关于 X 我们之前是怎么定的?"
  • "之前讨论过 X 的方案吗?"

召回路径(Reach):

trellis mem search "<decision keyword>" # 先定位会话 trellis mem extract <session-id> --phase brainstorm # 再恢复讨论

这里出现了全文最重要的一个切片能力:--phase brainstorm。它把会话按 Trellis 任务边界切分为"决策窗口"与"执行窗口",其中brainstorm定义为[task.py create, task.py start)之间的轮次。决策之所以要专门去 brainstorm 窗口找,正是因为选型论证、取舍理由都发生在规划阶段,而不是实现阶段的提交里。

模式三:跨会话续接(Cross-session continuation)

触发场景:用户隔了一段时间回来继续干活,上下文是隐式的,没有给出任何具体线索。

典型语料:

  • "Where were we?"
  • "Continue from last time."
  • "Pick up where we left off."
  • "继续上次的"
  • "我们上次做到哪了"
  • "接着昨天那个任务"

召回路径(Reach):

trellis mem list --task <current-task-dir> # 列出与当前任务绑定的会话 trellis mem extract <session-id> # 取最近一条恢复上下文

先列出与该任务目录相关的最新会话,再extract其中最近的一条。需要说明的是:--task <current-task-dir>这一写法出自本文档;配套的 cli-quick-reference.md 中,list/search 的作用域主要通过--cwd <path>(指定项目)、--global(全项目)、--limit N(限制条数,默认 50)来控制。若运行版本行为有差异,以trellis mem help的运行时输出为准。

模式四:似曾相识的 Bug 调试(Familiar-bug debugging)

触发场景:当前 bug 感觉以前见过。过去的会话里很可能已经保存了完整的解决路径,拉出来能省掉一整轮调试循环。

典型语料:

  • "I feel like I've hit this before."
  • "Doesn't this look like that bug from last month?"
  • "Same kind of timeout I had in X."
  • "这个错好像之前见过"
  • "这个 bug 是不是上次那个?"
  • "怎么又是这个 error?"

召回路径(Reach):

trellis mem search "<error message fragment>" --global

这里有一个非常实用的检索技巧:从实际错误字符串里锚定一个短小、有辨识度的 token,而不是粘贴完整错误文本。完整错误往往包含时间戳、路径、随机标识等干扰项,命中率反而低;一个独特的关键词(比如某个函数名或错误码)才能精准命中历史会话。

模式五:自我模式识别(Self-pattern spotting)

触发场景:用户在问自己是否反复犯同一类错误、反复做同一种决策。

典型语料:

  • "Do I always make this mistake?"
  • "How often have I run into X?"
  • "Is this a recurring thing for me?"
  • "我每次都踩这个坑吗?"
  • "我老犯这个错?"
  • "这类问题之前出现过几次?"

召回路径(Reach):

trellis mem search "<topic>" --global --limit 50

--limit 50在这里是刻意的:识别"反复性"需要足够的样本量,而不是单点命中。搜索后扫描列表中的日期与项目分布,判断频率与范围;必要时extract两三条会话做横向对比,找出共性。

模式六:收尾复盘(Finish-work retrospective,按需触发)

触发场景:用户明确要求回顾本次任务——文档特别强调这是"按需"(on demand)步骤,不是每次收尾的强制流程,只有被问到时才做。

典型语料:

  • "Summarize what we did in this task."
  • "What were the key decisions / surprises?"
  • "Write up the lessons from this round."
  • "总结一下这次的经验"
  • "记一下这次踩的坑"
  • "复盘下这个任务"

召回路径(Reach):先确定当前任务的 session id——来源可以是.trellis/.runtime/sessions/*.json,也可以用mem list --task <task-dir>反查;然后对同一条会话分别切两个阶段:

trellis mem extract <id> --phase brainstorm # 恢复规划与决策讨论 trellis mem extract <id> --phase implement # 恢复执行过程

复盘呈现时,尽量给出具体的 file:line 引用以便核验。至于是否把总结写入某处(PRD、spec、notes 文件),文档给出明确态度:这是用户的决定——提供选项,绝不自动落盘。这与整个技能"能力而非流程"的定位一脉相承。

反模式:这五类请求绝不要碰mem

文档在正向模式之后专门列出反模式(triggering-patterns.md),防止 Agent 把mem当成万能工具。核心逻辑是:代码库本身能回答的问题,就不要去翻对话历史。

用户请求正确动作
"What does this function do?"直接读文件
"Why is this test failing?"读测试输出与对应文件
"What's the right pattern for X in our codebase?"grep 或读 spec 文件
"What's the latest npm version of Y?"调用npm view
"Fix this bug."直接调试;只有当怀疑存在先验上下文时才碰mem,否则就是噪音

此外,SKILL.md 还补充了三组不该调用的场景,可作为反模式的延伸:

  • 相关上下文已经在当前轮次、prd.md、design.md、最近的git log或已打开的文件中——mem只服务于"已经掉出即时可达范围"的内容;
  • 用户问的是代码里的事实而非过往对话中的事实——git log -p、grep、直接读文件更快也更权威;
  • 你正处于子代理(trellis-implement/trellis-check)中——其调度 prompt 已经携带精选的implement.jsonl/check.jsonl上下文,再叠加mem通常只是噪音;
  • 用户明确说过"不要翻历史,直接回答我问的"。

判断基准:The Bar

整份文档收敛为一句话基准(原文):

The bar stays: would a senior teammate ask "didn't we already talk about this?" before answering? If yes, reach formem. If no, don't.

翻译过来即:在回答之前,一位资深队友会不会先反问一句"我们不是已经聊过这事了吗?"——会,就去调mem;不会,就不要调。这条基准把"是否检索"从规则匹配升维成了对对话真实性的判断,也是mem作为工具而非仪式的根本原因。

mem返回之后:五条处理路径

触发与检索只是前半程。SKILL.md 明确要求把mem的输出当作原材料(raw material)而非交付物,然后根据当下对话决定去向:

  1. 直接引用进回复:如果某段过往交流恰好回答了当前问题,在回复中引用并附上 session-id / phase,方便用户核验;
  2. 回写prd.md或design.md:如果mem翻出了一条本应落盘却没落盘的承重决策,先向用户展示拟议的改动,再写;
  3. 追加到任务本地 notes 文件:发现属于当前任务记录但不适合放进 PRD 的内容,可追加到<task>/notes.md;
  4. 提升为项目级规范:如果发现是影响未来所有任务的项目级约定或坑,走trellis-update-spec技能更新.trellis/spec/——session-insight的职责止于发现,不负责沉淀;
  5. 只是吸收:把召回内容内化为接下来几轮的回答上下文,什么都不写。对一次性回忆来说,这往往就是最正确的选择。

Trellis 不规定唯一落点——把所有召回都强塞进固定文件,只会让文件长成噪音。

配套命令速查与注意事项

mem的完整 CLI 参考见 cli-quick-reference.md,其内容与运行时trellis mem help保持一致。五个子命令:

命令用途
list列出会话,未指定子命令时的默认行为
search <keyword>按关键词查找内容匹配的会话
context <session-id>钻进单条会话:Top-N 命中轮次 + 周边上下文,可配--grep做关键词锚定
extract <session-id>导出清洗后的对话,可配--phase/--grep切片
projects列出活跃项目 cwd 与会话数,用于发现该给其他子命令传哪个--cwd

高频 flag(按需组合):--platform claude|codex|opencode|pi|all(默认 all)、--since/--until YYYY-MM-DD(日期上下界)、--global、--cwd <path>、--limit N、--grep KW(多词以空格分隔为 AND)、--phase brainstorm|implement|all、--turns N(context,默认 3)、--around N(context,默认 1)、--max-chars N(context,默认 6000 字符)、--include-children、--json(机器可解析输出,适合管道给下游步骤)。

几条开箱即用的 one-liner:

# 本机所有项目中,哪些会话讨论过 "deadlock"? trellis mem search "deadlock" --global --limit 20 # 在指定会话内,取提到 "lock contention" 的 Top-5 轮次,并各附 2 轮上下文 trellis mem context 5842592d --grep "lock contention" --turns 5 --around 2 # 恢复某条会话的 brainstorm 窗口——续接一周前的任务时很有用 trellis mem extract 5842592d --phase brainstorm # 列出本机所有有 Trellis 会话的项目及数量 trellis mem projects

使用注意事项(cli-quick-reference.md):

  • OpenCode 适配器在0.6.0-beta.*上仍是 stub:当--platform解析到 OpenCode 时,mem会打印一行 "reader unavailable" 并继续处理其他平台。适配器发布前,不要在回复中承诺 OpenCode 的覆盖率;
  • --phase切片依赖会话中记录了task.py create/task.py start的 bash 调用:如果用户是在记录循环之外的其他终端运行的task.py,该会话没有阶段边界,此时--phase all是安全回退;
  • mem直接索引平台 JSONL 文件:如果用户清空了 Claude / Codex / Pi 的会话存储,磁盘上不存在的东西无法被恢复;
  • mem只读:不修改平台 JSONL,不做远端同步;基于mem发现所做的一切写操作,都是你自己的后续决定。

在仓库中的位置与关联能力

本技能包完整地嵌在当前仓库的.kiro/目录下,可直接阅读原文:

  • 本文源头:.kiro/skills/trellis-session-insight/references/triggering-patterns.md,与技能主文档 SKILL.md、cli-quick-reference.md 同属trellis-session-insight技能包;
  • 工作流上下文:主会话代理 .kiro/agents/trellis.json 负责路由计划 / 实现 / 检查阶段,而子代理 trellis-implement.json 与 trellis-check.json 因调度 prompt 已携带精选任务上下文,被明确列为"不应叠加mem"的场景;
  • 相邻技能:开发前读规范的trellis-before-dev、会话收尾归档的trellis-finish-work、以及把发现提升为项目级规范的trellis-update-spec,共同构成围绕"何时检索、何时落盘"的完整能力链。

一句话收束全文:mem是给"记忆已经掉出即时可达范围"的对话用的;触发它的不是某个关键词,而是"资深队友会先问一句我们是不是聊过"的那一刻。判断对了,检索就是杠杆;判断错了,检索就是噪音。

  • 桌面应用

【免费下载链接】EcoPaste

🎉跨平台的剪贴板管理工具 | Cross-platform clipboard management tool

项目地址:https://gitcode.com/ayangweb/EcoPaste
点击查看免费下载
上一篇:微信聊天记录归档:GitHub_Trending/we/WeChatMsg 完整解读
下一篇:OpenCore Legacy Patcher 实操指南:给 2007 年老 Mac 装上 Big Sur 到 Sequoia

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/6 1:47:58

Rust By Example 精讲:HashMap 与 HashSet 键值容器实战指南

文档教程 【免费下载链接】rust-by-example Learn Rust with examples (Live code editor included) 项目地址&#xff1a; https://gitcode.com/gh_mirrors/ru/rust-by-example 点击查看 免费下载 HashMap 是 Rust 标准库中最常用的键值存储容器&#xff0c;它以哈希表为底层…

作者头像 李华
网站建设 2026/10/6 1:45:34

PCB制造全流程解析:从设计到量产的关键工艺与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 1:45:03

RDK X5部署YOLOv5实战:从pt到bin的完整转换链详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 1:45:02

MPQ82D00GQT寄存器配置烧录原理与三重验证实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华