mirror of
https://github.com/Jeuners/ECC.git
synced 2026-09-09 15:02:30 +02:00
* docs(strategic-compact): document context-window override env vars * docs(strategic-compact): mirror context-window override env vars for Codex
142 lines
7.4 KiB
Markdown
142 lines
7.4 KiB
Markdown
---
|
|
name: strategic-compact
|
|
description: Suggests manual context compaction at logical intervals to preserve context through task phases rather than arbitrary auto-compaction.
|
|
metadata:
|
|
origin: ECC
|
|
---
|
|
|
|
# Strategic Compact Skill
|
|
|
|
Suggests manual `/compact` at strategic points in your workflow rather than relying on arbitrary auto-compaction.
|
|
|
|
## When to Activate
|
|
|
|
- Running long sessions that approach context limits (200K+ tokens)
|
|
- Working on multi-phase tasks (research → plan → implement → test)
|
|
- Switching between unrelated tasks within the same session
|
|
- After completing a major milestone and starting new work
|
|
- When responses slow down or become less coherent (context pressure)
|
|
|
|
## Why Strategic Compaction?
|
|
|
|
Auto-compaction triggers at arbitrary points:
|
|
- Often mid-task, losing important context
|
|
- No awareness of logical task boundaries
|
|
- Can interrupt complex multi-step operations
|
|
|
|
Strategic compaction at logical boundaries:
|
|
- **After exploration, before execution** — Compact research context, keep implementation plan
|
|
- **After completing a milestone** — Fresh start for next phase
|
|
- **Before major context shifts** — Clear exploration context before different task
|
|
|
|
## How It Works
|
|
|
|
The `suggest-compact.js` script runs on PreToolUse (Edit/Write) and combines two signals:
|
|
|
|
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
|
|
2. **Tool-call count (secondary)** — Counts tool invocations in session; suggests at a configurable threshold (default: 50 calls), then every 25 calls after
|
|
|
|
Tool count alone is a weak proxy for window pressure: a few large file reads or MCP responses can fill the window in very few calls, while many tiny calls can cross 50 with a near-empty window. The context-size signal fires when it actually matters.
|
|
|
|
## Hook Setup
|
|
|
|
**Installed as a plugin?** No setup is needed. The plugin's `hooks/hooks.json` already registers `suggest-compact.js` (hook id `pre:edit-write:suggest-compact`, active in the `standard` and `strict` hook profiles). Do not copy the block below into `~/.claude/settings.json` — `~/.claude/scripts/` does not exist on plugin installs, and duplicating a plugin hook causes double execution.
|
|
|
|
**If installed manually** (`./install.sh`), add to your `~/.claude/settings.json`:
|
|
|
|
```json
|
|
{
|
|
"hooks": {
|
|
"PreToolUse": [
|
|
{
|
|
"matcher": "Edit",
|
|
"hooks": [{ "type": "command", "command": "node ~/.claude/scripts/hooks/suggest-compact.js" }]
|
|
},
|
|
{
|
|
"matcher": "Write",
|
|
"hooks": [{ "type": "command", "command": "node ~/.claude/scripts/hooks/suggest-compact.js" }]
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
## Configuration
|
|
|
|
Environment variables:
|
|
- `COMPACT_THRESHOLD` — Tool calls before first suggestion (default: 50)
|
|
- `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)
|
|
- `COMPACT_CONTEXT_INTERVAL` — Additional context tokens before the suggestion repeats (default: 60000)
|
|
- `COMPACT_STATE_TTL_DAYS` — Days before stale per-session state files in the temp dir are swept (default: 14)
|
|
- `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.
|
|
- `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.
|
|
|
|
> 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.
|
|
|
|
## Compaction Decision Guide
|
|
|
|
Use this table to decide when to compact:
|
|
|
|
| Phase Transition | Compact? | Why |
|
|
|-----------------|----------|-----|
|
|
| Research → Planning | Yes | Research context is bulky; plan is the distilled output |
|
|
| Planning → Implementation | Yes | Plan is in TodoWrite or a file; free up context for code |
|
|
| Implementation → Testing | Maybe | Keep if tests reference recent code; compact if switching focus |
|
|
| Debugging → Next feature | Yes | Debug traces pollute context for unrelated work |
|
|
| Mid-implementation | No | Losing variable names, file paths, and partial state is costly |
|
|
| After a failed approach | Yes | Clear the dead-end reasoning before trying a new approach |
|
|
|
|
## What Survives Compaction
|
|
|
|
Understanding what persists helps you compact with confidence:
|
|
|
|
| Persists | Lost |
|
|
|----------|------|
|
|
| CLAUDE.md instructions | Intermediate reasoning and analysis |
|
|
| TodoWrite task list | File contents you previously read |
|
|
| Memory files (`~/.claude/memory/`) | Multi-step conversation context |
|
|
| Git state (commits, branches) | Tool call history and counts |
|
|
| Files on disk | Nuanced user preferences stated verbally |
|
|
|
|
## Best Practices
|
|
|
|
1. **Compact after planning** — Once plan is finalized in TodoWrite, compact to start fresh
|
|
2. **Compact after debugging** — Clear error-resolution context before continuing
|
|
3. **Don't compact mid-implementation** — Preserve context for related changes
|
|
4. **Read the suggestion** — The hook tells you *when*, you decide *if*
|
|
5. **Write before compacting** — Save important context to files or memory before compacting
|
|
6. **Use `/compact` with a summary** — Add a custom message: `/compact Focus on implementing auth middleware next`
|
|
|
|
## Token Optimization Patterns
|
|
|
|
### Trigger-Table Lazy Loading
|
|
Instead of loading full skill content at session start, use a trigger table that maps keywords to skill paths. Skills load only when triggered, reducing baseline context by 50%+:
|
|
|
|
| Trigger | Skill | Load When |
|
|
|---------|-------|-----------|
|
|
| "test", "tdd", "coverage" | tdd-workflow | User mentions testing |
|
|
| "security", "auth", "xss" | security-review | Security-related work |
|
|
| "deploy", "ci/cd" | deployment-patterns | Deployment context |
|
|
|
|
### Context Composition Awareness
|
|
Monitor what's consuming your context window:
|
|
- **CLAUDE.md files** — Always loaded, keep lean
|
|
- **Loaded skills** — Each skill adds 1-5K tokens
|
|
- **Conversation history** — Grows with each exchange
|
|
- **Tool results** — File reads, search results add bulk
|
|
|
|
### Duplicate Instruction Detection
|
|
Common sources of duplicate context:
|
|
- Same rules in both `~/.claude/rules/` and project `.claude/rules/`
|
|
- Skills that repeat CLAUDE.md instructions
|
|
- Multiple skills covering overlapping domains
|
|
|
|
### Context Optimization Tools
|
|
- `token-optimizer` MCP — Automated 95%+ token reduction via content deduplication
|
|
- `context-mode` — Context virtualization (315KB to 5.4KB demonstrated)
|
|
|
|
## Related
|
|
|
|
- [The Longform Guide](https://x.com/affaanmustafa/status/2014040193557471352) — Token optimization section
|
|
- Memory persistence hooks — For state that survives compaction
|
|
- `continuous-learning` skill — Extracts patterns before session ends
|