Skip to main content
Memory is what a skill remembers as the conversation unfolds: the selected card, the reason for a replacement, whether the user is authenticated. Tools write to it, the framework checks it, and instructions branch on it.

Everything must be declared

A memory entry has to exist in a schema before anything can write to it. A tool that writes an undeclared key fails rasa train with undeclared_memory_write.
skills/card_replace/memory.yml
The top-level key is schema:, not memory:.
  • public values are readable by every other skill.
  • private values stay internal to this skill.
Once declared, a tool writes with a bare entry name; the active skill decides the namespace:

Who is allowed to write

Two different actors write memory, and they’re governed separately:
  • Tools write whatever the skill declares, via context.memory.set().
  • The LLM may only write entries flagged llm_settable: true, or entries owned by a collect: step. It does so through the built-in set_fields tool.
That flag matters. Mark the customer’s decisions settable, such as the replacement reason or the shipping choice. Leave engine-derived values such as eligibility results, lock state, and computed flags unflagged, so the model can neither invent them nor “correct” them later.

Sharing between skills

Values shared across skills go in a project-level memory.yml at the agent root. It is a flat map of entry name to attributes:
memory.yml
These live in the project. namespace. This is how a skill depends on authentication without depending on the authentication skill:
The only contract between the two skills is the key.

Branching on memory

A categorical value can drive scoped instructions, so the LLM only ever sees the relevant branch:
Conditions always use the three-segment namespaced form, session.<skill_id>.<entry> or session.project.<entry>. See Conditions.

Access control

A skill can further restrict what its own tools may touch:
A denied read returns None; a denied write raises. Entries are written as fully-qualified names, <skill_id>.<entry> or project.<entry>.

Reference

For every field attribute, the full type list, visibility rules, and naming, see the memory.yml reference.