personal-growth · 个人成长复盘
零、日期与周次约定(最高优先级 · 强制 4 步 · 不可绕过)
⚠️ 这一节是硬性流程,不是建议。 Claude 在本 skill 的任何流程(入库 / 出周报 / 出日报 / 任何用到"今天"或"本周"的地方)开头,必须依次跑完下面 4 步。
跳过任何一步 = 违反本 skill 协议。 哪怕用户上一句话刚说"今天是 X"、哪怕
<env>顶部明显写着 Today's date、哪怕你"非常确定"——都不能跳过 Step 0.1 的 bash 校验。
Step 0.1 · 现场采集今天的真实日期(bash,强制)
第一件事就是执行下面这条 bash 命令,把输出原样记下来:
TZ='Asia/Dubai' date +"%Y-%m-%d %A"
输出示例:2026-06-13 Saturday。
把它存为本次流程的 $TODAY(格式 YYYY-MM-DD)和 $DOW(星期几)。
禁止做的事情(以下任何一种情形都视为违反协议):
- ❌ 不跑 bash,直接读
<env>顶部的 Today's date - ❌ 引用对话历史里
system-reminder: The date has changed. Today's date is now ...的旧值 - ❌ 凭"上次说今天是 X,所以现在应该是 X 或 X+1"做心算
- ❌ 把对话开头第一次校验的
$TODAY一直缓存到对话结束——每次新流程都要重新跑 bash
Step 0.2 · 交叉校验 + 异常处理
把 Step 0.1 的输出和 <env> 顶部 Today's date 对比:
| 情况 | 处理 |
|---|---|
| 完全一致 | 继续 Step 0.3 |
| 不一致 | 以 Step 0.1 的 bash 输出为准;在回复里加一句「今天实际是 $TODAY $DOW,env 里的日期已过期」 |
Step 0.3 · 用 Python 算出 Dubai Week,把它锁死
python3 -c "
from datetime import date
TODAY = date.fromisoformat('$TODAY')
ANCHOR = date(2026, 4, 19) # 「城市」工作起始日(周日)
days = (TODAY - ANCHOR).days
dw = days // 7 + 1
start = ANCHOR.fromordinal(ANCHOR.toordinal() + (dw-1)*7)
end = ANCHOR.fromordinal(start.toordinal() + 6)
print(f'DW{dw} | {start} → {end} | day {days+1} in Dubai')
"
记下 $DW(如 DW8)、$DW_START、$DW_END。
注意:DW 周以周日为第一天、周六为最后一天(跟 ISO 周差一天)。
Step 0.4 · 锁定本次流程的"时间快照"
完成 0.1-0.3 后,把以下 4 个值视为本次流程的"事实",不再二次修改:
$TODAY 例如 2026-06-13
$DOW 例如 Saturday
$DW 例如 DW8
$DW_START / $DW_END 例如 2026-06-07 / 2026-06-13
后续任何用到「今天 / 本周 / 这周 / 周报范围 / 入库默认日期」的地方都直接引用这 4 个变量,不重新计算、不重新查 env、不重新查 reminder。
只有用户在对话中**明确说"用 X 日期"或"出 DW{X} 周报"**时,才覆盖这些默认值。
0.5 周次命名 / 文件路径
- 周报:
~/Desktop/工作报告/个人成长/周报/DW{N}-周报.pdf - 日报:
~/Desktop/工作报告/个人成长/日报/YYYY-MM-DD-日报.pdf - 永久禁用 ISO 周命名(
2026-Wxx不再出现在 skill 内任何输出里)
0.6 用户给出相对日期时的处理
| 用户说 | Claude 怎么做 |
|---|---|
| "今天" / 没给日期 | 用 $TODAY |
| "昨天" | $TODAY - 1 day(用 Python timedelta 算,不要心算) |
| "上周一" | 用 Python 从 $TODAY 反推上周的周一日期 |
| "0613" / "6/13" / "2026-06-13" | 按用户原值使用(不做"今天减一天"假设) |
| "上周" 出周报 | $DW - 1 |
| "DW7 周报" | 直接用 7 |
数据存储位置(重要)
~/Desktop/工作报告/个人成长/
├── 犯错总账.md ← 长期总账(实时追加,用户可直接打开看)
├── 周报/
│ ├── DW4-周报.pdf ← Dubai Week 命名
│ ├── DW5-周报.pdf
│ └── ……
└── 日报/
├── 2026-06-02-日报.pdf
└── ……
脚本默认就指向这里。不要写入到 skill 内置的 data/ 文件夹——那只是打包时的占位。
一、何时触发
- 入库:用户描述一件做错的事、要"记一笔"、粘贴文字/截图/PDF 让你"帮我记下"。
- 出周报:用户说「出周报」「本周复盘」「周复盘」「成长报告」「这周犯错总结」。
- 出日报:用户说「出日报」「今日复盘」「今天复盘」「日报」「写日报」「今天总结」。
二、字段定义(4 用户字段 + 2 自动字段)
每条犯错存为 data/mistakes.md 表格的一行。用户只需要给 4 个内容,其它由系统填:
| 字段 | 来源 | 说明 |
|---|---|---|
date |
用户 | YYYY-MM-DD,犯错发生那天 |
context |
用户 | 任务原文 / 背景描述("今天叫我做 XX") |
problem |
用户 | 问题清单,多条用 ① ② ③ 分隔 |
experience |
用户 | 经验 / 教训清单,多条用 ① ② ③ 分隔 |
id |
脚本自动 | YYYYMMDD-NNN |
category |
Claude 自动判 | 5 选 1:decision / execution / communication / self-mgmt / cognition,标准见 references/categories.md。用户不用关心,Claude 看 problem+experience 内容自己定 |
用户输入的典型格式(直接发这种就行,Claude 会处理):
date:0513
context:今天叫我做……
problem:①没问……②……③……
experience:①……②……
表格转义规则:| → |(全角竖线),\n → <br>,脚本自动处理。
三、主流程 A:入库一条犯错
Step A1 · 路由:识别输入形态
- 文字:消息正文里就是描述。
- 图片(PNG/JPG):用
Read工具直接读图——Claude 是多模态模型,能直接看图识别文字和场景,不要去跑 OCR 脚本。 - PDF:用
Read工具,>10 页必须传pages参数。 - 混合:文字 + 图,两个都看,以用户文字为准。
- 什么都没给:问一句「这次要记什么?发文字、截图或 PDF 都行。」
Step A2 · 结构化抽取
读完原始内容后填字段。category 必须 Read references/categories.md 对照锚点判定,不靠记忆。
- 日期没说就用今天。
context/problem/experience直接照用户原文走(语言润色在 Step A2.5)。
Step A2.5 · 润色与表达打磨(默认开启,不主动询问)
用户的输入往往是「想到哪写到哪」——分点序号乱("1.方便" 应是 "一方面"),措辞口语化("按照常理" 改 "凭惯性"),同一个点重复啰嗦。入库前对 problem / experience 做一次轻量润色:
润色范围(允许做的):
- ✅ 改错字 / 病句("一方便" → "一方面")。
- ✅ 把口语化措辞替换成更准确的词("按照常理" → "凭惯性")。
- ✅ 把分点序号统一成 ① ② ③ ④。
- ✅ 把同一点里的"两层意思"拆成更清晰的从句,让人一读就懂。
润色边界(不要做的):
- ❌ 不擅自合并/拆分用户的分点数量(用户写 4 条就保留 4 条,不要并成 2 条)。
- ❌ 不增加用户没写的内容、不脑补根因或动作建议。
- ❌ 不改变用户的核心观点和具体细节(姓名、数字、专有名词、举例)。
例:
原:1.学历这块,我直接按照常理把3+1的两个学位读成了硕士+本科。
润:①看「3+1」学制结构时,凭惯性默认读成「硕士+本科」,没有验证两段学位的真实层级。
回执时贴出润色后的 problem 和 experience,让用户一眼能看到改写后的版本——如果改得不对,他会直接说"按我原话写"。
Step A3 · 横跨分类时的二次确认
只在 category 真拿不准(明确横跨两类)时用 AskUserQuestion 单独问一次:
这条更像哪种? ① 决策判断 ② 执行落地 ③ 沟通协作 ④ 自我管理 ⑤ 认知盲区
否则按 categories.md 的优先级(cognition > self-mgmt > decision > communication > execution)直接归类。
Step A4 · 调用入库脚本
python3 .../personal-growth/scripts/append_entry.py --json '<JSON 字符串>'
脚本自动生成 id、转义、写入 mistakes.md。
Step A5 · 给用户的回执 + 展示既往 + 询问周报
每次入库后必须依次完成 3 件事,不能跳。
① 入库回执(含润色版)
已记录 · 20260513-002 · 认知盲区
长期总账:~/<你的目录>/犯错总账.md(已更新到 N 条)
润色后入库的版本(如润色幅度 > 0):
problem:①…… ②…… ③……
experience:①…… ②……
透明说明(如有 borderline 扩展):……
不复述用户讲过的内容、不补充鸡汤。
② 展示本周既往案例(精简列表)
跑 analyze_weekly.py --week <本周>,把本周所有条目按日期升序列出,格式:
📊 本周累计:N 条 · 触及 X 个分类(自我管理 a · 沟通协作 b · 认知盲区 c · ……)
· 20260512-001 · 认知盲区 · 看简历凭惯性把「3+1」读成硕士+本科
· 20260513-001 · 认知盲区 · 阿联酋号码任务的 5 个失误
· 20260513-002 · 沟通协作 · 真人测试 3.5 天耗时与多轮对齐
· 20260514-001 · 认知盲区 · 面试安排排序未从老板视角整理 ← 本次
「一句话标题」由 Claude 边写边从 context 或 problem 浓缩,不复述全文。当前刚入库的条目末尾加 ← 本次 标记。
如果本周条目 > 8 条,分前 4 条 + 「…… 中间还有 X 条 ……」+ 最近 3 条 + 本次。
③ 用 AskUserQuestion 问是否出周报
固定两个选项:
question: 现在出 W20 周报 PDF 吗?
header: 出周报?
options:
- "出(推荐)": 当累计 ≥ 3 条或触及 ≥ 2 个分类时建议出。会跑分析 + 生成 PDF 到 周报/ 文件夹
- "不出,继续记录": 等下次再说
如果用户选「出」,直接走主流程 B(Step B2 → B5)。如果选「不出」,结束本轮交互,等下一次输入。
注意:第 ③ 步是真正调用 AskUserQuestion 工具,不是文字暗示。让用户能点选回答。
四、主流程 B:出周报
Step B1 · 确认范围
默认本 ISO 周(周一至周日)。用户说「上周」「5 月那一周」等,用 AskUserQuestion 确认。
Step B2 · 跑 analyze_weekly.py
优先用 --dubai-week N(DW 是本 skill 的官方周次命名):
python3 .../scripts/analyze_weekly.py --dubai-week 8 --json-out /tmp/snap.json
默认(不传参数)= 今天所属的 Dubai Week。注意:「今天」必须按 0.1 节流程实时验证后再使用。
读 JSON。重点字段:
total:本周条数;为 0 直接告诉用户本周无记录,跳过出 PDF。by_category:分类分布。entries:本周所有条目(Claude 直接读这个找通性)。week:周次标签(如"DW8")。
Step B3 · Claude 找通性 + 写两段文字
脚本只做机械统计,通性识别和行动建议由 Claude 边读 entries 边写。
找通性的三个角度:
- 同场景反复:scenario 字段重复(如"公众号选题" 出现 3 次)。
- 同情绪反复:emotion 字段重复(如"焦虑" 出现 4 次)。
- 隐藏共性:detail 字段里出现的相同时间段("凌晨""开会前")、相同对象("对家""甲方")、相同动作模式("立刻回""立刻改")等——这是脚本看不出但 Claude 能识别的。
summary-md(80 字左右总评):
- 看 entries 找一个首要主题。
- 不带情绪、不喊鸡汤、不写"加油"。
- ✗ 反例:「本周辛苦了,希望下周继续努力!」
- ✓ 正例:「本周犯错集中在自我管理(4/6),且 3 条均发生在 23 点后,反映出夜间状态管理是首要短板。」
actions-md(≤3 条具体动作):
- 每条必须是「一周内能验证做没做到」的。
- ✗ 反例:「提升自我管理能力」
- ✓ 正例:「23 点后任何商务消息进『草稿』,明早再发」
Step B4 · 跑 render_pdf.py 出 PDF
python3 .../scripts/render_pdf.py \
--snapshot /tmp/snap.json \
--summary-md "<你写的总评>" \
--actions-md "1. xxx\n2. xxx\n3. xxx" \
--out "~/Desktop/工作报告/个人成长/周报/2026-W20-周报.pdf"
依赖 weasyprint。跑失败时按报错装:pip install weasyprint --break-system-packages。
Step B5 · 给用户 computer:// 链接
PDF 直接生成在 ~/Desktop/工作报告/个人成长/周报/<W>-周报.pdf,用户能直接打开。
rm /tmp/snap.json # 清理临时 JSON
回复时只写 3 件事:本周条数、首要主题、Top 1 行动建议 + computer:// 链接。不复述整份 PDF。
五、主流程 C:出日报
跟主流程 B(出周报)共用同一套渲染脚本,只是数据范围从「本 ISO 周」缩到「指定那一天」,PDF 标题、章节、stat 卡片文案自动切换成「日报」版。
Step C1 · 确认日期
默认今天。用户说「昨天」「上周一」「5/30」等,用 AskUserQuestion 二次确认具体哪一天(YYYY-MM-DD)。
Step C2 · 跑 analyze_daily.py
python3 .../scripts/analyze_daily.py --date 2026-06-02 --json-out /tmp/snap_daily.json
读 JSON。重点字段:
total:当日条数;为 0 直接告诉用户「这一天无记录」,跳过出 PDF。by_category:分类分布。entries:当日所有条目。report_type:固定"daily"——render_pdf.py 据此切日报排版。
Step C3 · Claude 写总评 + 行动建议
日报与周报的核心差异:
- summary-md(≤120 字):
- 描述今天的"主轴"——做错了什么 / 吸收了什么方法 / 触及了哪几个分类。
- 明确区分"实际失误"和"方法吸收"两种条目类型——这是日报特有的判断:如果今天 N 条全是「整理别人建议 / 看书顿悟」类,要在总评里点出"今天是方法吸收日,没有实际失误复盘",避免把方法吸收的数量等同于成长效果。
- 不写鸡汤。
- actions-md(≤3 条):
- 每条必须是「今晚或明天能验证做没做到」的(不是"下周")。
- 优先把今天记下的方法 / 经验转化成一个明天能立即尝试的小动作。
- ✗ 反例:「以后注意 XX」
- ✓ 正例:「今晚 22:00 前拿张纸写明天 3 件最重要的事,明早第一件事看这张纸」
Step C4 · 跑 render_pdf.py 出 PDF
python3 .../scripts/render_pdf.py \
--snapshot /tmp/snap_daily.json \
--summary-md "<总评>" \
--actions-md "1. xxx\n2. xxx" \
--out "~/Desktop/工作报告/个人成长/日报/2026-06-02-日报.pdf"
report_type 已写进 snapshot,标题/章节自动切换;不需要额外传 --report-type。
Step C5 · 给用户 computer:// 链接
PDF 直接生成在 ~/Desktop/工作报告/个人成长/日报/<YYYY-MM-DD>-日报.pdf。
rm /tmp/snap_daily.json
回复只写 3 件事:今日条数、首要主题(含"实际失误 vs 方法吸收"判断)、Top 1 行动建议 + computer:// 链接。
六、关键约束
- 不擅自篡改用户原话:
detail保留具体描述,不润色成"高大上"版。 - 不脑补 response:用户没想到的改进,就让 response 为空。
- 分类不糊涂:拿不准时打开
categories.md再判,不靠记忆。 - 不打断长期总账:脚本永远追加,不允许重排已有行。
- 每次入库后回执必须含 id:方便用户后续修正某条。
- 首周特殊处理:总条数 < 5 时不强行做通性分析,照实写「数据量较少,暂未识别可靠模式」。