Appearance
Stage 2: Hydra 🪼
Multi-cellular primitives exist. The nervous system, skeleton, and clock are ready. But the framework is EMPTY — no seed data, no application-specific agents. Only Axiom lives, waiting to build.
Status: ✅ Complete Tests: 37/37 passing Philosophy: Framework only. No bias. Zero seed data.
What This Stage Is
Stage 2 builds the infrastructure for multi-agent organisms:
- Nerve (inbox between agents)
- Bone (org structure as a data primitive)
- Circadian (scheduled reminders)
But it ships empty. The framework is domain-agnostic. A customer's agents, contacts, and tasks are all built by Axiom in Stage 3 (Embryo) through conversation.
What's In Stage 2
| Organ | Body Part | Module | What It Does |
|---|---|---|---|
| Nerve | Nervous System | src/nerve/inbox.ts | Per-agent inbox, async messaging between agents |
| Bone | Skeleton | src/bone/org.ts | Contacts, roles, hierarchy (empty at startup) |
| Circadian | Clock | src/circadian/scheduler.ts | Reminders with due detection |
| Heart | Pulse | (upgraded) | Checks inboxes, processes pending, fires reminders |
What's NOT In Stage 2
❌ Seed data (no Naveen, Raju, Lakshmi, etc.) ❌ Application-specific agents (no Receptionist, Secretary, etc.) ❌ Hardcoded languages or contacts ❌ Domain assumptions
These come later — and they come from Axiom building them through conversation, not from code.
The Only Agent That Exists: Axiom
agents/
└── axiom/
├── dna.md ← Universal protocol (same in every agent)
├── instruction.md ← "You are the origin. You build everything."
└── skills/
├── create-agent.skill.md (build-only, not yet active)
├── create-contact.skill.md (build-only, not yet active)
├── define-schema.skill.md (build-only, not yet active)
└── set-mode.skill.md (switch BUILD ↔ FUSE)Axiom's structural skills are defined (markdown) but their tool implementations are dormant until Stage 3.
Current Behavior
POST /message { from: "anyone", text: "anything" }
→ Axiom receives it
→ Axiom has: query_org, send_message, schedule_reminder, send_to_inbox, create_task
→ Axiom responds honestly:
"The organism is empty. I can answer questions about my current state.
I cannot yet create agents or build structure (coming in Stage 3)."Tests Prove The Primitives
The primitives are proven with tests, not with hardcoded demo agents:
test/inbox.test.ts (5)
✓ sends a message to an agent inbox
✓ retrieves pending messages for an agent
✓ marks messages as read
✓ marks all messages as read for an agent
✓ gets message history for an agent
test/org.test.ts (6)
✓ adds a contact
✓ finds contact by name
✓ finds contacts by role
✓ finds the leader
✓ gets reports for a manager
✓ counts contacts
test/scheduler.test.ts (4)
✓ schedules a reminder
✓ finds due reminders
✓ marks reminder as sent
✓ cancels a reminderEvery primitive is independently verified. No application context needed.
Heart Upgraded
typescript
// The heart now does work on every beat:
onBeat: async (tick) => {
await state.updateHeartbeat();
await updatePulse(tick);
// Check all registered agent inboxes
for (const agentName of Object.keys(agentDirs)) {
await processInbox(agentName);
}
// Check due reminders
await checkReminders();
}What Comes Next
Stage 3: Embryo — Axiom's create_agent tool implementation activates. The organism begins to build itself. A customer sends messages to Axiom, Axiom creates contacts, agents, schemas. The framework demonstrates its full power.