/memoryOwn one memory tree
A process keeps bounded, serializable state that survives across activations and can be read by its scripts.
Research-stage runtime designed for agents
Svit keeps memory and executable behavior together in one structured, self-reflective space. Agents can inspect it, script it, and evolve it through bounded transactions.
Structured. Scriptable. Transactional. Self-reflective. Forkable.
LOAD
memory.count = 6RUN
input.by = 3COMMIT
memory.count = 9output { count: 9 } root sha256:91e5…87a1 outbox 0 intents
The premise
Memory and behavior belong in one coherent space.
A space the agent can understand from inside: structured state, discoverable scripts, bounded transitions, and explicit authority.
01 / Process model
One process. One committed root. One activation at a time.
/memoryA process keeps bounded, serializable state that survives across activations and can be read by its scripts.
main(input)A named restricted-Lua script receives input and runs against a transactional working copy of the process state.
v → v + 1Memory, staged scripts, and buffered message intents commit together. Any failure leaves the prior state untouched.
sha256(root)Capture canonical committed state, restore it later, or fork an independently mutable child for another line of work.
02 / Transaction boundary
Each activation works on a private copy. Syntax, runtime, conversion, validation, and limit failures all roll back memory, scripts, outbox, and version together.
The invariant
No partial process state escapes an activation.
03 / Guest boundary
Guest scripts get an explicit, versioned language surface—not the host operating system. Every activation starts in a fresh VM built from an allowlist.
This is a tested runtime layer, not proof of hostile same-process multi-tenancy. Production isolation still needs a Wasm or OS boundary.
VISIBLE TO GUEST
memoryinputscripts.list()scripts.read(name)scripts.save(name, source)log.info(message, fields)send(address, message)ABSENT BY DEFAULT
04 / The smallest useful script
A named script defines main(input). The runtime owns the transition around it.
01 function main(input)
02 memory.count = memory.count + input.by
03
04 log.info("counter updated", {
05 count = memory.count
06 })
07
08 return { count = memory.count }
09 end{ by: 3 }OUTPUT{ count: 9 }VERSION3 → 405 / From slice to system
The current slice tests the core semantics. The larger direction adds projections, communication, identity, durable execution, and stronger isolation.
Security claims track executable evidence. The repository includes a threat model, adversarial tests, and an explicit negative specification.
Open source · MIT licensed