Memory
Remembering things across threads and sessions.
Long-term memory (getStore())
The store is injected into every run as a LangGraph BaseStore, so a node reads and writes it the native way — with memory for the default skein dev, SQLite for local apps, or Postgres for a shared server. The graph code stays the same.
import { getStore } from "@langchain/langgraph";
async function remember(state, config) {
const store = getStore();
const userId = config.configurable.langgraph_auth_user_id ?? "anon";
await store.put(["memories", userId], "prefs", { units: "metric" });
const hits = await store.search(["memories", userId], { query: "units" });
return { known: hits.map((h) => h.value) };
}The same items are reachable over the /store/items HTTP endpoints.
Working versions: chat-app (recalls a user across sessions) and triage-agent (reads your conventions back into the prompt), and deep-agent (a Deep Agent's /memories/ files, one namespace per user).
WARNING
Read this before writing a dedup rule
Memory, SQLite, and Postgres without store.index return score: 1 for every text hit — so the obvious "score >= 0.9 means duplicate" rule classifies everything as a duplicate and the agent silently stops recording memories. It does not error. memory.md covers this and the other shapes that bite.
Rank by meaning, not substring
On Postgres, configure an embedder and store.search({ query }) uses pgvector. In-memory falls back to a naive scan, so dev behaviour matches.
// langgraph.json
{
"store": { "index": { "embed": "openai:text-embedding-3-small", "dims": 1536, "fields": ["$"] } },
}embed takes a provider:model string or a function path; dims is required with it.
Expire what you don't need
store.ttl (minutes) expires items on a background sweep, with refresh_on_read to keep active ones alive. Threads have their own checkpointer.ttl. Both in storage.md.
Bring your own store
Long-term memory is the one repo you can swap without implementing the other five — point store.adapter at a LangGraph BaseStore (including PostgresStore, which brings hybrid text+vector search skein's own driver lacks) or a skein StoreRepo. Details: storage.md.