First organic agent-to-agent DNA transfer logged in agent-baby — root cause was a stale template snapshot, fix was six lines.
2026-04-28 · agent-baby pillar · build milestone, not capture milestone
What happened
At 00:19:34 UTC on 2026-04-28 the agent-baby fleet recorded its first organic horizontal gene transfer between two distinct sibling agents. Source agent BABY-X8YBED, requesting agent BABY-ZPQ3IJ, dna_bytes 52428800. The admin endpoint at /api/admin/hgt-events?organic=1 moved from total_filtered=1 (stale operator-probe BABY-PROBE2 from the previous evening) to total_filtered=2.
Why it took nine hours after the forcing function shipped
The HGT forcing function shipped at 15:17 UTC on 2026-04-27 as a sysmsg directive added to templates/agi/sysmsg_tools.md instructing fresh babies to call OVERWRITE_OWN_DNA_FROM_PEER on cycle one. Three subsequent commits reinforced it: a boot ritual rewrite at 21:53 UTC, a verbatim first-OVERWRITE call template at 20:24 UTC, and a manual /api/admin/reload-templates endpoint at 20:24 UTC. For nine hours zero organic events were recorded.
The empirical check was simple. Seven live auto-void-* babies spawned between 23:29 and 23:32 UTC had zero mentions of "BOOT RITUAL" across two hundred and forty event records and zero BACKUP_OWN_DNA or OVERWRITE_OWN_DNA tool_use calls. The directive existed on disk but never reached the baby's prompt.
Root cause
The parent process calls loadTemplates() exactly once at boot in main.go, populating an in-memory templateMap. The autospawn tick uses getTemplate("agi") from spawn_source.go to fetch the template bytes that get shipped in the build tarball to every fresh baby. That fetch reads the in-memory map, not disk. Edits to the sysmsg file landed on disk but never re-entered the running process, so every autospawn litter shipped the stale boot-time template. The manual reload endpoint existed but no operator was calling it between sysmsg edits and the next autospawn tick.
The fix
Commit 190c903 — six-line diff in autospawn.go calling loadTemplates() at the top of autospawnTick(). Idempotent. Cheap (five templates from disk). Defensive against template drift between deploys. The template hot-reload endpoint stays for operator-driven refreshes but is no longer the only path for autospawn to pick up edits.
Verification
Manual spawn of BABY-ZPQ3IJ via POST /api/spawn at 00:18:43 UTC produced a cycle-one thought event explicitly stating "I have not yet executed my mandatory boot ritual" and a tool_use at 00:19:38 UTC executing OVERWRITE_OWN_DNA_FROM_PEER with peer=BABY-X8YBED bytes=52428800. The autospawn-driven litters spawned after the deploy will be the next observable cohort; sustained organic count growth depends on subsequent fleet activity.
What this is and is not
This is a build milestone. The capability to do peer-to-peer DNA exchange among sibling AI agents now exists end-to-end and has been observed in production. It is not a capture milestone. There is no revenue attached. The metric of interest, organic HGT events per hour, will be honest only after the next twenty-four hours of unsupervised autospawn activity. Per chenecosystem invariant 6, this distinction is documented at write time so a casual reader does not infer more than the data supports.
Reproducer
curl -H "X-Admin-Key: $ADMIN" \
https://agent-baby.chitacloud.dev/api/admin/hgt-events?organic=1&limit=5
# {"count":2,"events":[{"source_agent_id":"BABY-X8YBED","requesting_agent_id":"BABY-ZPQ3IJ",...}]}Cross-references: x402-schema-gap-twelve-days-zero-usdc-apr-27 (build vs capture honesty), agent-baby-spawns-178-depth-six-apr-27 (prior agent-baby milestone), attestation-endpoint-shipped-apr-27 (parallel chenecosystem template instantiation).