#!/usr/bin/env bash # on-file-change.sh — Claude Code PostToolUse hook (Write|Edit) # ファイル変更時にvaultの関連ページを更新する # 呼び出し元: ~/.claude/settings.json → hooks.PostToolUse (async: true) set +e LOG="$HOME/vault/.sync.log" # stdinからJSON(tool_input)を読み取る INPUT=$(cat 2>/dev/null || true) [ -z "$INPUT" ] && exit 0 # 変更されたファイルパスを抽出 FP=$(echo "$INPUT" | python3 -c " import sys, json try: d = json.load(sys.stdin) ti = d.get('tool_input', d) print(ti.get('file_path', ti.get('path', ''))) except: print('') " 2>/dev/null || echo "") [ -z "$FP" ] && exit 0 # パスに基づいて同期対象を判定(case文でgrepを避ける) case "$FP" in */vault/*) # vault内のファイル変更は無視(再帰防止) ;; */CLAUDE.md) echo "[$(date '+%F %T')] CLAUDE.md changed: $FP" >> "$LOG" ;; */.claude/projects/*/memory/*|*/memory/*) echo "[$(date '+%F %T')] Memory changed: $FP" >> "$LOG" ;; */.claude/skills/*|*/skills/*) echo "[$(date '+%F %T')] Skill changed: $FP" >> "$LOG" ;; */clients/*/minutes/*) echo "[$(date '+%F %T')] Minutes changed: $FP" >> "$LOG" ;; *) # 同期対象外 ;; esac exit 0