Blog • Claude Code

Après qu'une session terminal Claude Code au-dessus de 200K tokens est restée inactive environ 54 minutes, comment couper la compression automatique dans le JSON de réglages ?

La note de Claude Code 2.1.299 est précise : dans le terminal, une conversation au-dessus de 200K tokens inactive environ 54 minutes est compressée avant l'expiration du cache d'invite d'une heure, pour que le message suivant ne retraite pas tout l'historique. La compression remplace l'historique des messages par un résumé. Ce qui arrête ce remplacement est settings.json, pas un prompt de plus.

Quels champs garder sur un bloc compaction de l'API Messages est dans cet article sur l'API. Session, permission et le flux JSON sont dans l'article sur le flux Claude Code. Celui-ci ne traite que la compression d'inactivité dans le terminal : quand elle remplace l'historique, et quels deux champs de settings.json la coupent ou relèvent le seuil.

La décision : dans le terminal, sur le cache d'une heure, au-dessus d'environ 200K tokens, après environ 54 minutes d'inactivité, un résumé remplace l'historique. Seul le booléen false pour idleCompaction dans settings.json coupe cela.

Dans quelles conditions l'historique est-il remplacé ?

La note de 2.1.299 limite le cas au terminal : une conversation au-dessus de 200K tokens, inactive environ 54 minutes, est compressée avant l'expiration du cache d'invite d'une heure. La même note donne l'interrupteur et la variable d'environnement qui change le plancher de tokens, et elle dit que les deux exigent 2.1.290 ou plus. 2.1.302 ajoute une ligne Idle compaction dans /config, et l'avis après une compression dit comment la couper. Le journal des changements est le journal des changements de Claude Code.

Le guide du cache d'invite dit la même chose ainsi : quand une session terminal est sur le TTL d'une heure et reste longtemps inactive, Claude Code peut la compresser peu avant l'expiration du cache. Une conversation principale sur un abonnement Claude, dans l'usage du forfait, est à une heure par défaut. Sur des crédits d'usage, une clé API ou un fournisseur cloud, la conversation principale est à cinq minutes par défaut. La compression d'inactivité de ce guide est le cas d'une heure. Le réglage est idleCompaction à false, et la version est encore 2.1.290 ou plus. Le guide est le guide du cache d'invite.

Quels deux champs écrivez-vous dans settings.json ?

Un champ décide d'allumer ou d'éteindre. L'autre ne change que le plancher de tokens. La valeur sous env est une chaîne, parce que Claude Code range les variables d'environnement comme des chaînes dans le fichier de réglages. Le nombre 200000 a la mauvaise forme.

Les réglages qui gardent l'historique. idleCompaction est le booléen false, et le plancher reste au défaut 200000.
{
  "idleCompaction": false,
  "env": {
    "CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS": "200000"
  }
}

Si vous voulez moins de compressions plutôt que zéro, augmentez les chiffres de cette chaîne. Le journal des changements dit que la variable change le plancher de 200K tokens. Il ne dit pas qu'elle change l'attente d'environ 54 minutes. Depuis 2.1.302 vous pouvez aussi la basculer dans /config sans éditer le fichier. Une édition à la main exige encore le booléen, pas une chaîne.

Quel schéma fixe la forme de ce JSON ?

Utilisez JSON Schema pour fixer les types. idleCompaction doit être un booléen. Le plancher sous env doit être une chaîne. Le schéma ne prouve pas que vous deviez couper. true reste une forme valide. Garder l'historique est une règle d'application qui renvoie true à false.

La forme des réglages. idleCompaction true passe encore ces types.
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": ["idleCompaction"],
  "properties": {
    "idleCompaction": { "type": "boolean" },
    "env": {
      "type": "object",
      "properties": {
        "CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS": { "type": "string" }
      },
      "required": ["CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS"]
    }
  }
}
Ce que les réglages montrentSchémaSi vous voulez l'historique
idleCompaction est la chaîne falseÉchoue. Ce champ exige un booléen.Faites-en d'abord un booléen, puis choisissez allumé ou éteint.
Le plancher est le nombre 200000Échoue. Les valeurs sous env sont des chaînes.Passez à la chaîne 200000, ou supprimez l'entrée et gardez le plancher par défaut.
idleCompaction est true, la forme est bonnePasse. true est un booléen.Passez à false si vous voulez l'historique. true veut dire que la compression d'inactivité peut encore remplacer l'historique.

Après la compression, qu'est-ce qui reste et qu'est-ce qui a été remplacé ?

Le guide dit : la compression remplace l'historique des messages par un résumé, donc le préfixe de cache de la couche conversation n'est plus le même. La couche du prompt système est réutilisée, sauf si cette reprise gardait un prompt système qui aurait de toute façon changé. Le contexte du projet est relu depuis le disque. Cette couche touche le cache seulement si CLAUDE.md et la mémoire sont inchangés depuis le début de la session. Ce n'est pas le bloc compaction de l'article sur l'API Messages.

