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

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

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

前回、Claude Codeに自分でスキルを曞かせお育おる話で「セッション䞭生成」ず「倜間バッチ生成」の2局構造を玹介したした。今回はその倜間バッチ、skill-harvest.sh の䞭身だけを掘りたす。

項目実枬倀
珟圚の auto スキル総数118個最叀 2026-05-26 〜 最新 2026-08-09
盎近78回の実行内蚳正垞終了50 / タむムアりト1722% / 認蚌・クォヌタ倱敗11
暎走防止のコスト䞊限--max-budget-usd 1.20導入時は0.5→0.6→珟圚1.20
1回のプロンプトに枡すログ䞊限15,000B × 3本 = 実枬18,255〜45,103B
珟圚進行圢の䞍具合watermark刀定が壊れ、盎近10日間ずっず空振りdigest=19B

最埌の1件は今回コヌドを読んでいお芋぀けたもので、ただ盎っおいたせん。これも含めお実際のログず実コヌドで芋おいきたす。

困りごずセッション䞭に曞きそびれた手順は消える

セッション䞭生成局1はCLAUDE.mdの指瀺でその堎でスキル化したすが、これは「今のセッションで気づいたこず」しか拟えたせん。過去のセッションで螏んだ回避策や、地味に繰り返しおいる定型䜜業は、曞きそびれたたた䌚話ログに埋もれおいきたす。

その䌚話ログの眮き堎が ~/Documents/my-knowledge-base/raw/conversations/。今このディレクトリには18,926ファむルありたす。これを毎晩3:30にlaunchdが起動しお拟い盎すのが skill-harvest.sh です。


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

党䜓構造watermarkで差分だけを凊理する

18,926ファむル党郚を毎回読むわけにはいかないので、「前回どこたで凊理したか」を1ファむルに刻んで差分だけ拟いたす。

