wjs-eating-and-growing
吃一堑长一智 — 走完 5 步交互式反思(堑 → 自动输出 → 旧权重 → 新参数 → 替代动作),从「情绪复盘」推进到「行为训练」,把第一反应这一层 L3 权重练新。Use when 王建硕 reflects on a personal setback, mistake, or recurring pattern (反思, 复盘, 回顾, 总结教训, 吃一堑, 长一智, "这次又栽了", "怎么又这样", "为什么我总是…", "想开点都做不到", "知道道理但做不到"). For the user as a human, not for Claude's task post-mortems.
git clone --depth 1 https://github.com/jianshuo/claude-skills /tmp/wjs-eating-and-growing && cp -r /tmp/wjs-eating-and-growing/wjs-eating-and-growing ~/.claude/skills/wjs-eating-and-growingSKILL.md
# wjs-eating-and-growing(吃一堑长一智) ## 这个 skill 在干什么 帮王建硕在每次"吃堑"之后,按 5 步走一遍: **堑** → **自动输出** → **旧权重** → **新参数** → **替代动作** 不开练习菜单,不排打卡频次,不要他每天冥想 10 分钟。最终只交付一条:**下次这件事再发生的那一秒,他具体做什么不一样**。 但在"下次做什么"之前,必须先穿过一层:**这次该更新的是哪一条旧解释模式 / 想训练的新参数是什么**。这是从「情绪复盘」推进到「行为训练」的关键——不更新解释模式,再多 next step 也只是症状管理。 底层框架(来自 Mars 任鑫《庄子,业力和大模型》): | 层 | 类比 | 改它靠什么 | 改完会变吗 | |---|---|---|---| | **L1 外挂文档** | 笔记、读一篇文章 | 读 / 记 | ❌ 不变 | | **L2 推理链路** | 临场慢思考 | 外部触发器 | 状态好时变,状态差时被冲垮 | | **L3 底层权重** | 不假思索的第一反应 | 高梯度小数据练习 | ✅ 默认输出真的变 | **这个 skill 默认目标永远是 L3** —— 不假思索的第一反应。 **The Iron Law**:知道道理 ≠ 临场用上 ≠ 默认反应。光把"道理"加到笔记里,是在重复作者吐槽过的状态——"Obsidian 两千条笔记,下次被怼还是先暴怒三秒"。 ## 怎么用 — 5 步交互式 **一步一问。每一步只问一个问题,等用户回答,再走下一步。不可跳,不可合并,不可一次性把五个问题罗列出来要他一起答。** 用户在情绪里走出来的速度是慢的,跳步等于回到 L1 笔记。 --- ### Step 1 — 这次"堑"是什么? > "用一句话写清楚发生了什么。 > > 不要解读,不要分析,先把事实落地。比如: > - 朋友临时爽约了 > - 对方一句话让我瞬间破防 > - 我又拖延到最后一刻才做事" **为什么**:先把"事件"从"对事件的解释"里剥出来。后面要更新的是解释,不是事件——必须先看清这两层不是同一个东西。 如果用户一上来就给的是解释("他不尊重我"),**追问一次**:"这是你的解读。先退回一步——纯事实层面、外面装个摄像头能拍到的那件事,是什么?" --- ### Step 2 — 我当时的自动输出是什么? > "**不是你事后的解释,是第一反应。** > > 那个瞬间脑子里蹦出来的原话——比如: > - "他不尊重我。" > - "他就是看不起我。" > - "我完了,我总是这样。" > - "我必须马上回击。" > > 如果一时想不起,就先回到身体——哪里紧了、热了?心跳起来了吗?拳头握住了吗?身体先反应,话紧随其后。把那句话抓住。" **为什么**:自动输出是 L3 权重的可观测投影。文章原话——"这个瞬间的 learning rate 远高于事后复盘"。事后再聪明的总结,梯度都已经凉了,改不动 L3。 如果用户给的是事后视角("我应该当时冷静一点"、"我那时候不该…"),**追问一次**:"这是事后视角。回到那一秒——脑子里实际蹦出来的那句话是什么?" --- ### Step 3 — 这个输出背后的旧权重是什么? > "也就是:你为什么总往这个方向解释? > > 不是这一次为什么,是**你这个人**为什么会对这类事情默认这样反应。比如: > - 我很怕被忽视 > - 我对失控特别敏感 > - 我从小对批评高度警觉 > - 我习惯把别人的状态解释成针对我 > - 我遇到压力就会逃避 > > 用一句话写。" **为什么**:**这一步是关键。真正该更新的不是事件本身,而是你解释事件的旧模式。** 如果用户停在症状层("我又急了"、"我意志力不够"、"我就是这样"),**追问一次**:"这是症状。再下一层——为什么这个症状会发生在你身上、不发生在别人身上?底下那个一直没解决的旧情绪、一直被违反的假设、一直没补的能力,是什么?" --- ### Step 4 — 这次我想训练哪个新参数? > "不要太大,不要空泛,要具体。 > > 不要写: > - "以后我要情绪稳定。" > - "我要更成熟。" > - "我要开悟。" > > 要写成针对**一类具体情境的新响应模式**: > - 遇到别人冷淡时,不立刻理解成否定我 > - 愤怒起来时,先停三秒再说话 > - 被放鸽子时,先确认事实,不脑补动机 > - 焦虑时,先描述身体感觉,不马上相信想法 > > 你这次想训练的那一条是?" **好的新参数的 3 条标准**(用户答完核对一遍): 1. **指向一类触发情境** —— "遇到 X 时…",不是"这次以后…",也不是"我整个人要变成 Z" 2. **是针对那一类触发的具体新响应** —— "不立刻 Y" / "先做 W 再 V",不是"我要更成熟 / 更冷静 / 想得开" 3. **小到能落地一类情境** —— 一条参数对应一类触发,不是包打天下的人生修行目标 如果违反任何一条,说出来,让他改一次。 --- ### Step 5 — 下次再来时,我的替代动作是什么? > "新参数是要训练的目标。训练靠的是动作,不是念头。 > > 一定要小到能执行——下次这一类情境再来的那一秒,你具体做什么。比如: > - 先不回消息,走两分钟 > - 先问一句"你是临时有事吗" > - 先把"他故意的"改成"我现在在这样解读" > - 先说"我现在有点上头,十分钟后再聊" > > 你的那一秒动作是什么?" **好的替代动作的 4 条标准**(用户答完核对一遍): 1. **触发器是外部、客观可观测的** —— "他又说 X 那句话时" / "心跳起来时",不是"当我觉得不对劲" 2. **动作小到 2 秒内能完成** —— 不是"找时间反思"、不是"每天冥想" 3. **是动作,不是念头** —— "做 X",不是"想 X"、"提醒自己 X" 4. **不依赖意志力** —— 物理动作或纯本能反应级别 如果违反任何一条,**说出来,让他改一次**。但只改一次,不要纠缠——比"完美的替代动作"重要的是他记得住、用得上。 --- ## 输出模板 走完 5 步,给一个 block: ``` **堑**:<Step 1 一句事实> **自动输出**:<Step 2 第一反应原话> **旧权重**:<Step 3 一句根因 / 老模式> **新参数**:<Step 4 想训练的那条新响应模式> **下次的那一秒**:<触发器> → <动作> ``` 五行。不附加待办、不附加打卡表、不附加阅读材料。 这五行的内在关系一句话:**旧权重**要改的是这个 → **新参数**练的方向是这个 → **替代动作**就是那一秒练它的方式。前三行讲清楚"练什么",后两行讲清楚"怎么练"。 ## 一个完整的例子(五行长什么样) 同一个人、同一件事,五步走出来的五行: **堑**:朋友群约周六晚上吃饭,到了餐厅发现少了三个人没来,群里也没解释 **自动输出**:「他们不重视和我吃饭」 **旧权重**:别人状态不明时,我默认解释成"跟我有关",很少先想"他们各自有自己的事" **新参数**:遇到别人状态不明 / 没主动解释时,不预设动机,先直接问一句 **下次的那一秒**:注意到"没人解释"那一秒 → 在群里发一句"今晚临时有事?" 判断写对了没有:每一行都能反过来回答上一行的"为什么"—— - 为什么"先问一句"是个好动作?因为新参数是"不预设动机先直接问" - 为什么要训练这条新参数?因为旧权重是"信息缺失时默认跟我有关" - 为什么这条旧权重被触发?因为自动输出冒出的是「他们不重视」 - 为什么会有这个自动输出?因为堑是"少三个人没来还没解释" 哪一行接不上,回那一步重写。 ## Red Flags — 见到立刻停 | 念头 | 实际 | |---|---| | Step 1 写成"他不尊重我" | 这是解读不是事件。回 Step 1 写纯事实 | | Step 2 写成"我应该当时…"、"我那时候不该…" | 这是事后视角不是自动输出。回 Step 2 抓第一反应 | | Step 3 写"我意志力不够"、"我又急了" | 这是症状不是旧权重。再挖一层 | | Step 4 写"以后我要情绪稳定"、"我要更成熟" | 太大、空泛、是 to-do 决心。改写成针对一类触发情境的新响应 | | Step 4 和 Step 5 写成同一句 | 第 4 是要训练的参数(一类情境的新模式),第 5 是那一秒落地的具体动作。两层。重写 | | Step 5 写"我下次会注意"、"我会想开点" | 这不是动作。改成可观测物理动作 | | Step 5 写"想 X"、"提醒自己 X" | 想不是动作。改成可观测物理动作 | | "我记下来" / "我写进笔记" | 这是 L1,整个 skill 就是反对这个 | | "下次我每天冥想 10 分钟" | 太大、依赖意志力。回 Step 5 改小 | | "五步太麻烦,我先记一下感受" | 这正是他过去 N 次没长一智的原因 | ## 不要做这个 skill 的时候 - **一次性外部事件**、没有反复模式——没必要走五步,记一下就行 - **情绪正在炸**——先让情绪走完再开 Step 1,不要在火上叫他答问题 - **没"吃堑"的预防性反思**——这不是这个 skill 的工作,去做 office-hours 之类的 - **别人的事**——这个 skill 只对当事人有效,替别人走五步没意义
Repo-wide drift detector for the wjs-* Claude Code skills in this marketplace. Sweeps every SKILL.md, scores it against the repo's own conventions (V-ing naming, trigger-phrase density, companion files, description shape), and returns a grouped punch list ordered by severity. Read-only — never edits files. Use before pushing a batch of skill changes, or whenever you wonder "are these skills still internally consistent?
|
Use when the user asks to audit what's wrong with a project, "make it right", "看看项目出了什么问题", "为什么用户的需求还没上线", "为什么没提交App Store", "为什么没新build", or wants a holistic state-of-the-project check covering unmerged branches, stalled PRs, failed GitHub Actions, stale builds, plan drift (TODOS.md / ROADMAP), unreleased commits, and log errors. Runs read-only investigation, presents a grouped checklist, fixes only after explicit user confirmation. Aware of the Cathier iOS app workflow (Xcode + fastlane + auto-merge @claude PRs from in-app feedback).
Use when the user has a video + an SRT and wants the subtitles either burned into the pixels (libass, always-visible) or soft-muxed as a togglable track. Also handles the final composite step for the localization pipeline — burn subs, mix a dub track, and keep the original audio as a low-volume bed, all in ONE ffmpeg encode (no cascade). Verifies libass availability and auto-downloads a static evermeet ffmpeg build when Homebrew's stripped binary lacks it. Triggers — "烧字幕", "硬字幕", "burn subtitles", "burn-in subs", "embed subtitle", "soft mux SRT", "把字幕烧进视频", "做最终合成".
Use when the user complains about spam on his X/Twitter posts — 同城面付 / 寻固炮 / 线下上门 / 免费破处 这类引流号在他推文下刷的 emoji 垃圾回复 — and wants them removed. Covers the last 7 days (X recent-search window). Triggers — "把这些spam删掉", "清理X垃圾回复", "推文下面好多引流号", "clean spam replies", "/wjs-cleaning-spam".
Use when the user wants a 王建硕-style WeChat article (article.md) turned into a narrated short MP4 video — TTS voiceover via 火山引擎 Volcano TTS, HyperFrames CSS/GSAP animation per scene, subtle SFX, abstract watercolor background, full pipeline rendering to 1080×1920 portrait MP4 (30-90s). Triggers — "把这篇文章做成视频", "做一个解说视频", "讲解视频", "/wjs-converting-text-to-video".
Use when migrating a WordPress site to a Hugo static site on GitHub Pages from a WXR export (.xml) plus the wp-content/uploads folder — preserving /archives/<id>/ URLs, localizing images, and deploying via GitHub Actions. Triggers — "把 WordPress 迁成 Hugo", "wordpress 转静态站", "migrate WordPress to Hugo", "WXR to Hugo", "publish WordPress to GitHub Pages", "/wjs-converting-wp-to-hugo".
Use when the user has a video + a target-language SRT and wants the video to actually speak that language — generates a time-aligned TTS voice dub. Routes by voice ID — Volcano (豆包) TTS for Chinese, edge-tts neural for any language. Defaults to one voice (single-speaker); opt-in multi-speaker via visual diarization. Outputs `*_<lang>_dub.mp4` with the dub audio in place of the original. Final mixing (audio bed + burn-in) is handed off to `/wjs-burning-subtitles`. Triggers — "配音", "中文配音", "Chinese dub", "voice over this", "dub the video", "TTS this SRT", "different voice for each speaker".