Skip to main content
An agent’s memory is part of its version, like its tools and guardrails: edit the draft, publish, activate. It is one block, memory.options, with five independent switches. An agent saved with no memory block gets the platform defaults: the last ten messages, a title generated from the first message, nothing else. Everything below goes through PATCH /v1/agents/{id}/draft. An unknown key or a value out of range answers 400 naming the path, so a typo never saves as a setting that silently does nothing. "memory": null restores the platform defaults.

Remembering a user across conversations and runs

A scheduled automation runs in a new conversation every time (see Result threads), so nothing thread-scoped carries from Monday’s run to Tuesday’s. What does carry is the user’s working memory, when it is kept per user and someone keeps it current. The combination:
  • workingMemory.scope: "resource" — one record per user (it is the default scope). A user’s chats and their automation runs share it: a run executes as its owner, on the same user record.
  • observation.manageWorkingMemory — the observer updates the notes in the background, from what it observed. The agent no longer has to remember to do it mid-answer, and gets the notes read-only in its system prompt.
  • observation.bufferOnIdle — the observer also runs at the end of every turn, however short. Without it a run’s conversation (one user message, one answer) would never reach the observer’s token interval, and the notes would never be written.
  • observation.threadTitle — the observer renames the conversation when its topic meaningfully changes, so the thread list follows what was actually discussed.
What the user gets: an agent that knows on Tuesday what it learned on Monday — in the chat where they asked a follow-up as much as in the next scheduled run — and conversation titles that follow the conversation.

Working memory

workingMemory: true is the same as { "enabled": true }. The notes are injected into the agent’s system prompt on every turn.

The observer (observational memory)

observationalMemory: true turns it on with every default below.

Titles: the first one and the rewrites

Two writers can name a conversation. generateTitle names it from the first message, as soon as the first answer is saved, so the thread list is never blank. With observation.threadTitle the observer proposes a title at the end of its first pass — that one replaces the first — and from then on rewrites it only when the topic meaningfully changes; it is shown its own previous title and told to leave it alone otherwise. A rewrite lands on the thread itself and reaches every open client as a thread update over GET /v1/events, like any other change to the row. Turn generateTitle off (false) to let the observer be the only writer; the conversation is then untitled until its first observation.

Cost

The observer, the reflector and the title model run on the organization’s own key, under the billing group of the conversation they belong to (an automation run’s: its owner’s group), and show up in that group’s usage like the agent’s own calls. The shape, with the defaults above:
  • one background observer call every bufferTokens worth of new messages (every 4,500 tokens), on the conversation’s messages since the last one;
  • with bufferOnIdle, one background observer call at the end of every turn — the cost of remembering a user across runs is one small-model call per run;
  • one reflector call each time the observation log passes its threshold;
  • one title call per conversation (generateTitle), plus a title rewrite only when the observer decides the topic changed — part of its normal call, not an extra one.
None of these calls sits on the request path: the answer streams while the observer works, and the end-of-turn observation starts after the answer is complete. The one exception is blockAfter, the synchronous safety valve.

Long-term recall (semantic recall)

semanticRecall: true uses the defaults. Each turn costs one embedding of the new message, and each saved message one embedding, on the platform embedding model.

Titles and history

In the Studio

Memory is a section of the agent editor: a switch per option, the cross-conversation combination above as one preset, and the model and threshold fields below. The API shape is what the editor saves.