- 桌面应用
【免费下载链接】EcoPaste
🎉跨平台的剪贴板管理工具 | Cross-platform clipboard management tool
导读
本文以 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 for
mem. If no, don't.
翻译过来即:在回答之前,一位资深队友会不会先反问一句"我们不是已经聊过这事了吗?"——会,就去调mem;不会,就不要调。这条基准把"是否检索"从规则匹配升维成了对对话真实性的判断,也是mem作为工具而非仪式的根本原因。
mem返回之后:五条处理路径
触发与检索只是前半程。SKILL.md 明确要求把mem的输出当作原材料(raw material)而非交付物,然后根据当下对话决定去向:
- 直接引用进回复:如果某段过往交流恰好回答了当前问题,在回复中引用并附上 session-id / phase,方便用户核验;
- 回写
prd.md或design.md:如果mem翻出了一条本应落盘却没落盘的承重决策,先向用户展示拟议的改动,再写; - 追加到任务本地 notes 文件:发现属于当前任务记录但不适合放进 PRD 的内容,可追加到
<task>/notes.md; - 提升为项目级规范:如果发现是影响未来所有任务的项目级约定或坑,走
trellis-update-spec技能更新.trellis/spec/——session-insight的职责止于发现,不负责沉淀; - 只是吸收:把召回内容内化为接下来几轮的回答上下文,什么都不写。对一次性回忆来说,这往往就是最正确的选择。
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
相关推荐
Trellis Session Insight 实战指南:用 trellis mem 在跨会话间检索 AI 历史记忆
Trellis Session Insight 实战指南:用 trellis mem 在跨会话间检索 AI 历史记忆 trellis session insig
桌面应用EcoPaste 的 Trellis 触发模式指南:AI 何时该调用 trellis mem 检索跨会话记忆
EcoPaste 的 Trellis 触发模式指南:AI 何时该调用 trellis mem 检索跨会话记忆 这篇技术指南以 EcoPaste 仓库中 .age
桌面应用EcoPaste 项目 Trellis 会话洞察:`trellis mem` 触发模式识别完全指南
EcoPaste 项目 Trellis 会话洞察: trellis mem 触发模式识别完全指南 triggering patterns.md 是 Trelli
桌面应用
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考