🇫🇷🇺🇸🇧🇷🇪🇸🇩🇪🇮🇹

AI & context

"Persist that": getting information out of ChatGPT and into permanent storage

Five days later, you rarely find the exact paragraph that mattered inside a long ChatGPT conversation. This account shows how to pull a precise excerpt out of the flow on demand, using a simple custom instruction and a Google Sheet as an outbox — a blocked API, a failed workaround, then a solution that goes from 50 seconds to two, with systematic verification after every write.

Info

Originally written in French. Translated by AI — the meaning has been preserved, not the prose.

I often work for several days inside the same ChatGPT conversation.

We talk, we reword, we drop leads, and then, somewhere among dozens of messages, an interesting paragraph finally shows up.

At that moment, I would simply like to be able to say:

Persist that.

And then keep working.

And five days later:

Pull back everything I persisted.

It sounds obvious.

But that is not really how ChatGPT works.

The chat is not ChatGPT's memory

This is probably the least well understood point.

The conversation displayed in the interface can be complete. I can scroll through the messages and find what we said to each other three days earlier.

But that does not mean ChatGPT has all those messages word for word when it answers.

Three things need to be told apart:

  • the transcript kept and displayed in the interface;
  • what the model can actually use to produce its answer;
  • ChatGPT's memory, which does not keep every conversation word for word.

OpenAI explains that memory keeps certain useful elements and should not be treated as exhaustive storage of everything that was said.

Official FAQ on ChatGPT memory

So the transcript is complete for me.

ChatGPT, on the other hand, has not necessarily kept the passages I care about word for word.

And that is precisely what I need.

If I pick three important paragraphs today, I want to come back five days later and get exactly those three paragraphs.

"Bookmark that" is not enough

I could write:

Bookmark this paragraph.

But that does not create a real, persistent bookmark.

A few days later, ChatGPT may find what I had selected, or it may be unable to give it back to me word for word. That is not reliable enough for what I need.

I want to retrieve exactly the passages I decided to keep.

That need is what justifies external persistence.

I do not want to save the whole conversation

The goal is definitely not to automatically copy every message.

A long conversation contains a lot of intermediate material:

  • questions;
  • attempts;
  • rewordings;
  • abandoned leads;
  • answers replaced ten minutes later.

I only want to pull the few valuable pieces out of the flow.

For example:

Persist our latest definition.

or:

Persist that.

The decision to keep something stays human.

First idea: an API

My first reflex was the classic one.

Build a small PHP service able to receive text and append it to a Markdown file.

Something like:

ChatGPT
   ↓
API
   ↓
Markdown

So I built (or rather Claude Code did) a small Remote Persistence Store.

The server could:

  • create different contexts;
  • append content;
  • return the Markdown;
  • report a few details about the state of a context.

Technically, it all worked.

The problem was elsewhere.

With ChatGPT Plus, I cannot simply call my API

With my $20-a-month ChatGPT Plus subscription, I cannot simply ask ChatGPT to call any external API.

ChatGPT can build an API URL itself and add parameters to it. But in some cases, as soon as the URL has been modified or built by the model, the web tool then refuses to call it. So the problem is not producing the URL, it is being allowed to execute it.

I wanted to keep using ChatGPT normally, in particular from my phone.

So I had to find another route.

Second attempt: sneaking around it

ChatGPT can fetch web pages.

So I tried to hide a write operation behind what looked like a plain web page fetch.

Instead of sending:

POST /persist

I built a URL along these lines:

https://my-server.example/persist
?context=my-context
&content=my-text

To ChatGPT, the request simply looked like:

Fetch this web page.

To my server:

Take the parameters and write them to disk.

So I was deliberately turning a write into a fake read.

It was not very elegant.

But for a personal prototype, it would have done the job perfectly well.

And on the server side, it worked.

  • From a browser: no problem.
  • With curl: no problem.

But the moment ChatGPT had to take content from our conversation, dynamically build that new URL and then fetch the corresponding page, its browsing safeguards blocked the operation.

Which, in the end, makes sense.

I was doing exactly that: automatically pushing conversation content out to my own server, with the write disguised as a web page fetch.

Looking at what ChatGPT already knows how to do

So I changed the question.

Instead of asking:

How do I get ChatGPT to call my server?

I asked:

Where does ChatGPT already know how to write?

In my case: Google Sheets.

I created an extremely simple Sheet:

created_at | context | content

Then I tested:

Persist "AZERTY"

And a new row appeared:

2026-09-12T15:20:44+02:00 | Remote Persistence Store | AZERTY

This time, the text had genuinely left the conversation.

It existed independently of ChatGPT.

Google Sheets as an outbox

This was not my ideal architecture.

What I originally wanted:

ChatGPT → API → Markdown

What I now had:

ChatGPT → Google Sheets

But Google Sheets does not have to be my permanent storage.

It can simply play the role of an outbox.

A place where ChatGPT drops the information I decided to keep.

From there I can do:

ChatGPT
   ↓
Google Sheets
   ↓
script
   ↓
Markdown
   ↓
Obsidian / Git / another AI

The important problem was solved: getting a specific piece of information out of the conversation.

First version: almost 50 seconds

It worked, but it was excruciatingly slow.

A simple command:

Persist "test"

could take almost 50 seconds to write three cells.

