dot_claude/skills/retrospective-codify/SKILL.md
タスク完了時に「最初に失敗した内容」と「最終的に通った解法」を対応付け、最初に知っておくべきだった知見を ast-grep ルール / skill / CLAUDE.md ルールのいずれかに言語化する。試行錯誤の末にたどり着いた解や、同じ落とし穴を将来の自分(または別エージェント)に繰り返させたくないときに使う。ユーザーから「今回の学びをルール化して」「skill にして」「lint に落として」と指示されたとき、またはタスク終了時に学びを棚卸しする場面で起動する。
npx skillsauth add mizchi/chezmoi-dotfiles retrospective-codifyInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
タスクの終盤で「最初にこれを知っていれば遠回りしなかった」知見を抽出し、静的ルール・skill・常時有効ルールのいずれかに固定する。プロンプトに頼らず再現可能な形に落とすことを優先する。
使わない場面:
失敗⇄成功の対応付け: 今回のタスクから次の 3 点を書き出す。
「最初に知るべきだったこと」の言語化: 気付きを 1 〜 3 文で要約する。回顧でなく、未来の自分への指示形で書く("〜するな" / "〜を先に確認せよ")。
分類: 下の判定表に従って出力先を決める。
重複チェック(必須): 提案前に既存の知見と照合する。重複や近接する規則があれば「新規追加」ではなく「既存への追記 / 更新」を選ぶ。これを怠ると skill / ルールが肥大化する。
検索キー候補は気付きから 2 〜 3 語抽出する(ツール名・API 名・症状語・対義語)。例: 気付きが「pnpm v10 を使う」なら pnpm, packageManager, lockfile。
照合先と最低限の検索:
# skill 重複(global)
ls ~/.claude/skills/
Grep "<キー>" ~/.claude/skills/*/SKILL.md
# CLAUDE.md 重複
Grep "<キー>" ~/.claude/CLAUDE.md
Grep "<キー>" <project-root>/CLAUDE.md # 該当プロジェクトがある場合
# lint ルール重複
ls <project-root>/rules/
Grep "<キー>" <project-root>/rules/
結果を 4 段階に分類:
[skill 追記] または [rule])に分けて書く。書き出し: 選んだ形式のテンプレート(後述)に沿って artifact を生成する。
確認: ユーザーに diff を見せて採用可否を取る。棄却された場合は skill ではなくセッション内のメモに留める。
digraph classify {
"機械的に検出可能?" [shape=diamond];
"毎回適用すべき短い指示?" [shape=diamond];
"複数ステップの手順や判断を伴う?" [shape=diamond];
"ast-grep ルール / lint" [shape=box];
"CLAUDE.md ルール" [shape=box];
"skill" [shape=box];
"メモに留める" [shape=box];
"機械的に検出可能?" -> "ast-grep ルール / lint" [label="yes"];
"機械的に検出可能?" -> "毎回適用すべき短い指示?" [label="no"];
"毎回適用すべき短い指示?" -> "CLAUDE.md ルール" [label="yes"];
"毎回適用すべき短い指示?" -> "複数ステップの手順や判断を伴う?" [label="no"];
"複数ステップの手順や判断を伴う?" -> "skill" [label="yes"];
"複数ステップの手順や判断を伴う?" -> "メモに留める" [label="no"];
}
| 判定軸 | 出力先 | 例 |
|---|---|---|
| コード/設定の構文レベルで検出可能 | ast-grep ルール または既存 linter 設定 | "Array.from(set).length を使うな、set.size を使え" |
| 短く、常時適用、判断を伴わない | CLAUDE.md(user global / project) | "pnpm は v10 以上を使う" |
| 手順・文脈判断・テンプレが必要 | 新規 skill または既存 skill への追記 | "MoonBit の C binding を書く手順" |
| プロジェクト固有で一回限り | 採用しない(コミットメッセージ / PR 説明に留める) | — |
ast-grep を優先する原則: 静的に検出可能なものはプロンプトやドキュメントに書かず、必ず ast-grep ルールにする(ユーザーの global ルール)。
CLAUDE.md の書き出し先:
~/.claude/CLAUDE.mdCLAUDE.mdast-grep-practice skill を参照。rules/ ディレクトリに YAML を追加し、rule-tests/ に valid / invalid ペアを必ず書く。
# <既存セクションに追記>
- <命令形の 1 文>(理由: <短い根拠>)
理由を括弧書きで必ず添える(将来の自分が edge case を判断できるように)。
writing-skills(superpowers)の最小テンプレに従う:
---
name: <kebab-case>
description: Use when <具体的な状況> / <症状>
---
# <Title>
## 目的
## いつ使うか
## ワークフロー
## 落とし穴
Array.from(set).length で取得していたが、レビューで非効率と指摘された。set.size を使う。Set / Map のサイズ取得は .size プロパティを使う。Array.from(...).length は構文レベルで検出可能。→ rules/no-array-from-size.yml を追加:
id: no-array-from-size
language: TypeScript
severity: warning
rule:
pattern: Array.from($COLL).length
message: Set/Map のサイズは .size プロパティを使う。
pnpm install を実行したら lockfile 形式の差分で CI が落ちた。→ ~/.claude/CLAUDE.md の「ツール」節に追記:
- pnpm は v10 以上を使う(理由: lockfile 形式が v9 以前と非互換で CI 差分が出る)
extern "c" 宣言 + moonbit.h を使った stub + moon.pkg.json の native-stub / link.native 設定の組み合わせ。→ 新規 skill moonbit-c-binding として手順とテンプレを切り出し(既に存在するため、本例は「重複チェックで既存への追記」を選ぶケース)。
下記の思考が出たら一度止まる。
| 出てくる合理化 | 実態 | |---|---| | 「プロジェクト固有だけど一応 skill にしておこう」 | skill が肥大化し検索性が落ちる。コミットメッセージ / PR で十分。 | | 「承認は省いて先に書き出しておこう、後で見せればいい」 | 勝手に CLAUDE.md / skill を変更すると将来の挙動が読めなくなる。必ず提案 → 承認 → 書き出し。 | | 「ast-grep で書ける気もするけど、自然言語でルールに書いた方が早い」 | 静的検出可能なものを散文で書くと、エージェントが守らない。ast-grep を優先。 | | 「気付きが薄いけど、何か書かないと格好がつかない」 | 提案ゼロも正解。空の retrospective は害がない。 | | 「重複チェックは面倒だから飛ばそう、被ったら後で消せばいい」 | 重複ルールが残ると挙動が割れる。dedup は必須工程。 | | 「失敗の側は省いて、最終解だけ書けばいい」 | 失敗の記述がないと、将来の自分は同じ落とし穴に再度落ちる。 |
タスク終了時に次の形で棚卸しを提示する。学びは複数あって良い。重複や不採用も明示的に列挙して、判断の足跡を残す。
## Retrospective
### 学び 1: <短いラベル>
- 最初の失敗: <1 行>
- 最終解: <1 行>
- 気付き: <1 行>
### 学び 2: <短いラベル> # 学びが 1 つだけならこのブロックは省く
- 最初の失敗: <1 行>
- 最終解: <1 行>
- 気付き: <1 行>
## 提案
採用候補:
- [lint] <ルール名>: <1 行>(artifact: <path>, 学び N 由来)
- [skill 追記] <既存 skill 名>: <1 行>(学び N 由来)
- [skill 新規] <skill 名>: <1 行>(学び N 由来)
- [rule] CLAUDE.md(global/project): <1 行>(学び N 由来)
重複検出(提案不要):
- <学び N>: 既存 <skill/rule 名> の <該当節名 or 行番号> が完全カバー → 追加なし
不採用:
- <学び N>: <不採用理由 1 行>(例: プロジェクト固有 / cross-file で lint 表現困難 / 他の学びに吸収)
採用するものを番号または項目名で指示してください。提案ゼロも妥当な結論です。
書式ルール:
### 学び N 見出しは省き、Retrospective ブロックを 1 つだけ書く採用するものを指示してください ではなく 採用候補なし。記録目的でレビューしてください。 に置き換える## Retrospective
### 学び 1: <ラベル>
- 最初の失敗: ...
- 最終解: ...
- 気付き: ...
## 提案
重複検出(提案不要):
- 学び 1: 既存 skill `<skill 名>` の `<節名>` が完全カバー → 追加なし
採用候補なし。記録目的でレビューしてください。
## 提案
採用候補:
- [skill 追記] <既存 skill 名>: <新規部分の 1 行>(学び 1 由来, 既存節 `<節名>` への補完)
重複検出(提案不要):
- 学び 1(version 値部分): 既存 `~/.claude/CLAUDE.md` ツール節が既にカバー → 追記不要
ast-grep ルールに移すWhy: を添えるsuperpowers:writing-skills — 新規 skill を書くときのテンプレと TDD フローast-grep-practice — lint ルール化する場合の書き方とテストupdate-config — settings.json / permissions の変更が必要な場合tools
Use when working on github.com/mizchi/pkspec, especially release readiness, version bumps, GitHub Actions/Nix release checks, adapter DSL work, or the experimental Playwright/Vitest coverage presets. Covers the repo's spec gates, pkfire release flow, pkl CLI dependency gotchas, and what is intentionally still experimental.
data-ai
指定されたリポジトリ、複数リポジトリ、または GitHub organization から、ドメイン固有の専門用語、業界用語、社内・プロダクト用語、リポジトリ実装マップ、技術構成、オンボーディング向け Mermaid 構成図を抽出・生成するときに使う。ユーザーが「用語集を作る」「ドメイン辞書を作る」「オンボーディング資料にする」「repo/org を見て専門用語をまとめる」「AI が再確認しなくてよい知識ベースを作る」と依頼したら起動する。
development
Guide for writing MoonBit bindings to JavaScript using `extern "js"`. Use when adding FFI declarations against browser/Node/Deno APIs or npm packages, wrapping JS objects behind opaque types, bridging Promises with `async fn` and `Promise::wait()`, configuring `moon.pkg` exports for esm/cjs/iife output, or handling null/undefined at the JS boundary.
testing
技術記事の再現性 (読者が手元で再現できるか) を評価するスキル。subagent に「初見の読者として手元で再現を試みる」シミュレーションをさせ、足りない情報をリストアップさせる。記事ドラフトの最終チェック、または公開後フィードバック前の事前検証で使う。