DEV Community

Cover image for A personal context layer, part 2: Memory is not history
hunter
hunter

Posted on

A personal context layer, part 2: Memory is not history

Memory is not the same as recorded history. In humans, our memories change based on the strength of neural connections, as well as contextual events. Kurzgesagt's How Are Memories Stored Inside Your Brain? describes this with an example of seeing a crow and a squirrel fight over a nut, only for a mouse to steal it. The event is memorable because it's novel, but the more you think about it and retell it, the more that memory gets reinforced. Later, when you tell the story to friends in a funnier context, that new context can seep back into the memory itself. The next time you remember the fight, you may remember it as funnier and more absurd than it actually was.

I do this too, just in a much less cinematic way. A small joke in passing may build up over time to be hilarious as I tell the situation over and over again. Then, if I find the original meme or message a year or two later, I'll realize it wasn't as funny as I remembered.

I also remember a lot of details, but not always the right ones. Sometimes I can remember some extremely specific thing from years ago and completely forget something I was sure I'd remember later that afternoon. I'm trying to get better at recognizing the difference between "I'll remember this later" and "no, actually, write this down."

Perplexity and I apparently have something in common: we're both a little too confident that we'll remember something later.

Maybe that's part of why this project keeps holding my attention. I'm trying to improve how I externalize my own memory at the same time I'm learning how these systems decide what to externalize for me.

For AI systems like Perplexity, "memory" is also not the same thing as a complete record of prior conversations. That distinction became a lot more important to me this week.

Picking the context project back up

In part one, I wrote about trying to build a personal context layer I could move between AI providers. My first attempt was based heavily around Job Hunting, mostly because that was the Perplexity Space where I first tested it.

The workflow was roughly:

Perplexity Space --> export prompt --> Portable Profile PDF --> ChatGPT Project --> import prompt

It worked well enough that, naturally, I started changing it.

I generalized the prompt so the same structure could work for Health, Finances, Home, or another project instead of assuming everything was related to job hunting. I also made the review process more interactive: the model can ask up to five clarification questions at a time, I answer them, and it can repeat that process before producing a draft if there are still meaningful conflicts or missing details.

Another change I cared about was preserving more "negative" information: decisions I already rejected, things I tried that didn't work, constraints that rule out an otherwise reasonable suggestion, or something I corrected previously. "Hunter prefers X" is useful, but "Hunter already considered Y, rejected it because of A and B, and would only reconsider if C changes" can be much more useful later. Otherwise, every new conversation gets another opportunity to enthusiastically suggest the exact same thing I already ruled out.

I also tightened how the profile handles current versus historical information. Something that used to be true may still be useful context, but it should not be presented next to newer information as if both are current.

For these edits, I switched where I was working on the prompts too. The earlier version had been revised largely inside Perplexity using GPT-5.6 Terra. This time I used GPT-5.6 Sol in ChatGPT.

I liked the updated prompt quite a bit.

Then I tested it again on my Job Hunting Space, and the actual export was worse.

It followed the output structure I had asked for, but glossed over many of the details I expected it to preserve. More importantly, while Perplexity was generating it, I could see that it was leaning heavily on the files and sources already attached to the Space, including the first Portable Profile PDF from my earlier attempt. It was not actually going back through all of the conversations in the Space the way I had instructed it to.

So instead of building a fresh profile from the original conversations, it was effectively doing something closer to:

previous profile + newer artifacts + selected memories --> new profile

The previous Portable Profile was already a summarized representation of the Space. Using it as a major source for the next one meant I was summarizing a summary and somehow expecting to preserve more detail.

Basically, I had invented lossy compression for my own life.

My first instinct was still to blame the prompt. So I did what any reasonable engineer would do: I kept tweaking it.

Eventually, though, I stopped and asked Perplexity a more basic question: what can you actually access from a Space?

That was the more useful question.

A Space is not an archive

Perplexity explained that it does not get a complete, scrollable view of every previous conversation in a Space. It has the current conversation directly, along with stored memories and selected snippets from older conversations that its retrieval system considers relevant to the current request. Those snippets are not necessarily the full threads.

Files are another layer. In the environment where I was testing this, Perplexity could see that some files existed in the Space, but could not actually open their contents.

So my prompt was effectively asking:

Review everything in this Space and preserve the important details.

But the model was never actually given everything in the Space.

No amount of prompt engineering can recover evidence that never enters the model's context.

That sounds obvious now. It was less obvious while using the product, because memory feels a lot like history when it works well. If I start a new conversation and the assistant remembers my job, what kinds of roles I'm looking for, how I like something written, or a decision I made weeks ago, it feels like the system remembers our previous conversations.

But "the assistant knows a fact from my past" and "the assistant can go back and inspect the full conversation where that fact came from" are very different capabilities.

For normal AI use, that distinction may not matter very much. A memory system is trying to make the next conversation useful. Selecting salient facts and retrieving relevant snippets makes sense for that.

For migration, I care about something else: coverage.

I want the detail that seemed minor three months ago but suddenly matters now. I want the option I already rejected and the reason why. I want the original example instead of only the sentence it eventually got summarized into.

In software terms, I had the layers backwards. The conversations are the source data. Provider memory is closer to a cache or index. The Portable Profile is a compiled artifact. I was asking the system to build a new compiled artifact from the old compiled artifact and then wondering why I was losing fidelity.

So, another pivot

Fortunately, Perplexity does offer a real account data export. I originally thought it didn't because I was looking from the mobile app -- the option is only visible from the desktop/browser interface.

The export includes conversation data in JSON and stored memories in CSV. I haven't gone deeply into the structure yet because that's now the next part of the project, rather than something I want to cram into this post.

The important change is that I no longer need to ask Perplexity to reconstruct its own memory of me. I can work from the exported data directly, treat the conversations as the primary source, use the stored memories as secondary information, and build the Portable Profile from the underlying records instead of whatever the provider's memory system happened to retrieve.

So the question has changed from:

How do I write a better memory-export prompt?

to:

What is actually in this JSON, and how do I reconstruct useful context from it without losing the details I care about?

That sounds like a problem for another post.

For now, I learned that an AI remembering something and an AI having access to its recorded history are not the same thing.

Which, appropriately enough, is probably something I should write down.

Top comments (0)