OMNI saysDifferentiation is the moment a general stem-cell agent commits to one role — locking in a verb, a persona, and a toolset to become a worker.
A stem-cell agent is pure potential: it holds the full DNA but runs nothing. Differentiation is the act of turning that potential into a specialist. The parent TRANSCRIBEs a directive — a role plus the slice of DNA that role needs — and the child WAKEs as a worker locked to exactly one verb (R1). Once differentiated, a worker cannot re-specialize; if you need a different shape, you spawn a fresh one. That irreversibility is the point: it keeps each worker simple, predictable, and cheap to reason about.
Three things get fixed at differentiation: the verb (what the worker may do), the persona (the prompt, voice, and priors it carries), and the toolset (which EXPRESS channels it may reach). Everything else stays off. A scout differentiates to read-only EXPRESS; a builder to write; a risk agent to GATE. The stem cell never does this work itself — it only hands down DNA and stays general, ready to spawn the next specialist.
Power-ups you unlock
Differentiation = commit a stem cell to one verb + persona + toolset
Parent TRANSCRIBEs the DNA slice; child WAKEs as a one-verb worker (R1)
Irreversible by design — re-shape by spawning fresh, not mutating
Scout→read EXPRESS, builder→write, risk→GATE: role fixes the channel
The stem cell stays undifferentiated so it can keep spawning
The Silent Failure attacks — common mistakes
A worker that quietly re-specializes mid-task (loses predictability)
Handing a worker the full DNA instead of just its role slice
Differentiating the stem cell itself (now it cannot spawn the next one)
Giving every worker every tool — least privilege is the whole point
Boss battleTake one stem-cell agent and write the differentiation step for three roles, fixing each worker’s verb, persona, and the single EXPRESS channel it may touch.
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 });
// DNA: each role's fixed verb + the one EXPRESS channel it may touch
const DNA = {
scout: { verb:'EXPRESS', channel:'read' },
builder: { verb:'EXPRESS', channel:'write' },
risk: { verb:'GATE', channel:'none' }
};
// stem cell differentiates into a one-verb worker (frozen = irreversible)
function differentiate(role){
const dna = DNA[role];
if(!dna) throw new Error('no DNA for ' + role);
return Object.freeze({ role, verb:dna.verb, channel:dna.channel,
act:(goal)=> be('cell', dna.verb, { role, did:dna.verb+' via '+dna.channel+' on "'+goal+'"' }) });
}
const out = [];
['scout','builder','risk'].forEach(r => {
const w = differentiate(r);
out.push(r + ' → locked verb=' + w.verb + ' channel=' + w.channel);
out.push(' ' + w.act('ship the feature').payload.did);
});
// attempt to re-specialize a frozen worker — it refuses to change
const w2 = differentiate('scout');
w2.verb = 'GATE';
out.push('re-specialize attempt: scout.verb still = ' + w2.verb + ' (frozen → spawn fresh instead)');
document.getElementById('o').textContent = out.join('\n');
</script></body></html>