---
title: "Memory"
description: "Persistent facts the agent learns from conversations, always visible on every turn."
---

Memory is one of the four layers of an agent's brain - see [Concepts](/agents/concepts) for how it fits with the system prompt, skills, and wiki.

Every memory is **inlined into the system prompt on every turn**. There is no retrieval step, no command to trigger - the agent always sees what it has learned.

<img src="/images/memory-tab.png" alt="Memory tab showing agent reference memories" style={{borderRadius: "12px", marginBottom: "24px"}} />

## Where memory lives in the UI

Open any agent → **Instructions** tab → **Memory** sub-tab.

- A list of saved memories grouped by type
- Content and description for each memory
- A delete button on each memory

## How memories get saved

When something in a conversation is worth keeping across sessions, the agent asks the user first - *"Should I remember that you prefer BigQuery over Redshift?"* - and only writes the memory after you confirm.

Ask-before-saving keeps memory clean and prevents noise.

## Memory types

| Type | Purpose | Example |
|---|---|---|
| `feedback` | Behavioral corrections, validated approaches | "Don't mock the database in integration tests" |
| `user` | Facts about people the agent works with | "Kai leads the data team, prefers concise answers" |
| `project` | Ongoing work context, decisions, deadlines | "Merge freeze starts 2026-03-05 for mobile release" |
| `reference` | Pointers to external systems | "Pipeline bugs tracked in Linear project INGEST" |

## Memory file format

```markdown
---
name: kai_team_lead
description: Kai leads the data team and prefers concise answers
type: user
---

Kai is the lead of the data team. They prefer concise, direct answers
without lengthy preamble. They use BigQuery, not Redshift.
```

| Field | Required | Notes |
|---|---|---|
| `name` | Yes | Snake_case unique key per agent |
| `type` | Yes | One of `user`, `feedback`, `project`, `reference` |
| `description` | No | One-line summary shown in the Memory tab |

## Size budget

Total inlined memory has a cap (`MAX_INLINED_MEMORY_BYTES` in the runner). If an agent accumulates more than the budget allows, the oldest entries overflow and are dropped with a warning. Prune stale memories from the Memory tab.

## Updating and deleting

- **Update** - the agent overwrites the file with the same `name`. The DB uses `(agent_id, name)` as the unique key, so there are no duplicates.
- **Delete** - click × on the memory card. Removed from the database and not reloaded on next start.

Memories persist until you delete them. There is no TTL.

## Next steps

<CardGroup cols={2}>
  <Card title="Concepts" icon="diagram-project" href="/agents/concepts">
    How memory fits with system prompt, skills, and wiki.
  </Card>
  <Card title="Coach" icon="comments" href="/agents/coach">
    Turn conversation insights into skills and wiki pages.
  </Card>
</CardGroup>
