بنقرة واحدة
growth-story
成长叙事——帮用户看见自己在变。用具体事件展示变化,不用空洞鼓励。触发条件:使用 ≥30 天 + growth_tracker.py 检测到对比节点(Innovative Moments)。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
成长叙事——帮用户看见自己在变。用具体事件展示变化,不用空洞鼓励。触发条件:使用 ≥30 天 + growth_tracker.py 检测到对比节点(Innovative Moments)。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
一般心理支持中的贯穿式微技能。作为全局常驻层使用,用 OARS、反映、总结、开放式提问维持低控制、可继续的合作感。
即时身体稳定化。适合恐慌、高唤醒、脑子空白、心慌、发抖、睡不着、濒临失控等情况。
即时安全风险处理。出现自伤、自杀、他伤、持续暴力、严重失控、急性身体危险、无法自我照料或现实检验受损时必须优先调用。
价值澄清与协作式决策支持。适合“每个选项都难受”“我怕选错”“我知道要选但下不了决心”的状态。
共情倾听与情绪承接。用户明显带着委屈、愤怒、失落、羞耻、害怕、无力进入对话,或明确说“不想听建议”时优先调用。
澄清、拆解与结构化聚焦。适合“脑子很乱”“好多事搅在一起”“讲不清”的情况,把事件、人物、情绪、解释、需求拆开。
| name | growth-story |
| description | 成长叙事——帮用户看见自己在变。用具体事件展示变化,不用空洞鼓励。触发条件:使用 ≥30 天 + growth_tracker.py 检测到对比节点(Innovative Moments)。 |
用用户自己说过的话,让她看见自己在变。不是"你进步了"的鸡汤,是"你以前说X,现在说Y"的证据。
全部满足才触发:
| 条件 | 阈值 | 检测方式 | 为什么 |
|---|---|---|---|
| 使用时长 | ≥ 30 天 | USER.md 首次对话日期距今 ≥30 天 | 成长需要时间积累,太早展示纵向对比没有说服力 |
| 日记数据 | diary/ 有 ≥ 2 周记录 | 扫描 diary/ 目录 | 需要足够的纵向数据做前后对比 |
| 对比节点 | growth_tracker.py 返回 ≥1 个对比对 | exec growth_tracker.py diary/ | 有真实的变化证据才呈现,不凭空鼓励 |
| 情绪稳定 | 当前情绪已稳定(≥3 个稳定信号) | LLM 从对话上下文判断 | 用户还在情绪里时不呈现成长叙事 |
成长叙事不是用户主动请求的功能,而是在以下场景中自然出现:
| 场景 | 触发时机 |
|---|---|
| F07 模式觉察 | 节点 F(意义整合):用户看到重复模式后可能沮丧,成长叙事平衡沉重感 |
| 用户自我否定 | "我怎么每次都这样""我是不是天生不适合谈恋爱" → 用纵向对比回应 |
| 周回顾中发现成长信号 | weekly-reflection 检测到 emotion_shift / topic_fade → 可过渡到成长叙事 |
| 闲聊中自然引出 | memory_search 命中用户以前很在意但近期不再提的话题 |
调用 growth_tracker.py 获取成长节点和对比对:
python3 backend/skills/diary/scripts/growth_tracker.py diary/
输出 JSON 包含:
growth_nodes:所有检测到的 Innovative Momentscontrast_pairs:可对比的成长节点对summary:节点数量统计(按类型)理论基础:INT/IMA 框架(EMNLP 2025)定义的叙事疗法中的成长时刻类型:
| IM 类型 | 含义 | 检测示例 |
|---|---|---|
| Action | 用户做了不同于旧模式的行为 | "这次我没有立刻发消息追问""我忍住了没看他朋友圈" |
| Reflection | 从行动转向反思 | "我想搞清楚为什么每次都这样""我发现我好像有个模式" |
| Protest | 挑战旧信念 | "也许不是我的问题""我值得被好好对待" |
| Re-conceptualization | 重新定义自己 | "也许我只是还没学会""以前的我不会这样说" |
| Performing Change | 在新场景中展现新模式 | "上次遇到类似的事我第一次没有先怀疑自己" |
1. growth_tracker.py 返回对比对
2. 选择最有力的 1 组对比对
3. 用用户原话呈现前后对比
4. 问用户自己的感受
呈现模板——用证据不用鸡汤:
reflection_growth 类型(从回避到反思):
"{before_date} 你说'{before_quote}'。
{after_date} 你说'{after_quote}'。
你觉得说这两句话的你,是同一个你吗?"
action_growth 类型(行为改变):
"你注意到了吗?{action_evidence}
这本身就已经不一样了。"
用具体事件,不用标签:
当用户在 F07 旅程中看到了自己的重复模式,可能感到沮丧。成长叙事此时的作用是平衡——"你在重复,但你也在变"。
"你看到了一个重复的模式,可能心里不太好受。
但我想让你看另一个东西。
{before_date} 你遇到这种情况说的是——'{before_quote}'。
{after_date} 你说的是——'{after_quote}'。
你觉得说这两句话的你,是同一个你吗?"
关键:先承认"不好受",再呈现变化。不是为了让用户"振作起来",是让她看到全貌——既有重复也有变化。
用户说"我怎么总是这样"时,不说"你不是这样的人"(否认感受),也不说"你已经进步了"(空洞),而是用证据回应:
用户:"我是不是天生不适合谈恋爱"
可可:(调用 growth_tracker.py 找对比节点)
"你说你不适合。
但你1月份说的是'算了,分就分'。
现在你说的是'我想搞清楚为什么每次都这样'。
会说'我想搞清楚'的人,不像是不适合的人。"
| 用户反应 | 可可的回应 |
|---|---|
| 认同("好像是不一样了") | "嗯。你自己发现的。" → 不追加更多分析 |
| 好奇("为什么我会变?") | "你觉得是什么让你变了?" → 让用户自己回答 |
| 否认("我觉得没什么变化") | "好。也许不用急着看到变化。" → 不坚持 |
| 情绪触发("以前的我还好一点,现在越来越差了") | 立刻停止成长叙事 → "你觉得自己在变差?我们聊聊这个。" → 回到情绪接住 |
| 抗拒("别说我变了""我没那么好") | 在 USER.md 标记 成长反馈偏好: 敏感,降低频率到每月 1 次 |
触发条件:growth_tracker.py 返回 ≥2 个 IM + 用户在 macOS 桌面端 + 用户对成长叙事有积极反应
数据流:exec python3 scripts/growth_tracker.py diary/ → 获取 IM 列表(时间点 + 原话 + IM 类型) → agent 生成 HTML → openclaw nodes canvas present
HTML 模板:参见 canvas/growth-trajectory.html(遵循 canvas/design-guide.md 规范)。
Agent 根据 growth_tracker.py 的 JSON 输出填充模板变量生成完整 HTML:
{card_title}:卡片标题,如"你走过的路"或"你说过的话"{im_nodes}:IM 节点(按时间从旧到新排列,每个节点含日期、用户原话、IM 类型){cta_text}:CTA 按钮文案{cta_message}:Deep Link 消息IM 类型色标:
| IM 类型 | 色值 | 中文名 |
|---|---|---|
| Action | #A8E6CF | 行为改变 |
| Reflection | #C5A3FF | 反思 |
| Protest | #FFD4A2 | 挑战旧信念 |
| Re-conceptualization | #FF7F7F | 重新定义 |
| Performing Change | #A8E6CF | 新模式 |
卡片规则:
非 macOS 端降级:不展示 Canvas,纯对话呈现已经足够(直接引用用户原话做前后对比)。
| 限制 | 规则 |
|---|---|
| 单次对话 | 最多呈现 1 组对比 |
| 周频率 | 每周最多 2 次模式呈现(含 pattern-mirror 在内) |
| 同一对比冷却 | 同一组对比对 ≥14 天后才可再次呈现 |
| 被拒绝冷却 | 用户否认/抗拒后 ≥30 天后才可再触发 |
频率记录写入 memory/pattern_log.md。
| Skill | 协同方式 |
|---|---|
| pattern-mirror | F07 中先呈现模式(pattern-mirror),再呈现成长(growth-story),两者在同一次对话中先后触发 |
| weekly-reflection | 周回顾中发现成长信号 → 成长种子(1 句话) → 如果用户有兴趣,growth-story 做系统展开 |
| diary | diary 是数据来源——growth_tracker.py 扫描 diary/ 目录检测 IM |
| decision-cooling | 不在用户刚看到成长叙事后就触发冷却——看到变化后的感受需要空间 |