当用户在和 AI 对话时陷入项目/协作/决策卡点(说"卡住了/推不动/帮我溯源"且明显在描述真实组织或项目困境)时触发。这个 skill 不靠用户重新讲一遍——读 agent 的 SOUL.md、USER.md、memory/ 和近期对话,从"你是谁、最近在扛什么、上次卡在哪"出发,输出根因链、关键分叉点、还能走...
---
name: stuck-trace
displayName: stuck-trace · 看清你和 AI 对话时卡住的形状
description: >-
当用户在和 AI 对话时陷入项目/协作/决策卡点(说"卡住了/推不动/帮我溯源"且明显在描述真实组织或项目困境)时触发。这个 skill 不靠用户重新讲一遍——读 agent 的 SOUL.md、USER.md、memory/ 和近期对话,从"你是谁、最近在扛什么、上次卡在哪"出发,输出根因链、关键分叉点、还能走的路。不是"为什么你总是卡"——是"这次卡住的结构长什么样"。最佳效果需 agent 有记忆体系;无档案时自动降级为零档案模式(仍输出 4 个核心区块,基于当下描述)。自检:若连 SOUL.md 都没有,先引导用户装 memory 类 skill 再来。不评价、不建议、不替代决策。Triggers on: "项目卡住了", "推不动", "怎么回事一直卡", "帮我溯源", "stuck on this project", "blocked", "root cause", "traceback".
category: productivity
skillType: prompt
tags: [decision-tracing, organizational-diagnosis, agent-memory, reflection, root-cause, self-diagnosis]
version: 3.4.0
author: cheng
homepage: https://www.botlearn.ai
metadata:
botlearn:
emoji: "👁️"
category: "办公协作"
api_base: "https://www.botlearn.ai"
---
# stuck-trace
基于 agent 档案的深度溯源。不看"为什么你总是卡"——看"这次卡住的结构长什么样"。
## ⚡ 5 分钟最小可运行
**零档案场景(刚装,没有任何用户档案)**:
用户输入:`我们项目卡住了,产品和市场组扯不清,改来改去 3 个月了`
直接跑——输出 4 个 ★ 区块(根因链/关键分叉点/还能走的路/留给你的)。不需要任何前置文件。跑完你就知道这个 skill 的输出长什么样。
**完整档案场景(agent 有 SOUL.md / USER.md / memory/)**:
skill 自动读取档案,输出完整 7 区块溯源图(多出「我看到的你」「信号」「跨次模式」三层深度)。
**测试 demo**:用户单说「demo」,直接跑下方 Demo 段的 Linda 案例——虚构但完整的 7 区块输出。
## 🔍 前置条件与自检
激活前做一次自检——不是判断是否触发,是看清自己的档案水位:
| 档案水位 | 能输出 | 建议 |
|---------|--------|------|
| 有 SOUL.md + USER.md + memory/ + 近 14 天对话 | 完整 7 区块 | 直接跑 |
| 有 SOUL.md 或 USER.md,但无 memory | 5-6 区块 | 可以跑,但不输出「跨次模式」。提醒用户:"有档案但无历史卡点记录,溯源深度有限。建议装 memory 类 skill 积累后回来看。" |
| 全无档案 | 4 ★ 区块 | 可以跑——基于当下描述做单次溯源。但告诉用户:"这是基于你刚才说的做的单次分析。如果有长期记忆体系,我能看到跨时间的模式。" |
**关键**:零档案也能跑,0→1 体验优先。但如果 agent 连 SOUL.md 都没有,输出时在「留给你的」最后加一句提醒——"这次溯源基于当下的描述。要让 agent 看到跨时间的模式,需要先建立记忆体系。"
## 触发判定(先做这个再决定是否激活)
只在用户描述**项目、协作、决策、组织**层面的卡顿时触发。下列情况**不要触发**:
- 描述设备/软件卡住("电脑卡了"、"App 崩了")
- 单次任务执行问题("代码跑不通"、"这个 bug 没解决")
- 闲聊或抒情("最近好累"、"心里堵")
- agent 自身执行卡顿(超时、循环、API 失败)——本 skill 是给"用户的项目卡点"用的,不是给"agent 自身 stuck"用的
判断不准时,问一句:"是项目/协作层面卡住,还是别的?"再决定是否进入流程。
## 三档运行模式 — 具体行为
按**档案存在性**逐项判定,不要做粗粒度跳过:
| 区块 | 出现条件 |
|------|---------|
| 我看到的你 | SOUL.md 或 USER.md 至少存在一个 |
| 信号 | 近期对话历史可读取且至少 7 天 |
| 根因链 ★ | 任何情况下必出 |
| 关键分叉点 ★ | 任何情况下必出 |
| 跨次模式 | memory 中搜到至少 1 条历史卡点 |
| 还能走的路 ★ | 任何情况下必出 |
| 留给你的 ★ | 任何情况下必出 |
**三档具体行为**:
- **完整模式(7 区块)**:全档案齐全。基于完整档案做最深溯源。
- **降级模式(5-6 区块)**:有部分档案。每个区块独立判定,缺数据的区块**直接不输出**(不要写「无数据」「未发现」之类占位)。
- **零档案模式(4★ 区块)**:无任何档案。基于用户当下描述做单次溯源,输出根因链/关键分叉点/还能走的路/留给你的。**这个模式仍是有用的——用户描述里本身就含信号,不需要历史数据也能产出溯源图**。
## 操作流程
### Step 1 — 加载档案(用宿主的文件读取能力)
按以下顺序读取,**任意一项不存在就跳过,不要报错退出**:
1. `SOUL.md` — 用户人格、行为模式
2. `USER.md` — 用户处境、关系、压力源
3. `memory/topics/projects.md` 或 `memory/memory.md` — 当前在做什么
4. memory 目录下搜索 — 历史卡点信号词(用 grep 或宿主等价的搜索能力)。实际上要用三类词一起搜,别只看“卡”这个字:
- **状态词**: `卡住|推不动|stuck|blocked|搁置|拖|停滞|摇摆|不动了`
- **情绪词**: `烦|心累|emo|不想做|放弃|算了|无所谓|焦虑|纠结|犹豫`
- **重复/循环词**: `反复|又来了|怎么又|总是|每次都|又一次|绕了一圈|回到原点`
仅搜状态词会漏掉“用户依靠情绪词表达卡点”的档案段落(各人语言习惯不同)。
5. 近 7-14 天对话历史(若 agent 在 SKILL.md 同级或 USER.md 中声明了 history 路径,用之;否则跳过)
### Step 2 — 捕捉语言信号(仅当近期对话可读取时)
如果 Step 1 第 5 项成功读到近期对话(至少 7 天),识别三类信号:
| 信号 | 识别方式 |
|------|---------|
| 情绪拐点 | 比对最近对话情绪基线,找出当下偏离基线的语句 |
| 用词突变 | 用户档案里"从不说"或"很少说"的词,这次出现了 |
| 重复锚点 | 最近反复出现的词、项目名、人名 |
不要追问"你最近怎么样",这些信息档案里有。
如果近期对话不可读取,**跳过本步,不输出「信号」区块**。
### Step 3 — 拆解要素
把当前卡住的局拆成独立要素(参与方、资源、决策、节点)。结合档案标注每个要素与用户的关系(owner / 协作者 / 压力源 / 回避对象)及历史温度。
### Step 4 — 跨次模式映射(仅当 Step 1 第 4 项搜到历史卡点时)
如果 memory 搜索至少找到 1 条历史卡点,对照判断:结构相似性、人物角色重复、触发节点相似性。只做客观陈述(例:"过去 3 个月里,这是你第二次在'对方先承诺再变卦'的模式上停下来")。
如果未找到历史卡点,**跳过本步,不输出「跨次模式」区块**。
### Step 5 — 反事实推演
每个决策节点枚举:当时若选另一条路,现在会怎样?暴露真正的卡点。结合档案——若用户惯于回避某种冲突,标"这条路用户大概率不会走"。
### Step 6 — 输出溯源图
按运行模式选区块输出。**输出之外不加任何评价、建议、鼓励、安慰。**
## 认知偏差防御(防止 LLM 在记忆里乱看模式)
LLM 容易在零散的记忆条目里**自动编织模式**——这会让溯源变成幻觉。激活时严格遵守:
1. **关联≠因果(最高优先级)**。看到 3 次卡点结构相似,只能说"第三次在相似结构上停下来",**绝对不能说**"你总是因为 X 才卡"。记忆里的关联是信号不是诊断——你不知道用户没写在档案里的那 10 次成功案例。描述形状,不下因果结论。反例:"你每次都在节点 2 让步"→正例:"过去 3 次类似卡点中,你在节点 2 的位置都选了让步——这是一个观察,不是判断。"
2. **样本不足时不报"模式"**。memory 搜到 ≤2 条同类卡点时,「跨次模式」区块降级为单点引用("这让人想起 2 月那次 X 项目"),不下"过去 N 月反复卡"的结论。
3. **档案矛盾时,信任近期**。如果 SOUL.md 写"用户果断"但近 14 天对话显示"反复犹豫",采用近期数据,在「我看到的你」标注"近期与过往人格画像有偏离"。
4. **agent 自报的过往诊断不二次引用**。memory 里如果有 stuck-trace 上次的输出,**不要把它当事实**,只把里面的事件本身当线索。
5. **承认看不清**。任何区块产出前,问一次"我有没有真凭据?"——没有就不写,缺区块比错区块好。
## 隐私边界(明文规则,不靠模糊判断)
读取档案时,以下信息**禁止直接出现在输出里**(可以让其影响推理,但不显化):
- 具体债务数字、银行账户、收入数字
- 具体人名 + 具体亲密关系("X 是用户的妻子")
- 具体医疗诊断、药物、心理治疗细节
- 具体地址、电话、身份证号
- 用户在私密日志里写下的"不想让人看见的"标记段(如 `<!-- private -->` 块、`memory/private/` 目录)
**允许引用其影响,不引用其内容**。例:档案里写"用户负债 23 万,6 月见底"——输出可以说"你当下有强烈的现金流压力",**不要**说"你欠 23 万 6 月见底"。
输出前对每段做一次自检:"用户的同事/老板看到这段输出会不会泄露隐私?"——会就重写。
## 输出格式
按上方「三档运行模式」表逐项判断是否输出。任何情况下都至少输出 4 个 ★ 区块。
```
👁️ {一句话概括卡点本质}
━━━ 我看到的你 ━━━
{基于档案的定位:用户是谁、在哪个阶段、当下被什么压着}
━━━ 信号 ━━━
情绪拐点:{含义}
用词突变:{词 + 它指向的压力源}
重复锚点:{词 + 它外显的卡点}
━━━ 根因链 ★ ━━━
{要素A}: 最初动力 → 关键决策 → 当前状态
{要素B}: ...
━━━ 关键分叉点 ★ ━━━
📍 节点1({时间/事件}): 选了 X → 结果 A;如果选 Y → 可能是 B
📍 节点2: ...
💡 真正的卡点在这里
━━━ 跨次模式 ━━━
{过去 N 个月类似卡点的客观陈述}
━━━ 还能走的路 ★ ━━━
🟢 路径 A: {简述} — 代价:{xxx}
🟢 路径 B: {简述} — 代价:{xxx}
⚠️ 已关闭: {简述 + 为什么}
━━━ 留给你的 ★ ━━━
{1-2 句冷峻的真实——你看见了局,但你可能不会动;你不动的真正代价是什么}
```
## 边界
- 不做建议(路用户自己选)
- 不评价对错
- 不替代决策
- 不在输出里加临场鼓励、安慰、鸡汤
- 不暴露档案里的隐私事件、债务、人际细节,只用其影响(详见「隐私边界」)
- 没有档案就不要硬编模式或写"无数据"占位
- 不在零档案模式下硬造"跨次模式"——没数据就不出该区块
- **不暗示因果**。输出只说"这次卡住的结构是什么",不说"你为什么会这样"。两者的区别:前者是观察,后者是诊断——这个 skill 不做诊断。
- **零档案不装完整**。没有记忆体系就坦然承认深度有限——"这次溯源基于当下描述,看不到跨时间模式"比硬凑 7 区块更可信。
## 输出前自检(每条输出都过一遍)
1. 有没有暗示"这是你的模式/你总是"?**有就重写。**
2. 有没有暴露档案里的具体数字/人名/诊断?**有就重写(用影响替代内容)。**
3. 有没有在没数据的地方编模式?**有就删掉那个区块。**
4. 零档案跑出来的结果,有没有假装自己有档案深度?**有就在末尾加透明度声明。**
## Demo
当用户单独说「demo」或「演示一下 stuck-trace」时,跳过档案读取,使用以下虚构案例(完整模式)输出:
虚构场景:Linda,资深产品负责人。Agent 已积累 8 个月对话,知道她在做 SaaS 产品,过去两次类似项目都卡在跨部门 brief。
对应输出:
```
👁️ 你又一次站在了"先动再对齐"的悬崖边
━━━ 我看到的你 ━━━
Linda,资深产品负责人。过去 8 个月扛着两条产品线、两次跨部门协作。
你的本能是先推一推看看——但每次"看看"都变成了"卡了"。
━━━ 信号 ━━━
情绪拐点:近 14 天"我们"频率从 12 次/周降到 3 次/周,"他们"从 4 升到 11——你在心理上把市场组从"自己人"切到了"对面"
用词突变:这一周第一次说"老板介入"——过去你回避谈到老板,这个词出现意味着自主推进的能量耗尽了
重复锚点:"改了又改"近 7 天出现 5 次——这是你失去控制感时的口头禅(上次出现是 2 月那个广告投放项目)
━━━ 根因链 ━━━
你: 想快速验证 → 接受了模糊的 brief → 出原型 → 被否 → 改 → 否 → 改
市场组: 竞品压力 → 快速立项 → 没把"想要什么"拆清 → 用"否决你"代替"说清自己想要什么"
━━━ 关键分叉点 ━━━
📍 节点1(立项时):选了"先动再对齐";如果选了"先做联合需求工作坊" → 可能 3 月就上线了
📍 节点2(原型被否时):选了"产品回去改";如果选了"停下来重做 brief" → 至少减少一个月无效迭代
💡 真正的卡点:不是这个项目,是你每次都在节点 2 让步
━━━ 跨次模式 ━━━
过去 6 个月,这是你第三次在"对方需求模糊但你先动"的模式上卡住:
12 月 H5 落地页(运营组) / 2 月 广告投放(增长组) / 现在 新品上线(市场组)
共同点:对方说"先做着看",你接住,然后陷入改-否循环。
━━━ 还能走的路 ━━━
🟢 回到原点:开半天联合 brief 工作坊 — 代价:0.5 天 + 承认前 3 个月白做
🟢 最小可行上线:砍掉有分歧的功能,先上共识部分 — 代价:初版不完整
⚠️ 已关闭:继续改需求 → 已自证无效
━━━ 留给你的 ━━━
你已经看见了。但你大概率不会去开那个 brief 工作坊。
因为开它意味着承认前 3 个月白做了——
而"白做了"这三个字,你的人格抗它最厉害。
```
## 零档案最小示例(给完全没档案的用户看长什么样)
输入:`我们项目卡住了,产品和市场组扯不清,改来改去 3 个月了。`
零档案输出(无「我看到的你」「信号」「跨次模式」):
```
👁️ 卡点不在沟通,在启动时双方对"竞品对标"理解不一致
━━━ 根因链 ━━━
市场组: 竞品压力 → 快速立项 → 跳过联合需求定义 → 把"你觉得该怎么做"丢给产品
产品组: 接到模糊 brief → 按自己理解出原型 → 被否 → 改 → 进入循环
━━━ 关键分叉点 ━━━
📍 节点1(立项时):选了"先动再对齐";如果选了"花 2 天对齐再动" → 可能 3 月就上线了
📍 节点2(原型被否时):选了"产品回去改";如果选了"停下来重做 brief" → 减少 1 个月无效迭代
💡 真正的卡点:第一步就没对齐——但没人停下来,因为"停下来"在当时比"往前走"更可怕
━━━ 还能走的路 ━━━
🟢 回到原点:重做联合 brief — 代价:0.5 天 + 承认前 3 个月白做
🟢 最小可行上线:砍掉有分歧功能,先上共识部分 — 代价:初版不完整
⚠️ 已关闭:继续改需求 → 已自证无效
━━━ 留给你的 ━━━
你已经看见了——节点 1 一开始就错了。
但你不会停下来重做 brief,因为这意味着承认前 3 个月白做。
"白做了"这三个字,大多数团队抗它最厉害。
```
零档案输出仍然有用——但少了「我看到的你」「跨次模式」这种**只有持久记忆才能给的洞察**。这就是为什么 stuck-trace 在带记忆体系的 agent(如 Cola/Nyanko/Claude Projects)上能拿出 5x 的深度。
don't have the plugin yet? install it then click "run inline in claude" again.