diff --git a/hooks/session-end.sh b/hooks/session-end.sh index fb4dd83..6e17214 100755 --- a/hooks/session-end.sh +++ b/hooks/session-end.sh @@ -5,12 +5,20 @@ # It spawns a background process to analyze the session and update learnings. # +LOG_FILE="${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/session-end.log" + +log() { + echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE" +} + # Read hook input from stdin (JSON with session info) INPUT=$(cat) +log "Hook triggered with input: $INPUT" + # Extract transcript path using jq (required dependency) if ! command -v jq &> /dev/null; then - # jq not available, skip silently + log "ERROR: jq not available" exit 0 fi @@ -18,30 +26,61 @@ TRANSCRIPT=$(echo "$INPUT" | jq -r '.transcript_path // empty') SESSION_ID=$(echo "$INPUT" | jq -r '.session_id // empty') PROJECT_DIR="${CLAUDE_PROJECT_DIR:-.}" +log "Transcript: $TRANSCRIPT" +log "Session ID: $SESSION_ID" +log "Project dir: $PROJECT_DIR" + # Validate transcript exists -if [ -z "$TRANSCRIPT" ] || [ ! -f "$TRANSCRIPT" ]; then +if [ -z "$TRANSCRIPT" ]; then + log "ERROR: No transcript path in input" + exit 0 +fi + +if [ ! -f "$TRANSCRIPT" ]; then + log "ERROR: Transcript file does not exist: $TRANSCRIPT" exit 0 fi # Only run retrospective if session was substantial (more than 10 lines) LINE_COUNT=$(wc -l < "$TRANSCRIPT" 2>/dev/null || echo "0") +log "Transcript line count: $LINE_COUNT" if [ "$LINE_COUNT" -lt 10 ]; then + log "Session too short, skipping retrospective" exit 0 fi # Check if learnings.md exists (system is properly set up) LEARNINGS_FILE="$PROJECT_DIR/.claude/skills/codebase-agent/learnings.md" if [ ! -f "$LEARNINGS_FILE" ]; then + log "ERROR: learnings.md not found at $LEARNINGS_FILE" exit 0 fi -# Run retrospective in background using claude -p -# This uses Claude Code's existing authentication +log "Starting retrospective analysis in background..." + +# Run retrospective in background using claude with skill invocation +# Use nohup to ensure the process survives after hook exits +# cd to project dir since --cwd is not a valid flag ( - claude -p "Run /retrospective to analyze the session and extract learnings. The session transcript is at: $TRANSCRIPT" \ - --cwd "$PROJECT_DIR" \ - 2>/dev/null + cd "$PROJECT_DIR" && nohup claude --dangerously-skip-permissions -p "$(cat <> "$LOG_FILE" 2>&1 & ) & +log "Background process spawned" + # Exit immediately - don't wait for background process exit 0