Tsukutta

🌱Claude Codeに自分でスキルを書かせて育てる

自己増殖するエージェント環境

Lily2026年6月18日公開
約11分で読めます5

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つの層に分けています。

そして溜まったスキルを定期的に整理する Curatorskill-curate.sh)が週次で回ります。生成と整理を別プロセスに分けるのがポイントです。

層1:セッション中生成(無料・即時)

CLAUDE.mdにこう書いてあります(抜粋)。

text
## スキル自己生成(auto-skills)
作業の中で再利用価値のある手順を見つけたら、頼まれなくても自分でスキル化する。
ただし乱造はしない。
### 生成トリガー(いずれか該当時のみ)
- 5回以上ツールを使う非自明なタスクを最後までやり切った
- エラー・行き止まりにぶつかった後、動く回避策を見つけた
- ユーザーにアプローチを修正された(同じ修正を繰り返さないため)
- 再利用できる手順・コマンド列・ワークフローを発見した

肝は「ただし乱造はしない」と、トリガーを4つに絞っていることです。これを書かないと、Claudeは何でもかんでもスキル化して、すぐにノイズだらけになります。

層2:夜間バッチ生成(取りこぼし回収)

セッション中に書きそびれた手順を、夜間バッチが会話ログから拾います。skill-harvest.sh のパイプラインはこうなっています。

  1. .harvest-watermark(前回処理位置)を読む
  1. 会話ログ(raw/conversations/*.md)からwatermark以降の差分を抽出
  1. claude -p ヘッドレスで頻出パターンを抽出(出現回数5回超のものだけ採用)
  1. 既存スキル全64個とkebab-nameで重複チェック
  1. cost-guard hookでトークン使用量を監視、しきい値超過でabort
  1. 新規候補を <name>/SKILL.md に frontmatter + Procedure / Pitfalls / Verification の3節で書き出し
  1. 末尾でCuratorをトリガし、古いスキルを退避
  1. 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に必須にしています。

text
---
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個が一気に言語化され、その後は日に数個ペースに落ちました。これは直感に合います ―― 過去に溜めた「言語化されてない手順」が初期に放出され、その後は新しく出会った手順だけが追加されるからです。

text
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ログがこれです。

text
会話ログを精査した結果、以下の理由から該当なし。
- 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は動きます。

  1. ~/.claude/skills/auto/ を作る
  1. CLAUDE.mdに「再利用価値のある手順を見つけたら自分でスキル化する。ただし乱造しない」+トリガー4条件を書く
  1. frontmatterに author: auto を必須化(後で整理する時の目印)

これだけで、作業のたびにスキルが少しずつ増えます。夜間バッチとCuratorは、スキルが溜まって「整理したい」と感じてから足せば間に合います。

まとめ

  • スキル生成をセッション中(無料)と夜間バッチ(取りこぼし回収)の2層に分ける
  • 乱造しないをプロンプトに明記し、トリガーを絞る。空振り0生成が正常
  • 自動生成は auto/ に隔離し、author: auto をCuratorの対象キーにする
  • Curatorは消さない・降格と退避と提案だけ。最終判断は人間
  • まずはCLAUDE.mdに1ブロックから

次回は、このスキルが増えすぎてClaude Code自体が重くなった話 ―― **コンテキスト注入を228KBから48KBに削った監査**を書きます。

この記事が良かったら

「チップをリクエスト」で著者にチップの受け取り設定をお願いできます

シェア