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
Three 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. - Static
set:buttons write a declared field on tap as an engine write (llm_settableis not required). See Static buttons.
seed: true, or a
set:session.project.<entry>=… button tap, then locked for the rest of the
session. See the memory.yml reference.
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:
agent.yml with
satisfied_when: session.project.authenticated. The only contract between the
two skills is the key. Put session-wide facts in project memory; keep
collectable labels and working state on the skill. The engine refuses a second
write to a set project field.
Skill public and private are working state for the current run. They stay after
complete or cancel so other skills can still read leftover public, and they
reset when that same skill starts again. Put facts that must last the whole
conversation in project memory.
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. To put a live value into instruction
prose itself, use @memory.… — see skill.md.
Tracker events
When Mantle persists a write, the tracker recordsmemory_set (with the key
and value) or memory_cleared (key only). See
Tracker events.
Reference
For every field attribute, the full type list, visibility rules, and naming, see thememory.yml reference.