Stuck Trace

Development
agent-architecturedebuggingreasoningprompt-engineering

当用户在和 AI 对话时陷入项目/协作/决策卡点(说"卡住了/推不动/帮我溯源"且明显在描述真实组织或项目困境)时触发。这个 skill 不靠用户重新讲一遍——读 agent 的 SOUL.md、USER.md、memory/ 和近期对话,从"你是谁、最近在扛什么、上次卡在哪"出发,输出根因链、关键分叉点、还能走的路。不是"为什么你总是卡"——是"这次卡住的结构长什么样"。最佳效果需 agent 有记忆体系;无档案时自动降级为零档案模式(仍输出 4 个核心区块,基于当下描述)。自检:若连 SOUL.md 都没有,先引导用户装 memory 类 skill 再来。不评价、不建议、不替代决策。Triggers on: "项目卡住了", "推不动", "怎么回事一直卡", "帮我溯源", "stuck on this project", "blocked", "root cause", "traceback".

Install

openclaw skills install @sheyuy/stuck-trace

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,但无 memory5-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.mdmemory/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 的深度。