From 2d6fd7007e84644140ddda29b0f73401f7254382 Mon Sep 17 00:00:00 2001 From: Affaan Mustafa Date: Tue, 20 Jan 2026 19:57:05 -0800 Subject: [PATCH] feat: add strategic-compact hook and update hooks.json with all hooks --- hooks/hooks.json | 54 ++++++++++++++++++++++ hooks/strategic-compact/suggest-compact.sh | 52 +++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100755 hooks/strategic-compact/suggest-compact.sh diff --git a/hooks/hooks.json b/hooks/hooks.json index 922c193..00e047a 100644 --- a/hooks/hooks.json +++ b/hooks/hooks.json @@ -41,6 +41,40 @@ } ], "description": "Block creation of random .md files - keeps docs consolidated" + }, + { + "matcher": "tool == \"Edit\" || tool == \"Write\"", + "hooks": [ + { + "type": "command", + "command": "~/.claude/hooks/strategic-compact/suggest-compact.sh" + } + ], + "description": "Suggest manual compaction at logical intervals" + } + ], + "PreCompact": [ + { + "matcher": "*", + "hooks": [ + { + "type": "command", + "command": "~/.claude/hooks/memory-persistence/pre-compact.sh" + } + ], + "description": "Save state before context compaction" + } + ], + "SessionStart": [ + { + "matcher": "*", + "hooks": [ + { + "type": "command", + "command": "~/.claude/hooks/memory-persistence/session-start.sh" + } + ], + "description": "Load previous context on new session" } ], "PostToolUse": [ @@ -95,6 +129,26 @@ } ], "description": "Final audit for console.log in modified files before session ends" + }, + { + "matcher": "*", + "hooks": [ + { + "type": "command", + "command": "~/.claude/hooks/memory-persistence/session-end.sh" + } + ], + "description": "Persist session state on end" + }, + { + "matcher": "*", + "hooks": [ + { + "type": "command", + "command": "~/.claude/skills/continuous-learning/evaluate-session.sh" + } + ], + "description": "Evaluate session for extractable patterns" } ] } diff --git a/hooks/strategic-compact/suggest-compact.sh b/hooks/strategic-compact/suggest-compact.sh new file mode 100755 index 0000000..ea14920 --- /dev/null +++ b/hooks/strategic-compact/suggest-compact.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# Strategic Compact Suggester +# Runs on PreToolUse or periodically to suggest manual compaction at logical intervals +# +# Why manual over auto-compact: +# - Auto-compact happens at arbitrary points, often mid-task +# - Strategic compacting preserves context through logical phases +# - Compact after exploration, before execution +# - Compact after completing a milestone, before starting next +# +# Hook config (in ~/.claude/settings.json): +# { +# "hooks": { +# "PreToolUse": [{ +# "matcher": "Edit|Write", +# "hooks": [{ +# "type": "command", +# "command": "~/.claude/skills/strategic-compact/suggest-compact.sh" +# }] +# }] +# } +# } +# +# Criteria for suggesting compact: +# - Session has been running for extended period +# - Large number of tool calls made +# - Transitioning from research/exploration to implementation +# - Plan has been finalized + +# Track tool call count (increment in a temp file) +COUNTER_FILE="/tmp/claude-tool-count-$$" +THRESHOLD=${COMPACT_THRESHOLD:-50} + +# Initialize or increment counter +if [ -f "$COUNTER_FILE" ]; then + count=$(cat "$COUNTER_FILE") + count=$((count + 1)) + echo "$count" > "$COUNTER_FILE" +else + echo "1" > "$COUNTER_FILE" + count=1 +fi + +# Suggest compact after threshold tool calls +if [ "$count" -eq "$THRESHOLD" ]; then + echo "[StrategicCompact] $THRESHOLD tool calls reached - consider /compact if transitioning phases" >&2 +fi + +# Suggest at regular intervals after threshold +if [ "$count" -gt "$THRESHOLD" ] && [ $((count % 25)) -eq 0 ]; then + echo "[StrategicCompact] $count tool calls - good checkpoint for /compact if context is stale" >&2 +fi