Aller au contenu
English
Développement medium

Claude Code : sessions, contexte et checkpoints pour reprendre sans repartir de zéro

45 min de lecture

Logo Claude Code - sessions, contexte et checkpoints

Une session Claude Code est une conversation enregistrée, rattachée à un répertoire de projet, que vous pouvez quitter et reprendre. Cette page vous apprend à la piloter dans la durée : la reprendre par son nom ou son identifiant, savoir précisément ce que la reprise restaure et ce qu'elle laisse derrière, gérer la fenêtre de contexte quand elle se remplit, et revenir en arrière avec /rewind. Elle insiste sur un point que la plupart des présentations oublient : les checkpoints ne rattrapent pas tout, et connaître leurs angles morts décide de la façon dont vous travaillez.

  • Reprendre une session par son nom, son identifiant ou le sélecteur
  • Distinguer ce qu'une reprise restaure de ce qu'il faut repasser en ligne de commande
  • Gérer la fenêtre de contexte avec /context, /compact et /clear
  • Revenir en arrière avec /rewind, et reconnaître ses angles morts
  • Brancher une session pour explorer une autre piste sans perdre la première
  • Claude Code installé, et au moins une session déjà menée sur lab-claude
  • Le rituel de contrôle en place (voir mode plan, diff et validations)
  • Un dépôt sous git, ce qui n'est pas une préférence de style ici mais une condition de récupération

Une session est un fichier sur votre disque. Claude Code enregistre la conversation en continu, au format JSONL, dans :

~/.claude/projects/<projet>/<identifiant-de-session>.jsonl

Le nom <projet> dérive du chemin du répertoire de travail, dont les caractères non alphanumériques sont remplacés par des tirets. Chaque ligne est un objet JSON décrivant un message, un appel d'outil ou une entrée de métadonnées.

Ne parsez pas ces fichiers. Le format est interne et change d'une version à l'autre : un script qui les lit directement casse à la première mise à jour. Pour exploiter une session depuis un script, passez par /export, par claude -p --resume <id> --output-format json, ou par le champ transcript_path que reçoivent les hooks.

Ces fichiers ne vivent pas éternellement. Le balayage de rétention les supprime par défaut environ trente jours après la dernière écriture. Le réglage cleanupPeriodDays allonge ce délai si vous en avez besoin, et cette valeur gouverne aussi les instantanés de fichiers des checkpoints, ce qui aura son importance plus bas.

Cinq entrées mènent à une session existante, et le choix dépend de ce que vous savez d'elle.

CommandeCe qu'elle fait
claude --continuerouvre la conversation la plus récente du répertoire courant
claude --resumeouvre le sélecteur de sessions
claude --resume <nom>reprend directement la session portant ce nom
claude --resume <id>reprend par identifiant, depuis n'importe quel répertoire
/resumechange de conversation sans quitter la session en cours

La reprise par identifiant mérite une note : Claude Code cherche d'abord dans le projet courant et ses worktrees git, puis dans tous les autres projets de la machine. Vous pouvez donc reprendre depuis ailleurs une session démarrée ailleurs.

Nommez vos sessions, surtout si vous en menez plusieurs

Section intitulée « Nommez vos sessions, surtout si vous en menez plusieurs »

Un nom transforme une liste de conversations anonymes en quelque chose de navigable, et il devient un identifiant de reprise.

Fenêtre de terminal
claude -n auth-refactor # à la création

En cours de session, /rename auth-refactor fait la même chose et affiche le nom sur la barre de saisie. Depuis le sélecteur, Ctrl+R renomme la ligne sélectionnée. Accepter un plan en mode plan attribue par ailleurs un titre généré, si vous n'avez rien nommé.

Le sélecteur se pilote au clavier, et trois raccourcis évitent de le refermer frustré : Ctrl+A élargit à tous les projets de la machine, Ctrl+W à tous les worktrees du dépôt, Ctrl+B filtre sur la branche git courante. Space prévisualise le contenu de la session surlignée.

Ce qu'une reprise restaure, et ce qu'elle ne restaure pas

Section intitulée « Ce qu'une reprise restaure, et ce qu'elle ne restaure pas »

C'est la section à retenir de cette page. Une reprise ne remet pas la session dans l'état exact où vous l'aviez laissée, et la différence explique la plupart des surprises.

