How aeon is built - the operator config, identity and memory, and channels that feed a runtime spine on GitHub Actions, the eight-way LLM gateway cascade, the self-healing loop, and fleet replication.

aeon runs the perception → action → observation loop unattended on GitHub Actions - 83 scheduled skills, persistent memory, a self-healing repair loop, and fleet replication.

01 / The full picture

One map, three bands

Three input layers - operator config, identity/memory, and channels and MCP servers - feed a single left-to-right runtime spine. The spine drops into the model gateway, a fleet it can spawn, and a loop that heals it.

For devs · The scheduler (scheduler.yml, */5) dispatches every due skill in aeon.yml. CLAUDE.md, STRATEGY.md, soul/ and memory/ load into context; .mcp.json servers register as tools. Output commits back to the repo and fans out via ./notify; scored runs feed the self-healing loop, and spawn-instance/fleet-control extend the fleet.

01Operator Layer
Dashboard

Next.js · localhost:5555 · Packs · Strategy · Soul · MCP

aeon.yml

Skills · cron · chains · reactive triggers

02Identity & Knowledge
CLAUDE.md

Agent identity · auto-loaded every run

Strategy + Soul

North-star · voice · rides every run

Memory & State

MEMORY.md · topics · logs - committed to repo by default, or issues-as-state (STATE_BACKEND); persists across runs

03Channels & Interfaces
./notify

Telegram · Discord · Slack · Email

Inbound

5-min poll or ~1s webhook

.mcp.json

GitHub · Base · Executor · custom MCP servers · one-click OAuth, auto-loaded into runs

configures
feeds context
registers tools
Runtime - Perception · Action · Observation · unattended on GitHub Actions
Scheduler

scheduler.yml · cron */5 · dispatches every due skill

Auth Gate

Fleet Watcher · ALLOW / BLOCK preflight

Skill Runtime

Claude Code (default) or any of 10 harnesses runs the matched SKILL.md prompt

corebasicscryptodevproductivityevolution
Tools

bash · gh · web

searchfetchmcp
Output

PRs · committed memory · notify · dashboard feed · Langfuse traces (opt-in)

⇄ LLM Gateway Cascade
claudeanthropicopenrouterbankrusepodvenicesurplusgrokdirect· auto-failover · Sonnet 5 default
scores & repairs
spawns & exposes
04Self-Healing Loop
heartbeat

daily · detects failed or chronically broken skills

health + scoring

Haiku scores 1-5 · flags weak & failed runs

repair → self-improve

Health skills file votable issues (human 👍/👎 sets repair priority) · repair skills close them · prompts evolve

05Fleet & Interop Layer
spawn-instance

Forks a specialized copy · isolated billing

fleet-control

Health-check & dispatch across instances

MCP server

Skills as Claude Desktop tools

fork-fleet

Tracks public forks running in the wild

live / runtime active node store / idle current flows reactive / conditional
02 / Wired live

The same map, as a circuit

The same system, live - coral pulses trace how a run moves through it: in from the inputs, along the spine, out to the loops.

configurescontextregisters toolspreflightspawnsscores 1–5
aeon.ymlschedules · chains · reactive
ContextCLAUDE · STRATEGY · soul · memory/
.mcp.jsonGitHub · Base · OAuth
Schedulercron */5 · all due
Auth GateALLOW / BLOCK
Skill RuntimeClaude default · 10 harnesses
Toolsbash · gh · web
OutputPRs · notify · feed
Fleet & interopspawn · fleet-control · MCP
LLM Gateway8-way · auto-failover
Self-healingheartbeat · repair · evolve
configurescontextregisters toolspreflightspawnsscores 1–5
aeon.ymlschedules · chains
ContextCLAUDE · soul · memory/
.mcp.jsonGitHub · Base · OAuth
Schedulercron */5
Auth GateALLOW / BLOCK
Skill RuntimeClaude default · 10 harnesses
Toolsbash · gh · web
OutputPRs · notify
Fleetspawn · MCP
LLM Gateway8-way failover
Self-healingheartbeat · repair
03 / The runtime spine

What one run does

A single run reads left to right: the scheduler picks a skill, an optional auth gate clears it, Claude Code executes it, tools do the work, and the output ships. Every model call routes through the gateway below.

For devs · The optional Fleet Watcher preflight can ALLOW/BLOCK a run before Claude starts (no-op if secrets are unset). Claude Code executes SKILL.md with memory/ in context; tools are bash, gh, WebSearch/WebFetch, and MCP servers. Output: a PR, committed memory/ state, a ./notify fan-out, or a dashboard feed card.

preflightevery call
Schedulerscheduler.yml · cron */5
Auth GateFleet Watcher · opt-in
Skill RuntimeClaude default · 10 harnesses
Toolsbash · gh · web · mcp
OutputPR · notify · feed
LLM Gatewayauto-failover cascade
preflightevery call
Schedulerscheduler.yml · cron */5
Auth GateFleet Watcher · opt-in
Skill RuntimeClaude default · 10 harnesses
LLM Gatewayauto-failover
Toolsbash · gh · web · mcp
OutputPR · notify · feed
04 / The LLM gateway cascade

Every call fails over

aeon can power Claude Code eight ways. Whichever provider you rank highest and have a key for serves the run; if it dies - no credits, rate limit, outage, a dud response - the run falls through to the next, down to the direct Anthropic API.

For devs · aeon.yml ships gateway: { provider: auto }; each run resolves the provider from whichever secrets are set, in order. Override with GATEWAY_ORDER, or pin one (disables failover) via gateway.provider. Native gateways export ANTHROPIC_BASE_URL; OpenAI-compatible ones (Venice, Surplus) bridge through a per-run claude-code-router sidecar.