The problem was that ChatGPT rediscovered almost everything every time.

  • It searched for the file.
  • It fetched its metadata.
  • It checked the tab.
  • It looked at the columns.
  • It worked out where to write.

Only then did it append the data.

And none of that changed between two calls.

Stop searching for what you already know

So I put all the fixed information straight into the instruction:

  • the Spreadsheet ID;
  • the Sheet ID;
  • the tab name;
  • the three columns;
  • what they mean.

And above all:

Do not search for the file. Do not read its metadata. Do not re-read its headers.

That still left the question of where to write.

My first solution was to always insert the new entry at row 2.

It was fast, but the data then ended up in reverse order, with the most recent entries on top.

Fortunately, Google Sheets has an append mechanism.

No more hunting for the last row.

The process becomes simply:

Persist
   ↓
append
   ↓
verification
   ↓
answer

In my tests, the Google calls needed to write and read back now take one to two seconds in total.

ChatGPT's overall response time still varies, but we are a long way from the near-50 seconds of the first version.

So the problem was not really Google Sheets.

The problem was that the AI kept rediscovering a context it already knew.

Verify after writing

I also did not want ChatGPT to simply tell me:

It's persisted.

without knowing what had actually been written.

So I added a rule.

After every write, ChatGPT has to read back the entry it just added.

For a short text, it displays what it actually read back:

Persisted ✓

Context: Remote Persistence Store
Status: OK

Content:
AZERTY

For much longer content, it only displays a faithful summary of what it read back.

What matters is that the confirmation comes after the verification.

intent
→ write
→ read back
→ verify
→ confirm

Making "Persist" available in all my chats

Obviously I did not want to paste this whole set of instructions at the start of every new conversation.

So I added it to ChatGPT's Custom instructions.

On the web:

Settings
→ Personalization
→ Custom instructions

You also need to connect Google Drive to ChatGPT so it can access the Sheet.

Once both pieces are configured, I can start a new conversation and write straight away:

Persist our latest definition.

The instruction then tells ChatGPT what the verb Persist means and where to send the content.

My "PERSIST" instruction

Here is an anonymized version.

You need to replace the three values between <...> with those of your own Google Sheet. You can ask ChatGPT to find them, or even to create the Google Sheet for you.

"PERSIST" DIRECTIVE

When I start a request with "Persist" or explicitly ask to persist a piece of information, append that information to the Google Sheet configured as the persistence store.

GOOGLE SHEET

Spreadsheet ID: <SPREADSHEET_ID>

Sheet: <SHEET_NAME>

Sheet ID: <SHEET_ID>

Fixed structure:

A = created_at
B = context
C = content

INTERPRETATION

- "Persist xxx" = persist xxx.
- "Persist our last exchange" = persist the relevant content of the last exchange.
- "Persist your last answer" = persist the last answer.
- "Persist this text" = persist the text explicitly referred to.
- "Persist in {context} xxx" = use {context} as context.
- If no context is given, infer a short, relevant name from the current topic.
- Do not ask for confirmation if the request is clear.

WRITING

1. Set created_at to the current date and time.
2. Use the known Spreadsheet ID and Sheet directly.
3. Use a native Google Sheets append.
4. Append exactly:

   created_at | context | content

OPTIMIZATION

During a "Persist" command:

- do not search for the file;
- do not read its metadata;
- do not re-read its headers;
- do not look for the last row;
- do not analyze its structure before writing;
- use the known identifiers and structure directly.

Only perform a read after the write.

VERIFICATION

After the append:

1. Read back only the entry that was added.
2. Check the context and the content.
3. Confirm persistence only after that verification.

CONTENT

- Persist the requested content itself.
- Do not summarize it before storing.
- Do not reword or correct it unless explicitly asked.
- Preserve its original structure as much as possible.

RESPONSE

For short content:

Persisted ✓

Context: {context}
Status: OK

Content:
{content actually read back}

For long content:

Persisted ✓

Context: {context}
Status: OK

Summary of the content read back:
{faithful summary in a few lines}

The summary concerns the confirmation only.
The stored content remains complete.

On failure:

Persistence failed ✗

Context: {context}
Status: ERROR

Problem:
{short description of the error}

PRIORITY

direct append → targeted verification → response

Avoid any non-essential Google Drive or Google Sheets operation.

This is not a memory for ChatGPT

I do not think of this Google Sheet as "ChatGPT's memory".

It is far simpler than that.

It is an outside place where I can decide that a piece of conversation deserves to be kept.

During a discussion:

we search
→ we test
→ we reword
→ something becomes interesting

At that point:

Persist that.

The piece leaves the flow.

It becomes retrievable regardless of what ChatGPT still has in context five days from now.

From flow to capital

Technically, all of this ends up writing three cells into a spreadsheet.

That is not the interesting part.

What interests me is the gesture.

A conversation with an AI produces an enormous amount of temporary information.

Not all of it needs to survive.

But some things deserve to move from the flow to something lasting.

I do not want to ask ChatGPT to memorize everything.

I want to be able to tell it:

That one matters.

Then:

Persist that.

The conversation stays the space I work in.

What I extract from it can start to become informational capital.

Further reading

From the Single File to a System of Contexts: Why an LLM's Memory Won't Fit in One Document Under the hood of my context engine: how an AI remembers a mission Adding session memory, like OpenClaw The Deliverable Is No Longer the Capital

This essay on the map