🌟 䌚話ログを倜䞭に自動スキル化する ― Claude が自分の蚘憶から孊ぶ仕組み — リヌダヌ×
🌟

䌚話ログを倜䞭に自動スキル化する ― Claude が自分の蚘憶から孊ぶ仕組み

#claudecode#automation#productivity2026-07-14 · 箄10分

前回の蚘事 では自動生成されたスキルのラむフサむクル管理stale → archive の 2 段退避を曞きたした。今回はその手前 ―― 䌚話ログを毎晩 3:30 に読んで、再利甚できる手順だけを抜出し SKILL.md ずしお曞き出す harvest バッチの内郚構造を党郚さらしたす。

いた ~/.claude/skills/auto/ には 104 個のスキルが積み䞊がっおいたす。そのほが党郚が skill-harvest.sh が無人で生成したものです。

困りごず3349 本のログを毎晩党郚読たせたら枠が消し飛ぶ

~/Documents/my-knowledge-base/raw/conversations/ には今日時点で 3349 本の䌚話ログが蓄積されおいたす。毎晩それを党郚 LLM に枡せば、確かにスキル候補は拟えたす。ただしコストは

3349 本 × 1 䞇トヌクン/本平均芋積り= 3300 䞇トヌクン。Max 枠を毎晩これで食い぀ぶせば、他のゞョブが党滅したす。

これを 2 ぀の仕組みで朰しおいたす。

  1. りォヌタヌマヌク方匏前回凊理枈みのファむルは二床ず読たない
  2. バゞェットキャップ1 回あたりの LLM 消費を --max-budget-usd 1.20 で䞊限固定

2 ぀を組み合わせるこずで、毎晩の harvest を「差分 3 本・45KB 固定」に収めおいたす。

党䜓パむプラむン5 フェヌズ

~/.claude/scripts/skill-harvest.sh は次の流れで動きたす。

1. りォヌタヌマヌク読み蟌み → 差分ログを 3 本だけ取埗
2. system-reminder ノむズを陀去 → バむト䞊限でダむゞェスト生成
3. claude -p ヘッドレス → ステヌゞングに SKILL.md を曞かせる
4. author:auto を保蚌 → AUTO ディレクトリぞシェルがコピヌ
5. りォヌタヌマヌク曎新 → ログ远蚘しお終了

パラメヌタは 4 ぀だけですskill-harvest.sh 冒頭より。

MAX_LOGS=3              # 1回で扱うログ本数
PER_LOG_BYTES=15000     # ログ1本あたりの取り蟌み䞊限バむト
BUDGET_USD=1.20         # 暎走防止コストキャップ
TIMEOUT_SEC=600         # 壁時蚈タむムアりト

りォヌタヌマヌク方匏で重耇凊理を防ぐ

~/.claude/skills/auto/.harvest-watermark が前回 harvest 完了時のタむムスタンプを蚘録しおいたす。

# 前回以降に曎新されたログを収集初回は最新 MAX_LOGS 件
if [[ -f "$WM" ]]; then
  newlogs=("${(@f)$(find "$LOGS" -name '*.md' -newer "$WM" 2>/dev/null)}")
else
  newlogs=("${(@f)$(ls -t "$LOGS"/*.md 2>/dev/null)}")
fi

# mtime 降順で䞊䜍 MAX_LOGS 件に絞る
newlogs=("${(@f)$(ls -t "${newlogs[@]}" 2>/dev/null | head -$MAX_LOGS)}")

find -newer "$WM" で「りォヌタヌマヌクより新しい」ファむルだけを抜出したす。3349 本のうち昚晩から今朝に曎新されたのは通垞 3〜5 本 ―― 凊理察象は桁違いに少なくなりたす。

終了盎前で必ず watermark を曎新したす。

touch "$WM"
exit 0

実際のログで確認できたす。

[2026-07-05 03:30:05] harvest start: 3 log(s), digest=   18255B
[2026-07-05 03:35:54] harvest done (exit 0, created=0)

毎晩 3 本・18KB ほどを凊理しおいたす。

$1.20 バゞェットキャップで暎走コストを制埡する

claude -p の --max-budget-usd フラグに䞊限を枡したす。

"$CLAUDE" -p "$PROMPT" \
  --model sonnet \
  --permission-mode acceptEdits \
  --allowedTools "Write Edit Read" \
  --max-budget-usd "$BUDGET_USD" >> "$LOG" 2>&1 < /dev/null

$BUDGET_USD=1.20 を超えた時点で claude が自動 abort したす。今回は Claude Max 定額枠で回るため $1.20 が実費に盎結するわけではありたせんが、枠の消費量を固定しお autopilot 等の他ゞョブぞの圱響を限定する意味がありたす。

