Memory
Persistent memory lets a session record what worked (and what didn't) and pull
those facts back later. Every SDK session has a file-backed store at
<workspace>/.a3s/memory, or at the ACL memory_dir when that is set. Pass a
memoryStore / memory_store (with_file_memory in Rust, FileMemoryDir in Go)
only when you want a different path or backend; a relative path resolves against
the process working directory. Write outcomes explicitly with rememberSuccess /
rememberFailure, then retrieve them with recallSimilar, recallByTags, or
memoryRecent.
LLM extraction is also on by default (llm_extraction in the ACL memory
block). After each completed turn with a non-empty prompt and reply, the session
asks the model to distill durable memories: at most 5 items per turn, from at
most 8,000 characters of input. Closing the session waits, up to a timeout, for
extractions already in progress. Default stores merge an exact duplicate (the
same content ignoring case and whitespace, at least 24 characters long) into the
existing item; every other memory is stored separately.
All four SDKs expose explicit memory write/query helpers. In Go these are
RememberSuccess, RememberFailure, RecallSimilar, RecallByTags,
MemoryRecent, and the working/short-term memory methods. rememberSuccess takes
a short task description, the tools involved (also used as tags), and the
outcome text; rememberFailure takes the task, the error text, and then the
tools. recallByTags returns items carrying any of the given tags. The default
stores rank recallSimilar results by matching the query's terms against each
item's content and tags, weighted by importance and recency. If the memory
store cannot be created, session creation fails with a session-initialization
error that names the store path.