Recall
Recall is how Previously retrieves relevant past conversations. In v1.0 it is no longer a retrieval tool the main agent drives — it is a colleague: an episodic-recall specialist the main agent asks in natural language, who searches the memory itself and reports back with an answer anchored in verbatim quotes. Every step renders live in the chat: recall runs in the open, not behind a spinner.
A Colleague, Not a Tool
The contract is conversational on both sides. The main agent calls recall with a plain question — {question: "did we ever talk with the user about the best-man speech?"} — the way you would ask a colleague who was there. Recall answers in natural language too.
Two disciplines govern the whole exchange:
- Colleagues, and the user is always a third party. The main agent and recall refer to each other as colleagues and to you as the user — neither side role-plays you or treats the other as you. This is pinned in the shared sub-agent base prompt and in the main agent's tool descriptions.
- Evidence anchoring. Any claim about an episode must carry a verbatim quote or a slice pointer; a claim that can't be anchored is marked uncertain. Recall, scoring, and direction changes all obey this — hallucination is locked out structurally, not by hoping the model behaves.
Key takeaway: the main agent no longer navigates memory itself. It asks a colleague who knows the archive, then trusts — and can verify — the answer.
The Recall Report
Recall's answer lands as one structured report with four parts:
| Field | What it carries |
|---|---|
answer | The natural-language answer, in your language. "We don't remember talking about this" is a valid — and important — answer; manufacturing a hit is forbidden. |
references[] | {slice_id, quote, note} — every situational claim in the answer must hang on a verbatim quote here. |
searched[] | The paths actually searched — timeline windows, strands traced, slices read — so the main agent can judge how complete the recall is. |
confidence | 0–1. |
The searched trail is what makes a negative answer trustworthy: "we don't remember" means something different when recall checked the relevant time window and two strands than when it glanced at the timeline and gave up.
How Recall Searches
Recall holds the full set of read-only memory tools — readGlobalTimeline, readTimelineWindow, readStrand, listStrands, readSliceSummary, and readSlice (with its range protocol) — and works the way a person remembers: broad first, deep only where the leads point.
- Time anchors first. A question with a time anchor ("last week", "that day before the wedding") starts with
readTimelineWindowto lock the physical time window. - Trace the strands. From clues in the question, follow matching strands — the keyword-to-slices index — to every slice that carries the topic.
- Summaries, then full reads. Slice summaries decide whether a slice is worth opening; full-text reads are quota-bounded to at most 5 slices, so depth is spent where it matters.
- If nothing holds up — say so. When the search genuinely finds nothing, the honest answer is "we don't remember this", plus the
searchedlist. Recall never hard-forces a match.
The budget is generous enough for real searching — 20 steps, a 240-second wall clock, temperature 0.3 (episodic understanding needs some temperature; the evidence-anchoring structure is what keeps it honest). A timeout is not a wasted run: recall writes its answer as it thinks, so the runner returns the accumulated partial.
The Rework Signal
The main agent kept exactly one memory-reading tool of its own: readSlice, reserved for verifying recall's answers — "open the original slice only when you need to check what recall reported."
That verification channel is instrumented. When the main agent calls recall and then re-reads the same slice itself, the system classifies the read — a quick check is a verify, re-doing recall's job is a rework, asking the same thing again is a repeat — and records it into the agent timeline and the fitness store. A rework is an implicit demerit against recall: it means the answer wasn't trusted. It is the most reliable implicit signal the fitness scoring has, and enough of them trigger an evolution of recall's playbook (see The Evolution Loop).
One recall, then trust it. If recall searched and found nothing, that is a definitive answer — the main agent does not re-ask the same question, and answering from the current conversation is correct. Re-searching what a colleague already searched reads as distrust, and the system now keeps score of exactly that.
Late one night, your mom's scare from last summer crosses your mind. You ask Previously:
11:47 PM
You barely slept. In the July 11 conversation you said you spent the whole night staring at the ceiling with your heart racing — and at 2am you texted Alex, who answered with a voice memo promising to be at the finish line no matter what.
I barely slept last night. Just lay there staring at the ceiling, heart racing. Ended up texting Alex at 2am and they sent a voice memo saying they'll be at the finish no matter what.
On the evening of July 16 you were still standing at the finish line, medal in hand, a little in shock. Alex was there holding a ridiculous sign. You stood there for ten minutes without saying a word.
Alex was at the finish line with a stupid sign and I just stood there for ten minutes. Didn't even say anything. Just held the medal.
On July 20 you turned the whole training journey into a post — the knee injury, the pre-race panic, all of it. Reading the comments, you realized something yourself: the race was never about the time. It was about proving you could stick with something.
the race was never really about the time. It was about proving I could stick with something.
Watching recall in the interface
Every step recall takes — reading a timeline window, tracing a strand, opening a slice, landing its report — renders live on a tool card in the chat: recall runs in the open, not behind a spinner. The three rendering phases and the five card states are covered in The Chat Interface.
Related
- Slices — how slices are created, closed, and indexed
- Strands — the semantic keyword index recall traces
- Evolution — the loop that improves recall's playbook when the fitness score says so
- Architecture — the colleague system and the narrowed main-agent tool surface