Agents That Remember

Workshop reconstruction from IMG_7435 through IMG_7448.

12:00 - 12:45 Sam Jiang / Anthropic Workshop IMG_7435 to IMG_7448

Index

This page reconstructs the readable workshop material from IMG_7435 through IMG_7448. Console-heavy demo photos are summarized as workflow evidence, and every original image is appended beneath its reconstructed section for inspection.

What You'll Learn

Source: IMG_7435

Diagnose the amnesia

See why isolated sessions limit agent usefulness.

Give an agent live memory

Create a memory store, attach it as a session resource, and steer what gets written with the prompt field.

Consolidate history with Dreaming

Run a dream over past transcripts, inspect the output store, and swap it into your next session.

Inspect it all in Console

Read what the agent chose to remember, and compare memory stores.

Core Concepts

Source: IMG_7436

The slide labels these as two new nouns, but places them beside the existing agent/session primitives.

ConceptMeaning
AgentModel + system prompt + tool config. Reusable across sessions.
EnvironmentThe container spec for a session. Also reusable.
SessionOne conversation thread between a user and an agent.
Memory storePersistent filesystem-like store. Attach as a resource so the agent can read and write across sessions.
DreamAsync batch job: reads transcripts and stores, distills them, writes a new memory store.

Step 1: The Problem

Sources: IMG_7437, IMG_7441

Without a memory store, each session is a silo. A fact you give the agent in one conversation is gone in the next.

The amnesiac baseline

Session A - tell it something

ant beta:sessions create \
  --agent "$AGENT" --environment-id "$ENV"

ant beta:sessions:events send \
  --session-id "$SES_A" \
  --event '{"type":"user.message","content":[{"type":"text",
  "text":"Just attended the subagent orchestration talk. Slides at go/cwc-subagents."}]}'

Session B - ask about it

ant beta:sessions create ...

ant beta:sessions:events send \
  --session-id "$SES_B" \
  --event '{"type":"user.message","content":[{"type":"text",
  "text":"Which talks have I been to so far, and where are the slides?"}]}'

Result: the agent has no idea.

Console Demo: No-Memory Recall

Sources: IMG_7438, IMG_7439, IMG_7440

The Claude Console demo shows a session named [no memory] recall. The user asks:

What features did they announce at the CMA talk?
Give me the go link for my notes.

The agent replies that it does not have access to internal notes, go links, or context about the specific "CMA talk". It asks for more context such as which talk, roughly when it happened, and the notes or link directly.

The demo proves the baseline behavior: the agent can answer the current message, but it cannot retrieve a fact from a previous session without attached memory.

Step 2: Attach A Memory Store

Source: IMG_7442

A memory store is a persistent, filesystem-like store the agent can read and write across sessions. Mount the same store on two sessions and they share memory.

Create It, Then Mount It On Every Session

Source: IMG_7443

# 3a - one store
MEM=$(ant beta:memory-stores create --name "$DOMAIN-memory" \
  --description "My CwC attendance and resources" --format json | jq -r .id)

# 3b - attach via --resource at session create
MEM_RESOURCE='{"type":"memory_store","memory_store_id":"'"$MEM"'",
  "name":"cwc_memory",
  "prompt":"Check cwc_memory before answering. Record attended sessions
  under attended/ and links under resources/.",
  "access":"read_write"}'

SES_C=$(ant beta:sessions create --agent "$AGENT" --environment-id "$ENV" \
  --resource "$MEM_RESOURCE" --format json | jq -r .id)

prompt

The lever: steer what gets written and where.

access

read_write by default; lock to read-only when you want it immutable.

Inspect Memory Stores In Console

Sources: IMG_7444, IMG_7445

The Console view exposes memory stores directly. In the demo, a memory store named demo is listed as active, and the slide shows CLI commands for inspecting what the agent chose to remember.

ant beta:memory-stores:memories list \
  --memory-store-id "$MEM"

ant beta:memory-stores:memory-versions list \
  --memory-store-id "$MEM"

Console route shown on the slide: Memory Stores → search by $MEM.

Step 3: Dreaming

Source: IMG_7446

A batch job reads past transcripts and an existing store, runs a model over them, and writes distilled memories into a new store. Raw history becomes structured recall.

How Dreaming Works

Source: IMG_7447

  1. Clone the input memory store $MEM into an output memory store $MEM_OUT.
  2. An orchestrator runs one subagent per session transcript.
  3. Subagents read and write to reorganize the output memory store.
InputProcessingOutput
Input memory store + Session 1/2/3 transcripts Orchestrator creates subagents, one per session Output memory store reorganized into structured recall

Three Layers

Source: IMG_7448

LayerRole
SessionOne conversation thread. Ephemeral by design.
Memory storeLive persistence. Agent reads and writes across sessions, steered by your prompt.
DreamingDedicated job for consolidation and re-organization.