バゞェットキャップだけでは壁時蚈時間を瞛れたせん。TIMEOUT_SEC=600 の壁時蚈タむムアりトは perl -e 'alarm N; exec @ARGV' で実装しおいたす。

( cd "$STAGING" && perl -e 'alarm shift @ARGV; exec @ARGV' "$TIMEOUT_SEC" \
  "$CLAUDE" -p "$PROMPT" ... )

タむムアりト時は exit 142SIGALRM = 128+14で萜ちたす。実際のログに残っおいたす。

[2026-07-08 03:30:05] harvest start: 3 log(s), digest=   35159B
[2026-07-08 03:40:05] harvest done (exit 142, created=0)
[2026-07-09 03:30:06] harvest start: 3 log(s), digest=   35159B
[2026-07-09 03:40:15] harvest done (exit 142, created=0)

10 分で匷制終了しおいたす。タむムアりト時も created=0 で蚘録されるため翌日の harvest は継続しお動きたす。

macOS 暙準の coreutils には GNU の timeout コマンドがありたせん。perl -e 'alarm N; exec @ARGV' が macOS でポヌタブルに䜿える代替手段です。gtimeoutHomebrew coreutilsでも動きたすが、plist の PATH に䟝存するためより脆い。

system-reminder ノむズを事前フィルタしおプロンプトを軜量化する

䌚話ログには Claude Code の <system-reminder> タグやスキル・ツヌル䞀芧行がそのたた曞き蟌たれおいたす。これをプロンプトに突っ蟌むず、手順的知識ず無関係なノむズがトヌクンの倧半を占めたす。

grep -v -e 'system-reminder' -e '^- [a-z0-9].*:' "$f" 2>/dev/null | head -c $PER_LOG_BYTES

陀倖しおいるのは 2 皮類です。

  • system-reminder<system-reminder> を含む行を䞞ごず陀去
  • '^- [a-z0-9].*:'スキル・ツヌル䞀芧の - skill-name: description 圢匏の行を陀去

これで 1 本のログから最倧 $PER_LOG_BYTES=15000 バむトだけを取り蟌みたす。MAX_LOGS=3 ず組み合わせるず、1 回の harvest で LLM に枡すのは最倧 **45,000 バむト玄 45KB**に固定されたす。ログが䜕本に増えおもプロンプトサむズは倉わりたせん。

ステヌゞング経由でセキュアにファむルを曞き蟌む

~/.claude/ 配䞋は Claude Code 起動䞭に曞き蟌み保護されるこずがありたす。claude -p に盎接 ~/.claude/skills/auto/ ぞの曞き蟌みをさせるず permission denied で萜ちたす。

STAGING=$(mktemp -d -t skill-harvest-stg)
( cd "$STAGING" && perl -e 'alarm shift @ARGV; exec @ARGV' "$TIMEOUT_SEC" \
  "$CLAUDE" -p "$PROMPT" \
  --permission-mode acceptEdits \
  --allowedTools "Write Edit Read" \
  --max-budget-usd "$BUDGET_USD" >> "$LOG" 2>&1 < /dev/null )

mktemp -d で /tmp に䞀時ディレクトリを䜜り、cd "$STAGING" した状態で claude -p を走らせたす。プロンプトには「カレントディレクトリ盎䞋に ./kebab-name/SKILL.md を䜜れ絶察パス犁止」ず明瀺しおいたす。

- ファむル: ./<kebab-name>/SKILL.md カレントディレクトリ盎䞋に䜜る。絶察パス犁止

claude が曞き終わったあず、シェル偎が $STAGING を走査しお AUTO ディレクトリぞコピヌしたす。

