Skip to main content
ClaudeWave
Skill82 repo starsupdated 2d ago

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.

Install in Claude Code
Copy
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-growing
Then start a new Claude Code session; the skill loads automatically.

SKILL.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 只对当事人有效,替别人走五步没意义
skill-quality-reviewerSubagent

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?

wangjianshuo-perspectiveSkill

|

wjs-auditing-projectSkill

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).

wjs-burning-subtitlesSkill

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", "把字幕烧进视频", "做最终合成".

wjs-cleaning-spamSkill

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".

wjs-converting-text-to-videoSkill

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".

wjs-converting-wp-to-hugoSkill

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".

wjs-dubbing-videoSkill

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".