Je travaille souvent plusieurs jours dans la même conversation ChatGPT.
On discute, on reformule, on abandonne des pistes, puis au milieu de dizaines de messages apparaît enfin un paragraphe intéressant.
À ce moment-là, j'aimerais simplement pouvoir dire :
Persiste ça.
Puis continuer à travailler.
Et cinq jours plus tard :
Ressors-moi tout ce que j'ai persisté.
Cela paraît évident.
Mais ChatGPT ne fonctionne pas vraiment comme ça.
Le chat n'est pas la mémoire de ChatGPT
C'est probablement le point le moins bien compris.
La conversation affichée dans l'interface peut être complète. Je peux faire défiler les messages et retrouver ce que nous nous sommes dit trois jours plus tôt.
Mais cela ne signifie pas que ChatGPT dispose lui aussi de tous ces messages mot pour mot lorsqu'il répond.
Il faut distinguer :
- le transcript conservé et affiché dans l'interface ;
- ce que le modèle peut effectivement utiliser pour produire sa réponse ;
- la mémoire de ChatGPT, qui ne conserve pas chaque conversation mot pour mot.
OpenAI explique que la mémoire conserve certains éléments utiles et ne doit pas être considérée comme un stockage exhaustif de tout ce qui a été dit.
FAQ officielle sur la mémoire de ChatGPT
Le transcript est donc complet pour moi.
ChatGPT, lui, n'a pas forcément gardé mot pour mot les passages qui m'intéressent.
Or c'est précisément ce dont j'ai besoin.
Si je sélectionne aujourd'hui trois paragraphes importants, je veux pouvoir revenir cinq jours plus tard et récupérer exactement ces trois paragraphes.
« Bookmark ça » ne suffit pas
Je pourrais écrire :
Bookmark ce paragraphe.
Mais cela ne crée pas un véritable bookmark persistant.
Quelques jours plus tard, ChatGPT retrouvera peut-être ce que j'avais sélectionné, comme il pourra être incapable de me le ressortir mot pour mot. Ce n'est pas assez fiable pour mon besoin.
Je veux retrouver exactement les passages que j'ai décidé de conserver.
C'est ce besoin qui justifie une persistance externe.
Je ne veux pas sauvegarder toute la conversation
Le but n'est surtout pas de copier automatiquement chaque message.
Une longue conversation contient beaucoup de matière intermédiaire :
- des questions ;
- des essais ;
- des reformulations ;
- des pistes abandonnées ;
- des réponses remplacées dix minutes plus tard.
Je veux uniquement sortir du flux les quelques morceaux qui ont de la valeur.
Par exemple :
Persiste notre dernière définition.
ou :
Persiste ça.
La décision de conserver reste humaine.
Première idée : une API
Mon premier réflexe a été classique.
Construire un petit service PHP capable de recevoir du texte et de l'ajouter dans un fichier Markdown.
Quelque chose comme :
ChatGPT
↓
API
↓
Markdown
J'ai donc développé (enfin plutôt Claude Code) un petit Remote Persistence Store.
Le serveur savait :
- créer différents contextes ;
- ajouter du contenu ;
- restituer le Markdown ;
- donner quelques informations sur l'état du contexte.
Techniquement, tout fonctionnait.
Le problème était ailleurs.
Avec ChatGPT Plus, je ne peux pas simplement appeler mon API
Avec mon abonnement ChatGPT Plus à 20 $ par mois, je ne peux pas simplement demander à ChatGPT d'appeler n'importe quelle API externe.
ChatGPT sait construire lui-même une URL d'API en y ajoutant des paramètres. Mais dans certains cas, dès que l'URL a été modifiée ou construite par lui, l'outil web refuse ensuite de l'appeler. Le problème n'est donc pas de fabriquer l'URL, mais d'avoir le droit de l'exécuter.
Je voulais continuer à utiliser ChatGPT normalement, notamment depuis mon téléphone.
Il fallait donc trouver un autre chemin.
Deuxième tentative : filouter
ChatGPT sait consulter des pages Web.
J'ai donc essayé de cacher une opération d'écriture derrière ce qui ressemblait à une simple consultation de page Web.
Au lieu d'envoyer :
POST /persist
j'ai construit une URL du genre :
https://mon-serveur.example/persist
?context=mon-contexte
&content=mon-texte
Pour ChatGPT, la demande ressemblait simplement à :
Consulte cette page Web.
Pour mon serveur :
Récupère les paramètres et écris-les sur disque.
Je transformais donc volontairement une écriture en une fausse lecture.
Ce n'était pas très élégant.
Mais pour un prototype personnel, cela aurait parfaitement fait l'affaire.
Et côté serveur, cela fonctionnait.
- Depuis un navigateur : aucun problème.
- Avec
curl: aucun problème.
Mais dès que ChatGPT devait prendre le contenu de notre conversation, construire dynamiquement cette nouvelle URL puis consulter la page correspondante, ses protections de navigation bloquaient l'opération.
Ce qui est finalement assez logique.
J'essayais précisément de faire sortir automatiquement du contenu de la conversation vers mon propre serveur, en déguisant l'écriture en consultation d'une page Web.
Regarder ce que ChatGPT sait déjà faire
J'ai alors changé de question.
Au lieu de chercher :
Comment faire appeler mon serveur par ChatGPT ?
j'ai cherché :
Où ChatGPT sait-il déjà écrire ?
Dans mon cas : Google Sheets.
J'ai créé un Sheet extrêmement simple :
created_at | context | content
Puis j'ai testé :
Persiste "AZERTY"
Et une nouvelle ligne est apparue :
2026-09-12T15:20:44+02:00 | Remote Persistence Store | AZERTY
Cette fois, le texte avait réellement quitté la conversation.
Il existait indépendamment de ChatGPT.
Google Sheets comme boîte de sortie
Ce n'était pas mon architecture idéale.
Je voulais initialement :
ChatGPT → API → Markdown
J'avais maintenant :
ChatGPT → Google Sheets
Mais Google Sheets n'a pas besoin d'être mon stockage définitif.
Il peut simplement jouer le rôle d'une outbox.
Une boîte de sortie dans laquelle ChatGPT dépose les informations que j'ai décidé de conserver.
Je pourrai ensuite faire :
ChatGPT
↓
Google Sheets
↓
script
↓
Markdown
↓
Obsidian / Git / autre IA
Le problème important était résolu : sortir une information précise de la conversation.
Première version : presque 50 secondes
Cela fonctionnait, mais c'était atrocement lent.
Une simple commande :
Persiste "test"
pouvait prendre presque 50 secondes pour écrire trois cellules.
Le problème venait de ce que ChatGPT redécouvrait presque tout à chaque fois.
- Il recherchait le fichier.
- Il récupérait ses métadonnées.
- Il vérifiait l'onglet.
- Il regardait les colonnes.
- Il cherchait où écrire.
Puis seulement il ajoutait les données.
Or rien de tout cela ne changeait entre deux appels.
Ne plus rechercher ce que l'on connaît déjà
J'ai donc ajouté directement dans la directive toutes les informations fixes :
- l'identifiant du Spreadsheet ;
- l'identifiant du Sheet ;
- le nom de l'onglet ;
- les trois colonnes ;
- leur signification.
Et surtout :
Ne recherche pas le fichier. Ne lis pas ses métadonnées. Ne relis pas ses en-têtes.
Il restait encore à déterminer où écrire.
Ma première solution consistait à insérer systématiquement la nouvelle entrée en ligne 2.
C'était rapide, mais les données étaient alors classées dans l'ordre inverse : les plus récentes en haut.
Google Sheets dispose heureusement d'un mécanisme d'append.
Plus besoin de chercher la dernière ligne.
Le processus devient simplement :
Persiste
↓
append
↓
vérification
↓
réponse
Dans mes tests, les appels Google nécessaires à l'écriture et à la relecture se font maintenant en une à deux secondes cumulées.
Le délai total de réponse de ChatGPT reste variable, mais on est très loin des presque 50 secondes de la première version.
Le problème n'était donc pas vraiment Google Sheets.
Le problème était que l'IA redécouvrait à chaque fois un contexte déjà connu.
Vérifier après avoir écrit
Je ne voulais pas non plus que ChatGPT m'affiche simplement :
C'est persisté.
sans savoir ce qui avait réellement été écrit.
J'ai donc ajouté une règle.
Après chaque écriture, ChatGPT doit relire l'entrée qu'il vient d'ajouter.
Pour un petit texte, il affiche ce qu'il a réellement relu :
Persisté ✓
Contexte : Remote Persistence Store
Statut : OK
Contenu :
AZERTY
Pour un contenu beaucoup plus long, il affiche seulement un résumé fidèle du contenu relu.
L'important est que la confirmation intervienne après la vérification.
intention
→ écriture
→ relecture
→ vérification
→ confirmation
Rendre « Persiste » disponible dans tous mes chats
Je ne voulais évidemment pas coller tout ce mode d'emploi au début de chaque nouvelle conversation.
Je l'ai donc ajouté dans les Instructions personnalisées de ChatGPT.
Sur le Web :
Paramètres
→ Personnalisation
→ Instructions personnalisées
Il faut également connecter Google Drive à ChatGPT pour qu'il puisse accéder au Sheet.
Une fois les deux éléments configurés, je peux commencer une nouvelle conversation et écrire directement :
Persiste notre dernière définition.
La directive indique alors à ChatGPT ce que signifie le verbe Persiste et où envoyer le contenu.
Ma directive « PERSISTE »
Voici une version anonymisée.
Il faut remplacer les trois valeurs entre <...> par celles de votre propre Google Sheet. Vous pouvez demander à ChatGPT de les trouver, voire de créer le Google Sheet.
DIRECTIVE « PERSISTE »
Lorsque je commence une demande par « Persiste » ou que je demande explicitement de persister une information, ajoute cette information dans le Google Sheet configuré comme store de persistance.
GOOGLE SHEET
Spreadsheet ID: <SPREADSHEET_ID>
Sheet: <SHEET_NAME>
Sheet ID: <SHEET_ID>
Structure fixe :
A = created_at
B = context
C = content
INTERPRÉTATION
- « Persiste xxx » = persister xxx.
- « Persiste notre dernier échange » = persister le contenu pertinent du dernier échange.
- « Persiste ta dernière réponse » = persister la dernière réponse.
- « Persiste ce texte » = persister le texte explicitement concerné.
- « Persiste dans {contexte} xxx » = utiliser {contexte} comme context.
- Si aucun contexte n'est indiqué, déduire un nom court et pertinent à partir du sujet courant.
- Ne pas demander de confirmation si la demande est claire.
ÉCRITURE
1. Déterminer created_at avec la date et l'heure courantes.
2. Utiliser directement le Spreadsheet ID et le Sheet connus.
3. Utiliser un append natif Google Sheets.
4. Ajouter exactement :
created_at | context | content
OPTIMISATION
Lors d'une commande « Persiste » :
- ne pas rechercher le fichier ;
- ne pas lire ses métadonnées ;
- ne pas relire ses en-têtes ;
- ne pas rechercher la dernière ligne ;
- ne pas analyser sa structure avant l'écriture ;
- utiliser directement les identifiants et la structure connus.
Ne faire une lecture qu'après l'écriture.
VÉRIFICATION
Après l'append :
1. Relire uniquement l'entrée ajoutée.
2. Vérifier le contexte et le contenu.
3. Ne confirmer la persistance qu'après cette vérification.
CONTENU
- Persister le contenu demandé lui-même.
- Ne pas le résumer avant stockage.
- Ne pas le reformuler ou le corriger sauf demande explicite.
- Conserver autant que possible sa structure originale.
RÉPONSE
Pour un contenu court :
Persisté ✓
Contexte : {context}
Statut : OK
Contenu :
{contenu effectivement relu}
Pour un contenu long :
Persisté ✓
Contexte : {context}
Statut : OK
Résumé du contenu relu :
{résumé fidèle en quelques lignes}
Le résumé concerne uniquement la confirmation.
Le contenu stocké reste intégral.
En cas d'échec :
Persistance échouée ✗
Contexte : {context}
Statut : ERREUR
Problème :
{description courte de l'erreur}
PRIORITÉ
append direct → vérification ciblée → réponse
Éviter toute opération Google Drive ou Google Sheets non indispensable.
Ce n'est pas une mémoire pour ChatGPT
Je ne considère pas ce Google Sheet comme « la mémoire de ChatGPT ».
C'est beaucoup plus simple.
C'est un endroit extérieur dans lequel je peux décider qu'un morceau de conversation mérite d'être conservé.
Pendant une discussion :
on cherche
→ on teste
→ on reformule
→ quelque chose devient intéressant
À ce moment-là :
Persiste ça.
Le morceau quitte le flux.
Il devient récupérable indépendamment de ce que ChatGPT aura encore en contexte dans cinq jours.
Du flux au capital
Techniquement, tout cela finit par écrire trois cellules dans un tableur.
Ce n'est pas la partie intéressante.
Ce qui m'intéresse est le geste.
Une conversation avec une IA produit énormément d'information temporaire.
Tout n'a pas besoin de survivre.
Mais certaines choses méritent de passer du flux à quelque chose de durable.
Je ne veux pas demander à ChatGPT de tout mémoriser.
Je veux pouvoir lui indiquer :
Ça, ça compte.
Puis :
Persiste ça.
La conversation reste l'espace dans lequel je travaille.
Ce que j'en extrais peut commencer à devenir du capital informationnel.
Pour aller plus loin
Du fichier unique au système de contextes : pourquoi la mémoire d'un LLM ne tient pas dans un seul document Sous le capot de mon moteur de contexte : comment une IA se souvient d'une mission Ajouter une mémoire de session comme dans OpenClaw Le livrable n'est plus le capital