> Source: https://www.esfis.com/en/blog/who-decides-what-is-remembered · esfis, your projects, your context, your agents. Updated 17 September 2026.

# Who decides what gets remembered

> In esfis, what is worth remembering is chosen by the agent you are already talking to, not by a second model. The whole policy fits in the description of an MCP tool, and storing something costs nothing at all.

Francesc Pinyol, Founder · 15 September 2026 · 3 min read

The obvious way to build a memory for AI is to put a model in the middle: you hand it the conversation, it extracts facts, compares them with what you already know and decides what to store. esfis can do that too: it is the Conversation tab. But it is the only part of the app that costs money and the only one that takes data off your Mac.

Everything else works the other way round. There is no second model.

## The agent already has the whole context

When you work with Claude Code or Codex, there is already a model reading the entire conversation. It knows what was decided, what you asked for and what is an experiment that will not outlive the hour. Sending all of it to another model so that it can guess means paying twice to learn the same thing, and learning it worse.

So it is the agent that calls `remember`. The policy on what is worth storing lives on no server: it is in the tool's description, which the agent reads before using it. In short, it says this:

- Store what will still matter in a week: preferences, projects, decisions and plans.
- Do not store generic questions, passing details, general facts about the world or your own assumptions.
- Be sparing: most turns deserve no memory at all.
- Write one sentence, in the third person, with absolute dates — never “tomorrow”.

That last rule carries more weight than it looks. “We deploy tomorrow” is true for one day and false forever after.

## What esfis does on its own

The agent deciding does not mean esfis accepting everything. When a `remember` arrives:

- **If the sentence is already there, identically**, it is not stored again, and the response says which id holds it.
- **If there is a near-identical one**, likewise: the agent gets its id and a nudge to pass it in `supersedes` if the new one updates it.
- **With `supersedes`**, the old item is deactivated and points at the new one. It is not deleted: it stays on as history, and `esfis --why` can show it as “before”.
- **If there are similar ones**, the new item is stored and the response includes their ids, so the agent can replace them instead of piling up contradictions.
- **If it is an instruction**, the response lists every instruction currently in force. Instructions travel with every `recall`, and a duplicated one is paid for on every question.

Since version 1.8, every item records the agent that stored it as its source, even when the client does not say so. The next day, when Codex receives it, it reads `source: Claude Code`.

## Retrieving is free too

`recall` runs locally: it combines BM25 with the sentence vectors macOS ships with. It returns the standing instructions and, at most, eight facts. If the question has nothing to do with anything you know, it returns none. We go into it in [When a rare word beats a vector](/en/blog/when-a-rare-word-beats-a-vector).

## What this decision costs

The quality of what gets stored depends on the agent. A careless agent will store noise, and an over-cautious one will store nothing. That is why Memory can be edited as plain text and the Test tab shows what each AI would receive: if something is missing or something is in the way, you see it and fix it in a minute.

It is a trade we are happy with. One more model in the middle would mean an invoice, more latency and one more door for your data to leave through. Here there is none.