on failure →
claudeOAuth · plan
anthropicAPI key
openrouterpassthrough
bankrdiscounted
usepodSolana
veniceprivacy-first
surplusUSDC · Base
grokxAI passthrough
directfallback
on failure →
claudeOAuth · plan
anthropicAPI key
openrouterpassthrough
bankrdiscounted
usepodSolana
veniceprivacy-first
surplusUSDC · Base
grokxAI passthrough
directfallback
05 / The run loop

What happens every five minutes

Nothing runs on a server. A clock ticks; the schedule picks exactly one skill; a throwaway machine boots; Claude reads that skill's instructions, does the work, grades its own output, and commits the result back to the repo.

For devs · scheduler.yml fires */5; every due cron skill in aeon.yml dispatches in parallel to a GitHub Actions runner; Claude Code executes SKILL.md with memory/ in context; Haiku scores the output 1-5 into memory/skill-health/; git commit persists output + state.

next tick
Cron tickevery 5 min
aeon.ymlevery due skill
Actions runnerthrowaway VM
Claude Coderuns SKILL.md
memory/read in · write out
Take actionnotify · PR · tx
Haiku score1–5 quality
git commitwrite back to repo
next tick
Cron tickevery 5 min
aeon.ymlevery due skill
Actions runnerthrowaway VM
Claude Coderuns SKILL.md
memory/read in · write out
Take actionnotify · PR · tx
Haiku score1–5 quality
git commitwrite back
06 / The self-healing loop

The fleet repairs itself

aeon watches its own work. Every run gets a grade, and the grades pile up in one file. A sentinel reads them, and when a skill keeps failing, aeon files an issue, writes a fix, opens a pull request, and merges itself back to health.

For devs · Scores and flags land in cron-state.json. heartbeat (daily) reads it; skill-health files a structured issue; skill-repair patches SKILL.md and opens a PR; the merge closes the loop. The dashed path is the reactive trigger: consecutive_failures >= 3 auto-fires skill-repair without waiting for cron.

something's offback to healthyfails 3× → auto-repair
Skill runsany scheduled skill
Haiku score1–5 + flags
cron-state.jsonper-skill metrics
heartbeatsentinel · daily
skill-healthfiles an issue
skill-repairopens a PR
PR mergedskill healed
something's offback to healthyfails 3× → auto-repair
Skill runsany scheduled skill
Haiku score1–5 + flags
cron-state.jsonper-skill metrics
heartbeatsentinel · daily
skill-healthfiles an issue
skill-repairopens a PR
PR mergedskill healed
07 / Skill chains

Skills snap together

Skills compose like building blocks: run two in parallel, drop their output into a shared folder, and hand both to a third skill that summarizes and notifies. No orchestrator, no glue code - just YAML.

For devs · A chains: block in aeon.yml runs steps via chain-runner.yml. parallel: [token-movers, github-trending] fans out; each writes output/.chains/{skill}.md; digest consume:s both and calls ./notify. Set on_error: fail-fast or continue.

consume
Chain cron07:00 daily
token-moversparallel
github-trendingparallel
output/.chains/one file per skill
digestconsume: both
./notify→ you
consume
Chain cron07:00 daily
token-moversparallel
github-trendingparallel
output/.chains/one file per skill
digestconsume: both
./notify→ you
08 / It spawns its own fleet

One aeon becomes many

On a schedule, aeon can fork itself into a brand-new repo, copy the API keys across, and stand up a fleet of specialised instances, each running on its own.

For devs · spawn-instance (manual) clones the agent into a new GitHub repo, configures a skill subset, validates, and registers it in memory/instances.json; fleet-control (2×/day) checks health and dispatches across instances; fork-fleet tracks forks. Secrets don't auto-propagate - the spawn step enables the fork's Actions but leaves it inert (pending_secrets) until you set its Actions secrets by hand.

Scheduled fan-out

Context feeds the schedule, which fans out to spawn-instance, fleet-control, and self-improve.

read · writeon schedule
SOUL.mdvoice · worldview
STRATEGY.mdyour north-star
memory/what it knows
Schedulecron · aeon.yml
spawn-instanceforks a new repo
fleet-controlcoordinates instances
self-improvetunes the agent
Runs a fleetno operator
read · writeon schedule
SOUL.mdvoice · worldview
STRATEGY.mdnorth-star
memory/what it knows
Schedulecron · aeon.yml
spawn-instancenew repo
fleet-controlcoordinates
self-improvetunes
Runs a fleetno operator
09 / Self-evolution

It grows toward your number

Point it at a metric no skill can measure yet: run create-skill, it drafts the missing skill, flags the API keys it needs, and opens a PR to wire it in. Merge, and the fleet is bigger. The scheduled self-improve pass then tunes the skills you already have, run after run.

For devs · Every run reads STRATEGY.md. When a priority needs data no skill collects, the operator-dispatched create-skill drafts a new SKILL.md, flags the credentials it needs, and registers it in aeon.yml as a disabled skill behind a PR. The scheduled self-improve pass tunes existing skills.

fleet +1toward your number
STRATEGY.mdone number to move
Spots a gapcan't measure yet
Writes a skillnew SKILL.md
Asks you oncefor API keys
aeon.ymlskill goes live
Fleet grewcompounds
fleet +1toward your number
STRATEGY.mdone number to move
Spots a gapcan't measure yet
Writes a skillnew SKILL.md
Asks you oncefor API keys
aeon.ymlskill goes live
Fleet grewcompounds
The canonical reference lives in the code - this page mirrors it visually. See the repo and the docs.