https://zenn.dev/bokuwalily/articles/self-growing-skills
前回、Claude Codeの記憶を4層に分けた話を書きました。今回はその続きで、Claude Code自身に「再利用できる手順」を見つけさせて、スキルとして書き溜めていく仕組みの話です。
数ヶ月運用した結果、いま ~/.claude/skills/auto/ には自動生成されたスキルが64個たまっています。この記事では、その自己増殖の設計・乱造を防ぐ仕掛け・運用して分かった生成曲線を書きます。
困りごと:同じ手順を毎回ゼロから組み直す
Claude Codeは優秀ですが、セッションを跨ぐと「前にこのエラーをどう回避したか」を忘れます。launchdのexit 78の直し方、png-to-icoでfaviconを焼く手順、Next.jsのRSCペイロードを削る方法 ―― こういう一度解いたはずの手順を、毎回ゼロから組み直していました。
CLAUDE.mdに手で書き足す手もありますが、それだと「気づいた自分が書く」運用になり、続きません。そこで発想を変えて、手順を見つける作業ごとClaudeにやらせることにしました。
設計:2層生成 + Curator
スキルの生成を2つの層に分けています。
そして溜まったスキルを定期的に整理する Curator(skill-curate.sh)が週次で回ります。生成と整理を別プロセスに分けるのがポイントです。
層1:セッション中生成(無料・即時)
CLAUDE.mdにこう書いてあります(抜粋)。
## スキル自己生成(auto-skills)
作業の中で再利用価値のある手順を見つけたら、頼まれなくても自分でスキル化する。
ただし乱造はしない。
### 生成トリガー(いずれか該当時のみ)
- 5回以上ツールを使う非自明なタスクを最後までやり切った
- エラー・行き止まりにぶつかった後、動く回避策を見つけた
- ユーザーにアプローチを修正された(同じ修正を繰り返さないため)
- 再利用できる手順・コマンド列・ワークフローを発見した肝は「ただし乱造はしない」と、トリガーを4つに絞っていることです。これを書かないと、Claudeは何でもかんでもスキル化して、すぐにノイズだらけになります。
層2:夜間バッチ生成(取りこぼし回収)
セッション中に書きそびれた手順を、夜間バッチが会話ログから拾います。skill-harvest.sh のパイプラインはこうなっています。
- .harvest-watermark(前回処理位置)を読む
- 会話ログ(raw/conversations/*.md)からwatermark以降の差分を抽出
- claude -p ヘッドレスで頻出パターンを抽出(出現回数5回超のものだけ採用)
- 既存スキル全64個とkebab-nameで重複チェック
- cost-guard hookでトークン使用量を監視、しきい値超過でabort
- 新規候補を <name>/SKILL.md に frontmatter + Procedure / Pitfalls / Verification の3節で書き出し
- 末尾でCuratorをトリガし、古いスキルを退避
- watermarkを更新してログに追記
claude -p は前回の記事で触れたヘッドレス起動です。Max枠で回るのでAPIキー課金はゼロ。
隔離名前空間:なぜ auto/ に分けるか
自動生成スキルは、手書きスキルやプラグイン同梱スキルと同じ場所に置きません。~/.claude/skills/auto/ という隔離名前空間に押し込めています。理由は2つ。
- npx skills update -g が管理するのは lock 登録済みスキルだけ。auto/ のものは lock に入れない → 日次更新で消えない。
- Curatorは「auto/ 配下かつ author: auto」のものだけを対象にする → 手書きスキルやバンドルスキルには絶対に触れない。
この author: auto がCuratorの対象判定キーで、frontmatterに必須にしています。
---
name: <kebab-case>
description: <発火条件を具体的に>
author: auto # ← Curatorの対象判定キー。必須
created: <YYYY-MM-DD>
version: 1.0.0
status: active # active | stale(Curatorが自動設定)
---整理:Curatorは「消さない・提案だけ」
生成しっぱなしだとスキルは腐ります。Curatorが週次でこう動きます。
- 実行前に .snapshots/ へ tar.gz スナップショット
- 30日未使用 → status: stale に降格
- 90日未使用 → .archive/ へ退避(実削除はしない・コマンドで復元可)
- 重複・低品質の統合は .curator-proposals.md に提案のみ書き出す(自動適用しない)
ポイント
Curatorに自動削除をさせないのが安全設計の核です。「30日触ってない」はスキルが悪いとは限らない(その作業をしてないだけ)。だから降格と退避に留め、最終判断は人間に残します。
運用して分かったこと
生成は初期に集中し、その後逓減する
created: の分布を見ると、導入直後の3日(5/28〜30)で28個が一気に言語化され、その後は日に数個ペースに落ちました。これは直感に合います ―― 過去に溜めた「言語化されてない手順」が初期に放出され、その後は新しく出会った手順だけが追加されるからです。
12 created: 2026-05-30
9 created: 2026-05-29
7 created: 2026-06-09
6 created: 2026-06-11
5 created: 2026-06-10
5 created: 2026-05-28「乱造しない」は実際に効く
今朝のharvestログがこれです。
会話ログを精査した結果、以下の理由から該当なし。
- Codex CLI のセットアップ → codex-cli-setup が既存
- /insights を CLAUDE.md に反映 → insights-to-claude-md が既存
- カード債務の支払い優先順位 → 個人の財務状況に依存、再利用手順に非該当
該当なし
[2026-06-15 04:11:21] harvest done (exit 0, created=0)created=0。既存スキルとの重複を弾き、個人事情の一回限りの内容も弾いて、0個生成で正常終了しています。乱造しない設計が、空振りを「正しい空振り」として処理できている証拠です。ここでむやみに生成してしまうと、64個がすぐ200個に膨れてノイズ化します。
踏んだ落とし穴
実際のスキルの Pitfalls 節から、効いたものを。
- claude -p がsystem prompt全ロードでトークンcapに抵触 → MAXTHINKINGTOKENS=10000 で抑制
- watermarkを進め忘れて同じログを重複抽出 → ログのlast completed offsetを必ず確認
- kebab-nameのgrepだけだとファジー重複を見逃す → description embedding比較が改善余地(未実装)
- launchd 3:30起動だがmac sleep中はジョブがスキップ → pmset の wake on schedule 推奨
- ヘッドレスでMCP server全ロードすると起動が遅い → harvest専用のminimal configを別パスで持つ
最小構成:今日始めるなら
フルパイプラインはいりません。CLAUDE.mdに1ブロック足すだけで層1は動きます。
- ~/.claude/skills/auto/ を作る
- CLAUDE.mdに「再利用価値のある手順を見つけたら自分でスキル化する。ただし乱造しない」+トリガー4条件を書く
- frontmatterに author: auto を必須化(後で整理する時の目印)
これだけで、作業のたびにスキルが少しずつ増えます。夜間バッチとCuratorは、スキルが溜まって「整理したい」と感じてから足せば間に合います。
まとめ
- スキル生成をセッション中(無料)と夜間バッチ(取りこぼし回収)の2層に分ける
- 乱造しないをプロンプトに明記し、トリガーを絞る。空振り0生成が正常
- 自動生成は auto/ に隔離し、author: auto をCuratorの対象キーにする
- Curatorは消さない・降格と退避と提案だけ。最終判断は人間
- まずはCLAUDE.mdに1ブロックから
次回は、このスキルが増えすぎてClaude Code自体が重くなった話 ―― **コンテキスト注入を228KBから48KBに削った監査**を書きます。
この記事が良かったら
「チップをリクエスト」で著者にチップの受け取り設定をお願いできます