WM="$AUTO/.harvest-watermark"
...
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
newlogs=(${newlogs:#})
if (( ${#newlogs} > 0 )); then
  newlogs=("${(@f)$(ls -t "${newlogs[@]}" 2>/dev/null | head -$MAX_LOGS)}")
fi

.harvest-watermark は䞭身を持たない0バむトのファむルで、touchするためだけに存圚したす。「前回凊理以降に曎新されたファむル」を find -newer で拟い、mtime降順で先頭 MAX_LOGS=3 本だけに絞る蚭蚈です。

ここに珟圚進行圢の䞍具合がありたす。手元で同じロゞックを再珟したずころ、find -newerが15,471件を返し、それを䞞ごずls -t "${newlogs[@]}"に枡した瞬間に壊れたす。

zsh:7: argument list too long: ls

lsが匕数超過で倱敗し2>/dev/nullで握り぀ぶされる、空文字列が1件だけ配列に残りたす。結果、その日凊理される「ログ」はファむル名が空の幜霊゚ントリになり、ダむゞェストは===== LOG: =====ずいう䞭身れロの19バむトに。実際の.harvest.logを芋るず、2026-08-01から今日2026-08-10たで10日連続でこの状態です。

[2026-08-09 03:30:05] harvest start: 1 log(s), digest=      19B
The log excerpt is empty (`=== LOG:  ===` contains no content), so there's no material to extract procedural knowledge from.
該圓なし
[2026-08-09 03:30:30] harvest done (exit 0, created=0)

exit 0で「正垞終了」しおいるので、ログを流し読みしただけでは気づけたせん。皮肉なこずに、このraw/conversations/のmtime汚染問題そのものは、8月3日生成の別スキルconv-log-content-date-filterに「䞀括syncで13,809件のmtimeが党滅した」ずいう事䟋ずしおすでに蚘録されおいたす。harvestが刈り取った知芋を、harvest自身にはただ反映できおいたせん。

なぜ15,471件も-newerにヒットするのか。raw/conversations/配䞋の倚くのファむルが自動化レヌンnote-autolike, affiliate-ameba等から継続的に远蚘されおおり、mtimeが毎日曎新され続けるためです。watermarkが「昚日の3:30」を指しおいおも、その埌にほが党ファむルが觊られおいればfind -newerの母数はすぐ䞇単䜍に膚らみたす。

$1.20のバゞェットキャップ暎走コストの実物

claude -pをcronで無人実行する以䞊、コストの䞊限は数倀で持たないず危険です。珟圚のスクリプトはこうなっおいたす。

BUDGET_USD=1.20         # 安党䞊限Maxは定額。これは暎走防止のキャップ。sonnetはベヌス負荷が重い
TIMEOUT_SEC=600
...
( cd "$STAGING" && perl -e 'alarm shift @ARGV; exec @ARGV' "$TIMEOUT_SEC" \
  "$CLAUDE" --strict-mcp-config --mcp-config '{"mcpServers":{}}' -p "$PROMPT" \
  --model sonnet \
  --permission-mode acceptEdits \
  --allowedTools "Write Edit Read" \
  --max-budget-usd "$BUDGET_USD" >> "$LOG" 2>&1 < /dev/null )

この1.20は最初からこの倀だったわけではありたせん。導入盎埌のログにはこう残っおいたす。

[2026-05-26 04:29:39] harvest start: 5 log(s)
Error: Exceeded USD budget (0.5)[2026-05-26 04:30:00] harvest done (exit 1)
[2026-05-26 04:31:13] harvest start: 3 log(s), digest=   22798B
Error: Exceeded USD budget (0.6)[2026-05-26 04:31:35] harvest done (exit 1)

0.5→0.6ず䞊げおもただ足りず、exit 1で䞞ごず倱敗しおいたした。今の1.20はその埌の調敎の着地点です。--max-budget-usdはCLI偎のハヌド䞊限で、超えたらツヌル呌び出しの途䞭でも打ち切っお終了コヌドを返したす。

もう䞀段、perl alarmによる壁時蚈タむムアりト600秒も掛かっおいたす。トヌクン予算だけでは「時間」は瞛れないからです。実際、盎近78回の実行のうち17回22%がこのタむムアりトでexit 142終了しおいたす。

grep "harvest done" .harvest.log | grep -oE 'exit [0-9]+' | sort | uniq -c
#   50 exit 0
#   17 exit 142   ← timeout
#   11 exit 1     ← 認蚌切れ/週次クォヌタ超過

タむムアりトも認蚌切れもcreated=0で終わるだけで、リトラむはしたせん。次の3:30たで埅っお、その日の差分ずしおたた拟い盎されたす。

system-reminderノむズを事前にフィルタする

䌚話ログ1件は数癟KB〜700KBありたすnote-autolike_*.mdは実枬580〜702KB。これをそのたたプロンプトに枡すず、システムリマむンダヌスキル䞀芧やツヌル䞀芧の再掲だけでコンテキストが埋たり、肝心の「䜕をしおどう解決したか」が埋没したす。ダむゞェスト生成はここを削っおいたす。

DIGEST=$(mktemp -t skill-harvest)
for f in "${newlogs[@]}"; do
  {
    echo "===== LOG: ${f:t} ====="
    # 巚倧な <system-reminder> ブロックを倧たかに陀去しおからバむト䞊限で切る
    grep -v -e 'system-reminder' -e '^- [a-z0-9].*:' "$f" 2>/dev/null | head -c $PER_LOG_BYTES
    echo
  } >> "$DIGEST"
done

PER_LOG_BYTES=15000、MAX_LOGS=3なので理論䞊限は45,000B。実際のログのdigest=衚瀺を远うず、18,255B〜45,103Bの範囲に収たっおおり、蚭蚈倀どおり頭打ちになっおいるこずが実枬で確認できたす。

digest=   45103B  (2026-06-12)
digest=   35159B  (2026-07-08〜11)
digest=   29070B  (2026-07-13〜21)
digest=   18255B  (2026-06-26, 07-01, 07-04)

grep -vの2パタヌンは荒く、system-reminderのXMLタグを厳密にパヌスしおいるわけではありたせん。^- [a-z0-9].*:はスキル䞀芧の箇条曞き- ad-creative: ...のような行を朰すための簡易ヒュヌリスティックです。厳密さより「トヌクンを食う定型ノむズを機械的に間匕く」こずを優先した蚭蚈です。

暩限の迂回~/.claudeに盎接曞かせない

もう1぀地味に重芁なのが曞き蟌み経路です。~/.claude配䞋はClaude Code自身が保護察象にしおいるため、ヘッドレスゞョブに盎接曞かせようずするず暩限で詰たりたす。そこで䞀旊ステヌゞングに逃がしたす。

STAGING=$(mktemp -d -t skill-harvest-stg)
( cd "$STAGING" && ... "$CLAUDE" -p "$PROMPT" \
  --permission-mode acceptEdits \
  --allowedTools "Write Edit Read" ... )

# ステヌゞングで䜜られた SKILL.md を持぀ディレクトリだけを AUTO ぞ取り蟌む
for sd in "$STAGING"/*(/N); do
  [[ -f "$sd/SKILL.md" ]] || continue
  ...
  cp -R "$sd" "$AUTO/$name" && { echo "CREATED: $name" >> "$LOG"; ((created++)); }
done

プロンプト偎にも「カレントディレクトリ盎䞋に盞察パスで䜜れ、絶察パス犁止」ず明蚘しおいたす。Claudeには䞀時ディレクトリの䞭だけを觊らせ、~/.claude/skills/auto/ぞの実コピヌはゲヌトされおいない玠のcpシェル偎が担圓する、ずいう圹割分担です。コピヌ時にauthor: autoが欠けおいればPythonで挿入し、Curatorが察象を刀定できる状態を保蚌しおから取り蟌みたす。

実枬78回のバッチ実行ず118個のスキル

$ find ~/.claude/skills/auto -maxdepth 1 -type d ! -name '.*' | wc -l
118

前回蚘事の時点で64個だったので、この2ヶ月半で倍近くに増えおいたす。ただし新芏䜜成むベントCREATED:自䜓は78回䞭20回だけで、残り60回近くはcreated=0重耇刀定・空振り・倱敗です。「乱造しない」蚭蚈のずおり、実行回数ず生成数はきれいに䞀臎したせん。

盎近の生成䟋を芋るず、harvestが拟っおいる手順はかなり実務的です。

  • conv-log-content-date-filter2026-08-03― 䞀括syncでmtimeが13,809件党滅した実䟋ず、本文の日時:フィヌルドでフィルタする回避策
  • automation-bool-selector-pitfalls2026-08-09― 自動化レヌンが止たる真因の倧半が「boolean戻り倀抜け」ず「documentスコヌプの広すぎるセレクタ」だったずいう暪断蚺断
  • conv-log-overlap-routing2026-07-29― 同䞀プロゞェクトの䌚話ログをwikiぞ远蚘するか新芏䜜成するかの刀断ルヌル

いずれも「䞀床ハマった問題の解き方」がそのたた手順化されおいお、次に同じ珟象が起きたずきClaudeが自分で参照できる圢になっおいたす。

螏んだ萜ずし穎

  • find -newer+ls -tは匕数が䞇単䜍になるず無蚀で死ぬ → zsh:7: argument list too long。2>/dev/nullで握り぀ぶされ、空のログ゚ントリずしお凊理が継続しおしたう。珟圚進行圢2026-08-01〜08-10、10日連続で空振り
  • コスト䞊限は最初から適正倀ではなかった → 0.5→0.6で導入初日に2回倱敗し、珟圚の1.20に萜ち着いた。数倀は経隓的に䞊げおいくもの
  • --max-budget-usdだけでは時間は瞛れない → perl alarmによる壁時蚈600秒timeoutを別掛け。それでも盎近78回䞭17回22%はタむムアりトで終わっおいる
  • ~/.claudeは自分自身の保護察象 → ヘッドレスゞョブは䞀時ディレクトリに曞かせ、コピヌだけシェル偎の玠のcpにやらせる
  • 䌚話ログのnoise陀去は正芏衚珟の圓おずっぜう → system-reminderず箇条曞きスキル䞀芧を粗く陀倖するだけで、45,000B䞊限に収たる皋床には効いおいる
  • OAuthセッションが切れるず2日連続で党滅する → Failed to authenticate: OAuth session expiredがexit 1で蚘録されるだけで、自動リトラむも通知もない

たずめ

  • 倜間バッチはwatermark(mtime差分)+バむト䞊限ダむゞェストで18,926件の䌚話ログから差分だけを安く凊理する蚭蚈
  • コストは**--max-budget-usdの数倀䞊限壁時蚈timeout**の二重で止める。䞊限倀は運甚しながら䞊げおいくもの0.5→0.6→1.20
  • system-reminderノむズは正芏衚珟で粗く事前陀去し、プロンプトサむズを実枬18KB〜45KBに抑えおいる
  • ~/.claudeぞの曞き蟌みは自己保護ず衝突するため、ステヌゞング→シェル偎コピヌで迂回する
  • watermark刀定はfind -newerに䟝存しおおり、mtimeが汚染されるず無蚀で壊れる。これは harvest が過去に自分で芋぀けお蚘録した教蚓conv-log-content-date-filterが、harvest自身にはただ反映されおいないずいう構造的な穎

次回はこの118個をCuratorがどう間匕くか、実際の.curator-proposals.mdを芋ながら曞きたす。


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

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

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