Phylo · evolutionary search over agent harnesses

the sequel to SIA — a population, not a pipeline

What is Phylo?

Phylo is evolutionary search over AI-agent harnesses. An "agent" here is a fixed language model wrapped in a harness — the system prompt, reasoning instructions, tools, and output rules around it. Instead of hand-tuning one agent or improving it step-by-step, Phylo treats that harness as a genome and evolves a whole population of them with genetic operators — selection, crossover, mutation, migration — scoring each by real text-to-SQL execution accuracy on held-out Spider questions. The model never changes, so every gain comes purely from the evolved scaffold. Running many lineages in parallel finds several strong, distinct agents at once and resists dead ends, and the whole search is exposed as a live 3D phylogeny — every node an agent, every edge a parent→child mutation/crossover — traced in Weave, stored in Redis, explored through a CopilotKit UI.

Built on SIA, which proved sequential self-improvement (75.8% → 95.0% over 8 generations). Phylo turns that one chain into a population.

— → —
population search

1 · The loop

Each generation: evaluate every harness on the same held-out Spider set (real execution accuracy, reusing SIA's verifier) → select the top performers → recombine their genome sections (crossover), mutate with Claude/GPT-5, occasionally migrate a strong agent between populations, and carry the elite forward. A harness genome has five recombinable sections: system_prompt, tool_definitions, meta_instructions, error_handling, output_format.

2 · Sponsor stack — what each one does

CopilotKit · AG-UI

  • Next.js runtime + live AG-UI connection
  • useCopilotReadable exposes the live phylogeny + selected node
  • generative-UI actions: ancestor-diff + an in-chat live harness editor
  • chat sidebar to interrogate any agent's lineage

Redis

  • genomes → hashes; fitness → sorted sets (O(log N) top-K)
  • lineage → parent/child sets
  • RedisVL vector search over genome embeddings (similar harnesses)
  • pub/sub → SSE → live 3D tree; cache memoizes identical calls

Weave / W&B

  • every target + mutation call traced (tagged agent/gen/pop/op)
  • per-generation fitness dashboards
  • MCP server for run inspection + per-node trace deep-links

OpenAI + Anthropic

  • Anthropic Haiku = fixed target model; Sonnet = mutation
  • OpenAI GPT-5 = diverse mutation strategy
  • OpenAI embeddings feed the Redis vector index

3 · Architecture

AnthropicHaiku target · Sonnet mutate
OpenAI GPT-5diverse mutation · embeddings
↓ model calls — every call traced → Weave
Phylo evolution engineseed → evaluate (Spider execution-accuracy verifier) → select → crossover · mutation · migration · elitism → next generation
↓ persist genomes · fitness · lineage
↘ traces · fitness
Redishashes · sorted-sets · lineage sets · RedisVL vector · cache · pub/sub
Weave / W&Btraces · dashboards · MCP
↓ Redis pub/sub → Server-Sent Events
CopilotKit AG-UI + Three.jslive 3D phylogeny · inspector (vector-similar + Weave links) · in-chat live editor
↓ export best genome — export_to_sia.py
SIAseeds / runs the evolved target_agent.py on the same task + verifier

4 · Cached results (fitness per generation)

5 · Live harness editor (cached demo)

The evolved winner's harness vs the cold-start seed. Switch sections, switch seed/best, edit freely — this is the prompt-only scaffold that drove the climb (the model never changed).

6 · How it plugs back into SIA

Phylo reuses SIA's exact Spider data + execution-accuracy verifier, so it's evolving harnesses for the SIA text-to-SQL task. The bridge export_to_sia.py takes Phylo's best genome and emits a SIA-compatible target_agent.py + target profile, so SIA seeds its next run from the evolved harness instead of the minimal one. Phylo searches; SIA runs the winner.

▶ open the live Phylo app (CopilotKit + 3D) code ↗