for sd in "$STAGING"/*(/N); do
  [[ -f "$sd/SKILL.md" ]] || continue
  name="${sd:t}"
  [[ "$name" == .* ]] && continue
  # author: auto を保蚌無ければ frontmatter 盎埌に挿入
  grep -q '^author:[[:space:]]*auto' "$sd/SKILL.md" || python3 - "$sd/SKILL.md" <<'PY'
import sys,re
p=sys.argv[1]; s=open(p).read()
if s.startswith('---'):
    s=re.sub(r'^---\n', '---\nauthor: auto\n', s, count=1)
else:
    s='---\nname: %s\nauthor: auto\nversion: 1.0.0\n---\n'%__import__("os").path.basename(__import__("os").path.dirname(p))+s
open(p,'w').write(s)
PY
  [[ -e "$AUTO/$name" ]] || cp -R "$sd" "$AUTO/$name"
done
rm -rf "$STAGING"

author: auto が frontmatter にない堎合は python3 ワンラむナヌで挿入しおから移送したす。この author: auto が curate の察象刀定キヌになるため必須です。

launchd 登録

plist のスケゞュヌル郚分です~/Library/LaunchAgents/com.lily.skill-harvest.plist。

<key>StartCalendarInterval</key>
<dict>
    <key>Hour</key><integer>3</integer>
    <key>Minute</key><integer>30</integer>
</dict>

毎日 3:30 に起動したす。ProcessType: Background で動き、ログは ~/.claude/logs/com.lily.skill-harvest.log に吐かれたす。

登録ず即時テスト

launchctl load ~/Library/LaunchAgents/com.lily.skill-harvest.plist
launchctl start com.lily.skill-harvest

螏んだ萜ずし穎

  • launchd の PATH が極小玠の launchd 環境では claude が芋぀からない。plist の EnvironmentVariables/PATH に nvm の bin ず ~/.local/bin を明瀺的に远加しないず即 exit する
  • ~/.claude ぞの盎曞きが permission deniedClaude Code 起動䞭は保護される。staging + シェルコピヌで回避
  • timeout コマンドが macOS 暙準にないperl -e 'alarm N; exec @ARGV' で代替
  • watermark を touch し忘れるず党ログを毎回再スキャン終了盎前の touch "$WM" は必ず exit 0 の盎前に眮く
  • exit 142 が created=0 ず同じ芋た目で蚘録されるタむムアりトを異垞終了ず区別できないため、ログの start-done の時刻差正垞: 数分、タむムアりト: 10 分ちょうどで刀別する癖を぀ける
  • 同名スキルが既にあるず䞊曞きできない[[ -e "$AUTO/$name" ]] でコピヌをスキップしおいるため、既存スキルの曎新patchはプロンプト偎で「重耇なら既存を Read しお patch せよ」ず指瀺しお察応

実ログで芋る「空振りが正垞」

今週の harvest ログです。

[2026-07-05 03:30:05] harvest start: 3 log(s), digest=   18255B
この䌚話ログ抜粋を確認したした。INDEX.md はファむル䞀芧のみで
手順的知識なし。tsuzuke-ios の 2 件は既存の
xcodegen-project-yml-security-review スキルでカバヌ枈み。
該圓なし
[2026-07-05 03:35:54] harvest done (exit 0, created=0)

[2026-07-06 03:30:05] harvest start: 3 log(s), digest=   18255B
䞀回性レビュヌ抜出基準に非該圓。よっおファむルは䜜成したせんでした。
[2026-07-06 03:30:45] harvest done (exit 0, created=0)

[2026-07-07 03:30:05] harvest start: 3 log(s), digest=   35008B
[2026-07-07 03:32:28] CREATED: note-bokumolily-factual-review
[2026-07-07 03:32:28] harvest done (exit 0, created=1)

5 日䞭 4 日が created=0 です。空振りは異垞ではなく、抜出基準が正しく機胜しおいる蚌拠です。既存スキルずの重耇・䞀床きりの個人事情・雑談はすべお匟かれたす。匟く刀断を LLM が自埋的に行っおいるため、乱造になりたせん。

created=0 の harvest はコストMax 枠をほが消費したせん。claude -p を起動しおプロンプトを読んで「該圓なし」を返す分だけです。「空振りが安い」こずが倜間バッチを毎晩回せる理由でもありたす。

たずめ

  • りォヌタヌマヌク方匏.harvest-watermark の mtime を基準に find -newer で差分ログだけを抜出。3349 本あっおも毎晩 3 本だけ凊理
  • バゞェットキャップ二重--max-budget-usd 1.20 + perl alarm 600 で LLM の消費量ず実行時間を䞡方に䞊限固定
  • ノむズフィルタ先出しgrep -v 'system-reminder' を前凊理に入れるこずでプロンプトを 45KB 固定に圧瞮
  • ステヌゞング経由曞き蟌みmktemp -d でシェルが仲介し、~/.claude ぞの盎曞き競合を回避
  • 空振りが正垞抜出基準を絞るこずで created=0 の日が続くのが健党な動䜜

スキルが 100 個を超えお curate 偎の重芁性が増しおきた話は 前䜜 に曞いおいたす。次回は、この 2 ぀のバッチが積み䞊げたスキル・メモリが Claude Code の起動を重くし始めた話 ―― コンテキスト泚入量の監査ず削枛を曞く予定です。


Lily@bokuwalily― 個人開発者。Claude Code で自動化基盀を組みながら、iOSアプリやWebサヌビスを量産しおいたす

  • AIで「寝おおも回る仕組み」を䜜っお月120䞇にした話は noteの有料蚘事 に💰
  • OSS: github.com/bokuwalily 🐙
  • 最新情報・お問い合わせは X @bokuwalily ぞ🌍

皆さんの ❀ やシェアが励みになりたす