# aeon docs - how aeon works

> Markdown twin of https://www.aeon.fun/docs, generated from the live page. Whole-site
> summary: https://www.aeon.fun/llms.txt. Skill catalog: https://www.aeon.fun/docs/llms.txt.

00 / GET STARTED

## Three ways in. One agent.

Every path ends the same way: your own aeon repo on GitHub, running on your own GitHub Actions. The browser is the fastest, with no clone and no terminal.

### In the browser - Aeon Connect (recommended)

Open [Aeon Connect](/connect) and sign in with GitHub. It sets up your agent in about five minutes. You need a GitHub account and a model (a Claude subscription, an API key or another login). No Node, no `gh`.

1. 01  
#### Sign in with GitHub  
Aeon Connect only asks for what it needs to set up and drive your repo.
2. 02  
#### Create your aeon  
Name the repo (default `aeon-<login>`) and pick Public or Private. Aeon Connect creates it in your account and turns GitHub Actions on for you.
3. 03  
#### Install the GitHub App  
GitHub opens the [Aeon Connect app](https://github.com/apps/aeon-connect) install page with only your new repo selected. It gets Actions, Contents, Secrets, Variables and Workflows on that repo (plus optional Administration to create it and turn Actions on). No account permissions.
4. 04  
#### Connect a model  
Paste a Claude subscription token (run `claude setup-token`), or use an API key, a ChatGPT (Codex) login, or one-click OpenRouter. It is saved as an encrypted secret in your own repo.
5. 05  
#### Pick skills and run one  
Turn on the skills you want, add Telegram, Discord, Slack or email if you like, and run a skill once. From then on it runs itself on its schedule.

You own everything

Your repo, your keys, your GitHub Actions, your memory. Keys go straight into your repo's encrypted secrets; Aeon Connect keeps no keys and no data, it only hosts the dashboard. If a run fails, the **Why?** toggle on HQ says what went wrong and what to do next.

[RUN NOW](/connect)

### From a coding agent

Paste one line into Claude Code, Codex, Hermes or OpenClaw. The agent reads the hosted setup skill and walks you through it: it sends you to Aeon Connect if you have no terminal, or runs `./aeon init` for you.

```
read https://www.aeon.fun/skills/aeon.md and follow the instructions to set up your aeon agent
```

### From the terminal

```
git clone https://github.com/aeonfun/aeon && cd aeon
./aeon init   # creates your repo, connects GitHub, a model and Telegram
```

Needs Node.js 20+ and the GitHub CLI (`gh auth login`). `./aeon init` creates your repo from the template (a template copy starts with Actions on) and checks each step before it changes anything. `./aeon` opens the same dashboard locally on port 5555\. By hand: click **Use this template** on the [repo page](https://github.com/aeonfun/aeon); if you fork by hand instead, turn Actions on in the repo's Actions tab (forks start with Actions off).

### Public or private

* **Public** - in Aeon Connect, a fork of `aeonfun/aeon` that can pull upstream updates. GitHub Actions minutes are free; memory and run logs are public too.
* **Private** - a copy (GitHub does not allow private forks). Memory and logs stay private; runs use your own Actions minutes (2,000 a month free on a free account).

01 / ARCHITECTURE

## One repo. One runner. Zero infrastructure.

aeon is a GitHub repository plus a Next.js dashboard (hosted as Aeon Connect, or local). The repo is the source of truth. The runner is GitHub Actions. There is no server to provision, no daemon to keep alive, no database to migrate.

### Three surfaces

The **dashboard** configures skills: hosted at [Aeon Connect](/connect) (sign in with GitHub), or local with `./aeon` on port 5555\. Same app either way. The **repo** holds skills, identity, memory, and YAML. **Actions runners** execute on cron and write results back.

### Four files an operator touches

* `aeon.yml` - enabled flags, cron schedules, `var` inputs, model overrides, chain definitions.
* `CLAUDE.md` - agent identity, auto-loaded every run, references `memory/MEMORY.md` and `soul/`.
* `catalog/skills.json` - catalog of all 85 skills, regenerated from each `SKILL.md` by `bin/generate-skills-json`.
* `.github/workflows/scheduler.yml` - ticks every 5 min, dispatches due skills.

### The control plane

Locally, `apps/dashboard/` shells out to `gh` for every `/api/*` call - secrets, workflows, config. Loopback-gated by default; `AEON_DASHBOARD_ALLOWED_HOSTS` opens it for Tailscale, with same-origin checks against no-cors POST. Aeon Connect runs the same UI multi-tenant, calling GitHub through the Aeon Connect GitHub App with tokens scoped to your one repo.

### The repo, walkable

- `CLAUDE.md` - agent identity
- `STRATEGY.md` - north-star brief
- `aeon.yml` - schedules, chains, triggers
- `./aeon` - dashboard + CLI launcher
- `./notify` - multi-channel notify
- `catalog` - registries the dashboard reads
  - `skills.json` - machine-readable catalog
  - `packs.config.json` - pack definitions
- `bin` - operator + maintainer CLI
  - `onboard` - validate instance setup
  - `add-skill` - import skills from GitHub
  - `generate-skills-json` - regenerate registries
- `skills` - one folder per skill
  - `digest`
    - `SKILL.md` - the skill's only file
  - `your-skill/` - drop in your own skill (untracked)
- `apps` - standalone sub-projects
  - `dashboard/` - local Next.js UI
  - `cli/` - headless CLI
  - `mcp-server/` - exposes skills as tools
  - `webhook/` - Telegram instant-mode worker
- `memory` - git-committed state, see §05
  - `MEMORY.md` - goals, topics, pointers
  - `cron-state.json` - per-skill metrics (modified)
  - `issues/` - skill failure tracker
- `.github/workflows` - the Actions that run it all
  - `aeon.yml` - skill runner + scoring
  - `chain-runner.yml` - skill chain executor
  - `scheduler.yml` - cron scheduler
  - `messages.yml` - inbound message routing

Pattern

aeon treats Git as the database. Every skill run can mutate the working tree, and those writes are how the system remembers anything.

02 / SKILLS

## 85 skills. One prompt file each.

A skill is a folder under `skills/` with one `SKILL.md` prompt - no code, no class hierarchy.

### Six categories

* 12  
### [Core](https://www.aeon.fun/docs#catalog-core)  
[spawn-instance](https://www.aeon.fun/docs#skill-spawn-instance), [fleet-control](https://www.aeon.fun/docs#skill-fleet-control), [heartbeat](https://www.aeon.fun/docs#skill-heartbeat), [memory-flush](https://www.aeon.fun/docs#skill-memory-flush), [soul-builder](https://www.aeon.fun/docs#skill-soul-builder), [strategy-builder](https://www.aeon.fun/docs#skill-strategy-builder), [narrative-convergence](https://www.aeon.fun/docs#skill-narrative-convergence), [shiplog](https://www.aeon.fun/docs#skill-shiplog), [auto-merge](https://www.aeon.fun/docs#skill-auto-merge), [auto-workflow](https://www.aeon.fun/docs#skill-auto-workflow), [fork-fleet](https://www.aeon.fun/docs#skill-fork-fleet), [aeon-update](https://www.aeon.fun/docs#skill-aeon-update) …
* 18  
### [Basics](https://www.aeon.fun/docs#catalog-basics)  
[digest](https://www.aeon.fun/docs#skill-digest), [article](https://www.aeon.fun/docs#skill-article), [write-tweet](https://www.aeon.fun/docs#skill-write-tweet), [fetch-tweets](https://www.aeon.fun/docs#skill-fetch-tweets), [token-movers](https://www.aeon.fun/docs#skill-token-movers), [tx-explain](https://www.aeon.fun/docs#skill-tx-explain), [pr-review](https://www.aeon.fun/docs#skill-pr-review), [price-alert](https://www.aeon.fun/docs#skill-price-alert), [github-trending](https://www.aeon.fun/docs#skill-github-trending), [idea-forge](https://www.aeon.fun/docs#skill-idea-forge), [last30](https://www.aeon.fun/docs#skill-last30), [bd-radar](https://www.aeon.fun/docs#skill-bd-radar), [action-converter](https://www.aeon.fun/docs#skill-action-converter), [executor-mcp](https://www.aeon.fun/docs#skill-executor-mcp), [glim-mcp](https://www.aeon.fun/docs#skill-glim-mcp), [you-web-search](https://www.aeon.fun/docs#skill-you-web-search), [video-script](https://www.aeon.fun/docs#skill-video-script), [skill-article](https://www.aeon.fun/docs#skill-skill-article) …
* 19  
### [Crypto & Markets](https://www.aeon.fun/docs#catalog-crypto)  
[onchain-monitor](https://www.aeon.fun/docs#skill-onchain-monitor), [defi-overview](https://www.aeon.fun/docs#skill-defi-overview), [monitor-polymarket](https://www.aeon.fun/docs#skill-monitor-polymarket), [token-pick](https://www.aeon.fun/docs#skill-token-pick), [narrative-tracker](https://www.aeon.fun/docs#skill-narrative-tracker), [picks-tracker](https://www.aeon.fun/docs#skill-picks-tracker), [unlock-monitor](https://www.aeon.fun/docs#skill-unlock-monitor), [pm-manipulation](https://www.aeon.fun/docs#skill-pm-manipulation), [distribute-tokens](https://www.aeon.fun/docs#skill-distribute-tokens), [investigation-report](https://www.aeon.fun/docs#skill-investigation-report), [robinhood-mcp](https://www.aeon.fun/docs#skill-robinhood-mcp), [base-mcp](https://www.aeon.fun/docs#skill-base-mcp), [finance-district-mcp](https://www.aeon.fun/docs#skill-finance-district-mcp), [deploy-uni-hook](https://www.aeon.fun/docs#skill-deploy-uni-hook), [taskmarket-delegate](https://www.aeon.fun/docs#skill-taskmarket-delegate), [compute-resell](https://www.aeon.fun/docs#skill-compute-resell), [cortx-reliability](https://www.aeon.fun/docs#skill-cortx-reliability), [submit-hook](https://www.aeon.fun/docs#skill-submit-hook), [miroshark-matchday](https://www.aeon.fun/docs#skill-miroshark-matchday) …
* 16  
### [Dev & Code](https://www.aeon.fun/docs#catalog-dev)  
[feature](https://www.aeon.fun/docs#skill-feature), [deploy-prototype](https://www.aeon.fun/docs#skill-deploy-prototype), [vuln-scanner](https://www.aeon.fun/docs#skill-vuln-scanner), [vuln-tracker](https://www.aeon.fun/docs#skill-vuln-tracker), [sc-audit](https://www.aeon.fun/docs#skill-sc-audit), [github-monitor](https://www.aeon.fun/docs#skill-github-monitor), [pr-triage](https://www.aeon.fun/docs#skill-pr-triage), [inbox-triage](https://www.aeon.fun/docs#skill-inbox-triage), [changelog](https://www.aeon.fun/docs#skill-changelog), [seo-audit](https://www.aeon.fun/docs#skill-seo-audit), [posthog-errors](https://www.aeon.fun/docs#skill-posthog-errors), [spend-watch](https://www.aeon.fun/docs#skill-spend-watch), [rightstack](https://www.aeon.fun/docs#skill-rightstack), [create-prove](https://www.aeon.fun/docs#skill-create-prove), [arc-studio](https://www.aeon.fun/docs#skill-arc-studio), [feedback-builder](https://www.aeon.fun/docs#skill-feedback-builder) …
* 11  
### [Productivity](https://www.aeon.fun/docs#catalog-productivity)  
[reply-maker](https://www.aeon.fun/docs#skill-reply-maker), [mention-radar](https://www.aeon.fun/docs#skill-mention-radar), [send-email](https://www.aeon.fun/docs#skill-send-email), [schedule-ads](https://www.aeon.fun/docs#skill-schedule-ads), [operator-scorecard](https://www.aeon.fun/docs#skill-operator-scorecard), [idea-pipeline](https://www.aeon.fun/docs#skill-idea-pipeline), [competitor-monitor](https://www.aeon.fun/docs#skill-competitor-monitor), [higgsfield](https://www.aeon.fun/docs#skill-higgsfield), [remotion](https://www.aeon.fun/docs#skill-remotion), [weekly-aeoncard](https://www.aeon.fun/docs#skill-weekly-aeoncard), [hunter-22](https://www.aeon.fun/docs#skill-hunter-22) …
* 9  
### [Evolution](https://www.aeon.fun/docs#catalog-evolution)  
[aeon-doctor](https://www.aeon.fun/docs#skill-aeon-doctor), [autoresearch](https://www.aeon.fun/docs#skill-autoresearch), [create-skill](https://www.aeon.fun/docs#skill-create-skill), [skill-health](https://www.aeon.fun/docs#skill-skill-health), [skill-repair](https://www.aeon.fun/docs#skill-skill-repair), [self-improve](https://www.aeon.fun/docs#skill-self-improve), [install-skill](https://www.aeon.fun/docs#skill-install-skill), [search-skill](https://www.aeon.fun/docs#skill-search-skill), [pack-submit](https://www.aeon.fun/docs#skill-pack-submit) …

The autonomy layer - core & evolution

`core` and `evolution`, plus a few skills from `dev` and `crypto`, make aeon autonomous: self-healing (`autoresearch`, `create-skill`, `skill-health`, `skill-repair`, `self-improve`), fleet replication (`spawn-instance`, `fleet-control`, `distribute-tokens`), and real-world action (`feature`, `deploy-prototype`, `vuln-scanner`). See [docs/CORE.md](https://github.com/aeonfun/aeon/blob/main/docs/CORE.md).

### Anatomy of a skill

```
---
name: digest
description: Generate and send a digest on a configurable topic, optionally pulling RSS/Atom feeds as an input source alongside web + X signal
metadata:
  title: Digest
  mode: write
  category: basics
  var: ""
  tags: [content, news]
  requires: [XAI_API_KEY?]
---

# Digest

You are running as the digest skill. Your job is to produce a
crisp ≤300-word digest from recent signals: top items on the topic,
why they matter, and what changed since the last run.

## Inputs
- memory/MEMORY.md      → current goals
- memory/topics/*.md    → tracked topics
- output/.chains/*.md   → upstream chain outputs (if any)

## Output
- A single ./notify call with the brief
- An entry appended to memory/logs/$(date +%F).md
```

### The universal `var` field

Every skill accepts one input through `var`, interpreted per skill: topic for research (`var: "rust"`), repo for dev (`var: "owner/repo"`), token for crypto (`var: "solana"`), focus area for productivity. Empty falls back to defaults.

### Three ways to add a skill

1. 01  
#### From the catalog  
`bin/add-skill aeonfun/aeon token-movers monitor-polymarket` (`--list` browses, `--all` installs all).
2. 02  
#### From a template  
`bin/new-from-template <template> <skill-name> --category <category>`. Six starters live in `docs/examples/skill-templates/`. `--category` is optional (each template has a default) and takes one of the six categories above: `core`, `basics`, `crypto`, `dev`, `productivity`, or `evolution`.
3. 03  
#### Hand-written  
Drop a `SKILL.md` into `skills/your-skill/` with a `metadata.category`, run `bin/generate-skills-json` and `bin/generate-packs-json`, register via `eyebrow scan` (CI-enforced), and add it to `aeon.yml`.

### The `capabilities` taxonomy

Every skill self-declares a **blast-radius hint** in frontmatter (not a sandbox), shown at install time (`bin/install-skill-pack --list`) and locked to six values; a [CI parity check](https://github.com/aeonfun/aeon/blob/main/.github/workflows/ci-capabilities-parity.yml) keeps it in sync.

| Capability             | Meaning                                                    |
| ---------------------- | ---------------------------------------------------------- |
| read\_only             | No writes, onchain calls, or notifications.                |
| external\_api          | Any authenticated call to a non-aeon HTTP API.             |
| writes\_external\_host | POST/PUT/DELETE/PATCH to an external host.                 |
| onchain\_writes        | Signs and broadcasts transactions.                         |
| agent\_messaging       | Speaks publicly for the operator on social/chat platforms. |
| sends\_notifications   | Calls ./notify - the operator's own channel only.          |

```
tags: [crypto, onchain]
capabilities: [external_api, writes_external_host, onchain_writes]
```

A pack's capabilities are the **union** of its skills'. Full reference: [docs/CAPABILITIES.md](https://github.com/aeonfun/aeon/blob/main/docs/CAPABILITIES.md).

### Full catalog

All 85 skills with descriptions and default schedules, pulled live from [skills.json](https://github.com/aeonfun/aeon/blob/main/catalog/skills.json).

#### Core (12)

`aeon-update`

Pull framework updates from the upstream Aeon repo into this instance - 3-way merges canon's new commits into a PR, never clobbering operator config.

`auto-merge`

Automatically merge open PRs that have passing CI, no blocking reviews, and no conflicts

`auto-workflow`

Two-mode aeon.yml workflow builder - analyze inspects URLs and emits a tiered, signal-verified skill-enablement plan plus an aeon.yml diff; enable flips slugs to enabled:true and opens a PR.

`fleet-control`

Operate managed Aeon instances from memory/instances.json - health-check, dispatch, and status snapshots (control), plus a fleet scorecard of runs, tokens, cost, and reliability (scorecard).

`fork-fleet`

Fork divergence monitor - tracks where the fleet's active forks diverge in CODE (unique commits, new/modified skills) and CONFIG (enable/var/model/schedule vs upstream), gated on real change.

`heartbeat`

Ambient fleet-health check that surfaces anything worth attention (default), or an on-demand priority brief - the 3 things to focus on, why now, and what moved (var=brief)

`memory-flush`

Promote important recent log entries into MEMORY.md and prune stale ones

`narrative-convergence`

Cross-skill signal detector - finds entities or themes surfaced independently by 3+ different skill categories within 48h and surfaces them as high-confidence write opportunities

`shiplog`

Recap of everything shipped since the last run - cross-repo PRs, security fixes, star deltas, and X traction, synthesized into a digest article and a ready-to-post shiplog in your voice.

`soul-builder`

Build a SOUL from an X handle - read a wide sample of a public X account, then draft SOUL.md (identity, worldview, opinions), STYLE.md (voice), and examples so every skill speaks in that voice.

`spawn-instance`

Clone this Aeon agent into a new GitHub repo - fork, configure skills, validate, and register in the fleet

`strategy-builder`

Draft STRATEGY.md from a goal - read the operator's brief (goal, repo, links) plus the repo README and memory, then write a tight north-star/priorities/audience/constraints strategy.

#### Basics (18)

`action-converter`

5 concrete real-life actions, leverage-scored against open loops with specificity and anti-fluff gates

`article`

Write a publication-ready article in one of three angles - a trending long-form piece, a watched-repo thesis, or a project-through-a-lens essay. Optional Replicate hero image with --visual.

`bd-radar`

Business-development radar across your product family - find who's building, forking, integrating, and mentioning your products, ranked into a who-to-talk-to-this-week lead list.

`digest`

Generate and send a digest on a configurable topic, optionally pulling RSS/Atom feeds as an input source alongside web + X signal

`executor-mcp`

Run a task through your Executor Cloud tool catalog - one MCP endpoint proxying every integration you connected (MCP servers, OpenAPI specs, GraphQL APIs), with per-tool allow/approve/block policies. OAuth Connect via the dashboard MCP panel.

`fetch-tweets`

Search and curate X/Twitter behind one selector - keyword, topic roundup, a single or tracked-account digest, an X list, or the AI-agent buzz preset - clustered into signal-scored sub-narratives.

`github-trending`

Curated trending across GitHub repos and the Hugging Face Hub (models, datasets, spaces) - filtered, clustered, and labeled by momentum with a one-line why-notable per pick.

`glim-mcp`

Live-data research via the glim.sh MCP - web search, full page extraction, X/Twitter, Reddit, GitHub, Amazon, and YouTube transcripts - synthesized into a cited digest. Pay-per-call from the connected account balance; OAuth Connect via the dashboard MCP panel.

`idea-forge`

Three-mode idea engine - generate collides the week's zeitgeist with what you can ship into scored wedges; validate viability-screens the idea backlog; memo writes evidence-backed startup memos.

`last30`

Cross-platform social research - narrative-first intelligence on what people are saying about a topic across Reddit, X, HN, Polymarket, and the web over the last 30 days

`pr-review`

Review open PRs two ways - default is a per-PR deep review with severity-tagged findings, inline comments, and a verdict; --survey runs a risk-tiered triage digest of what's safe to merge first

`price-alert`

Fire when the tracked token does something - new ATH, sharp 1h move, or operator-set target crossed. Silent on normal days.

`skill-article`

Turn any skill in this instance into a publish-ready launch article - proof-stat headline, one contrarian thesis, mechanics, war stories from real run history, a mental-model reframe, and the full SKILL.md embedded verbatim so readers can steal it. Optional Higgsfield title banner with --banner.

`token-movers`

Crypto market scanner and single-token analyst - movers scans top winners/losers/trending or on-chain runners with pump-risk flags; single-token produces a verdict-first deep report for one token.

`tx-explain`

Decode any Base transaction into a plain-English story - method, token movements, swaps/approvals, counterparties, and suspicious-approval flags. Keyless via Base RPC + Etherscan v2.

`video-script`

Turn a repo, product page, or update into a recording-ready video script in a receipts-first format - verifies every claim against live sources, then writes timestamped VO + on-screen direction with a plain-language glossary, assets checklist, anti-tells, and a verify-before-recording list

`write-tweet`

Multi-format tweet studio - standalone drafts (10 across 5 size tiers), a 5-10 tweet thread, or 10 remixes of past tweets, selected via ${var}

`you-web-search`

Web search using You.com Search API with high-quality, cited results — runs keyless out of the box; YDC\_API\_KEY unlocks higher limits and real-time web crawling

#### Crypto & Markets (19)

`base-mcp`

Access a Base Account via the Base MCP server (mcp.base.org) - wallet, portfolio, sending, swapping, signing, x402 payments, batched calls, and transaction history.

`compute-resell`

Autonomous compute-reselling agent on Surplus Intelligence - resells free or low-cost provider compute across Bankr, AWS Bedrock, and Google Vertex (GCP) as one skill. Reads the live market + your cost + your usage, auto-lists your models per enabled provider, and reactively prices each offer to win routing within a cost floor, cap, and health guardrails.

`cortx-reliability`

Check whether an x402 payment endpoint is reliably delivering value before spending USDC on it. Returns paid delivery rate, active incidents, latency, and a clear proceed/warn/block recommendation.

`defi-overview`

One-pass crypto read - tracked-protocol positions and health plus macro context, with regime take, DeFi verdict, biggest movers, yields, fees, breadth, Fear & Greed, and prediction markets.

`deploy-uni-hook`

"Generate, simulate, audit, and deploy a Uniswap v4 hook + test pool from a brief, on any Uniswap v4 chain (every testnet and mainnet) - pre-audited templates or a from-scratch freeform hook (flags auto-derived; static audit + dangerous-pattern scan + a behavioral forge test + fork sim gate the deploy). Dry-run by default; explicit arm: to broadcast; testnet default, mainnet behind a double opt-in; records the deploy to main. Every deployed hook inherits a mandatory 10 bps AeonFee protocol fee."

`distribute-tokens`

Two-phase contributor rewards - plan builds a tier-priced payout from the repo's merged-PR ranking; send executes it on-chain via Bankr Wallet API with per-recipient idempotency and dry-run.

`finance-district-mcp`

Multichain non-custodial agent wallet via Finance District - check balances, prices, and best DeFi yields, move funds, swap, and make x402 paid API calls across EVM, Solana, Bitcoin, and Sui. Keys never leave a secure enclave (TEE); spend caps are enforced at the wallet. OAuth Connect via the dashboard MCP panel.

`investigation-report`

One-shot Base-token investigation - runs any subset of six onchain-security checks (rug-scan, contract-audit, deployer-trace, holder-concentration, honeypot, lp-lock) into one verdict. Keyless core.

`miroshark-matchday`

Friday bulk football matchday simulations on MiroShark - pay $1 USDC per sim via x402 (Finance District agent wallet), launch Premier League, Serie A, and La Liga matchday sims in parallel, collect share links and full reports, and render or hand off one video per sim.

`monitor-polymarket`

Monitor Polymarket and/or Kalshi prediction markets for 24h price moves, volume changes, fresh comments, and high-conviction alerts

`narrative-tracker`

Track rising, peaking, and fading crypto/tech narratives with quantitative mindshare + velocity signals and explicit positioning calls

`onchain-monitor`

Monitor blockchain addresses and contracts for notable activity

`picks-tracker`

Retrospective on past token and prediction market picks - what hit, what flopped, what the score is

`pm-manipulation`

Detect suspected manipulation on prediction markets over the past 3 days by cross-referencing price/volume/comment anomalies with multilingual local-press coverage

`robinhood-mcp`

Read your Robinhood Agentic brokerage account via the Robinhood Trading MCP - portfolio, buying power, positions, and order history - and place a single operator-instructed trade. OAuth Connect via the dashboard MCP panel.

`submit-hook`

"Submit a deployed Uniswap v4 hook to the public univ4-hooks registry - format the listing, open a PR (issue fallback) so it lists on the hook marketplace."

`taskmarket-delegate`

Delegate work to the TaskMarket agent-worker market - browse open tasks, create tasks with explicit authorization, and track/submit work, so an agent can outsource instead of burning inference on unreliable or low-confidence work.

`token-pick`

One token recommendation and one prediction market pick - scored, quantified, with a skip branch when signals are weak

`unlock-monitor`

Token unlock and vesting tracker - quantify supply pressure via absorption ratio, classify cliff vs linear, and deliver one-line market reads

#### Dev & Code (16)

`arc-studio`

Drive Circle Arc Studio from a headless runner. Start one Arc testnet turn, poll it on a later run, and notify when it finishes or needs an answer.

`changelog`

Generate a user-facing changelog from recent commits/PRs across watched repos - write it in-repo (Keep a Changelog format) or open a cross-repo changelog PR on a docs/marketing repo.

`create-prove`

Run a changed Aeon skill for real and attach SHA-bound behavioral evidence to its PR

`deploy-prototype`

Generate a small app or tool and deploy it live to Vercel via API

`feature`

Build, enhance, or revive GitHub repos - ship one feature PR per watched repo (watched), make the best single enhancement on one external repo (external), or revive the top dormant repo (dormant).

`feedback-builder`

Point Aeon at a service's /feedback endpoint - pull what agents reported (bugs, missing features), triage and cluster it, then build the best accepted request as a PR for a human to approve.

`github-monitor`

Watch your GitHub repos across four views - a combined urgency monitor (stale PRs, new issues, releases), a new-issue triage queue, a release upgrade digest, or your own opened-PR tracker.

`inbox-triage`

Daily GitHub notification inbox triage - surfaces aging vuln PR replies, security advisories, review requests, and mentions that need action

`posthog-errors`

Weekly cross-project error overview from PostHog - enumerates every project the OAuth grant covers, pulls the last 7 days of error-tracking issues per project, ranks them by impact, flags what's new vs ongoing, and sends one digest with per-project totals, the top issues, and a clickable link to a full committed report of every issue.

`pr-triage`

First-touch triage for external pull requests - verdict, label, and a welcoming comment within minutes of open

`rightstack`

Use RightStack as a read-only Web3 stack advisor for architecture recommendations, workflow inspection, tool comparisons, and package-migration checks. Use for planning; do not treat corpus output as implementation proof.

`sc-audit`

Deep security audit of a smart-contract repo OR a live on-chain contract by address - detect Solidity, model the protocol invariants and trust boundaries first, run Slither (best-effort) plus a bounded agentic pass that hunts for a path breaking each invariant, triage, adversarially verify, prove with a fuzzer, and drive each finding through the shared responsible-disclosure routing. The dedicated contract arm split out of vuln-scanner.

`seo-audit`

Daily on-page and technical SEO audit of every page on a site - discovers URLs from the sitemap, scores each page, adds cross-page checks (duplicate titles, canonicals, sitemap gaps), diffs against yesterday, and sends the score line plus any regressions

`spend-watch`

Autonomous cloud-cost analyst across Neon, Vercel, Railway and GitHub Actions - pulls per-object usage, attributes it to the biggest drivers, root-causes each, and emits recommendations ranked by real signal (idle %, over-allowance, failure rate) with dollar figures only where the billing API returns real ones (and, armed, applies safe cost levers).

`vuln-scanner`

Audit trending repos for real security vulnerabilities and disclose responsibly - scan and route findings (PVR / dependency PR), re-submit queued advisories, and send armed email disclosures

`vuln-tracker`

One lifecycle poll over everything vuln-scanner produces - PR and advisory status, PVR triage transitions, and pending-disclosure aging, with a stars-secured impact headline and one action queue.

#### Productivity (11)

`competitor-monitor`

Watch a list of competitor web pages on a cadence - snapshots each page's real signals (pricing, headings, CTAs, new/removed pages, title/description), diffs against the last run, and reports only what actually changed.

`higgsfield`

Generate images and video through the Higgsfield MCP - text-to-image, text-to-video, and image-to-video with motion control across 100+ models. Generation draws real credits from the connected Higgsfield account; OAuth Connect via the dashboard MCP panel.

`hunter-22`

Scan the ClawHunter agent bounty marketplace for opportunities that genuinely match this agent's real capabilities (code, security research, writing) and surface only real matches — never a raw unfiltered dump. When a match is real audit-shaped work with a linked GitHub repo, the notification carries a one-tap button to dispatch vuln-scanner at it directly.

`idea-pipeline`

Execution-gap audit - cross-references the startup idea backlog against shipped skills, prototypes, and cross-repo PRs, surfacing the top 3 ideas to build next by narrative and operator fit.

`mention-radar`

Monitor external web and social mentions of the operator's active projects - surface what people are discovering, where they're confused, and where to engage

`operator-scorecard`

Three recap modes - default synthesizes agent health, community growth, and economic activity into a was-it-worth-it verdict; ops recaps what shipped and failed; push ranks push impact.

`remotion`

Render a short (\~10s) video on any topic with Remotion - the agent writes a storyboard JSON, a bundled React/Remotion project renders it to an MP4, and the clip is committed to the repo and delivered by URL. No editor, no external generative API.

`reply-maker`

Draft copy-paste-ready X replies - two options per reply-worthy tweet from tracked accounts, topics, or lists (default), or ready-to-post responses to engagement opps in recent logs (from-logs)

`schedule-ads`

Manage paid ads on AdManage.ai from declarative config - default schedules launches across Meta/TikTok/Snapchat/Pinterest/LinkedIn (always PAUSED); create provisions Meta campaigns and ad sets.

`send-email`

Compose and send a one-off email to a named recipient via Resend - written in the operator's voice, then sent in-run through the shared send caps with an operator audit copy

`weekly-aeoncard`

Build a weekly token-consumption recap image from memory/token-usage.csv - this week + all-time totals, top skills, rendered as a shareable SVG card.

#### Evolution (9)

`aeon-doctor`

Static config-correctness linter for this instance - catches the silent-failure class (unquoted schedules, duplicate keys, unconfigured skills, mode typos, broken requires/MCP refs) that no run-based health skill can see. Notifies only on problems.

`autoresearch`

Evolve a skill by generating variations, evaluating them, and updating the best version

`create-skill`

Generate a complete new skill from a one-line prompt and ship it as a PR

`install-skill`

Install a community skill pack into this fork from a GitHub repo and ship it as an auto-merged PR

`pack-submit`

Package one of this agent's own skills as a standalone community pack and submit it to the aeon registry as a PR

`search-skill`

Search the open agent skills ecosystem for skills that fill a real gap and install them via the native add-skill path

`self-improve`

Improve the agent itself, or audit its recent performance - better skills, prompts, workflows, and config, plus a quality/reliability/memory-hygiene review of what it did and what failed

`skill-health`

Fleet skill observability with two views - health audits per-skill metrics and files/resolves issues in memory/issues/; analytics ranks the fleet by 7d runs, success rates, and anomaly flags.

`skill-repair`

Diagnose and fix failing or degraded skills automatically - systemic-first triage, per-category playbooks, and a verification plan

03 / SCHEDULING

## Cron-first. Order matters.

All scheduling lives in `aeon.yml` - standard cron syntax, UTC.

### Config shape

```
model: claude-sonnet-5-5

skills:
  article:
    enabled: true               # flip to activate
    schedule: "0 8 * * *"       # daily at 8am UTC
  digest:
    enabled: true
    schedule: "0 14 * * *"
    var: "solana"               # topic for this skill
  token-movers:
    enabled: true
    schedule: "30 12 * * *"
    model: "claude-opus-5-5"    # per-skill model override
  heartbeat:
    enabled: true
    schedule: "0 8 * * *"       # ambient default, listed last by convention
```

### Scheduler rules

* **Every match fires,** in parallel, every 5 minutes by default.
* **Dependencies run first** via a skill's `depends_on:` frontmatter.
* **Heartbeat is the default** - ambient fleet-health, listed last by convention.
* **Tick frequency is tunable** in `.github/workflows/scheduler.yml` (`*/5`, `*/15`, `0 *`) to save Actions minutes.

### Model selection

Set repo-wide in `aeon.yml` or override per skill: `claude-sonnet-5-5` (default, routine work), `claude-opus-5-5` (hard reasoning, research, code), or `claude-haiku-4-5-20251001` (quality scoring).

04 / SELF-HEALING

## The fleet watches itself.

Every output gets scored and every failure tracked - aeon tries to fix a broken skill before bothering you.

After every run, Haiku scores it 1-5 (failed/empty = 1, clean = 5) with flags like `api_error`, `stale_data`, `rate_limited`, landing in `memory/skill-health/` as a rolling 30-run history.

### Four skills

1. 01  
#### heartbeat - the sentinel  
Runs daily, the only skill enabled by default. Reads `memory/cron-state.json` for failures, stalled PRs, missed schedules; clean logs `HEARTBEAT_OK`, dirty notifies.
2. 02  
#### skill-health - the auditor  
Reads the 30-run history for degradation and files issues to `memory/issues/`.
3. 03  
#### skill-repair - the mechanic  
Diagnoses a failing skill (`SKILL.md`, runs, filed issue) and opens a fix PR. Auto-fires after 3 failures in a row.
4. 04  
#### self-improve - the evolver  
One small, targeted change per run from recent performance - never a wholesale rewrite.

Default state

Turns on once you enable `skill-health`, `skill-repair`, and the reactive `consecutive_failures >= 3` trigger.

### Issue lifecycle

Issues live in `memory/issues/ISS-NNN.md` with frontmatter (`status`, `severity`, `root_cause`, `fix_pr`). Health skills file, `open → resolved`; repair skills close.

### PR governance

`pr-review --survey` buckets open PRs by risk tier (core-review / infra-review / skill-pass / fast-track), re-notifying only on a riskier new PR. `auto-merge` merges fully-green PRs passing a safety policy - allowlist, ≤500-line cap, CLEAN state, no opt-out labels - capped at three per run.

05 / MEMORY

## Files, not databases.

aeon's memory is a directory of markdown and JSON, read on entry and written on exit. Persistence is just `git commit`.

### Five layers

| Layer                     | Purpose                          | Lifetime                 |
| ------------------------- | -------------------------------- | ------------------------ |
| memory/MEMORY.md          | Index - goals, topics, pointers  | Long-lived, hand-curated |
| memory/topics/            | Detailed notes by topic          | Long-lived               |
| memory/logs/YYYY-MM-DD.md | Append-only daily log            | Forever                  |
| memory/issues/            | Structured failure tracker       | Until resolved           |
| memory/skill-health/      | Rolling quality scores per skill | Rolling window           |

### Operating rules

* **Read `MEMORY.md` on entry** for goals and active topics.
* **Append a log on exit** to `memory/logs/$(date +%F).md`.
* **Promote details out of the index** to `topics/<name>.md` once they outgrow a few lines.
* **Reflect, don't hoard.** `memory-flush` promotes key log entries into `MEMORY.md` and prunes stale ones.

### cron-state.json

Per-skill metrics - status, success rate, timestamps, quality score. Read by `heartbeat` and `skill-health`.

```
{
  "digest": {
    "last_status": "success",
    "last_success": "2026-05-28T07:00:21Z",
    "total_runs": 30,
    "total_successes": 29,
    "consecutive_failures": 0,
    "success_rate": 0.97,
    "last_quality_score": 4
  },
  "monitor-polymarket": {
    "last_status": "failed",
    "last_failed": "2026-05-28T06:45:08Z",
    "total_runs": 9,
    "total_failures": 2,
    "consecutive_failures": 2,
    "success_rate": 0.78,
    "last_quality_score": 1,
    "last_error": "api_error: 429 rate_limited"
  }
}
```

06 / CHAINS

## Pipelines without orchestrators.

Skills chain so outputs flow between them, run as separate workflow steps via `chain-runner.yml`.

### Defining a chain

```
chains:
  digest-pipeline:
    schedule: "0 7 * * *"
    on_error: fail-fast                       # or: continue
    steps:
      - parallel: [token-movers, github-trending]   # run concurrently
      - skill: digest, consume: [token-movers, github-trending]   # runs after; outputs injected
```

### How a chain executes

1. 01  
#### Dispatch per step  
Parallel steps fan out; sequential steps wait.
2. 02  
#### Outputs land in output/.chains/  
A finished skill's output saves to `output/.chains/{skill}.md` - one file per skill.
3. 03  
#### Downstream steps consume  
Steps with `consume:` get listed upstream outputs injected into their context.
4. 04  
#### Error policy  
`fail-fast` aborts on any step failure; `continue` keeps downstream steps running.

07 / REACTIVE

## Triggers, not timers.

Cron handles "every day at 8am." Reactive triggers handle "whenever this happens" - skills with `schedule: "reactive"` fire on conditions.

### Defining triggers

```
reactive:
  skill-repair:
    trigger:
      - { on: "*", when: "consecutive_failures >= 3" }
  autoresearch:
    trigger:
      - { on: "skill-health", when: "last_status = success" }
```

The scheduler evaluates triggers against `cron-state.json`. It ships _commented out_ - both the `reactive:` block and `skill-repair` are opt-in.

### Trigger conditions

* `on: "*"` matches every skill; otherwise an exact skill name.
* `when:` is one of `consecutive_failures >= N`, `success_rate <op> X` (0.0-1.0), or `last_status = <value>`.
* Reactive skills don't need a cron entry - conditions fire them.

08 / AUTH

## Pick one. Not both.

aeon authenticates to Anthropic two ways, direct, plus eight optional gateways - routing resolves automatically from whichever secrets you've set.

### Ten providers

Set one credential; each run resolves the live provider from whichever secret exists:

* DirectClaude subscriptionIncluded in your Pro/Max planCLAUDE\_CODE\_OAUTH\_TOKEN
* DirectAnthropic APIPay-as-you-go per tokenANTHROPIC\_API\_KEY
* GatewayOpenRouterAnthropic-native passthroughOPENROUTER\_API\_KEY
* GatewayBankrDiscounted Opus accessBANKR\_LLM\_KEY
* GatewayUsePodSolana token marketplaceUSEPOD\_TOKEN
* GatewayVenicePrivacy-first inferenceVENICE\_API\_KEY
* GatewaySurplusUSDC-settled via The BridgeSURPLUS\_API\_KEY
* GatewayGrok (xAI)Anthropic-native passthrough to api.x.aiXAI\_API\_KEY
* GatewayGLM (Z.AI)Z.AI Coding Plan passthrough to api.z.aiGLM\_API\_KEY
* GatewayHivemindOSBilled to a credit balance, no provider accountHIVEMINDOS\_CREDIT\_TOKEN

### OAuth - preferred for Claude Max users

```
claude setup-token
# opens browser → prints sk-ant-oat01-…  (valid 1 year)
# paste it into "Connect a model" in Aeon Connect (or the local dashboard),
# or let ./aeon init do it
```

Works on GitHub-hosted runners. If a run is rejected, the **Why?** toggle on HQ says so; fall back to `ANTHROPIC_API_KEY` or a gateway key.

### LLM gateways - eight alternative routes

Eight more gateways route Claude Code through cheaper, crypto-billed, or credit-billed inference. `aeon.yml` defaults to `gateway: { provider: auto }` - each run picks the first configured secret, so adding or removing a key re-routes with no config change.

```
claude (CLAUDE_CODE_OAUTH_TOKEN) → anthropic (ANTHROPIC_API_KEY) →
openrouter → bankr → usepod → venice → surplus → grok → glm → hivemindos → direct (fallback)
```

Full detail in the repo's [LLM Gateways](https://github.com/aeonfun/aeon/blob/main/docs/CONFIGURATION.md#llm-gateways) guide. Override priority with `GATEWAY_ORDER`, or pin one via `gateway.provider` (`direct`, `bankr`, `openrouter`, `usepod`, `venice`, `surplus`, `grok`, `glm`, or `hivemindos`). The `grok` gateway shares `XAI_API_KEY` with the Grok Build harness ([§09](https://www.aeon.fun/docs#harnesses)) but still bills through xAI.

### Cross-repo access

`GITHUB_TOKEN` is scoped to the aeon repo only. For cross-repo skills (`github-monitor`, `pr-review`, `feature`), add a **classic** PAT as `GH_GLOBAL` with `repo` and `workflow` scopes (fine-grained is unreliable for the PVR API). Skills fall back to `GITHUB_TOKEN` when `GH_GLOBAL` is absent.

09 / HARNESSES

## Nine agents. One behaviour.

The harness is the coding-agent CLI that runs your skills. aeon ships nine - Claude Code (default), Grok, Codex, Pi, Vibe, Kimi, fx, Cursor, and Hermes - and every entry point runs on any of them.

Different axis from the gateways in [§08](https://www.aeon.fun/docs#auth): a gateway swaps the _model_, a harness swaps the whole CLI. Claude Code (`claude -p`) authenticates to Anthropic; Grok Build (`grok -p`) authenticates via **X account** and runs `grok-4.7` by default. Defaults to Claude Code, fully additive.

### Selecting a harness

Set from the dashboard top bar (Aeon Connect or local), via workflow-dispatch, or in `aeon.yml`:

```
harness: claude          # global default (top-level)

skills:
  digest: { enabled: true, schedule: "0 9 * * *", harness: "grok" }   # per-skill override
```

### Grok Build authentication

Grok has its own auth and does _not_ use the LLM gateways. Two ways in, both from the dashboard's Connect a model window:

* **Connect X account** - `grok login --device-auth` stores `GROK_CREDENTIALS` (needs SuperGrok or X Premium+)
* **API key** - `XAI_API_KEY` from `console.x.ai`, also powers the Grok LLM gateway

No free tier. Each Actions run restores the session into `~/.grok` before invoking `grok`. Its `streaming-json` output logs real token counts and cost to `memory/token-usage.csv`, like Claude Code.

### More harnesses

Seven more run through `harness-adapter`'s `run-harness`, wrapped in the same `{result, usage, session_id}` contract:

* **Codex** - OpenAI Codex CLI (`openai/*`)
* **Pi** - Pi Coding Agent (`deepseek/*`)
* **Vibe** - Mistral Vibe (`mistralai/*`)
* **Kimi** - Moonshot Kimi (`moonshotai/*`)
* **fx** - Vercel's fx ([fx.sh](https://fx.sh)), any Vercel AI Gateway model
* **Cursor** - Cursor CLI (`agent -p`, `CURSOR_API_KEY`)
* **Hermes** - Nous Portal (`HERMES_AUTH` or OpenRouter)

Codex, Pi, Vibe, and Kimi share a single `OPENROUTER_API_KEY`, or run on native logins (**Connect ChatGPT**, **Connect Kimi**, a provider key) - native takes priority when set. On a native login Codex runs the model you pick (a ChatGPT plan that refuses it falls back to the account default with a warning); Pi, Vibe, and Kimi use their own default there. Pi also loads the repo's `.mcp.json` through its built-in MCP support, like Claude Code, Grok, Codex, Vibe, and Kimi. **fx and Cursor have no OpenRouter fallback**: fx needs `AI_GATEWAY_API_KEY` or `VERCEL_OIDC_TOKEN`, Cursor needs `CURSOR_API_KEY`. Hermes uses `HERMES_AUTH` or falls back to OpenRouter.

### Same behaviour, either harness

Wired through _every_ surface that launches the agent - a grok-only fork behaves identically end to end:

| Capability                 | How it maps on Grok Build                                                                           |
| -------------------------- | --------------------------------------------------------------------------------------------------- |
| Standing instructions      | grok reads CLAUDE.md natively; a generated AGENTS.md carries the STRATEGY.md north-star             |
| Capability mode            | grok can't be tool-gated, so read-only is enforced by the dispatcher's OS sandbox (bwrap --ro-bind) |
| MCP servers                | grok discovers the project .mcp.json natively and expands ${VAR} secrets                            |
| Messages, chains & scoring | Telegram/Discord/Slack replies, chain steps, and the quality scorer all run on the selected harness |

### Grok run-shaping

Optional `SKILL.md` frontmatter shapes a grok run - ignored by Claude Code:

```
max_turns: 120      # agentic-turn cap (default 60; a runaway guard)
best_of_n: 3        # run the task 3 ways in parallel, keep the best
verify: true        # append a self-verification loop before finishing
effort: high        # low|medium|high|xhigh|max - grok-build reasoning models
```

Two surfaces stay Claude-only: the **LLM gateway** (grok brings its own auth) and the **json-render feed** - skill output, memory, and notifications are unaffected on grok. Full detail in the repo's [Harnesses](https://github.com/aeonfun/aeon/blob/main/docs/harnesses.md) guide.

10 / NOTIFICATIONS

## Set a secret. The channel turns on.

Telegram, Discord, Slack, Email, Buzz. Each channel is opt-in via secrets.`./notify` fans out to all configured channels and silently skips unconfigured ones.

### Channels

| Channel  | Outbound                                   | Inbound (talk back)                         |
| -------- | ------------------------------------------ | ------------------------------------------- |
| Telegram | TELEGRAM\_BOT\_TOKEN \+ TELEGRAM\_CHAT\_ID | Same (offset-based polling)                 |
| Discord  | DISCORD\_WEBHOOK\_URL                      | DISCORD\_BOT\_TOKEN \+ DISCORD\_CHANNEL\_ID |
| Slack    | SLACK\_WEBHOOK\_URL                        | SLACK\_BOT\_TOKEN \+ SLACK\_CHANNEL\_ID     |
| Email    | RESEND\_API\_KEY \+ NOTIFY\_EMAIL\_TO      | -                                           |
| Buzz     | BUZZ\_PRIVATE\_KEY \+ BUZZ\_CHANNEL\_ID    | -                                           |

### Inbound priority

Pending messages are collected in priority order - Telegram > Discord > Slack - and each dispatches as its own run. Per-channel read state (Telegram's offset, Discord/Slack reaction-acks) prevents re-reading.

### Telegram commands & buttons

Structured input - commands, button taps, replies - is handled by a router with **no LLM in the loop**, so it's instant and free. Works on both the 5-minute poller and the instant webhook.

* **Slash commands + `/` autocomplete** - each skill becomes a command (`/token-movers solana`). Auto-registers on saving your bot token; **Re-register commands** re-syncs after toggling skills.
* **Buttons on every notification** - `Run again`, `Schedule weekly`, one tap; alert skills can add `Snooze` / `Mute`.
* **Deep links** - `t.me/<bot>?start=<skill>__<arg>` runs a skill from a URL.
* **Force-reply follow-ups** - a skill asks a question and routes your reply back to itself; wired across \~10 skills.

Full reference and security model in the repo's [Telegram commands guide](https://github.com/aeonfun/aeon/blob/main/docs/telegram-commands.md); instant-mode forks should redeploy the Worker after changes.

### Telegram instant mode

Default polling has up to a 5-minute delay. For \~1s replies, deploy the Cloudflare Worker in `apps/webhook/` - one-click **Deploy to Cloudflare**, or register from the dashboard (`Settings → Credentials → Telegram → ⚡ Instant replies`) - the poller then skips polling automatically. Full guide: [docs/telegram-instant.md](https://github.com/aeonfun/aeon/blob/main/docs/telegram-instant.md).

### json-render feed

In local mode, the dashboard renders a real-time feed via `json-render`: each skill emits a spec into `apps/dashboard/outputs/`, picked up instantly. In Actions, `./notify-jsonrender` converts markdown into the same spec via Haiku.

11 / STRATEGY

## One north-star. Read every run.

`STRATEGY.md` is the operator's brief - one metric, a few priorities, the hard limits. Imported into `CLAUDE.md`, it sits in context on _every_ run and breaks ties.

Where `soul/` sets **voice**, `STRATEGY.md` sets **intent**: what to work on, prioritize, flag, skip. One file at the repo root, pulled in via a one-line `@STRATEGY.md` import in `CLAUDE.md`. Every one of the 85 skills reads it before acting, absorbing it as a bias rather than quoting it verbatim.

### The five fields

Keep it short - it costs tokens on every run. One north-star, three to five priorities, the constraints.

```
# Strategy

## North-star metric
The single outcome everything should move toward.
> Weekly active teams - not signups.

## Priorities          # most important first, cap at ~5
1. Correct, verifiable work over work that looks finished.
2. Depth on core projects over broad, shallow coverage.
3. Surface signal early - don't sit on a decision.

## Audience
Who the output is for, and their level.
> Technical founders, short on time.

## Hard constraints    # lines never to cross
- Never publish secrets or unverified claims as fact.
- Stay within configured spend and rate limits.

## Optimize for / avoid
- Optimize for: signal, correctness, the priorities above.
- Avoid: filler, hype, busywork, anything off-strategy.
```

### Wiring it in

One import line. `CLAUDE.md` pulls the file into context via an `@`-import - no per-skill plumbing.

```
## Strategy

STRATEGY.md is the operator's north-star - overarching goal,
priorities, audience, and hard constraints. Read it at the start
of every task and align your output to it; when a choice isn't
otherwise determined, let the strategy break the tie. Absorb it,
don't quote it verbatim.

@STRATEGY.md
```

Unconfigured by default

A new instance ships `STRATEGY.md` with neutral defaults and a `Status: unconfigured defaults` banner. Skills use general best judgment until you tailor it; drop the banner line once it's yours.

### Strategy plus soul

Complementary, loaded at different moments: `STRATEGY.md` rides on **every** run (always-on intent); `soul/` (§12) is read only before the agent writes something human-facing (voice on demand).

12 / SOUL

## Optional. Specific. Worth writing.

By default aeon has no personality - flat, direct, neutral. Drop a `soul/` directory in to give it your voice everywhere it writes.

### The hierarchy

* `soul/SOUL.md` - identity, worldview, opinions.
* `soul/STYLE.md` - sentence structure, vocabulary.
* `soul/examples/` - 10-20 calibration samples.
* `soul/data/` - raw material, browse only.
- `soul`
  - `SOUL.md`
  - `STYLE.md`
  - `examples`
    - `good-tweets.md`
    - `good-replies.md`
    - `bad-outputs.md`
  - `data`
    - `x-export.json`
    - `blog-posts.md`
    - `transcripts.md`

### Wiring it in

```
## Voice

If soul/ files exist, read them before writing any notification
or output - to match the operator's voice. Skip if the soul
directory is empty or absent.

Soul file hierarchy (read in this order):
- soul/SOUL.md       - identity, worldview, opinions, background
- soul/STYLE.md      - sentence structure, vocabulary, anti-patterns
- soul/examples/     - calibration material (good + bad outputs)
- soul/data/         - raw source material; browse, don't copy-paste

Match that voice in every written output. If the soul files are
empty or absent, use a clear, direct, neutral tone.
```

Quality check

Soul files work when specific enough to be wrong. "I think most AI safety discourse is galaxy-brained cope" is useful; "I have nuanced views on AI safety" is not - if a competitor could write the same SOUL.md, it's too generic.

### Building one with soul.md

[soul.md](https://github.com/aeonfun/soul.md) is the companion repo: fork it, drop raw material into `data/`, and run `/soul-builder` to mine it - or interview you from scratch - into `SOUL.md` \+ `STYLE.md` plus calibration examples. Plain markdown, so any file-reading agent can embody one. Real public souls (`@karpathy`, `@garrytan`, `@steipete`, Vivian Balakrishnan) are in the repo's Examples section. Once built, copy the files into `soul/` - every skill reads `CLAUDE.md`, so the identity propagates automatically.

13 / INTEGRATIONS

## Skills outside Actions.

aeon skills work outside GitHub Actions too - call them from Claude Desktop or Claude Code as MCP tools.

### MCP - Claude Desktop / Claude Code

Every skill appears as an `aeon-<name>` tool.

```
bin/add-mcp                # build and register
bin/add-mcp --desktop      # also print Claude Desktop config
bin/add-mcp --build-only   # compile without registering (CI / Desktop)
bin/add-mcp --uninstall    # remove
```

### Working examples

| Stack       | File                                  | Skill called      |
| ----------- | ------------------------------------- | ----------------- |
| MCP (stdio) | docs/examples/mcp/test\_connection.py | aeon-token-movers |

Skills run locally via `claude -p -` when invoked through MCP, same as Actions, reading API keys from your environment or a `.env`.

### Skills that consume external MCP servers

Skills can call _out_ too: `base-mcp` drives the Base MCP server (`mcp.base.org`) for a Base Account wallet (balances, swaps, payments); partner plugins (Morpho, Moonwell, Uniswap, Avantis, Virtuals, Aerodrome, Bankr) extend it, and state-changing calls need approval.

### One-click OAuth Connect

OAuth-gated MCP servers connect through a browser flow: click **Connect** and authorize (PKCE); tokens are captured _server-side_ as repo secrets, refreshed before every run. Seven one-click today: **Base**, **Robinhood**, **Executor**, **glim**, **Finance District** (Agent Wallet), **PostHog**, **Higgsfield**.

Durable refresh needs a PAT

Refresh tokens rotate on every use, and persisting the replacement needs a secrets-write credential `GITHUB_TOKEN` lacks. Set `GH_SECRETS_PAT` (or `GH_GLOBAL`) to keep a Connected server working past its first run.

Companion skills drive each on demand: `base-mcp`, `robinhood-mcp` (portfolio, fail-closed trading), `glim-mcp` (live-data research, cited digest), `executor-mcp` (one task across connected integrations, read-only), `finance-district-mcp` (multichain wallet, keys sealed in a TEE). PostHog and Higgsfield have no dedicated skill.

14 / FLEET

## One aeon spawns many.

aeon forks copies of itself - one instance per specialization (crypto, research, community ops) - without sharing secrets.

### The three skills

`spawn-instance` creates a new fork, `fleet-control` coordinates the instances you own, and `fork-fleet` tracks public forks running in the wild.

### Spawning an instance

```
skills:
  spawn-instance:
    enabled: true
    schedule: "workflow_dispatch"
    var: "crypto-tracker: monitor DeFi protocols and token movements"
```

* Forks the repo into a new GitHub repo under your account, keeping only the skills relevant to the brief in `var`.
* Registers the instance in `memory/instances.json` for fleet-control to see.
* **Secrets do not propagate.** The new owner adds their own Anthropic key and notification tokens.

15 / PACKS

## Core, opt-in, and community.

85 skills is a lot to scroll. Packs group them so a fork only sees what it runs. **First-party packs** ship in this repo and act as a visibility lens; **community packs** live in their own repos and install as one security-scanned bundle.

### First-party packs - a visibility lens

Every fork ships the same 85 skills; the dashboard shows only **Core**, **Evolution**, and **Basics** by default, hiding the rest in packs until enabled. Enabling a pack only _reveals_ skills - it's a display preference, **not a run switch**; flip a skill's own toggle to run it. Packs are _data_, derived from each skill's `category`.

| Pack                                 | What's in it                                                              |
| ------------------------------------ | ------------------------------------------------------------------------- |
| **Core** · always on · 12            | Fleet coordination, self-config, liveness, memory. Not removable.         |
| **Evolution** · shown by default · 9 | Self-improvement loop - authors, evolves, evaluates, and heals the fleet. |
| **Basics** · shown by default · 18   | One approachable, low-setup entry per area.                               |
| Dev & Code · 16                      | PR/issue triage, review, deploys, security scanning, cost analysis.       |
| Crypto & Markets · 19                | Token/DeFi/prediction-market monitoring, onchain forensics.               |
| Productivity · 11                    | Routines, idea capture, retros, deal flow, email, media generation.       |

The catalog is generated, not hand-maintained: `bin/generate-packs-json` writes `packs.json` and fails CI if it's stale. Full reference: [docs/skill-packs.md](https://github.com/aeonfun/aeon/blob/main/docs/skill-packs.md).

### Community packs

Third-party pack collections in their own repos, installed as one security-scanned bundle - one-click from the dashboard's **Packs** view (ships an auto-merging PR), or by CLI:

```
bin/install-skill-pack --list                      # browse the registry
bin/install-skill-pack clawhunter/clawhunter-skills  # install a pack
```

### The trust model

1. 01  
#### Manifest read  
Reads `skills-pack.json` for which `SKILL.md` files to install, or scans `skills/`.
2. 02  
#### Security scan  
`skill-scan` flags code execution, secret exfiltration, destructive commands, prompt injection, and credential-path access.
3. 03  
#### Disabled install  
Lands disabled in `aeon.yml`; the operator flips `enabled: true` to activate.
4. 04  
#### Provenance recorded  
Source repo, branch, and commit SHA go to `skills.lock` for reproducible installs.

Browse the registry at [catalog/skill-packs.json](https://github.com/aeonfun/aeon/blob/main/catalog/skill-packs.json). Eleven packs are listed so far: [**Clawhunter Skills**](https://github.com/clawhunter/clawhunter-skills), [**Charon for AEON**](https://github.com/CharonAI-code/charon), [**AI2Human Create Task**](https://github.com/richard7463/ai2human-aeon-skill-pack), [**Skim Clean Reads**](https://github.com/JessieJanie/aeon-skill-pack-skim), [**CultOS Aeon Skills**](https://github.com/thesmithdao/cultos-aeon-skills), [**Farcaster Pack**](https://github.com/amritmirch/aeon-skill-pack-farcaster), [**Spoolis Outcome Gate**](https://github.com/jsfranklin221/aeon-skill-pack-spoolis), [**Claim Audit**](https://github.com/richard7463/aeon-skill-pack-claim-audit), [**Messaging Pack**](https://github.com/Svector-anu/aeon-messaging-pack), [**Epoch Pack**](https://github.com/Svector-anu/aeon-epoch-pack), and [**bon travail Pack**](https://github.com/Svector-anu/bon-travail). Schema and trust model: [docs/community-skill-packs.md](https://github.com/aeonfun/aeon/blob/main/docs/community-skill-packs.md).

16 / ECOSYSTEM

## Built on aeon, in the wild.

aeon now keeps a public catalog of the products, agents, and tools that extend it. Three lists, three purposes.

### The three lists

| File                     | What goes here                                                       |
| ------------------------ | -------------------------------------------------------------------- |
| ECOSYSTEM.md             | Products and agents built with or extending aeon.                    |
| SHOWCASE.md              | How aeon compares to the agent tools you already know.               |
| catalog/skill-packs.json | Community skill packs (see §15) - intentionally not in ECOSYSTEM.md. |

### Add your project

Open a PR appending a row: **Logo · Project · Links**. A square `36×36` `<img>` with `alt` text, or empty.

Self-tracking

The [ecosystem page](/ecosystem) re-fetches `ECOSYSTEM.md` hourly - merged PRs appear without a redeploy.

72 projects so far, spanning registries, security scanners, prediction markets, and fleet control tooling. Browse the live list on the [ecosystem page](/ecosystem) or at [ECOSYSTEM.md](https://github.com/aeonfun/aeon/blob/main/docs/ECOSYSTEM.md).

17 / SECURITY

## Untrusted by default.

Every byte aeon fetches from the public internet is treated as data, not instructions. Secrets stay in environment variables. The optional Fleet Watcher adds inline ALLOW/BLOCK authorization.

### Prompt-injection discipline

* **External content is data, not orders.** URLs, feeds, issues, tweets - none can give the agent instructions; only `CLAUDE.md` and the current `SKILL.md` can.
* **Discard hostile content.** Content that reads like "ignore previous instructions" gets logged and ignored.
* **Never exfiltrate.** Environment variables, repo file contents, and secrets must not be sent to external URLs.

### Dashboard gating

The dashboard API is loopback-only by default; two env vars open trusted remote access:

| Env var                           | Behaviour                                                                                         |
| --------------------------------- | ------------------------------------------------------------------------------------------------- |
| AEON\_DASHBOARD\_ALLOWED\_HOSTS   | Extends the loopback allowlist by hostname (comma-separated). For Tailscale, ngrok, internal DNS. |
| AEON\_DASHBOARD\_ALLOW\_ANY\_HOST | Disables Host-header checking - only safe behind an authenticating reverse proxy.                 |

State-changing requests also fail when `Origin` isn't allowlisted, blocking no-cors POST attacks from a malicious page.

### Fleet Watcher (optional)

A self-hosted control plane aeon consults before every skill run - preflight asks permission, postflight reports what happened; BLOCK exits the workflow before Claude runs. Wired into `aeon.yml` as two opt-in steps, enabled with two secrets:

| Secret          | Value                                                           |
| --------------- | --------------------------------------------------------------- |
| FLEET\_ENDPOINT | Base URL of your Fleet Watcher (e.g. https://fleet.example.com) |
| FLEET\_TOKEN    | Agent token from POST /api/aeon/register                        |

Unset secrets = no-op. Set but unreachable = preflight fails closed. Postflight always runs (`if: always()`), so failed or blocked skills still get recorded.

### Sandbox limitations

Bash egress isn't blocked - skills make live network calls in-run. The Bash permission layer refuses any command with a bare `$SECRET` it can't statically prove safe:

* **./secretcurl** - a `curl` drop-in taking a `{ENV_NAME}` placeholder instead of `$SECRET`. Use for auth calls; `gh api` handles GitHub auth internally.
* **Irreversible actions** (deploys, spend, onchain sends) run via `./secretcurl` as the skill's final, fail-closed step.
* **WebFetch fallback** for a flaky public GET.

### Verifiable provenance (optional)

Aeon can emit **Sigstore-signed provenance** via [GitHub Artifact Attestations](https://github.com/aeonfun/aeon/blob/main/docs/attestation.md): a tamper-evident statement binding a run's output bytes to the exact workflow identity, logged to the public Rekor transparency log and checkable with `gh attestation verify` - _without trusting the repo or operator_.

* **Proves** these bytes came from skill X at commit C on a GitHub runner at time T.
* **Does not prove** the output is correct - it's provenance of _bytes_, not _behaviour_.
* **Off by default**, touches zero skills, commits nothing. Free on public repos; private repos need Team or Enterprise.

### Observability (optional)

Aeon can stream every Claude Code run to [Langfuse](https://github.com/aeonfun/aeon/blob/main/docs/langfuse.md) as a trace - requests, tool calls, and (if content logging is on) prompts and responses. Opt-in via `LANGFUSE_*` secrets; export is out of band so a slow or down Langfuse doesn't affect the run. Non-Claude harnesses emit a coarser usage-only span via `otel-span.sh`.

18 / COST

## Basically free. On purpose.

A public aeon instance on a free GitHub account, billing Claude through your existing subscription, costs nothing extra to run.

### Why it's free

* Public repo minutesPublic aeon repos get unlimited free GitHub Actions minutes.
* $0Extra infrastructureNo servers, no databases, no daemons - just Git + Actions + your Claude subscription.

### Private instance minutes

| Plan       | Free minutes / mo | Overage            |
| ---------- | ----------------- | ------------------ |
| Free       | 2,000             | N/A (private only) |
| Pro / Team | 3,000             | $0.008/min         |

### Levers to reduce usage

* Widen the `scheduler.yml` cron from `*/5` to `*/15` or `0 *`.
* Disable unused skills - `enabled: false` means they never run.
* Sonnet default, Haiku for lightweight scoring skills.
* Review `memory/token-usage.csv` to spot heavy skills.

Public or private

Want memory and config private? Pick **Private** in Aeon Connect (or `./aeon init --private`): you get a private copy of the template that uses your own minutes. Public instances are forks and pull updates from `aeonfun/aeon`; any instance can update with the `aeon-update` skill.

19 / ADK

## Build products on top of Aeon.

The **Aeon Developer Kit** guides building _on_ Aeon - dashboards, agent products, or any service where users run their own instance. The core idea: GitHub _is_ the API.

Every integration - run a skill, set a key, read output - maps to a file or GitHub API surface, so a dashboard can drive a fleet without a bespoke backend. A GitHub App stands in for a server, with per-request tenant isolation as the load-bearing check.

### Two ways to build

* **Drive instances via a GitHub App** - dispatch skills, write secrets, read output across every fork. [Aeon Connect](/connect), the production multi-tenant dashboard, is the reference implementation.
* **Ship your product as a skill pack** - installable skills (see [§15](https://www.aeon.fun/docs#packs)) any operator adds in one command.

Full reference

Permission matrix, auth flow, and tenant-isolation contract: [docs/ADK.md](https://github.com/aeonfun/aeon/blob/main/docs/ADK.md).
