LangGraph agents
system_prompt to
create_agent, both survive: your instructions first, the memory block after.
The completed turn as a whole, not each intermediate step, is stored once the
agent run finishes. Nothing else changes.
That per-turn reuse is implemented as a declared field on LangGraph’s own
graph state, which is exactly what a checkpointer persists. If you compile
create_agent(..., checkpointer=...) with a durable checkpointer (SQLite,
Postgres, …), the retrieved memory text is written into your checkpoint
store verbatim (once per checkpoint saved during that run), not just held
in process memory. That copy lives outside Anona’s storage and retention:
deleting or expiring a memory on Anona’s side does not remove it from
checkpoints already written. Expected given what the cache is for, not a
bug, just worth knowing if your own checkpoint store needs to honor a
retention or deletion policy.Retrieval chains
AnonaRetriever is async-only: call ainvoke() (shown above), not invoke().
The sync form raises NotImplementedError rather than silently blocking an
event loop. It is the one place across any of these six adapters that raises into
the caller instead of failing open. Every other failure mode on this page
(Anona unreachable, no matches, …) still returns normally with an empty
result.
Scoping
user_id, agent_id and session_id on the bridge isolate memory inside one
space. A memory written under user_id="customer-42" is only ever returned to
a query carrying the same user_id.
Turning off writes
Why not a LangGraph Store?
ABaseStore is namespaced key-value: get(namespace, key) returns one exact
record. Anona is search: you ask a question and get ranked, deduplicated,
token-budgeted context. A partial Store implementation would break LangGraph’s
built-in memory tools at runtime, so we ship the two shapes that fit instead.
