明日からゴールデンウィークだ。家族で出かける予定があり、その間も Claude Code には簡単な作業を任せて出ようと思っている。データの整理や、長めのドキュメントの草案づくりみたいな、私がいなくても進められそうな仕事だ。
ただ、過去の経験から言うと、Claude Code は「留守番中」 という状況を知らない。人間が連休でゆっくりしている間も、AI は同じペースで動き続ける。これが本当に怖い。実際、以前似たようなことをやって、半日で 5,000 円分くらいのトークンを溶かしたことがある。気づいたのは家から戻った時、API の利用画面を開いた瞬間だった。
連休前にやっておくと、帰ってきた時に自分が泣かなくて済むことが、3 つある。
1. 自動圧縮は止められない、と覚悟する
「長く動かすと context compaction が走って文脈が消えるから、autoCompactEnabled を false にしておけば大丈夫」 と書いてある記事もあるが、これは効かない。
GitHub Issue #42817 で、auto-compact を無効化する全ての公式経路 (/config、claude config set、settings.json、環境変数) が現在は機能していない、という測定付きの報告が並んでいる。コンテキスト容量の約 35% で勝手に圧縮が走るケースまで観測されている。
つまり、留守番中に圧縮は必ず起きる。問題は「圧縮が起きること」 ではなく「圧縮の前の状態が記録されていないこと」。これは hook で対処できる。
2. 留守番中の暴走を止める「予算 hook」
Stop hook で 1 日のトークン消費量を読み、上限を超えたら警告を出す仕組みを入れておく。
#!/usr/bin/env bash
# daily-cost-guard.sh — 当日累計が閾値を超えたら警告して停止する
DAILY_LIMIT_USD=5.00
WARN_THRESHOLD_USD=3.50
LOG_DIR="${HOME}/.claude/cost-log"
mkdir -p "${LOG_DIR}"
TODAY=$(date +%Y-%m-%d)
LOG_FILE="${LOG_DIR}/${TODAY}.jsonl"
# Claude Code の出力から当日累計を集計するロジックは省略
TODAY_USD=$(your_aggregator_here)
if (( $(echo "$TODAY_USD > $DAILY_LIMIT_USD" | bc -l) )); then
echo "🛑 当日 \$${TODAY_USD} が上限 \$${DAILY_LIMIT_USD} を超えました" >&2
exit 2 # Stop hook で exit 2 = 作業を止める
fi
~/.claude/settings.json に登録:
{
"hooks": {
"Stop": [
{ "matcher": "", "hooks": [
{ "type": "command", "command": "/path/to/daily-cost-guard.sh" }
]}
]
}
}
これがあると、暴走しても上限で止まる。家族と過ごしている間に予算が爆発する事故を防げる。
3. 帰宅した時に進捗が分かる「圧縮直前の保存 hook」
PreCompact hook で、圧縮が走る直前に未コミットの変更を git に強制保存する。圧縮で AI が「何の作業をしていたか」 を忘れても、git 履歴から復旧できる。
#!/bin/bash
# precompact-git-checkpoint.sh — 圧縮直前で git に一時保存を作る
git rev-parse --is-inside-work-tree &>/dev/null || exit 0
CHANGES=$(git status --porcelain 2>/dev/null | wc -l)
[ "$CHANGES" -eq 0 ] && exit 0
BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
TIMESTAMP=$(date -u '+%Y%m%d-%H%M%S')
git add -A 2>/dev/null
git commit -m "checkpoint: pre-compact auto-save (${CHANGES} files, ${TIMESTAMP})" --no-verify 2>/dev/null
echo "📸 Pre-compact 一時保存: ${CHANGES} ファイル on ${BRANCH}" >&2
echo " 復旧は: git log --oneline -5" >&2
settings.json への登録:
{
"hooks": {
"PreCompact": [
{ "matcher": "", "hooks": [
{ "type": "command", "command": "/path/to/precompact-git-checkpoint.sh" }
]}
]
}
}
帰宅後、git log --oneline -5 を見れば「最後に AI が何をやったか」 がわかる。圧縮で AI 自身が忘れていても、git は忘れない。
連休に持って行きたい順番
家族と出かける前に、私はこの順番で確認する。
- 予算 hook が動いているか (
~/.claude/cost-log/$(date +%Y-%m-%d).jsonlが増えるか軽く回して試す) - PreCompact hook が登録されているか (
~/.claude/settings.jsonのPreCompact配列を目視) - 任せる作業を git で枝を切って始める (失敗しても main に戻れる状態にしておく)
完璧な留守番にはならない。でも「予算が爆発」 と「進捗ゼロ」 のダブルパンチで連休が台無しになる事故は、これでだいぶ減らせる。
人間は連休があるが、Claude Code は連休を知らない。だから連休前にこちらで仕掛けを作っておくしかない。家族の方が AI より大事だ。それを揃えてから、出かけよう。