RestauréNon restauré
l'historique complet, appels d'outils et résultats comprisles serveurs passés par --mcp-config
le modèle utilisé par la sessionles réglages passés par --settings
l'agent si la session a démarré avec --agentles plugins passés par --plugin-dir
le mode de permission, selon la façon dont vous reprenezle modèle de repli --fallback-model
un objectif encore actifles répertoires ajoutés par --add-dir
les tâches planifiées non expiréesles tâches Bash et les surveillances en arrière-plan

La colonne de droite se résume en une phrase : ce que vous aviez passé en arguments de ligne de commande, il faut le repasser. En revanche, les fichiers de réglages habituels, settings.json et settings.local.json, sont relus au démarrage : ce qui vit dedans n'a pas besoin d'être répété.

Deux subtilités valent d'être connues. Un outil qui tournait encore quand le processus précédent s'est arrêté, par exemple lors d'un plantage, ne reprend pas et ne rejoue pas : Claude continue sans son résultat. Et le mode de permission n'est pas restauré de la même façon selon l'entrée : une reprise par claude --continue depuis un terminal le restaure, alors qu'une session choisie dans le sélecteur repart dans le mode qu'aurait une session neuve. Le mode bypassPermissions, lui, n'est jamais restauré automatiquement, ce qui est une bonne chose.

Reprendre une longue session : le dialogue de résumé

Section intitulée « Reprendre une longue session : le dialogue de résumé »

Sur les plans Pro et Max, quand vous reprenez une session inactive depuis plus d'une heure et pesant plus de 100 000 tokens, Claude Code ouvre un dialogue avant votre premier message. Le cache de prompt a expiré entre-temps, donc la prochaine requête retraitera l'historique une fois de toute façon, quelle que soit votre réponse.

OptionCe qu'elle faitContrepartie
Reprendre depuis le résumélance un /compact immédiat, remplace l'historique par un résumé, vos derniers échanges et jusqu'à cinq fichiers récemment lusmoins cher à chaque requête ensuite, mais ce que le résumé omet n'est plus dans le contexte
Reprendre la session telle quellecharge la conversation inchangéetout reste disponible, à un coût par requête qui croît avec la taille
Ne plus demanderreprend en entier et supprime le dialogue à l'avenirvous perdez le point de décision

Trois commandes, trois intentions différentes, et les confondre coûte soit du contexte utile, soit de l'argent.

CommandeIntention
/contextregarder ce qui occupe la fenêtre avant de décider quoi que ce soit
/compact [consignes]remplacer l'historique par un résumé, éventuellement orienté par vos consignes
/clearrepartir à vide, la conversation précédente restant enregistrée

Le réflexe utile est de commencer par /context. Une session qui rame n'est pas toujours une session trop longue : ce peut être un CLAUDE.md devenu énorme, une skill qui charge trop, ou un résultat d'outil volumineux resté dans l'historique. Compacter sans regarder revient à traiter un symptôme sans en connaître la cause.

/compact accepte des consignes, et c'est sous-employé. /compact garde le plan validé et les décisions d'architecture, oublie les traces de debug produit un résumé bien plus utile qu'un compactage aveugle.

Comment revenir en arrière avec les checkpoints ?

Section intitulée « Comment revenir en arrière avec les checkpoints ? »

Claude Code crée un checkpoint à chaque prompt que vous envoyez. Il capture l'état de votre code avant ce prompt, et conserve les instantanés de fichiers pour les cent checkpoints les plus récents de la session. Ces checkpoints sont enregistrés avec la conversation : vous pouvez donc encore rembobiner après avoir repris une session.

Deux façons d'ouvrir le menu :

  1. La commande explicite

    /rewind
  2. Ou le raccourci, quand la zone de saisie est vide

    Appuyez deux fois sur Esc. Si la zone contient du texte, le double Esc efface ce texte au lieu d'ouvrir le menu. Le texte effacé part dans l'historique de saisie : Haut le rappelle une fois sorti du menu.

Le menu liste chaque prompt que vous avez envoyé pendant la session. Vous choisissez un point, puis une action :

ActionEffet
Restaurer le code et la conversationrevient sur les deux à ce point
Restaurer la conversationrembobine la conversation, garde le code actuel
Restaurer le codeannule les modifications de fichiers, garde la conversation
Résumer à partir d'icicompresse la conversation vers l'avant, libère du contexte
Résumer jusqu'icicompresse ce qui précède, garde les messages suivants intacts

