$npx -y skills add affaan-m/ECC --skill strategic-compactSuggests manual context compaction at logical intervals to preserve context through task phases rather than arbitrary auto-compaction.
| 1 | # Strategic Compact Skill |
| 2 | |
| 3 | Suggests manual `/compact` at strategic points in your workflow rather than relying on arbitrary auto-compaction. |
| 4 | |
| 5 | ## When to Activate |
| 6 | |
| 7 | - Running long sessions that approach context limits (200K+ tokens) |
| 8 | - Working on multi-phase tasks (research → plan → implement → test) |
| 9 | - Switching between unrelated tasks within the same session |
| 10 | - After completing a major milestone and starting new work |
| 11 | - When responses slow down or become less coherent (context pressure) |
| 12 | |
| 13 | ## Why Strategic Compaction? |
| 14 | |
| 15 | Auto-compaction triggers at arbitrary points: |
| 16 | - Often mid-task, losing important context |
| 17 | - No awareness of logical task boundaries |
| 18 | - Can interrupt complex multi-step operations |
| 19 | |
| 20 | Strategic compaction at logical boundaries: |
| 21 | - **After exploration, before execution** — Compact research context, keep implementation plan |
| 22 | - **After completing a milestone** — Fresh start for next phase |
| 23 | - **Before major context shifts** — Clear exploration context before different task |
| 24 | |
| 25 | ## How It Works |
| 26 | |
| 27 | The `suggest-compact.js` script runs on PreToolUse (Edit/Write) and combines two signals: |
| 28 | |
| 29 | 1. **Context size (primary)** — Reads the latest `usage` record from the session transcript (`transcript_path` in the hook payload) and sums `input_tokens + cache_read_input_tokens + cache_creation_input_tokens` (the true context size of the turn). Suggests `/compact` at a window-scaled threshold — 160k tokens on a 200k window, 250k on a 1M window (detected from a `[1m]` model marker, or inferred when observed tokens already exceed 200k) — and re-reminds after every additional 60k tokens of context growth |
| 30 | 2. **Tool-call count (secondary)** — Counts tool invocations in session; suggests at a configurable threshold (default: 50 calls), then every 25 calls after |
| 31 | |
| 32 | ## Hook Setup |
| 33 | |
| 34 | Add to your `~/.claude/settings.json`: |
| 35 | |
| 36 | ```json |
| 37 | { |
| 38 | "hooks": { |
| 39 | "PreToolUse": [ |
| 40 | { |
| 41 | "matcher": "Edit", |
| 42 | "hooks": [{ "type": "command", "command": "node ~/.claude/skills/strategic-compact/suggest-compact.js" }] |
| 43 | }, |
| 44 | { |
| 45 | "matcher": "Write", |
| 46 | "hooks": [{ "type": "command", "command": "node ~/.claude/skills/strategic-compact/suggest-compact.js" }] |
| 47 | } |
| 48 | ] |
| 49 | } |
| 50 | } |
| 51 | ``` |
| 52 | |
| 53 | ## Configuration |
| 54 | |
| 55 | Environment variables: |
| 56 | - `COMPACT_THRESHOLD` — Tool calls before first suggestion (default: 50) |
| 57 | - `COMPACT_CONTEXT_THRESHOLD` — Context tokens before the context-size suggestion (default: 160000 on a 200k window, 250000 on a 1M window; `0` disables the context signal) |
| 58 | - `COMPACT_CONTEXT_INTERVAL` — Additional context tokens before the suggestion repeats (default: 60000) |
| 59 | - `ECC_CONTEXT_WINDOW_TOKENS` — Explicit context-window size, in tokens, overriding auto-detection. Set this for large-window models whose reported id lacks a `[1m]` marker (e.g. 400k Opus 4.x, or a new 1M-window model family) so the threshold scales to the real window instead of defaulting to 200k and overstating context usage. |
| 60 | - `CLAUDE_CODE_AUTO_COMPACT_WINDOW` — Claude Code's native window-size override, in tokens; honored as a fallback when `ECC_CONTEXT_WINDOW_TOKENS` is unset. |
| 61 | |
| 62 | > The context window is otherwise auto-detected from a `[1m]` model marker or inferred when observed tokens already exceed 200k. On a large-window model that carries neither signal, set one of the overrides above so the `/compact` suggestion fires at the right point. |
| 63 | |
| 64 | ## Compaction Decision Guide |
| 65 | |
| 66 | Use this table to decide when to compact: |
| 67 | |
| 68 | | Phase Transition | Compact? | Why | |
| 69 | |-----------------|----------|-----| |
| 70 | | Research → Planning | Yes | Research context is bulky; plan is the distilled output | |
| 71 | | Planning → Implementation | Yes | Plan is in TodoWrite or a file; free up context for code | |
| 72 | | Implementation → Testing | Maybe | Keep if tests reference recent code; compact if switching focus | |
| 73 | | Debugging → Next feature | Yes | Debug traces pollute context for unrelated work | |
| 74 | | Mid-implementation | No | Losing variable names, file paths, and partial state is costly | |
| 75 | | After a failed approach | Yes | Clear the dead-end reasoning before trying a new approach | |
| 76 | |
| 77 | ## What Survives Compaction |
| 78 | |
| 79 | Understanding what persists helps you compact with confidence: |
| 80 | |
| 81 | | Persists | Lost | |
| 82 | |----------|------| |
| 83 | | CLAUDE.md instructions | Intermediate reasoning and analysis | |
| 84 | | TodoWrite task list | File contents you previously read | |
| 85 | | Memory files (`~/.claude/memory/`) | Multi-step conversation context | |
| 86 | | Git state (commits, branches) | Tool call history and counts | |
| 87 | | Files on disk | Nuanced user preferences stated verbally | |
| 88 | |
| 89 | ## Best Practices |
| 90 | |
| 91 | 1. **Compact after planning** — Once plan is finalized in TodoWrite, compact to start fresh |
| 92 | 2. **Compact after debugging** — Clear error-resolution context before continuing |
| 93 | 3. **Don't compact mid-implementation** — Preserve context for related changes |
| 94 | 4. **Read the suggestion** — The hook te |