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 failsrasa train with undeclared_memory_write.
skills/card_replace/memory.yml
schema:, not memory:.
publicvalues are readable by every other skill.privatevalues stay internal to this skill.
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 acollect:step. It does so through the built-inset_fieldstool.
Sharing between skills
Values shared across skills go in a project-levelmemory.yml at the agent
root. It is a flat map of entry name to attributes:
memory.yml
project. namespace. This is how a skill depends on
authentication without depending on the authentication skill:
Branching on memory
Acategorical value can drive
scoped instructions, so the LLM only ever
sees the relevant branch:
session.<skill_id>.<entry> or session.project.<entry>. See
Conditions.
Access control
A skill can further restrict what its own tools may touch: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 thememory.yml reference.