#!/bin/bash # SessionStart hook(matcher: clear / compact): 引き継ぎメモを新しい文脈へ自動で注入する # # 文脈が閾値を超えると、stop-bye-trigger.sh が /checkpoint と引き継ぎメモの書き出しを指示する。 # メモは ~/.claude/handoff/<起動ディレクトリの / を - にした名前>.md に置かれる。 # ユーザーが /clear と打つだけで続きから再開できるよう、ここでメモを読み込ませる。 # 読んだメモは used/ へ退避し、二度注入しない。更新から 6 時間を超えたメモ(別作業の残骸)は注入せずに used/ へ移す。 MAX_AGE_SEC=$((6 * 3600)) input=$(cat) case "$(echo "$input" | jq -r '.source // empty' 2>/dev/null)" in clear|compact) ;; *) exit 0 ;; esac cwd=$(echo "$input" | jq -r '.cwd // empty' 2>/dev/null) # stop-auto-resume.sh と同じく、Bash の cd でずれない起動ディレクトリをメモ名に使う key=${CLAUDE_PROJECT_DIR:-$cwd} [ -z "$cwd" ] && exit 0 dir="$HOME/.claude/handoff" file="$dir/${key//\//-}.md" # 自動再開を止める印(stop-auto-resume.sh 用)は文脈 1 周限り。次の周回へ持ち越さない rm -f "${file%.md}.noauto" [ -f "$file" ] || exit 0 mkdir -p "$dir/used" used="$dir/used/$(basename "$file" .md)-$(date +%Y%m%d-%H%M%S).md" age=$(( $(date +%s) - $(stat -f %m "$file" 2>/dev/null || stat -c %Y "$file") )) if [ "$age" -gt "$MAX_AGE_SEC" ]; then mv "$file" "$used" exit 0 fi body=$(cat "$file") mv "$file" "$used" jq -nc --arg m "直前のセッションが文脈リセットの前に残した引き継ぎメモ(${used})。この内容を前提に作業を再開し、最初の応答で「引き継ぎメモから再開した」と一言添えること。 $body" '{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:$m}}'