Skip to content

Repository files navigation

wt-claude-restore

Al login di Windows riapre automaticamente le sessioni di Claude Code che avevi aperte, ognuna in un tab di Windows Terminal, riprese con claude --resume <id>. L'insieme è dinamico: riapre sempre le sessioni più fresche, quindi se chiudi la #3 e ne apri una #4, al prossimo avvio tornano le tre più recenti. Supporta più cartelle.

Perché così (vincoli reali)

  • Claude non permette di scegliere né leggere l'ID di una sessione interattiva, e più sessioni girano nella stessa cartella → non si può mappare "tab → ID esatto". Ma le sessioni aperte sono quelle che vengono scritte su disco (le più recenti). Da qui l'euristica.
  • Per non richiedere privilegi di amministratore (la creazione di Task pianificati è spesso bloccata su macchine gestite/aziendali) si usa la cartella Esecuzione automatica (shell:startup, scrivibile dall'utente): niente admin.

Requisiti

  • Windows 10/11 con Windows Terminal (wt.exe)
  • PowerShell 7+ (pwsh.exe)
  • Claude Code CLI (claude.exe) nel PATH

Motore (ibrido, per-cartella)

Al login agent.ps1 (lanciato nascosto dal .vbs in Esecuzione automatica):

  1. Restore una tantum — per ogni cartella in settings.json:
    • recency-cluster: riapre le sessioni attive entro activityWindowMinutes dall'ultima attività di quella cartella;
    • per la cartella primary in più: alza il numero fino al conteggio dei claude.exe vivi salvato in ~/.claude/wt-restore/last-count.json, così recupera anche sessioni aperte ma inattive.
  2. Loop di snapshot — ogni snapshotEveryMinutes conta i claude.exe vivi e li salva in last-count.json, così allo spegnimento il valore è fresco per il login successivo.

File

File Ruolo
settings.json Config utente (cartelle, finestra attività, layout, cadenza)
config.ps1 Carica il JSON + helper
agent.ps1 Processo di avvio: restore una tantum + loop di snapshot
restore.ps1 Selezione sessioni e lancio di Windows Terminal (-DryRun per provare a vuoto)
snapshot.ps1 Snapshot singolo del conteggio (uso manuale/diagnostico)
install.ps1 Mette il launcher in Esecuzione automatica + disattiva persistedWindowLayout (backup)
uninstall.ps1 Rimuove il launcher, ferma l'agent, ripristina settings.json

Installazione

# dalla cartella del repo, in una PowerShell normale (NON serve admin)
.\install.ps1

Poi azione manuale: in Windows Terminal → Impostazioni → Avvio disattiva "Avvia all'avvio del computer" (a lanciare WT ci pensa l'agent).

Provare senza riavviare

# 1) vedere cosa farebbe, senza aprire nulla:
.\restore.ps1 -DryRun

# 2) prova end-to-end del launcher (ATTENZIONE: riapre le sessioni piu' fresche,
#    incluse quelle eventualmente gia' aperte -> falla quando NON hai Claude aperti
#    che non vuoi duplicare):
wscript "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\wt-claude-restore.vbs"

Disinstallazione

.\uninstall.ps1

settings.json

settings.json è locale (nel .gitignore): copialo da settings.example.json oppure lascia che install.ps1 lo generi dai default al primo avvio, poi modificalo.

{
  "recencyDays": 7,             // non riaprire sessioni piu' vecchie di N giorni
  "maxTabsPerFolder": 8,        // tetto di sicurezza sui tab per cartella
  "layout": "tab",              // "tab" oppure "pane" (riquadri affiancati)
  "activityWindowMinutes": 45,  // ampiezza del cluster di attivita' recente
  "snapshotEveryMinutes": 2,    // cadenza del campionamento del conteggio
  "folders": [
    { "path": "C:\\devprojects", "primary": true }
    // aggiungi altre cartelle qui, es:
    // , { "path": "C:\\devprojects\\backend.mdm", "primary": false }
  ]
}

Nota: una cartella viene ripristinata solo se ci hai davvero avviato Claude da lì (esiste il suo store in ~/.claude/projects/<cartella-encoded>); altrimenti viene saltata.

Limiti noti

  • Il conteggio claude.exe è globale (l'ID processo non espone la cartella): serve solo ad "alzare" la cartella primary. La guardia recencyDays evita di far resuscitare sessioni vecchie se il conteggio è gonfiato da Claude aperti altrove.
  • Una sessione aperta ma inattiva oltre activityWindowMinutes su una cartella non-primary può non essere ripresa (sulla primary la salva il conteggio processi).
  • Se una chiusura è brutale, l'ultimo last-count.json resta quello dell'ultimo campionamento (≤ snapshotEveryMinutes minuti prima): differenza trascurabile.
  • Log diagnostico: ~/.claude/wt-restore/wt-claude-restore.log.

Disclaimer

Progetto non ufficiale e non affiliato ad Anthropic o Microsoft. "Claude", "Claude Code" e "Windows Terminal" appartengono ai rispettivi proprietari.

Gli script modificano la tua configurazione: aggiungono un launcher alla cartella Esecuzione automatica, avviano un processo in background e cambiano firstWindowPreference in settings.json di Windows Terminal (con backup .wcr-backup). Nessun dato viene inviato in rete e non si leggono i contenuti delle conversazioni: si usano solo i nomi dei file di sessione (gli UUID) e il conteggio dei processi. Leggi il codice prima di eseguirlo e usalo a tuo rischio. Rimozione completa con uninstall.ps1.

Licenza

MIT — vedi LICENSE.

About

Auto-resume Claude Code sessions in Windows Terminal at Windows login (no admin required)

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages