Cattura lagrangiana dello stato prima della compattazione. Re-iniezione automatica nella sessione successiva. Zero contesto perso.
L'AI coder ha un contesto limitato. Quando la conversazione diventa troppo lunga, il sistema compatta — e perde il 90% di quello che sapeva. I tuoi task in corso, le decisioni architetturali, lo stato dei deploy, le catene di ragionamento... tutto sparisce. Riparti da zero, ogni volta.
Due hook che lavorano insieme: uno cattura prima della compattazione, l'altro re-inietta nella sessione successiva.
Hook PreCompact. Si attiva PRIMA della compattazione. Cattura le coordinate lagrangiane — le variabili essenziali che descrivono lo stato del lavoro.
Hook SessionStart:compact. Si attiva quando una NUOVA sessione parte dopo una compattazione. Re-inietta lo snapshot completo.
Il coder riparte con il contesto completo. Sa cosa stavi facendo, dove eri arrivato, e cosa fare dopo. Nessun onboarding, nessun "dove eravamo rimasti".
Ogni fase cattura o ripristina elementi specifici del contesto. Lo stato persiste anche senza compattazione.
| Fase | Hook | Cosa cattura / ripristina |
|---|---|---|
| Pre-compact | PreCompact |
Git state, task momentum, trajectory (ultimi 3 commit per repo), reasoning chain, semantic tags |
| Post-compact | SessionStart:compact |
Full Lagrangian snapshot, recovery instructions, reasoning chain restoration |
| Persist | system_state.md |
L'ultimo stato sopravvive attraverso le sessioni anche senza compattazione |
Non tutto ha lo stesso peso informativo. Come in fisica, dove le coordinate lagrangiane descrivono un sistema con il minimo numero di variabili, il pre-compact cattura solo le variabili essenziali — quelle che permettono di ricostruire il contesto senza averlo intero. Non salva la conversazione. Salva la posizione nel campo.
Scenario: Stai lavorando da 3 ore. Hai deployato il backend, stai debuggando un race condition, hai 4 file aperti e una catena di ragionamento lunga.
Il contesto si compatta. Nella sessione successiva, il tuo AI coder ti dice:
"Contesto ripristinato. Stavi debuggando un race condition in adapters/gmail_adapter.js.
Ultimo commit: c6160e3. THIA container ha 2 file dirty. La catena di ragionamento era: [...]"
Riparti esattamente da dove eri.
Clona il repository e lancia l'installer con il tuo profilo.
L'installer genera i due hook (pre_compact.sh e post_compact.sh) e li collega alla configurazione.
Da quel momento, ogni compattazione salva e ripristina il contesto automaticamente.
git clone https://github.com/GrazianoGuiducci/d-nd-seed.git
cd d-nd-seed
./install.sh profiles/example.json
Scarica SEED-context-persistence.md
# 1. Configura gli hook in .claude/settings.local.json
{
"hooks": {
"PreCompact": [
{
"hooks": [{
"type": "command",
"command": "bash .claude/hooks/pre_compact.sh"
}]
}
],
"SessionStart": [
{
"matcher": "compact",
"hooks": [{
"type": "command",
"command": "bash .claude/hooks/post_compact.sh"
}]
}
]
}
}
# 2. Crea .claude/hooks/pre_compact.sh
#!/bin/bash
# Snapshot lagrangiano: cattura le coordinate essenziali
STATE_FILE=".claude/hooks/system_state.md"
echo "# Lagrangian Snapshot - $(date -Iseconds)" > "$STATE_FILE"
echo "" >> "$STATE_FILE"
# Git state per ogni repo
for repo in $(find . -maxdepth 2 -name ".git" -type d); do
DIR=$(dirname "$repo")
echo "## $DIR" >> "$STATE_FILE"
cd "$DIR"
echo "Branch: $(git branch --show-current)" >> "$STATE_FILE"
echo "Commit: $(git rev-parse --short HEAD)" >> "$STATE_FILE"
echo "Dirty: $(git status --porcelain | wc -l) files" >> "$STATE_FILE"
echo "Last 3:" >> "$STATE_FILE"
git log --oneline -3 >> "$STATE_FILE"
cd - > /dev/null
echo "" >> "$STATE_FILE"
done
# 3. Crea .claude/hooks/post_compact.sh
#!/bin/bash
# Re-iniezione: leggi lo snapshot e ricostruisci il contesto
STATE_FILE=".claude/hooks/system_state.md"
if [ -f "$STATE_FILE" ]; then
cat "$STATE_FILE"
echo ""
echo "--- RECOVERY INSTRUCTIONS ---"
echo "Leggi i file modificati. Controlla i diff."
echo "Ripristina la catena di ragionamento."
fi
# 4. Rendi eseguibili
chmod +x .claude/hooks/pre_compact.sh
chmod +x .claude/hooks/post_compact.sh