Les deux options de restauration de code n'apparaissent que si le checkpoint sélectionné a des modifications de fichiers à annuler. Après une restauration de conversation, le prompt d'origine revient dans la zone de saisie : vous pouvez le renvoyer tel quel ou le corriger, ce qui en fait un excellent outil de reformulation.

C'est le point le plus important de cette page, et le plus mal connu. Un checkpoint suit les modifications faites par les outils d'édition de fichiers de Claude. Tout le reste lui échappe.

Angle mortConséquence
Commandes Bashun rm, un mv, un cp lancé par Claude n'est pas suivi et ne se rembobine pas
Subagentsles modifications d'un subagent ne sont généralement pas restaurées, y compris celles d'une skill forkée qui tourne en arrière-plan, ce qui est son défaut
Modifications externesce que vous éditez hors de Claude Code, ou depuis une autre session, n'est pas capturé
Liens symboliques et liens dursces chemins sont ignorés à la restauration, avec un avertissement Restored the code, but skipped N files
Instantanés expiréspassé le délai de rétention, un rembobinage peut échouer sur No files were restored

La seule exception notable concerne une skill forkée exécutée au premier plan : elle modifie l'arbre de travail pendant votre propre tour, donc le rembobinage restaure bien ses modifications. Une skill forkée en arrière-plan, qui est le comportement par défaut, échappe au dispositif.

Quand vous voulez essayer autre chose sans perdre le chemin parcouru, ne rembobinez pas : branchez. /branch copie la conversation jusqu'au point courant et vous bascule dans la copie, en laissant l'originale intacte et présente dans le sélecteur.

/branch essai-streaming

Depuis la ligne de commande, la même idée s'écrit claude --continue --fork-session. La différence compte : /branch copie la transcription et bascule le processus en cours dans la nouvelle, alors qu'un fork depuis la ligne de commande démarre un processus séparé.

Cette distinction a une conséquence pratique sur les permissions. Les autorisations accordées « pour cette session » suivent dans une branche créée par /branch, puisque c'est le même processus ; elles ne suivent pas dans un --fork-session, où vous devrez réapprouver.

Un subagent ou une commande Bash en cours d'exécution continue de tourner, et sa sortie apparaît dans la branche où vous venez de basculer, pas dans la session d'origine.

SymptômeCause probableCorrection
Le double Esc n'ouvre pas le menula zone de saisie contient du texte, le raccourci l'efface d'abordvidez la zone, ou lancez /rewind
/rewind n'annule pas un fichier suppriméla suppression est passée par une commande Bash, non suiviegit restore, ou git checkout du fichier
Restored the code, but skipped N filesdes chemins sont des liens symboliques ou dursannulez l'édition à la main, ou demandez à Claude de la renverser
No files were restoredles instantanés ont expiré au balayage de rétentionaugmentez cleanupPeriodDays pour l'avenir, récupérez par git pour le passé
Une session -p est introuvable dans le sélecteurles sessions non interactives en sont excluesreprenez par identifiant avec claude --resume <id>
Un serveur MCP manque après une reprise--mcp-config n'est pas restaurérepassez le drapeau, ou déclarez le serveur dans un fichier de réglages
  • Je nomme mes sessions quand j'en mène plusieurs en parallèle
  • Je sais que les arguments de ligne de commande ne sont pas restaurés
  • Je lance /context avant de compacter
  • Je sais ouvrir /rewind et distinguer ses cinq actions
  • Je committe avant toute tâche qui délègue à des subagents

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

  • Une session est un fichier JSONL dans ~/.claude/projects/, supprimé au bout d'environ trente jours par défaut. Ne le parsez pas, son format est interne.
  • Une reprise restaure la conversation, le modèle et l'agent, mais pas ce que vous aviez passé en arguments : --mcp-config, --settings, --plugin-dir, --add-dir.
  • /context avant /compact : une session lourde n'est pas toujours une session longue.
  • /clear n'efface rien : la conversation précédente reste reprenable.
  • Un checkpoint est créé à chaque prompt, et les instantanés couvrent les cent derniers.
  • Les checkpoints ignorent les commandes Bash, les subagents en arrière-plan et les liens symboliques. Git reste la frontière de récupération.
  • /branch explore sans casser : la session d'origine reste intacte et reprenable.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn