Skip to content

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

OrganBody PartModuleWhat It Does
NerveNervous Systemsrc/nerve/inbox.tsPer-agent inbox, async messaging between agents
BoneSkeletonsrc/bone/org.tsContacts, roles, hierarchy (empty at startup)
CircadianClocksrc/circadian/scheduler.tsReminders with due detection
HeartPulse(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 reminder

Every 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.

Orbita — We don't build software. We grow organisms.