Composition axis

Memory

← All composition axes

Memory is what an agent knows from its own earlier runs without being told again. The axis covers two things: where those memories are stored, and — the part that changes behavior — how they are ranked and pulled into the next run's context.

Ranking is the lever. A keyword provider surfaces memories that share words with the current goal. A semantic provider embeds both and surfaces memories that mean something similar even when the wording differs. Same stored notes, different selection, different context window, different answer. An agent whose notes say "lot full by 7am" will recall that against a goal phrased "is parking tight?" under semantic ranking and miss it under keyword ranking.

This is the sense in which the axes are hyperparameters. Swapping the provider does not change what the agent is for. It changes what the agent notices, and that shows up in the output.

Providers in this deployment

Read from the memory-provider registry at page load — not a maintained list.

Firestore (keyword)Ranks memories by word overlap with the current message. No external calls; always available.available · default
Firestore (semantic)Ranks memories by embedding similarity to the current message (Gemini text-embedding-004). Falls back to keyword ranking if embeddings are unavailable.available

How to choose

Start on the default. Keyword ranking is cheap, deterministic and easy to debug: you can look at a memory and predict whether it will be recalled. Move to semantic when your agent's notes and its goals use different vocabulary for the same thing — that is the specific failure keyword ranking has, and the only one semantic reliably fixes.

Two things worth knowing before you switch. Semantic ranking calls an embeddings model, so it costs a little per run and is not byte-reproducible. And if the required key isn't configured, the run falls back to keyword ranking with a logged warning rather than failing — an agent that recalls less, never a dead agent.

Switching provider never moves or loses data. Both read the same store, so you can change your mind.

There is no automated experiment runner yet. Nothing here sweeps this axis for you — changing it means editing the agent and reading the next run. A compare mode that runs one task across several compositions is named on the index as not built, and that is still true.

Build an agent →