agent memory · handoff packets & the per-user chain
OMNIVSThe Silent Failure
OMNI saysWhen a worker dies, almost everything is discarded. What survives is the signal it REMEMBERed and the block it COMMITted to the per-user chain.
A spawned worker is amnesiac on purpose. While alive it may hold a lot of context, but apoptosis (mol-65) wipes all of it. Persistence is deliberate and narrow: the worker REMEMBERs a signal — a small, structured finding, not its raw working state (R4: memory holds signals, not state) — and the orchestra COMMITs a block recording that the worker ran and what it produced. The live hand-off between agents travels in the packet; the durable record lives on the chain. Two channels, two jobs.
This is why a swarm can run for days and stay auditable. You cannot ask a dead worker what it was thinking, but you can read its signal and replay the chain to see exactly which workers were spawned, in what order, and what each contributed. Memory in a molecular swarm is therefore a property of the system, not of any one agent — no single worker remembers much, yet the whole leaves a complete, verifiable trail.
Power-ups you unlock
A worker REMEMBERs a small signal, not its raw working state (R4)
Apoptosis discards everything else — workers are amnesiac by design
Live hand-offs ride the packet; durable records ride the chain (COMMIT)
You cannot query a dead worker, but you can replay its committed block
Memory is a property of the system, not of any single agent
The Silent Failure attacks — common mistakes
REMEMBERing full state instead of a distilled signal (breaks R4, bloats memory)
Expecting a retired worker to still know something — it is gone
Skipping the COMMIT, so a worker’s contribution vanishes with it
Conflating the live packet (transient) with the chain block (durable)
Boss battleSpawn a worker, have it REMEMBER one signal and COMMIT a block, then PRUNE it and prove you can still reconstruct what it did from the chain alone.
Example code
<!doctype html><html><head><meta charset="utf-8"></head>
<body style="background:#06040d;color:#b388ff;font-family:monospace;padding:20px"><pre id="o"></pre>
<script>
const be = (layer, verb, payload) => ({ layer, verb, payload });
const CHAIN = [];
function commit(meta){
const prev = CHAIN.length ? CHAIN[CHAIN.length-1].hash : 'genesis';
const block = { n:CHAIN.length+1, prev, meta, hash:(CHAIN.length+1) + '_' + meta.role };
CHAIN.push(block); return block;
}
function runAndRetire(role, goal){
let ctx = { scratch:'lots of working state for ' + role }; // big, transient
const signal = be('memory','REMEMBER', { role, finding:role + ' verified "' + goal + '"' }); // small, durable
commit({ role, finding:signal.payload.finding });
ctx = null; // apoptosis: wipe the worker's runtime
return signal.payload.finding;
}
['scout','builder','risk'].forEach(r => runAndRetire(r, 'ship'));
// every worker is gone — reconstruct ONLY from the chain
const replay = CHAIN.map(b => '#' + b.n + ' ' + b.meta.role + ': ' + b.meta.finding).join('\n');
document.getElementById('o').textContent = 'workers retired. chain replay:\n' + replay;
</script></body></html>