Cette coucheAprès la compression
Historique des messagesRemplacé par un résumé. Le préfixe de conversation de la requête suivante diffère de celui d'avant la compression.
Prompt systèmeEn général réutilisé. Si une reprise gardait un prompt système qui aurait changé, la première compression passe au prompt actuel et cette couche se reconstruit une fois.
CLAUDE.md et la mémoireRelus depuis le disque. Le cache ne touche que s'ils sont inchangés depuis le début de la session. Un CLAUDE.md modifié en cours de session attend une compression, un clear ou un redémarrage avant d'entrer dans la session.
Outils appelés plus tôt2.1.304 ajoute les noms des outils appelés plus tôt au résumé de compression dans la vue de transcription, raccourci Ctrl+O. La note parle de noms, pas du JSON complet des arguments. Enregistrez les arguments vous-même s'il vous les faut encore.

/recap n'est pas le même remplacement. Il ajoute le résumé comme sortie de commande, l'historique des messages reste, le préfixe de cache reste. /rewind tronque jusqu'à un tour plus ancien au lieu d'écrire un résumé. La compression d'inactivité est le chemin qui remplace l'historique par un résumé.

En quoi est-ce différent de l'article sur la compaction de l'API Messages ?

L'article APICet article
Où cela se passeReprendre une session de l'API MessagesLe terminal Claude Code, inactif sur le cache d'une heure
JSON à vérifierChamps qui doivent rester intacts sur le bloc compactionidleCompaction et le plancher de tokens dans settings.json
Comment l'arrêterPas en mettant un interrupteur d'inactivité à falseMettre idleCompaction au booléen false, ou le couper dans /config

Comment vérifier ces réglages dans JSONNote ?

  1. 1
    Choisir la bonne opération

    Ouvrez JSON Schema. Réglez Fonctionnement sur Vérifiez avec Schema. Collez les réglages dans le premier champ et le schéma ci-dessus dans le second. idleCompaction ne peut être qu'un booléen. Si le plancher est présent, il ne peut être qu'une chaîne.

  2. 2
    Opposer quatre documents invalides

    Mettez idleCompaction à la chaîne false, supprimez idleCompaction, mettez le plancher au nombre 200000, ou gardez env et supprimez le plancher dedans. Les quatre échouent. Les réglages false ci-dessus passent. Passer ne veut dire que la forme est bonne.

  3. 3
    Comparer false et true

    Ouvrez JSON Comparer Diff. Collez les réglages avec idleCompaction false dans le premier champ. Dans le second, changez seulement idleCompaction en true. La chaîne du plancher peut rester la même. Les deux passent le schéma. Ce qui arrête le remplacement automatique de l'historique est false, pas ce contrôle de forme.

Questions fréquentes

Est-ce la même chose qu'un /compact manuel ?

Non. /compact est ce que vous lancez vous-même entre deux tâches. La compression d'inactivité est le terminal qui remplace l'historique par un résumé après environ 54 minutes sans nouveau message, quand la session dépasse environ 200K tokens et est sur le cache d'une heure. Les deux remplacent l'historique. Seul le chemin d'inactivité est coupé par idleCompaction dans settings.json.

Une session avec clé API se compresse-t-elle aussi après 54 minutes ?

Le guide place la compression d'inactivité sur une session terminal qui est sur le TTL d'une heure. Sur des crédits d'usage, une clé API ou un fournisseur cloud, la conversation principale est à cinq minutes par défaut, pas à une heure. L'attente d'environ 54 minutes du journal des changements est celle qui court avant l'expiration du cache d'une heure. N'appliquez pas ces 54 minutes au seau de cinq minutes.

Après l'avoir coupée, le message suivant peut-il encore être lent ?

Oui. Le journal des changements donne ce comportement pour que le message suivant ne retraite pas tout l'historique. Couper arrête seulement qu'un résumé remplace l'historique. Après l'expiration du cache, le message suivant peut encore retraiter l'historique non compressé. Ce qui reste est le texte d'origine.

Est-ce le même article que celui de septembre sur Conversation Compaction ?

Non. Celui-là porte sur les champs que l'API Messages doit stocker inchangés autour de la compression pour reprendre une session. Celui-ci porte sur le terminal Claude Code qui remplace l'historique après l'inactivité, et sur la façon dont settings.json coupe cela. Les deux s'appellent compression. Le JSON que vous stockez n'est pas le même document.

Les arguments d'outil restent-ils dans le résumé de compression ?

2.1.304 dit que le résumé de compression dans la vue de transcription contient les noms des outils appelés plus tôt, raccourci Ctrl+O. Il ne dit pas que le JSON complet des arguments reste dans le résumé. S'il vous faut encore les arguments, enregistrez une copie avant la compression et vérifiez cette copie avec un schéma.

Conclusion

Dans le terminal, une session au-dessus d'environ 200K tokens inactive environ 54 minutes sur le cache d'une heure voit son historique remplacé par un résumé. CLAUDE.md est relu depuis le disque. Les noms d'outils peuvent apparaître dans le résumé de transcription depuis 2.1.304. Le JSON des arguments, vous l'enregistrez vous-même.

La décision : mettez idleCompaction au booléen false pour garder l'historique ; si vous changez le plancher, écrivez une chaîne ; couper n'empêche pas le cache d'expirer ; ni /recap ni /rewind n'est ce remplacement d'inactivité.

Ensuite : fixez le booléen idleCompaction et la chaîne du plancher avec le schéma, puis utilisez Diff pour voir false face à true.

Retour au blog