Changelog.
What shipped in aeon - merged PRs, new skills, dashboard fixes, and ecosystem additions, published as a changelog each week.
Contract audits and a self-repair loop
A new sc-audit skill brings deep smart-contract auditing to the catalog (now 82 skills), the dev-loop self-test chain gains a bounded verified-repair pass, and vuln-scanner's disclosure routing now honors a repo's real intake channel. The rest hardens the fleet - a dashboard XSS fix, Riva shadow-mode isolation on the MCP path, a scoped PR watermark, and vertical short-form matchday renders.
- New sc-audit skill: deep smart-contract auditing of a Solidity repo, a live on-chain address, or a bundled fixture - it models invariants first, runs Slither plus a bounded agentic pass, proves survivors with a fuzzer, and routes each finding through vuln-scanner's shared responsible-disclosure machinery (catalog 81 to 82) (#1072)
- dev-loop gains one bounded, receipt-authorized repair pass - the self-test chain can now fix an actionable review finding, re-verify, and re-review before recording, instead of stopping at a human handoff (#1070)
- vuln-scanner disclosure routing hardened: a SECURITY.md-first step resolves the repo's real intake channel (vendor PSIRT / bug-bounty portal, then security email, then GitHub PVR) before the finding-type matrix, and a PVR preflight reads the HTTP status so a 404 no longer misreads as enabled (#1073)
- fix(dashboard): the MCP OAuth callback now HTML-escapes its error params, closing a reflected XSS (GHSA-gh95-xx4q-qch8) that could reach the dashboard's loopback-gated /api surface (#1066)
- fix(mcp-server): Riva shadow-mode now forces read-only and strips disclosure credentials on the MCP dispatch path too, closing a gap where a shadow run through the MCP server got full write tools and live secrets (#1067)
- fix(feature): the Built-by-Aeon PR watermark is now scoped to dev-loop self-test runs, so real external contributions ship without AI-attribution branding (#1069)
- miroshark-matchday adds a vertical 9:16 render path to the local video step, delivering short-form (Shorts/TikTok/Reels) cuts alongside the 16:9 batch without blocking or re-running anything paid (#1062)
- fix(ecosystem): refreshed the HivemindOS partner avatar and dropped the dead Spoon row, clearing both broken logos on aeon.fun/ecosystem (#1071)
- Maintenance: always-on CI Gate for branch protection, plus a vuln-scanner prose rephrase to clear the eyebrow RCE gate (#1065, #1068)
10 PRs included
- #1072feat(sc-audit): add smart-contract audit skill (@aaronjmars)
- #1070feat(dev-loop): add one verified repair pass (@Svector-anu)
- #1073feat(vuln-scanner): harden disclosure routing (A5.0 SECURITY.md-first, A5b.0 PVR preflight) (@aaronjmars)
- #1066fix(dashboard): escape MCP OAuth callback HTML to prevent reflected XSS (@Svector-anu)
- #1067fix(mcp-server): close Riva shadow-mode isolation gap on the MCP dispatch path (@Svector-anu)
- #1069fix(feature): scope Aeon watermark to dev-loop test runs only (@Svector-anu)
- #1062feat(miroshark-matchday): vertical 9:16 render path in the local video step (@NurstarK)
- #1071fix(ecosystem): refresh HivemindOS avatar, drop dead Spoon row (@aaronjmars)
- #1065ci: add always-on CI Gate for branch protection (@aaronjmars)
- #1068fix(vuln-scanner): rephrase curl-pipe-to-shell mentions to clear the eyebrow RCE gate (@Svector-anu)
Sync-safe eyebrow and changelog fixes
aeon-update and the changelog skill now run the same generator and formatter their CI gates run, so a docs sync that only edits prose no longer lands downstream instances CI-red.
- fix(aeon-update): the eyebrow fail-safe now defers a clean update/merge of an existing skill whose lock entry carries findings - a line-shift above a pinned finding was tripping failOnCapabilityExpansion and turning ci-skill-integrity red on prose-only syncs (#1061)
- fix(changelog): the changelog skill runs the website formatter on its generated output, so format:check stays green on the sync PR (#1061)
1 PR included
- #1061fix: close two aeon-update/changelog gaps that land downstream sync PRs CI-red (@aaronjmars)
Riva scan kernel and self-healing loop fixes
vuln-scanner gains an opt-in Riva research kernel, competitor-monitor can now diff table rows on watched pages, and a new miroshark-matchday skill runs weekly bulk football simulations. The rest of the window tightens the self-healing loop itself - bounded trufflehog scans, accurate no-action telemetry, readable read-only skill logs, and a CI fix so the workflow expression-limit guard fires on workflow-only edits too.
- vuln-scanner gains an opt-in Riva research kernel - a focused threat-model/invariant scan selectable alongside the legacy scanner, with a safe shadow mode for side-by-side comparison before switching over (#1039)
- New miroshark-matchday skill: every Friday runs one paid MiroShark simulation per major football league (Premier League, Serie A, La Liga) and delivers the share links, reports, and videos (#1056)
- competitor-monitor can now opt in to diffing table rows on a watched page - useful for a CVE/incident/customer table the scraper previously dropped on every deploy (#1043)
- fix(aeon): a read-only skill's structured log now survives the run instead of being replaced by a content-free two-line stub, restoring its dedup/diff history for the next run (#1051)
- fix(aeon): a read-only skill's failure log now gets committed too, not just its success log (#1052)
- fix(harness): memory/ and output/ stay writable inside the read-only sandbox again, unblocking read-only skills that need to log or capture chain output there (#1042)
- fix(chain): a dev-loop run with no verified feature PR now reports no-action instead of success, so skill-health can no longer mistake a no-op for a shipped, reviewed change (#1053)
- fix(vuln-scanner): the trufflehog filesystem scan is now time-bounded and can no longer run in the background, closing the same silent-timeout gap already fixed for the git-history pass (#1054)
- fix(vuln): the github-trending notify feed stays machine-parseable even when a run sends a header-only summary, so vuln-scanner can always find a scan target (#1055)
- fix(tests): unbreaks main CI - the vuln-scanner status test now tolerates the timeout-aware trufflehog block added the same day (#1057)
- fix(ci): the workflow expression-limit regression guard now also fires on workflow-only edits to aeon.yml, not just script/bin changes (#1058)
- Maintenance: aeon-docs synced for #1034-#1040 (#1041), plus 6 dependency bumps - sharp x2, js-yaml x3, hono (#1044, #1046, #1047, #1048, #1049, #1050)
18 PRs included
- #1039feat(vuln-scanner): add Riva research kernel (@Svector-anu)
- #1041docs: sync PRs #1034-#1040 to aeon docs (@aaronjmars)
- #1042fix(harness): keep memory/ and output/ writable in read-only sandbox (@aaronjmars)
- #1043feat(competitor-monitor): opt-in table-row diffing for list pages (@aaronjmars)
- #1044chore(deps): bump hono from 4.13.0 to 4.13.7 in /apps/mcp-server (@dependabot[bot])
- #1046chore(deps-dev): bump js-yaml from 4.3.1 to 4.3.2 in /apps/webhook (@dependabot[bot])
- #1047chore(deps): bump js-yaml from 4.3.1 to 4.3.2 in /skills/remotion/project in the npm_and_yarn group across 1 directory (@dependabot[bot])
- #1048chore(deps): bump sharp from 0.35.3 to 0.35.4 in /apps/dashboard (@dependabot[bot])
- #1049chore(deps-dev): bump js-yaml from 4.3.1 to 4.3.2 in /apps/dashboard (@dependabot[bot])
- #1050chore(deps): override sharp to 0.35.4 in apps/webhook (@aaronjmars)
- #1051fix(aeon): read-only guard stub loses every skill's memory/logs baseline (@Svector-anu)
- #1052fix(aeon): commit a read-only skill's failure log, not just its success (@aaronjmars)
- #1053fix(chain): distinguish no-action telemetry (@Svector-anu)
- #1054fix(vuln-scanner): bound the trufflehog filesystem scan, forbid backgrounding scanners (@Svector-anu)
- #1055fix(vuln): keep github-trending feed machine-parseable for the scanner (@aaronjmars)
- #1056Add miroshark-matchday skill: weekly bulk football matchday sims + video handoff (@NurstarK)
- #1057fix(tests): make vuln-scanner status test tolerant of the timeout-aware block (@aaronjmars)
- #1058fix(ci): add .github/workflows/aeon.yml to ci-tests trigger paths (@aaronjmars)
Mandatory hook fee and two crypto skills
deploy-uni-hook now bakes the mandatory 10 bps AeonFee into every hook it deploys and, via the new submit-hook skill, publishes a live mainnet hook to the public univ4-hooks registry; a new compute-resell skill resells idle provider compute on the Surplus market. Two CI-reliability fixes stop aeon-update sync PRs and egress-audit artifact uploads from going falsely red. The first-party catalog is now 80 skills.
- feat(deploy-uni-hook): every hook the skill deploys now inherits the audited AeonFee base, enforcing the mandatory 10 bps protocol fee to AEON_FEE_RECIPIENT - hooks shipped through the live skill were previously fee-free (#1035)
- New compute-resell skill (Crypto & Markets, disabled by default): resells free or low-cost provider compute across Bankr, AWS Bedrock, and Google Vertex on the Surplus Intelligence market, reactively pricing each offer within cost floor/cap guardrails; a provider turns on only when its wallet and credential secrets are both set (#1036)
- New submit-hook skill (Crypto & Markets): ports the univ4-hooks marketplace publish path to canon, so deploy-uni-hook step 11 lists a live mainnet hook on the public aeonfun/univ4-hooks registry (opens a PR, files an issue when there is no push access) (#1040)
- Backfilled: cortx-reliability (Crypto & Markets) checks whether an x402 payment endpoint is reliably delivering value before you spend USDC on it - paid delivery rate, active incidents, latency, and a proceed/warn/block call. It merged in a prior window but landed below the sync watermark and was never documented; now reconciled into the catalog and icon set (#954)
- fix(aeon-update): the in-run eyebrowlock rescan now derives the eyebrow version from ci-skill-integrity.yml instead of a hardcoded v0.4.1, so sync PRs stop failing the verify check once CI moves to v0.4.2 (#1037)
- fix(egress): under EGRESS_AUDIT the artifact-upload FinalizeArtifact call no longer routes through iron-proxy, ending the 403 that reddened otherwise-green runs (#1038)
- Maintenance: the changelog skill now formats the website changelog file after editing so format:check passes (#1034)
7 PRs included
- #954feat: add cortx-reliability skill - x402 endpoint reliability check (@danbuildss)
- #1034docs(changelog): format website file after edit so format:check passes (@aaronjmars)
- #1035feat(deploy-uni-hook): enforce the mandatory 10 bps AeonFee on every deployed hook (@aaronjmars)
- #1036feat(skills): add compute-resell - multi-provider compute reselling on Surplus (@aaronjmars)
- #1037fix(aeon-update): derive eyebrow version from CI so sync PRs stop going red (@aaronjmars)
- #1038fix(egress): stop iron-proxy MITM from redding artifact uploads (@aaronjmars)
- #1040Port submit-hook marketplace publish to canon (@aaronjmars)
Verification hardening across the self-healing loop
This batch tightens the loop that grades and repairs itself: chain-runner, skill-health, and fleet-scorecard stop letting rejected dispatches and non-skill runs corrupt reliability scores, notify reports real per-channel delivery status instead of always claiming success, and vuln-scanner gates high-severity findings behind deterministic proof before publishing. The dev-loop chain gains a verified receipt tying a review back to the exact commit it checked, deploy-uni-hook gets three correctness fixes, and send-email now checks for bounces before it sends again.
- feat(vuln-scanner): a high or critical finding now needs deterministic verification - a foundry-fork run pinned to an observed chain/block, or a command-mode reproduction - before it can publish; unverified findings downgrade to needs-verification (#1008)
- fix(vuln-scanner): trufflehog's git-history scan is now time-bounded, so a 200-commit/369MB repo can no longer eat a whole 30-minute run budget and report phantom success on a placeholder output (#1030)
- feat(dev-loop): the feature-then-review chain now writes a sha-bound review receipt and verifies it back from GitHub state, so a green child run can't omit the verdict, target, or finding counts the next step needs (#1027)
- feat(chains): dev-loop verifies exactly one new open PR from the authenticated actor after a feature run and binds it to that run with a dispatch-id marker before handing it to pr-review (#1009)
- fix(chain-runner): a target-validation rejection before any skill runs no longer counts as a skill failure, so a misconfigured dispatch can't drag down a chain's lifetime reliability score (#1017)
- fix(skill-health): a recovered skill's health issue can now close as soon as recent runs are clean, instead of waiting on the lifetime success rate to age the incident out (#1018)
- fix(fleet-scorecard): the least-reliable-skills table now only counts real skill dispatches, so CI runs and chain wrapper jobs stop leaking into another skill's failure rate (#1019)
- fix(notify): a send that reaches zero configured channels - or where every channel's real API error was being swallowed - now fails instead of silently reporting delivered (#1020)
- feat: send-email runs a delivery preflight over prior sends (Resend's GET /emails/{id}) before sending again, since a 200 from POST /emails only means accepted, not delivered (#1033)
- fix: the workflow's secret-validation step now recognizes RESEND_API_KEY as bound, clearing a false Secrets not set warning on every email-skill run even when the send succeeded (#1032)
- fix(scheduler): per-skill model overrides now resolve for block-style aeon.yml entries too, not just single-line ones, so a skill configured with model: "claude-opus-4-8" inside a block actually runs on that model (#1024)
- fix(dry-run): local skill dry runs can select Claude or Codex plus an explicit model id, closing a portability gap surfaced by validating a skill built in a supervised Codex session (#1029)
- deploy-uni-hook: three correctness fixes - balance/skew gates now anchor to the pool's own price instead of an implicit 1.0 (#1031), the fork-simulation gate works for every hook kind after a CREATE2/gas-limit fix (#1023), and a scaffold comment now points at the right revert-matching helper (#1022)
- fix(workflow): the skill-runner script is kept below GitHub Actions' 21,000-character expression limit with a regression guard at 20,500, after a real fork hit a hard parse failure on every dispatch (#1026)
- llm-gateway(glm): reasoning effort now pins to high by default (var-overridable) on the GLM 5.3 series, which is forced-thinking and otherwise leaves depth model-decided (#999)
- Maintenance: eyebrow skill-integrity gate bumped to v0.4.2 (#1002), eslint/globals majors held so grouped Dependabot PRs stay green (#1012), MythosForge delisted from the ecosystem page (#1010), the changelog skill's own em/en-dash scrub bug fixed (#1000), optional MCP-server runtime-hardening docs added (#1001), and 8 dependency bumps (types/node, tsx, wrangler, fast-uri x2, qs, 5 dashboard deps, upload-artifact)
30 PRs included
- #999llm-gateway(glm): pin reasoning effort to high (var-overridable) (@aaronjmars)
- #1000fix(changelog-skill): scrub em/en dashes from generated output (@aaronjmars)
- #1001docs: optional runtime hardening for the Aeon MCP server (@alexverify)
- #1002Bump eyebrow skill-integrity gate to v0.4.2 (@alexverify)
- #1003chore(deps-dev): bump @types/node from 26.1.2 to 26.4.0 in /apps/mcp-server in the mcp-server group (@dependabot[bot])
- #1006chore(deps): bump tsx from 4.23.1 to 4.23.12 in /apps/cli in the cli group (@dependabot[bot])
- #1008feat(vuln-scanner): verify high severity claims (@Svector-anu)
- #1009feat(chains): verify dev-loop pr handoff (@Svector-anu)
- #1010docs: remove MythosForge from ecosystem (@aaronjmars)
- #1011chore(actions): bump actions/upload-artifact from 4.6.2 to 7.0.1 in the github-actions group across 1 directory (@dependabot[bot])
- #1012chore(deps): hold eslint and globals majors so grouped Dependabot PRs stay green (@aaronjmars)
- #1013chore(deps-dev): bump wrangler from 4.115.0 to 4.127.1 in /apps/webhook in the webhook group (@dependabot[bot])
- #1014chore(deps): bump the dashboard group in /apps/dashboard with 5 updates (@dependabot[bot])
- #1015chore(deps): bump fast-uri from 3.1.5 to 3.1.7 in /skills/remotion/project in the npm_and_yarn group across 1 directory (@dependabot[bot])
- #1016chore(deps): bump fast-uri from 3.1.5 to 3.1.7 in /apps/mcp-server (@dependabot[bot])
- #1017fix(chain-runner): stop a rejected dispatch from poisoning the reliability signal (@Svector-anu)
- #1018fix(skill-health): detect critical-incident recovery without waiting on lifetime success_rate (@Svector-anu)
- #1019fix(fleet-scorecard): stop non-skill runs from leaking into the per-skill reliability table (@Svector-anu)
- #1020fix(notify): report per-channel delivery status and fail on total delivery failure (@Svector-anu)
- #1021chore(deps): bump qs from 6.15.3 to 6.16.0 in /apps/mcp-server (@dependabot[bot])
- #1022fix(deploy-uni-hook): scaffold comment points at _expectSwapRevert not vm.expectRevert (@aaronjmars)
- #1023fix(deploy-uni-hook): DeployHook.s.sol simulates cleanly for every hook kind (@aaronjmars)
- #1024fix(scheduler): read per-skill model: from block-style aeon.yml entries (@aaronjmars)
- #1026fix(workflow): preserve expression headroom (@Svector-anu)
- #1027feat(dev-loop): add verified review receipts (@Svector-anu)
- #1029fix(dry-run): support explicit claude and codex model selection (@Svector-anu)
- #1030fix(vuln-scanner): bound trufflehog git-history scan, no more phantom-success runs (@Svector-anu)
- #1031fix(deploy-uni-hook): anchor price/balance/skew gates to the pool's own price (@aaronjmars)
- #1032fix(notify): bind RESEND_API_KEY in validate-skill-secrets step (clear false warning) (@aaronjmars)
- #1033feat: delivery preflight - detect bounces on prior sends before send-email (@aaronjmars)
GLM gateway move + fail-closed adapters
GLM stops being a run-harness - the adapter was Claude Code pointed at Z.AI - and becomes a native Claude AI Gateway entry with per-tier model mapping, taking the harness count back to nine. A cluster of correctness fixes makes broken runs fail loudly instead of reporting green: unparseable adapter output, mis-correlated chain dispatches, Hermes runs that wrap HTTP 400s in success envelopes, and repair PRs that marked issues resolved before they merged.
- GLM moves out of the harness list and into the LLM gateway registry - adapters/glm.sh was Claude Code with ANTHROPIC_BASE_URL pointed at api.z.ai - so GLM_API_KEY (alias ZAI_API_KEY) runs native in the auto cascade and the harness count drops back to nine (#990)
- Tiered GLM model mapping - GLM_MODEL_OPUS/GLM_MODEL_SONNET/GLM_MODEL_HAIKU, mirroring the OpenRouter arm - so the per-skill model tiers in aeon.yml pick a real model on the GLM gateway instead of one pinned id (#998)
- New community skill cortx-reliability (danbuildss): check an x402 endpoint's paid delivery rate, uptime, latency, and active incidents before an agent spends USDC on it (#954)
- Security: the dashboard API requires the Origin/Referer host to exactly match the request Host, so a page on http://localhost:5555 can no longer no-CORS POST at http://127.0.0.1:5555 to reach private APIs (#986)
- Fixed: unparseable adapter output fails the run instead of being wrapped into a schema-valid success envelope that published the raw blob as the skill result with zero token usage recorded (#987)
- Fixed: chain-dispatched runs get a unique dispatch ID, so two concurrent chains running the same skill can no longer wait on - and consume - each other's output (#988)
- Fixed: skill-repair leaves an issue open until its repair PR actually merges, instead of recording resolved at PR-creation time while the failure is still live (#997)
- Fixed: the Hermes adapter errors when the CLI prints an HTTP 4xx/5xx but exits zero - a fork run looked green while its whole output was 'HTTP 400: modelCode: does not exist' (#984)
- Fixed: transient xAI x_search failures - timeout, 5xx, empty 200 - retry once before falling back to a lower-quality source, instead of dying permanently on the first blip (#989)
- Fixed: Cursor headless runs always pass --trust, so read-only skills work in Cursor's fresh temporary-home CI workspaces, and fx is now a valid workflow_dispatch harness choice (#983, #982)
- Each skill's Telegram notifications now quote that skill's previous message (reply_to_message_id, on by default), grouping runs into threads without forum topics; documented in telegram-commands and CONFIGURATION (#995, #996)
- Dashboard: a Connect chip copies this machine's gh auth token into the GH_GLOBAL Actions secret - no manual PAT paste, no refresh job - and harness picker labels rename to product names (Claude, Grok, Mistral, Cursor, Hermes) (#993, #994)
- deploy-uni-hook learns what the fleet's audits already taught: Labs auto-route vs allowlist routing classes, exact-output fee handling, and custody-correct fee withdrawal instead of take()-to-self (#991, #992)
- Maintenance: docs synced for #957-#979 (#980), the harness banner re-rendered with ten engines (#981), and a founder credit linking aaronjmars.com added to the README footer (#985)
20 PRs included
- #954feat: add cortx-reliability skill - x402 endpoint reliability check (@danbuildss)
- #980docs: sync PRs #957-#979 to aeon docs (@aaronjmars)
- #981docs: re-render ten-engine harness banner (@aaronjmars)
- #982allow fx workflow dispatches (@Svector-anu)
- #983trust cursor workspaces in headless runs (@Svector-anu)
- #984fail hermes runs on api errors (@Svector-anu)
- #985Add founder credit + link to aaronjmars.com (@aaronjmars)
- #986fix(dashboard): require exact origin host match (@keyurbodar)
- #987fix(envelope): fail on unparseable adapter output (@keyurbodar)
- #988fix(chains): correlate dispatched skill runs uniquely (@keyurbodar)
- #989retry transient xai search failures (@Svector-anu)
- #990feat: move GLM from harness to Claude AI Gateway (@aaronjmars)
- #991teach deploy-uni-hook Labs routing classes (@aaronjmars)
- #992teach deploy-uni-hook the fleet audit rules (@aaronjmars)
- #993feat(dashboard): Connect copies gh token into GH_GLOBAL (@aaronjmars)
- #994style(dashboard): shorten harness picker labels (@aaronjmars)
- #995feat(notify): reply Telegram to previous skill run (@aaronjmars)
- #996docs: Telegram reply-to-previous (@aaronjmars)
- #997don't mark an issue resolved when the repair PR is only opened (@Svector-anu)
- #998Add tiered GLM model mapping (GLM_MODEL_SONNET/OPUS/HAIKU) (@aaronjmars)
Ten harnesses + rightstack advisor
Three more coding-agent CLIs - Cursor, Hermes, and GLM - join run-harness, taking Aeon to ten harnesses, and a new read-only rightstack skill brings the catalog to 77. The window also adds machine-readable proof that vuln scanners actually ran, a read-only harness-quality comparison, three community skill packs, and non-blocking concurrent skill calls in the local MCP server.
- Three new run-harnesses - Cursor (agent -p, CURSOR_API_KEY), Hermes via the Nous Portal (HERMES_AUTH), and the GLM Coding Plan on Z.AI's Anthropic endpoint (GLM_API_KEY/ZAI_API_KEY) - join the run-harness contract, taking Aeon to ten coding-agent CLIs, with permanent dashboard Access Keys rows for all three (#967, #975)
- New rightstack skill (Dev & Code): a read-only Web3 stack advisor (recommend/workflow/compare/explain/migrate) that maps a build goal to a coherent stack, manual-only and unable to install, deploy, or transact - catalog is now 77 skills (#961)
- Read-only harness comparison (skill-health-routing.mjs): groups harness-tagged skill-health scores with per-run token/cache usage so operators can weigh quality against cost before switching harness in aeon.yml (#969)
- Machine-readable vuln-scanner execution evidence: staged scanners (Semgrep, TruffleHog, OSV-Scanner, Slither, cargo-fuzz) are wrapped with an invocation logger and a post-run step prints proof they actually ran (#968)
- Three community skill packs listed - CultOS exact-commit PR review (#974), the Farcaster pack with a Neynar-backed cast skill (#977), and the Spoolis Outcome Gate (#978)
- Operator-console plugin prepped for the OpenAI, Kiro Powers, and MiniMax marketplaces - host-neutral wording and Codex-runnable scripts, additive manifests only (#959, #964, #965)
- Docs: stale harness/MCP counts corrected - llms.txt moved to seven CLIs (the harness work then takes it to ten) and a missing Higgsfield row added to the MCP OAuth catalog (#960)
- Fixed: the local MCP server runs skills with an async spawn behind a single-flight queue, so one tools/call no longer freezes the whole stdio server for up to 10 minutes (#973)
- Fixed: Telegram notification chunks are bounded after Markdown renders to HTML, so a link-heavy skill can no longer emit an unsendable oversized payload (#970)
- Fixed: bin/add-skill records the real source commit in skills.lock instead of unknown (#972)
- Fixed: macOS portability - the cron test detects GNU vs BSD date (#957) and the issue-backed cron-state/health helpers survive Bash 3.2 set -u in default-repo mode (#971); Linux Actions scheduling was never affected
- Ecosystem: added Eyebrow (#976), removed Amper (#979)
- Maintenance: first repo lint gates (eslint + shellcheck, both green) with two false positives suppressed (#962, #963), plus a 400x400 Cline marketplace logo (#966)
22 PRs included
- #957fix macos cron date portability (@Svector-anu)
- #959chore(plugin): prep operator-console plugin for OpenAI submission (@aaronjmars)
- #960docs: fix stale harness/MCP catalog counts (+higgsfield) (@aaronjmars)
- #961add rightstack web3 advisor (@Svector-anu)
- #962chore(ci): add eslint + shellcheck lint gates (@aaronjmars)
- #963chore: silence two shellcheck false positives (not bugs) (@aaronjmars)
- #964feat(plugin): Agent Plugins plugin.json + privacy/support for Kiro Powers (@aaronjmars)
- #965Add MiniMax plugin manifest for the aeon operator console (@aaronjmars)
- #966Add 400x400 MCP server logo for Cline marketplace (@aaronjmars)
- #967add cursor hermes and glm harnesses (@Svector-anu)
- #968add machine-readable vuln scanner execution evidence (@Svector-anu)
- #969add recommend-only harness comparison (@Svector-anu)
- #970fix: bound rendered telegram chunks (@Svector-anu)
- #971fix: support default repo in macos issue stores (@Svector-anu)
- #972fix add-skill commit provenance (@Svector-anu)
- #973fix(mcp-server): run skills async with a single-flight queue (@aaronjmars)
- #974feat: list CultOS Aeon skill pack (@thesmithdao)
- #975fix dashboard auth rows for new harnesses (@Svector-anu)
- #976docs: add eyebrow to ecosystem (@alexverify)
- #977docs: list Farcaster Pack in the community skill-pack registry (@amritmirch)
- #978Add Spoolis Outcome Gate skill pack (@jsfranklin221)
- #979docs: remove Amper from ecosystem list (@aaronjmars)
Notify dispatcher + seven-harness cleanup
The ./notify path moves behind a credential-owning post-run dispatcher, so Telegram/Discord/Slack/Buzz/email tokens no longer sit in every skill's run env - a skill just writes a structured payload to a queue and the post-run step sends it. The fx harness added the prior window is now normalized as Aeon's seventh across the docs and the local MCP server, and the post-run scorer now grades the notify card a skill actually sent instead of its terse closing recap.
- ./notify now writes one structured payload to a queue and a new post-run notify-deliver.sh is the only place a channel token is consumed - Telegram/Discord/Slack/Buzz/email tokens are dropped from every skill's run env (#912 Phase 2) (#955)
- Security: six dead channel credentials with no in-run consumer (Discord/Slack bot-token + channel-id, and the Beamr gateway/payer vars) removed from the skill run env and the ALL_SECRETS allowlist; the webhook URLs notify actually uses are kept (#912 item 2) (#951)
- Harness inventory normalized to seven with fx as the 7th adapter across docs/harnesses.md, the harness-adapter README, and the harness banner art (#952, #950)
- Fixed: the local MCP server now dispatches the fx harness instead of silently rewriting fx skills to Claude (#953)
- Fixed: the post-run scorer grades the sent notify card (the captured chain artifact) rather than the harness .result recap, so verifiably-sent figures stop being capped as unverifiable (#949)
- Fixed: the dashboard captures Kimi's full credentials directory plus config.toml when building KIMI_AUTH, so a non-mainland kimi.ai login no longer lands authenticated but with no model configured (#956)
- Maintenance: in-repo docs synced for #926-#947 (#948)
8 PRs included
- #949fix(scorer): grade the sent notify card, not the harness .result summary (@aaronjmars)
- #950docs: seven-engine harness banner (fx) (@aaronjmars)
- #951fix(secrets): drop dead channel creds from the in-run skill env (#912 item 2) (@aaronjmars)
- #952docs: normalize harness count to seven, drop fx singling-out (@aaronjmars)
- #953fix(mcp-server): dispatch fx harness (@aaronjmars)
- #955feat(notify): post-run delivery dispatcher, drop channel tokens from skill env (#912 Phase 2) (@aaronjmars)
- #956fix(dashboard): capture kimi auth config correctly (@Svector-anu)
- #948docs: sync PRs #926-#947 to aeon docs (@aaronjmars)
skill-article launcher + egress audit
A new skill-article skill turns any skill in an instance into a publish-ready launch article mined from its real run history, and an opt-in egress-audit proxy captures a run's outbound network calls behind an audit boundary. The fx harness added the prior window now shows up in the dashboard picker, and concurrent aeon.yml edits no longer race.
- New skill-article skill (Basics): turn any skill into a publish-ready launch article - proof-stat headline, one contrarian thesis, war stories mined from real memory/logs run history, and the full SKILL.md embedded verbatim; optional Higgsfield title banner (#945)
- Opt-in egress-audit hardening (iron-proxy): a run's outbound network calls are captured and reported behind an audit proxy, off by default (#947)
- Fixed: fx now appears in the dashboard harness picker, so the seventh harness is actually selectable (#943)
- Fixed: the dashboard locks aeon.yml read-modify-write, so concurrent config edits no longer race and clobber each other (#944)
- Ecosystem: added AgentOS (#946)
5 PRs included
- #943fix(dashboard): fx never showed up in the harness picker (@Svector-anu)
- #944fix(dashboard): lock aeon.yml read-modify-write to stop config races (@Svector-anu)
- #945feat(skills): add skill-article - launch article for any skill, receipts-first (@NurstarK)
- #946docs(ecosystem): add AgentOS (@andreapn)
- #947Egress audit hardening (iron-proxy) - opt-in (@aaronjmars)
Vercel fx harness + secretcurl leak fix
aeon adds fx - Vercel's native Zig coding-agent CLI - as a seventh run-harness, alongside a security fix that kept curl-substituted secrets out of the process argv where ps/proc could see them. The same window closes three dispatch-correctness bugs (duplicate Telegram redelivery, racing GitHub-issue creates, and a concurrency-group collision across different skill targets) plus a Windows Connect/OAuth fix batch.
- fx - Vercel's native Zig coding-agent CLI - joins Claude/Grok/Codex/Pi/Vibe/Kimi as a 7th run-harness, verified against a locally-built binary (#941)
- Security: secretcurl no longer leaks its substituted secret into curl's own process argv, where any other process could read it via ps or /proc (#935)
- Fixed: the Telegram webhook now dedupes redelivered updates by update_id, so a slow response no longer re-dispatches the same update (#937)
- Fixed: racing state_store/health_issue 'ensure' calls no longer create duplicate GitHub issues for the same title (#936)
- Fixed: the skill-runner concurrency group is now scoped by target too, so dispatching the same skill at two different vars no longer collides (#934)
- Fixed: Bash(cd:*) is granted again, restoring the documented one-cd-per-call workaround for the sandbox's compound-command denial (#933)
- Fixed: failed-dispatch diagnostics are no longer truncated to the front of the output, so the actual error fields survive logging (#932)
- Fixed: Windows Connect OAuth truncation, a setup-token timeout, config line-folding, Foundry install, and mainnet-flag masking (#930)
- Dashboard auto-allowlists MCP secret names into the run workflows, closing the gap where a connected key-based MCP couldn't be seen by headless runs (#931)
- memory-flush's mechanical bookkeeping moved out of the LLM into a deterministic, watermark-tracked script (#938)
- Maintenance: in-repo docs synced for #890-#925, a README Codex-plugin note, the HOL plugin-scanner workflow added then dropped same-day, docs asset refresh/cleanup, and state-store test hardening (#926, #927, #928, #929, #939, #940, #942)
17 PRs included
- #926docs: sync PRs #890-#925 to aeon docs (@aaronjmars)
- #927docs(readme): note the operator console installs as a Codex plugin too (@aaronjmars)
- #928ci: scan the operator-console plugin with the HOL AI Plugin Scanner (@aaronjmars)
- #929chore: drop the HOL plugin-scanner workflow + config (@aaronjmars)
- #930fix: Windows Connect OAuth, setup-token timeout, config line-folding, Foundry install, mainnet flag masking (@aaronjmars)
- #931feat(dashboard): auto-allowlist MCP secret names into the run workflows (@aaronjmars)
- #932fix(harness): stop truncating diagnostic output on every failed dispatch (@Svector-anu)
- #933fix(skill-mode): grant Bash(cd:*) - silently denying entire compound commands (@Svector-anu)
- #934fix(aeon): scope the skill-runner concurrency group by target too (@Svector-anu)
- #935fix(secretcurl): keep substituted secrets out of curl's own argv (@Svector-anu)
- #936fix(state_store,health_issue): converge racing issue-store ensures (@Svector-anu)
- #937fix(webhook): dedupe Telegram updates by update_id before dispatch (@Svector-anu)
- #938improve(memory-flush): deterministic prep + structured watermark (@aaronjmars)
- #939Remove unused docs/assets images (@aaronjmars)
- #940Refresh providers + free-aeon docs images (@aaronjmars)
- #941feat(harness): add fx (vercel) as a 7th harness (@Svector-anu)
- #942test(state-store,health-issue): skip before-side unless base ref is truly pre-fix (@aaronjmars)
Self-governance controls and Codex reach
Aeon gains the self-governance layer from the chassis porting plan - chain steps route on the Haiku quality score, reactive failure handlers know which skill tripped them, self-authored skills pass a dry-run gate before auto-merge, and every privileged action is audit-logged. The operator skill also reaches Codex, the vuln-scanner adds an agentic logic audit and a deliverability gate, and the GitHub token model is corrected to a single classic PAT.
- Chain steps can now branch on the Haiku quality score Aeon already computes - `when: "score > 3"` on a chain step routes good output to a polish pass and weak output to a rewrite, turning the 1-5 grade from a chart into a control-flow edge (#911)
- Reactive failure handlers now learn which skill tripped them (passed as the handler's `var`), and reactive is documented as the blessed per-skill failure edge (#910)
- `validate-config` now fails CI on a dangling reactive-trigger reference or a mistyped `when:` condition, closing a silent no-op path (#907)
- Fixed reactive `success_rate` conditions, which the scheduler silently dropped; single-condition evaluation moved to a tested `reactive_when.sh` covering all three documented conditions (#906)
- A dry-run gate runs self-authored skills (`create-skill`, `self-improve`) against synthetic secrets and structural pass checks before their auto-merging PR opens (#914)
- A structured, append-only audit log records every privileged action (notify, secretcurl) with secret names only - values are scrubbed in raw, base64, and url-encoded forms (#908)
- The `/aeon` operator skill now installs on Codex too, and the repo ships a root `llms.txt` doc map any coding agent can fetch first to orient (#919)
- A generated `harness-adapter/harnesses.json` capability manifest makes the six adapters' facts (token cost, read-only enforcement, MCP flavor, auth) queryable in one CI-validated file (#916)
- `aeon-update` now 3-way merges an operator-customized file that upstream also changed (a hand-narrowed `aeon.yml` merges cleanly) instead of dropping it to a whole-file CONFLICT (#903)
- `vuln-scanner` gained an A3.6 agentic logic audit - source-to-sink reasoning over a repo's real entrypoints for the authorization and business-logic bugs the syntactic and fuzz passes miss (#894)
- `vuln-scanner` now confirms a maintainer domain can actually receive mail (DoH MX/A check) before spending its one daily autonomous-disclosure send slot (#895)
- Ported vuln correctness fixes from the aeon-vuln instance: flat-array scan-history reads and multi-prefix security-PR matching in `vuln-tracker`, osv-scanner v2 in `vuln-scanner` (#890)
- The GitHub token model is corrected to a single classic PAT (`repo` + `workflow`); `GH_READ_PAT` / `GH_SECRETS_PAT` fold into `GH_GLOBAL`, and `bd-radar` no longer false-alarms on the unset read token (#905, #909)
- The post-run quality scorer now grades the full output (head 10KB + tail 4KB, not just the first 3000 bytes), aligns to STRATEGY.md, and flags fabricated IDs and figures (#921)
- The README leads with an agent-onboarding callout (read aeon.fun/skills/aeon.md and follow it) and a 'six engines, one socket' harness section; ~2.6M of oversized banner assets trimmed (#922)
- Security hardening: all GitHub Actions SHA-pinned to immutable refs, codex install scripts blocked, the eyebrow download SHA256-pinned, and the messages.yml secret dump narrowed to a named allowlist (#904, #917, #918)
- Maintenance: model pins refreshed to the current generation, the skill-run timeout raised to 30m, jittered cron-state backoff, and assorted ops guards and CI fixes (#891, #892, #893, #896, #897, #898, #899, #900, #901, #902, #915, #920, #923, #924, #925)
34 PRs included
- #890fix(vuln-tracker,vuln-scanner): port scan-history, PR-match, and osv-scanner robustness from aeon-vuln (@aaronjmars)
- #891chore: refresh hardcoded model pins to current generation (@aaronjmars)
- #892chore: drop fable-5 from venice passthrough, refresh fork-fleet examples (@aaronjmars)
- #893chore: switch Opus pins from opus-5 to opus-4-8 (@aaronjmars)
- #894feat(vuln-scanner): add A3.6 agentic logic audit alongside the fuzz pass (@aaronjmars)
- #895feat(vuln-scanner): DoH MX/A deliverability gate before autonomous disclosure email (@aaronjmars)
- #896fix: unbreak main CI (stale harness-resolution test + eyebrow lockfile drift) (@aaronjmars)
- #897docs(resolve-harness): remind to sync the test + eyebrow lock on a model-pin change (@aaronjmars)
- #898fix(aeon.yml): rm ./secretcurl before commit like ./notify (@aaronjmars)
- #899fix(skill_mode): grant ./scripts/skill-runs in the base tool tier (@aaronjmars)
- #900chore(harness): 30m skill-run timeout (harness 1800s, job 50m) (@aaronjmars)
- #901fix(cron-state): jittered backoff + 10 retries for commit-race (@aaronjmars)
- #902fix(notify): add -h/--help guard so a usage probe never broadcasts (@aaronjmars)
- #903feat(aeon-update): 3-way merge OWNED conflicts + eyebrow-lock fail-safe (@aaronjmars)
- #904fix(security): narrow messages.yml ALL_SECRETS to named allowlist (@aaronjmars)
- #905docs: single classic PAT (repo+workflow) for GH_GLOBAL (@aaronjmars)
- #906fix(scheduler): make reactive success_rate condition actually fire (@aaronjmars)
- #907feat(validate-config): validate reactive-trigger references and conditions (@aaronjmars)
- #908feat(audit): structured audit log of privileged actions (@aaronjmars)
- #909fix(bd-radar,fleet-control): GH_GLOBAL fallback for private reads + silence false unset-GH_READ_PAT alarms (@aaronjmars)
- #910feat(scheduler): reactive handler learns which skill tripped it (item 3) (@aaronjmars)
- #911feat(chains): verdict routing on Haiku scores (when: on chain steps) (@aaronjmars)
- #914feat(dry-run): gate self-authored skills before auto-merge (@aaronjmars)
- #915fix(workflow): bound apt installs so a dpkg-lock stall can't eat the job wall (@aaronjmars)
- #916feat(harness-adapter): generated capability manifest (harnesses.json) (@aaronjmars)
- #917security: SHA-pin all GitHub Actions to immutable commit refs (@aaronjmars)
- #918security: block codex install scripts + SHA256-pin eyebrow download (@aaronjmars)
- #919feat: Codex plugin + repo llms.txt (@aaronjmars)
- #920fix(dashboard): keep feed card content inside its box (@aaronjmars)
- #921fix(scorer): grade full output, align to strategy, flag fabrication (@aaronjmars)
- #922docs(readme): agent-onboarding callout + harness section + asset optimization (@aaronjmars)
- #923docs(readme): drop harness list from agent callout (@aaronjmars)
- #924docs(readme): rename harness section heading (@aaronjmars)
- #925docs(readme): move harness section under skill packs (@aaronjmars)
Operator skill as a plugin, OpenRouter attribution
The /aeon operator skill is now installable as a Claude Code plugin from any folder, OpenRouter gateway traffic is attributed to Aeon on the public app leaderboard, and the pi + OpenRouter onboarding path is fixed end to end. aeon-update also stops silently deleting a still-enabled skill retired upstream, and five ecosystem partners land.
- The /aeon operator skill ships as an installable Claude Code plugin - `/plugin marketplace add aeonfun/aeon` then `/plugin install aeon@aeon`, versioned and updatable, from a self-contained plugin/ subdirectory that never pulls in the framework catalog (#884, #885)
- OpenRouter gateway requests now carry HTTP-Referer + X-Title attribution headers, ranking aeon's usage on OpenRouter's public app leaderboard instead of counting as anonymous volume; overridable per fork (#881)
- Fixed pi + OpenRouter onboarding: tsx is now a runtime dependency (the container bootstrap dropped it as a devDependency and crashed the CLI), and the dashboard run-gate no longer misreports a flaky secrets read as "No provider key set" (#882)
- aeon-update no longer silently deletes a currently-enabled skill retired upstream - the case is downgraded to a loud CONFLICT the operator cannot merge past unnoticed (#874)
- Five ecosystem partners added - AgentLink, AI2Human, Mneme, Skim, and TaskMarket (#880)
- Documented Langfuse v4 compatibility: the OTLP ingestion contract is unchanged and existing keys keep working across the Nov 2026 Cloud cutover (#883)
- Maintenance: nanoid security bump in the remotion project, a ponytail-audit dead-code sweep (net -444 lines), and PR-scoped CI concurrency (#879, #886, #887)
10 PRs included
- #884feat: package aeon operator skill as a Claude Code plugin (@aaronjmars)
- #885docs: document the aeon setup skill as an installable Claude Code plugin (@aaronjmars)
- #881Tag OpenRouter traffic for the app leaderboard (@aaronjmars)
- #882fix: pi/openrouter onboarding (CLI tsx runtime + dashboard run-gate) (@aaronjmars)
- #874fix(aeon-update): don't silently delete a currently-enabled skill retired upstream (@aaronjmars)
- #880docs(ecosystem): add AgentLink, AI2Human, Mneme, Skim, TaskMarket (@aaronjmars)
- #883docs(langfuse): note v4 compatibility + ingestion-version header (@aaronjmars)
- #879security: bump nanoid to 3.3.18 (GHSA-2v37-7h3g-55p8) (@aaronjmars)
- #886refactor: ponytail-audit verified dead-code cuts (net -444) (@aaronjmars)
- #887ci: add PR-scoped concurrency to lint/check workflows (@aaronjmars)
In-repo docs catch up to Aug 10 batch
CHANGELOG.md inside aeonfun/aeon now records the taskmarket-delegate, you-web-search, and hunter-22 skills, the cargo-fuzz scanning addition, the bin/add-skill fix, and the ALL_SECRETS security fix - bringing the repo's own changelog in sync with what this site already carried. The skill secrets reference gains two new entries.
- In-repo CHANGELOG.md catches up: taskmarket-delegate + you-web-search skills, hunter-22 and the ALL_SECRETS security fix backfilled, cargo-fuzz scanning, bin/add-skill fix, nanoid patch (#873)
- Skill secrets reference gains YDC_API_KEY (you-web-search) and TASKMARKET_API_KEY (taskmarket-delegate) (#873)
1 PR included
- #873docs: sync PRs #795-#871 to aeon docs (@aaronjmars)
TaskMarket + You.com skills, cargo-fuzz scanning
Two new skills land - taskmarket-delegate hands low-confidence work to the TaskMarket agent-worker market, and a previously-undocumented you-web-search adds an optional You.com web source - taking the catalog to 75. vuln-scanner gains the ability to run a scanned repo's own cargo-fuzz harnesses, and a broken bin/add-skill that couldn't install from the standard skills/ layout is fixed.
- New skill taskmarket-delegate - browses, ranks, and delegates work to the TaskMarket agent-worker market (winnable-first, no key for read-only browse), with create/submit gated behind explicit operator authorization; catalog grows to 75 skills (#865)
- New skill you-web-search - an optional You.com-backed web search (api.you.com/v1/search) giving operators a structured, current web source, disabled by default and gated on YDC_API_KEY; it shipped Aug 1 but had gone undocumented until now (#795)
- vuln-scanner now runs a scanned repo's own cargo-fuzz harnesses in scan arm A - seeding the corpus from the repo's fixtures and triaging any crash with full rigor - a deliberate step up from read-only static scanning to executing the target's own code inside the sandboxed run (#863, #868)
- Fixed bin/add-skill: it could not install from the standard skills/<slug>/SKILL.md layout the whole catalog uses (its find glob was one level too shallow), so every repo reported "No skills found" (#866)
- Finance District added to the ecosystem page - its Agent Wallet is in the core catalog and launched as a supported wallet on aeon (#869)
- Maintenance: patched nanoid security advisories in the dashboard (#871)
7 PRs included
- #865feat(skills): add taskmarket-delegate skill (browse/create/submit TaskMarket tasks) (@Autonomy-Labs-Tech)
- #795feat: add optional You.com web search integration (@mouse-value-add)
- #863vuln-scanner: fuzz targets a repo already ships (cargo-fuzz) (@Svector-anu)
- #868vuln-scanner: stage cargo-fuzz toolchain + widen sandbox grant (@Svector-anu)
- #866fix(add-skill): enumerate and install skills under skills/ (was broken for all repos) (@Autonomy-Labs-Tech)
- #869docs: add Finance District to ECOSYSTEM.md (@raul1stdigital)
- #871fix(deps): patch nanoid security advisories (@aaronjmars)
Bounty-discovery skill, secrets fix, README reorg
A new hunter-22 skill turns bounty discovery into a one-tap vuln-scanner audit, matching candidates against the agent's real capabilities and dropping content/social bounties wearing a code-audit costume. The same window closes a real credential-exposure bug - serializing the entire secret store into a workflow env var had silently taken two public instances offline since Jul 30 - and continues the front-page rebuild with another eighteen presentation-only PRs.
- New skill hunter-22 - calls ClawHunter's bounty-discovery API, triages against real capabilities, and drops a one-tap "Audit owner/repo" button that dispatches vuln-scanner on matching bounties; catalog grows to 74 skills (#864)
- Fixed a workflow credential-exposure bug: ALL_SECRETS serialized the entire secret store into an env var, tripping GitHub's anti-abuse hold and silently taking two public instances offline since Jul 30 - now built from an explicit allowlist (#819)
- Headline skill count expressed as a stable "60+" floor on the surfaces CI doesn't guard, so it stops drifting stale between catalog updates (#859)
- README front-page rebuild continues: docs pill nav, more prose trimmed, Community/Proof-of-work/Why sections reordered and re-bannered - eighteen more presentation-only PRs (#836-#856)
20 PRs included
- #864hunter-22: bounty discovery with a one-tap audit handoff to vuln-scanner (@Svector-anu)
- #819fix(ci): build ALL_SECRETS from an explicit allowlist, not toJSON(secrets) (@aaronjmars)
- #859docs: express headline skill count as a stable 60+ floor (@aaronjmars)
- #856docs: keep autonomy banner with Why (@aaronjmars)
- #855docs: move Proof of work under Why (@aaronjmars)
- #854docs: move Why section up under the catalog links (@aaronjmars)
- #853docs: swap Community X card (@aaronjmars)
- #852docs: swap X + Bankr cards, drop good-first-issues link (@aaronjmars)
- #851docs: Community image cards + contributors banner (@aaronjmars)
- #849docs: name secured orgs in Proof, reword scorer + products (@aaronjmars)
- #848docs: Proof of work banner + heals-itself loop art (@aaronjmars)
- #847docs: drop Add more skills, refresh guardrails + replicates (@aaronjmars)
- #846docs: refresh 6-packs banner + trim skill-file line (@aaronjmars)
- #845docs: drop Community Packs section, tidy Docs + Integrate (@aaronjmars)
- #844docs: refresh 6-packs, never-sleeps, ships-work banners (@aaronjmars)
- #842docs: refresh autonomy + anatomy banners (@aaronjmars)
- #841docs: trim skill example, reorder sections, one-line footer (@aaronjmars)
- #840docs: quickstart strip, 6-packs banner, refreshed skill-file art (@aaronjmars)
- #837docs: cut the wall of text (trim + collapse) (@aaronjmars)
- #836docs: Docs pill nav (replace Reference list) (@aaronjmars)
Five instance skills ported into the framework
Five skills battle-tested on a live Aeon instance land in the framework, generalized for any operator: an autonomous cloud-cost analyst, a competitor-page watcher, and three media skills (Higgsfield generative image/video, a Remotion MP4 renderer, and a weekly token-usage card). The dashboard gains a one-click Higgsfield MCP connection and two new secrets. The catalog grows to 73 skills.
- New skill spend-watch - autonomous cloud-cost analyst across Neon, Vercel, Railway, and GitHub Actions: attributes spend to the biggest drivers and ranks dollar-figured recommendations by real signal, with safe cost levers behind arm: (dev pack, disabled by default) (#860)
- New skill competitor-monitor - snapshots competitor pages (pricing, headings, CTAs, new/removed pages, title/meta) and reports only what changed since the last run; read-only, stdlib scraper (#860)
- New skill higgsfield - generative image and video (text-to-image, text-to-video, image-to-video with motion control) via the Higgsfield MCP, credit- and prompt-gated to at most two outputs per run (#860)
- New skill remotion - renders a short MP4 from an agent-authored storyboard via a bundled Remotion project and delivers it by URL, no external generative API (#860)
- New skill weekly-aeoncard - a weekly token-consumption recap rendered as a shareable SVG card from the run ledger (#860)
- Dashboard wiring: the Higgsfield hosted OAuth MCP is one-click connectable, and NEON_API_KEY + RAILWAY_TOKEN join the secrets vault (#860)
- Catalog grows to 73 skills (Dev 11, Productivity 10) (#860)
1 PR included
- #860feat(skills): add spend-watch, competitor-monitor, higgsfield, remotion, weekly-aeoncard (@aaronjmars)
README brand refresh, three new skills
The README is rebuilt around an animated hero and section-banner art with a pill navigation, trimmed to a tight prose density and the longer-form detail moved into docs/. The same batch adds three skills - video-script, aeon-update, and pack-submit - registers the Skim Clean Reads community pack, and hardens the memory-flush garbage-collection pass. The catalog grows to 68 skills.
- README brand refresh: animated hero, section-banner art, pill navigation, and a compare-vs-Claude-Code/Hermes/OpenClaw pointer - presentation only, no capability change (#833-#857)
- New skill video-script - turns a repo, product page, or topic into a receipts-first, recording-ready video script, verifying every number against the live source in-run (#835)
- New skill aeon-update - the downstream counterpart to fork-fleet: pulls the parent framework's shipped changes down into an instance as one reviewable PR (#832)
- New skill pack-submit - the inverse of install-skill: publishes one of the agent's own skills as a standalone community pack and opens the registry PR (#831)
- Community skill pack registered: Skim Clean Reads - clean-markdown web reads via x402, ~4x smaller than raw HTML, $0.002 USDC on Base (#829)
- memory-flush hardened: stamps the consolidation date on every flush, scans an adaptive window, de-duplicates before writing, and rotates its logs (#828)
- Catalog grows to 68 skills (Core 12, Evolution 9, Basics 17) (#831, #832, #835)
- Maintenance: webhook Dependabot batch plus two CI changes (#826, #827, #839)
14 PRs included
- #857docs: compare vs Claude Code, Hermes, OpenClaw; drop Active forks (@aaronjmars)
- #850docs: add Community + We love contributors, reorder Why (@aaronjmars)
- #843docs: refresh quickstart art + fix stale Proof numbers (@aaronjmars)
- #838docs: cut README prose to MiroShark density, relocate detail to docs (@aaronjmars)
- #835feat(skills): add video-script - receipts-first video scripts from a repo, URL, or topic (@NurstarK)
- #834docs: section art + header polish (@aaronjmars)
- #833docs: brand refresh for README header - animated hero + pill nav (@aaronjmars)
- #832create skill: aeon-update (downstream framework updater) (@aaronjmars)
- #831feat: add pack-submit skill - publish a local skill as a community pack (@aaronjmars)
- #829Add community skill pack: Skim Clean Reads (pay-per-call web reads via x402) (@JessieJanie)
- #828feat(memory-flush): stamp consolidation date, adaptive window, dedup, log rotation (@aaronjmars)
- #839ci: state egress-parser scope; gate lockfile coverage (@alexverify)
- #827ci: drop daily cron from Setup Telegram Commands (@aaronjmars)
- #826fix(webhook): clear 6 Dependabot alerts (undici, @opentelemetry/core) (@aaronjmars)
Spec-form skills, OpenTelemetry, Buzz channel
Aeon drops OKF entirely and moves all 65 skills to the Agent Skills open standard, so every skill passes the official spec validator. The same batch wires OpenTelemetry across the Node services and the non-claude harnesses, adds Buzz (Block's Nostr-relay workspace) as an outbound notification channel, gives every skill its own icon, recalibrates the skill security scanner to fire on real sinks, corrects the read-only persistence contract, and teaches the setup skill to mine your Claude Code history for work worth automating.
- OKF removed globally and all 65 skills adopt the Agent Skills open-standard frontmatter, passing the official skills-ref validator (#824)
- OpenTelemetry now traces the dashboard, MCP server, and webhook, plus a coarse gen_ai span per run for the grok/codex/pi/vibe/kimi harnesses - opt-in, numeric usage only (#821, #823)
- Buzz (Block's self-hostable Nostr-relay workspace) joins Telegram/Discord/Slack/email as an outbound ./notify channel, signed with the agent's own keypair (#822)
- The setup skill gains Mode 8 - mine your past Claude Code chats to surface recurring work worth turning into a scheduled skill (#820)
- Every skill gets its own monochrome icon from one canonical catalog source, across the dashboard, README, and docs (#808)
- Skill security scanner recalibrated to fire on dangerous operations rather than ordinary shell syntax (it was failing 65 of 67 first-party skills), with follow-up hardening against suppression-keyword evasion (#811, #813)
- Read-only persistence contract corrected: read-only skills route through ./notify and their captured output, not direct memory/ writes the sandbox refuses; finance-district-mcp also declares onchain_writes (#816, #817, #818)
- Ecosystem logos refreshed; NoelClaw and SyntheticsAI removed (#814)
- Community skill pack registered: AI2Human Create Task (#812)
- Maintenance: 2 dependency bumps + a new CI capability-integrity gate (#809, #810, #815)
16 PRs included
- #824Adopt Agent Skills spec form; remove OKF globally (@aaronjmars)
- #823fix(otel): otel-cli epoch seconds.fraction, not raw nanoseconds (@aaronjmars)
- #822feat(notify): add Buzz as an outbound notification channel (@aaronjmars)
- #821feat(otel): OpenTelemetry on the Node entry points + non-claude harnesses (@aaronjmars)
- #820feat(aeon skill): mine Claude Code history for skills to automate (@aaronjmars)
- #818docs(skills): read-only MCP skills route persistence through output, not memory/ writes (@aaronjmars)
- #817docs: correct read-only persistence contract (sandbox write-locks memory/ + output/) (@aaronjmars)
- #816fix(finance-district-mcp): declare onchain_writes + correct notify -f usage (@aaronjmars)
- #815ci: add eyebrow capability-integrity gate for skills (@alexverify)
- #814docs: refresh ecosystem logos, drop NoelClaw and SyntheticsAI (@aaronjmars)
- #813fix(security): close injection-suppression evasion + procsub/quoted-rm gaps (@aaronjmars)
- #812catalog: register AI2Human Create Task skill pack (@richard7463)
- #811fix(security): calibrate skill-scan to fire on sinks, not template vars (@alexverify)
- #810chore(deps): bump the dashboard group in /apps/dashboard with 4 updates (@app/dependabot)
- #809chore(deps-dev): bump wrangler from 4.112.0 to 4.115.0 in /apps/webhook in the webhook group (@app/dependabot)
- #808feat(skills): per-skill icons across dashboard, docs, and catalog (@aaronjmars)
Deploy Uniswap v4 hooks from a brief
A new crypto-pack skill, deploy-uni-hook, turns a one-line brief into a live Uniswap v4 hook and test pool on any v4 chain - a pre-audited template or a from-scratch freeform hook, with the hook-address flag bits auto-derived and every deploy gated behind a static audit, a dangerous-pattern scan, a behavioral forge test, and a fork simulation. It is a dry-run by default and only broadcasts on an explicit arm:, stays testnet-only unless a mainnet triple-lock lines up, and brings the catalog to 66 skills.
- New skill deploy-uni-hook generates, audits, simulates, and deploys a Uniswap v4 hook + test pool from a one-line brief, on any v4 chain - catalog now 66 skills (#805)
- Safe by default: every run is a dry-run unless prefixed arm:, and a mainnet broadcast needs arm: + an explicit chain: + a HOOK_MAINNET_OK=1 lock, a triple-lock so a stray message can't reach mainnet (#805)
- Dashboard catalogs the two new HOOK_* secrets (burner key + mainnet lock) and adds a per-skill run-input hint parsed from each skill's var: (#805)
1 PR included
- #805feat: deploy-uni-hook skill (Uniswap v4 hook generate+audit+simulate+deploy) (@aaronjmars)
Two dev skills, PostHog MCP, circuit breaker
Two new dev-pack skills land. seo-audit runs a daily on-page and technical SEO pass over every page of a site (sitemap discovery, per-page scoring, cross-page checks, a day-over-day diff, and a standing fix list), and posthog-errors sends a weekly cross-project error digest over the PostHog MCP server, which joins the featured servers with one-click Connect and brings the catalog to 65 skills. The scheduler also gains an auto-recovering circuit breaker so a repeatedly-failing skill pauses itself instead of burning every run, and inbound Telegram is now gated on the owner's user ID to close a public-chat button hijack.
- New skills seo-audit + posthog-errors, and PostHog joins the featured MCP servers with one-click Connect - catalog now 65 skills (#802)
- Scheduler trips an auto-recovering circuit breaker on a repeatedly-failing skill, so one broken skill can't burn every run (#801)
- Telegram inbound is gated on the owner's user ID, closing a public-chat button hijack; it defaults to the chat ID for a 1:1 DM (#797)
- Dashboard catalogs the PAGESPEED_API_KEY secret with its brand icon and setup copy, instead of a bare catch-all row (#803)
- Docs: MCP catalog drift fixed, harness framing flattened, a README catalog drift-guard added, and finance-district added to the mcp-oauth table (#794, #796)
- finance-district-mcp registered in aeon.yml so it actually schedules - it shipped in #791 with no entry (#800)
- Maintenance: CI green-up after the Telegram gate, and a dashboard PacksPanel unique-key fix (#798, #799)
9 PRs included
- #803dashboard: catalog PAGESPEED_API_KEY secret (seo-audit) (@aaronjmars)
- #802Add seo-audit and posthog-errors skills (dev pack) (@aaronjmars)
- #801feat(scheduler): auto-recovering circuit breaker for failing skills (@aaronjmars)
- #800fix(config): register finance-district-mcp in aeon.yml (@aaronjmars)
- #799fix(dashboard): unique keys in PacksPanel stat grid (@aaronjmars)
- #798fix(ci): restore green after telegram owner-gate (#797) (@aaronjmars)
- #797fix(telegram): gate inbound on owner user, not just chat (public-chat button hijack) (@aaronjmars)
- #796docs(mcp-oauth): add finance-district row to Current catalog table (@aaronjmars)
- #794docs: fix MCP catalog drift, flatten harness framing, add README catalog drift-guard (@aaronjmars)
Harness MCP + sandbox hardening, new wallet skill
MCP now actually works on codex, grok, and kimi - it was silently dead on all three, reporting the server "not connected" and finishing green with a plausible answer. Every surface now dispatches skills through one harness path, so inbound messages and the local MCP server honor the operator's chosen harness instead of quietly falling back to Claude, and read-only skills are genuinely write-locked on all six harnesses. The batch also adds finance-district-mcp - a multichain non-custodial agent wallet over MCP - bringing the catalog to 63 skills, and gives MCP credentials their own logo'd group in the dashboard Settings.
- MCP now actually works on codex, grok, and kimi - all three failed silently, so a green run was never evidence the tools ran (one even fabricated Hacker News item IDs) (#779, #780)
- Community skill packs install cleanly end to end - five defects fixed; a sweep of all 10 registry packs now installs 52/52 skills, up from 8/52 (#778)
- grok's MCP --trust fix extended to inbound messages and the local MCP server, where MCP had stayed silently dead (#781)
- One run path - messages.yml and apps/mcp-server now dispatch through run-harness, and the MCP server resolves all six harnesses instead of silently running four on Claude (#784)
- Inbound messages now run on all six harnesses - messages.yml had answered codex/pi/vibe/kimi on Claude; harness resolution and CLI install are now shared scripts covered by their first test suites (#789)
- Read-only skills are now genuinely sandboxed on every harness - grok previously had zero runtime enforcement - and notify's queues moved out of the repo into $AEON_PENDING_DIR (#787)
- Docs corrected - the read-only guard they described didn't exist, and the dead grok-args generator is removed rather than rewired (#788)
- Dashboard: connecting a harness account no longer opens two browser tabs, and seven credentials regained their brand icons in Settings (#786)
- Dashboard: MCP credentials get their own logo'd Access Keys group instead of falling into the Skill Keys catch-all (#790)
- New skill finance-district-mcp - a multichain non-custodial agent wallet over MCP (balances, prices, DeFi yields, swaps, x402 payments across EVM, Solana, Bitcoin, and Sui), bringing the catalog to 63 skills (#791)
- A code-quality sweep surfaced two correctness fixes: envelope wrap_raw_output could fabricate a green run (now flagged with a warning marker), and read-only skills ran unsandboxed on the MCP-server path (#792)
- Maintenance: dead GROK_JSON_SCHEMA knob removed, run-grok.sh reduced to setup-only, and a postcss CVE override (#782, #785, #783)
15 PRs included
- #792optimize: code-quality sweep, plus two correctness fixes it surfaced (@aaronjmars)
- #791feat(skills): add finance-district-mcp, a multichain agent wallet over MCP (@aaronjmars)
- #790feat(dashboard): give MCP credentials their own Access Keys group, with logos (@aaronjmars)
- #789fix(harness): stage all six harnesses on messages.yml via shared resolve/install scripts (@aaronjmars)
- #788docs: correct grok's read-only story; delete the orphaned grok-args (@aaronjmars)
- #787fix(security): sandbox read-only runs on every harness; move notify queues out of the repo (@aaronjmars)
- #786fix(dashboard): stop harness Connect opening two browser tabs, restore Settings icons (@aaronjmars)
- #785chore(grok): reduce run-grok.sh to setup-only, move its tests to the adapter (@aaronjmars)
- #784refactor(harness): route messages.yml + mcp-server through run-harness (@aaronjmars)
- #783fix(deps): bump postcss override past GHSA-r28c-9q8g-f849 (@aaronjmars)
- #782chore(grok): drop the dead GROK_JSON_SCHEMA knob (@aaronjmars)
- #781fix(grok): pass --trust on the run-grok.sh path too, not just the adapter (@aaronjmars)
- #780docs(harnesses): correct the grok MCP section after #779 (@aaronjmars)
- #779fix(harness): MCP was silently dead on codex, grok and kimi (@aaronjmars)
- #778fix(packs): make community skill packs installable end to end (@aaronjmars)
Claude 5 default, grok OAuth durability, harness fixes
The model picker now offers only the Claude 5 family (Sonnet 5, Opus 5, Haiku 4.5) and defaults to Sonnet 5 - all earlier variants retired. The same batch fixes three harness-correctness gaps: Grok's rotated OAuth refresh token now persists so GROK_CREDENTIALS survives past its 6-hour lifetime, AGENTS.md is a full CLAUDE.md mirror so non-Claude harnesses load their complete operating manual, and the Run banner now shows the actual resolved model - not the config-default Claude id.
- Model picker now offers the Claude 5 family only; default switches to Sonnet 5 (#775)
- Grok OAuth refresh token now persists across runs so GROK_CREDENTIALS survives past its 6h lifetime (#773)
- AGENTS.md is now a full CLAUDE.md mirror so non-Claude harnesses load the complete operating manual (#770)
- Run step banner now shows the actual resolved harness model, not the config-default Claude id (#769)
- Dashboard MCP controls disabled on the Codex harness, where MCP calls silently cancel without stdin (#771)
- Secrets-write PAT renamed MCP_SECRETS_PAT → GH_SECRETS_PAT; now one token covers MCP OAuth and Grok refresh (#774)
- harness-adapter docs drop three pointers to repos that 404 - no more ghost contribution paths (#776)
- /aeon setup skill count corrected 61 → 62 across setup skill, README, and all self-references (#772)
- External contributor amir-rezaei fixes CHANGELOG.md grammar: 'serving latest main' → 'serving the latest main' (#764)
- Maintenance: 1 CI optimization (OKF validation fires only on .md file changes; #777)
10 PRs included
- #777ci(okf): trigger only on markdown changes under the OKF roots (@aaronjmars)
- #776docs(harness-adapter): drop pointers to repos that no longer exist (@aaronjmars)
- #775feat(models): offer the Claude 5 family only, default to Sonnet 5 (@aaronjmars)
- #774chore(secrets): rename MCP_SECRETS_PAT -> GH_SECRETS_PAT, standardize for MCP + Grok (@aaronjmars)
- #773fix(grok): persist rotated OAuth refresh token so GROK_CREDENTIALS survives past 6h (@aaronjmars)
- #772docs(skills): correct /aeon setup skill count 61 -> 62 (@aaronjmars)
- #771feat(dashboard): disable MCP controls on the Codex harness (@aaronjmars)
- #770fix(harness): AGENTS.md = full CLAUDE.md mirror, load exactly one per run (@aaronjmars)
- #769fix(aeon): Run banner names the resolved harness model, not the config-default claude id (@aaronjmars)
- #764docs: add missing article 'the' before 'latest main' in CHANGELOG.md (@amir-rezaei)
In-repo docs catch up to harness batch
CHANGELOG.md inside aeonfun/aeon now carries the full multi-harness batch (#757–#767) - Added, Changed, Security, and Maintenance sections - so what's recorded in the repo matches what shipped. The aeon setup skill's secrets reference is refreshed in the same pass.
- In-repo CHANGELOG.md updated with the #757–#767 batch (multi-harness, aeon-doctor, setup skill, CVE patches, BASESCAN rename); aeon setup skill secrets reference refreshed (#768)
1 PR included
- #768docs: sync PRs #757–#767 to aeon docs (changelog, dashboard, BASESCAN rename) (@aaronjmars)
Multi-harness support, aeon-doctor, in-repo setup skill
Skills now run on any of six agent CLIs - Claude Code, Grok, Codex, Pi, Vibe, and Kimi - behind one {result, usage, session_id} contract via the new harness-adapter, with the four OpenRouter-backed harnesses sharing a single OPENROUTER_API_KEY or running on their own native login. The batch also adds aeon-doctor (a static config linter that catches the silent-misconfig class no run-based health skill can see), ships the /aeon setup skill in-repo, completes the BASESCAN_KEY → BASESCAN_API_KEY secret rename, and patches two high-severity dashboard CVE classes.
- Multi-harness support - run skills on Claude Code, Grok, Codex, Pi, Vibe, or Kimi behind one {result, usage, session_id} contract via harness-adapter; all six verified live on GitHub Actions (#765, #767)
- The four OpenRouter-backed harnesses (codex/pi/vibe/kimi) share one OPENROUTER_API_KEY or run on their own native login - Connect ChatGPT / Kimi / provider key (#765)
- aeon-doctor - a read-only static config-correctness linter for unquoted schedules, duplicate keys, unconfigured skills, mode typos, and broken requires/MCP refs; notifies only on problems (#761)
- The /aeon setup skill now ships in-repo at .claude/skills/aeon/ and is documented, naming the coding agents that can drive an install: Claude Code, Codex, Hermes, OpenClaw (#762, #763)
- Dashboard - per-skill model picker now tracks the active harness (#766)
- Secret rename BASESCAN_KEY → BASESCAN_API_KEY, following the <PROVIDER>_API_KEY convention (#760)
- Maintenance: two high-severity dashboard CVE patches (sharp/libvips, Next.js 16.2.11) and an 8-dimension repo cleanup (#757, #758, #759)
10 PRs included
- #767docs: document the six-harness setup (README + aeon.yml) (@aaronjmars)
- #766fix(dashboard): per-skill model picker tracks active harness (@aaronjmars)
- #765feat(harness): multi-harness support (codex/pi/vibe/kimi) via harness-adapter (@aaronjmars)
- #763docs(aeon-setup): name supported agents (Claude Code, Codex, Hermes, OpenClaw) (@aaronjmars)
- #762docs: ship the /aeon setup skill in-repo + document it (@aaronjmars)
- #761feat(skills): add aeon-doctor static config-correctness linter (@aaronjmars)
- #760refactor(secrets): rename BASESCAN_KEY -> BASESCAN_API_KEY (@aaronjmars)
- #759fix(dashboard): bump next 16.2.10 -> 16.2.11 to clear high-severity CVEs (@aaronjmars)
- #758fix(dashboard): patch 2 high-severity sharp/libvips CVEs (@aaronjmars)
- #757optimize: repo-wide cleanup pass (8 dimensions) (@aaronjmars)
App CI gating, config fixes, test expansion
Every app under apps/ now has a CI gate - dashboard typechecks, tests, and builds; cli typechecks; mcp-server builds; webhook bundles through wrangler - closing the gap that let dependency bumps break silently, and catalog/skill-packs.json gets a validation workflow of its own. The same batch fixes two silent config bugs that stopped aeon enable and aeon schedule from working on freshly added skills, an external contributor expands validate-pack test coverage from 3 to 20 cases, and the README badges get a refresh.
- apps/** now has CI: dashboard typechecks/tests/builds, cli typechecks, mcp-server builds, webhook bundles via wrangler --dry-run (#752)
- catalog/skill-packs.json gated by its own workflow, with validate-skill-packs wired into the test suite (#752)
- Config CLI: enable/schedule now creates missing aeon.yml entries and quotes generated crons (#754)
- TypeScript held on 6.x for apps/dashboard via a Dependabot major-ignore - TS7 breaks the Next.js 16 build (#724)
- External contributor BBridgeers expands validate-pack test coverage from 3 to 20 cases (#751)
- Docs badge added to the README, linking to aeon.fun/docs (#755)
- Badge copy tweaks: Documentation label shortened to Docs, X drops Follow, Bankr reads $aeon on Bankr (#756)
- Maintenance: 4 dependency bumps (tsx, wrangler, actions/setup-node, dashboard group)
10 PRs included
- #756docs: badge copy tweaks (@aaronjmars)
- #755docs: add Documentation badge to README (@aaronjmars)
- #754fix(config): enable/schedule create a missing aeon.yml entry, and quote generated crons (@aaronjmars)
- #753chore(deps-dev): bump tsx from 4.23.0 to 4.23.1 in /apps/cli in the cli group (@dependabot[bot])
- #752ci: gate apps/** and catalog/skill-packs.json (@aaronjmars)
- #751test: expand validate-pack test coverage from 3 to 20 cases (@BBridgeers)
- #746chore(deps-dev): bump the dashboard group across 1 directory with 4 updates (@dependabot[bot])
- #744chore(deps-dev): bump wrangler from 4.110.0 to 4.112.0 in /apps/webhook in the webhook group across 1 directory (@dependabot[bot])
- #727chore(actions): bump actions/setup-node from 6 to 7 in the github-actions group across 1 directory (@dependabot[bot])
- #724chore(deps): hold typescript on 6.x for the dashboard (Next 16 + TS7 breaks build) (@aaronjmars)
Integrate Aeon image, support section, count sync
The README's Integrate Aeon section now shows the aeon-connect visual, all links to the private aeon-connect repo are dropped, and a Support the project section with the wallet address is added. Skill-pack counts are synced to the live catalog: 61 skills total, Basics pack at 15.
- Integrate Aeon section gets an aeon-connect visual and a dedicated Support the project wallet address (#748)
- All links to the private aeon-connect repo dropped; ADK guide updated to generic reference-implementation wording (#749)
- Skill-pack counts synced to catalog: 61 skills total, Basics pack now 15 (#747)
- Orphaned use-this-template.png asset removed from docs/assets (#750)
4 PRs included
- #750chore: remove unused use-this-template.png asset (@aaronjmars)
- #749docs: de-reference private aeon-connect repo, shrink Integrate image (@aaronjmars)
- #748docs(readme): add aeon-connect image + Support the project section (@aaronjmars)
- #747docs: sync skill-pack counts to catalog (61 skills, Basics 15) (@aaronjmars)
One-click MCP OAuth, new MCP skills, ADK
OAuth-gated MCP servers (Base, Robinhood, glim, Executor) now connect in one browser click, with tokens refreshed durably before every run. The same batch swaps in dedicated Robinhood and glim skills, adds Executor Cloud, ships Grok 4.5 in the Grok Build harness, and documents the ADK for building products on top of Aeon.
- One-click OAuth Connect for OAuth-gated MCP servers - authorize once in the browser, tokens captured server-side and stored as repo secrets (#730)
- glim joins Base and Robinhood as a one-click OAuth Connect server (#731)
- Durable OAuth refresh: rotated refresh tokens now persist via MCP_SECRETS_PAT / GH_GLOBAL, fixing 401s one run after Connect (#732)
- MCP panel shows PAT-setup steps (with a clickable link) when no secrets-write token is set, surfaced before the first Connect (#737, #740)
- New robinhood-mcp and glim-mcp skills replace ctrl - on-demand portfolio/trading and cited live-data research (#734)
- Executor Cloud added to the MCP catalog with a read-only executor-mcp skill (#736)
- robinhood-mcp and glim-mcp now send a single notify call per run (#735)
- Grok Build harness supports Grok 4.5 (new default) and retires the deprecated x_search model for grok-4.3 (#725)
- ADK (Aeon Developer Kit) documents building products on top of Aeon via a GitHub App and skill packs (#741, #742, #743)
- MCP catalog, README pack table, and CONFIGURATION docs updated for the new servers and skills (#739, #733)
- Skill runs stamp OKF frontmatter before auto-commit so bare markdown files self-heal (#738)
- Maintenance: 3 CI/chore updates (actions/cache v4 → v6, attestation-gate logging, grok harness log noise)
18 PRs included
- #743docs(adk): use plain hyphens instead of em dashes (@aaronjmars)
- #742docs: rename Developer Kit to ADK (Aeon Developer Kit) + add an Integrate Aeon README section (@aaronjmars)
- #741docs: add Developer Kit - build on Aeon via a GitHub App, the GitHub API, and skill packs (@aaronjmars)
- #740fix(dashboard): make the PAT setup URL on the MCP panel a clickable link (@aaronjmars)
- #739docs: cover the new MCP servers + skills (catalog table, README packs, CONFIGURATION) (@aaronjmars)
- #738fix(workflows): stamp OKF type: frontmatter before auto-commit (@aaronjmars)
- #737feat(dashboard): replace durable-refresh status line with a PAT setup section on the MCP panel (@aaronjmars)
- #736feat(mcp): add Executor Cloud to the MCP catalog + executor-mcp skill (@aaronjmars)
- #735fix(skills): one notify call per run in robinhood-mcp + glim-mcp (@aaronjmars)
- #734feat(skills): swap ctrl for robinhood-mcp + glim-mcp MCP skills (@aaronjmars)
- #733docs(mcp-catalog): record Robinhood OAuth mechanics + why no offline_access (@aaronjmars)
- #732Make MCP OAuth refresh durable for rotating-token providers (@aaronjmars)
- #731feat(mcp): enable one-click OAuth Connect for glim (@aaronjmars)
- #730feat(mcp): durable OAuth connect for OAuth-gated MCP servers (@aaronjmars)
- #729chore(ci): only log the attestation gate when active (attest=true) (@aaronjmars)
- #728chore(grok): quiet benign harness log notices + drop grok-build from picker (@aaronjmars)
- #726ci: bump actions/cache@v4 → v6 (drop Node 20 deprecation warning) (@aaronjmars)
- #725feat(grok): support Grok 4.5 + migrate deprecated x_search model to grok-4.3 (@aaronjmars)
aeonfun org transfer, all links updated
The repo has moved from aaronjmars to the aeonfun org (owned by Aeon Inc) - every self-referential link, badge, install command, and the trusted-sources allowlist updated in one atomic PR. Fork from aeonfun/aeon going forward.
- Repo transferred to aeonfun org; all GitHub links, badges, and bin/add-skill install commands updated (#721)
- Maintenance: 2 dependency bumps (typescript 6.0.3 → 7.0.2, wrangler 4.107.0 → 4.110.0)
3 PRs included
- #721chore: update attribution to aeonfun / Aeon Inc (@aaronjmars)
- #719chore(deps-dev): bump wrangler from 4.107.0 to 4.110.0 in /apps/webhook in the webhook group across 1 directory (@dependabot[bot])
- #718chore(deps-dev): bump typescript from 6.0.3 to 7.0.2 in /apps/mcp-server in the mcp-server group across 1 directory (@dependabot[bot])
README overhaul, optimize round 2, v0.1.0 changelog
The README dropped from 733 to 330 lines as reference docs moved to dedicated pages; a second /optimize pass fixed a latent parseContentsList crash and surfaced swallowed errors in the MCP CLI. The same batch adds a v0.1.0 CHANGELOG.md and retires the last postprocess scripts.
- README halved (733 → 330 lines): Advanced reference moved to docs/, gateway/auth story deduped (#700, #706, #708)
- Sharper landing page: Proof of Work section, 1.6M-stars headline, one-liner Community Packs (#701, #711)
- Auth and Notifications setup rewritten as scannable tables with Grok documented (#705)
- CHANGELOG.md added to the repo, seeded with the v0.1.0 entry (#712)
- deploy and token-transfer retire postprocess scripts; both now run in-run (#707)
- /optimize round 2: parseContentsList crash fixed; mcp CLI and outputs route errors now surface (#715, #716)
- Dashboard color tokens unified: ~150 eva-* refs collapsed into single aeon-* scheme (#717)
- Skill scorer no longer flags legitimate no-ops (clean scan, empty inbox) as empty_output (#714)
- Transient skill writes (github-trending, token-movers, write-tweet) pinned to /tmp (#713)
- AgentLink community pack: biomapped on-chain agent identity on Base (#686)
- Stale doc references refreshed across 22 user-facing files: catalog paths and webhook secret corrected (#699)
21 PRs included
- #717optimize: unify eva-*/aeon-* color tokens into one aeon-* scheme (@aaronjmars)
- #716fix: surface swallowed errors in mcp CLI + outputs route (@aaronjmars)
- #715optimize: repo cleanup (8 dimensions) + fix parseContentsList crash (@aaronjmars)
- #714fix(scorer): flag empty_output only on empty FINAL output, not legitimate no-ops (@aaronjmars)
- #713fix(skills): route transient skill writes to /tmp, not the repo root (@aaronjmars)
- #712docs: add CHANGELOG.md seeded with v0.1.0 (@aaronjmars)
- #711docs(readme): 1.6M-stars headline, Community Packs one-liners, reference to bottom (@aaronjmars)
- #710docs(readme): em-dashes -> hyphens + new use-template image (@aaronjmars)
- #709docs(readme): show a real skill, fix disclosure substance, drop count-as-quality (@aaronjmars)
- #708docs(readme): halve the README, move Advanced reference to docs/ (@aaronjmars)
- #707feat: retire postprocess; run deploy + token transfer in-run (@aaronjmars)
- #706docs(readme): dedup the gateway/auth story (told 3-4x) (@aaronjmars)
- #705docs(readme): clearer Authentication + Notifications setup (Grok, clickable links) (@aaronjmars)
- #704docs(readme): align Proof of work table (strip first-column emoji) (@aaronjmars)
- #703docs: align pack table, drop self-healing image, steer new skills to community packs (@aaronjmars)
- #701docs(readme): sharper hero + Proof of work section + quick-start polish (@aaronjmars)
- #700docs(readme): trim the Advanced section, relocate internals to docs (733 -> 596 lines) (@aaronjmars)
- #699docs: refresh stale references across user-facing docs (catalog move + webhook secret) (@aaronjmars)
- #698fix(workflow): align model backstop with config default (opus-4-8 -> sonnet-4-6) (@aaronjmars)
- #697docs: fix scheduler model, skill count, and stale MCP examples (@aaronjmars)
- #686Community skill pack listing: AgentLink (techdigger/aeon-skill-pack-agentlink) (@techdigger)
secretcurl auth, headless CLI, dashboard polish
Skills now call authenticated APIs directly via `./secretcurl`, collapsing three pre-run airlock scripts into zero and giving each fork least-privilege key injection by default. The batch also ships a headless `aeon` CLI, a 14-PR dashboard UX overhaul, and Sigstore attestations on every skill-run output.
- `./secretcurl` replaces the XAI pre-run airlock; all 11 social skills call api.x.ai directly (#685, #687)
- CoinGecko, Alchemy, Etherscan, and GitHub reads moved in-run via `./secretcurl`; all prefetch scripts retired (#689, #691)
- Irreversible sends (notify, article, tweets) run in-run; four postprocess scripts deleted (#695)
- Per-skill least-privilege: each skill receives only the API keys it declares in `requires:` (#682, #684)
- CoinGecko demo-key header fixed - free keys were 400'ing silently with the wrong header (#683)
- Headless `aeon` CLI ships - every dashboard feature as a scriptable, server-free command (#676, #677)
- Skill catalog restructured: 59 skills in 6 packs where `category` equals the pack name (#647)
- Sigstore provenance: every skill-run output gets a signed, Rekor-logged attestation (#650, #652, #653)
- Chain-input script injection and arbitrary file read patched (GHSA-h9v2, GHSA-cqvj) (#658, #660, #661)
- Dashboard: enable/disable is now a real toggle switch with live schedule status on the skill page (#673)
- Dashboard copy overhaul: Team→Skills, duty→enabled/disabled, bare text actions → bordered buttons (#664, #669, #670, #671, #672, #674, #675)
- Scheduler and message poller split into independent workflows; fresh-fork DEGRADED state fixed (#649, #678)
- vuln-scanner scan arm made functional: scanner allowlist grant and tool-staging step wired (#693)
- Email notifications migrated from SendGrid to Resend - one outbound-email key covers everything (#680)
- Non-main-ref workflow dispatch no longer breaks Commit and cron-state steps (#694)
- 8-agent optimize sweep: dead code, weak types, orphaned verdikta scaffolding, dead scripts removed (#655, #656, #657, #696)
- Maintenance: 1 CI config update (#659)
49 PRs included
- #696chore(scripts): remove 2 dead scripts; wire validate-config into CI (@aaronjmars)
- #695feat(skills): run irreversible sends in-run via secretcurl; retire postprocess scripts (@aaronjmars)
- #694fix(workflow): don't fail Commit/cron steps on a non-main-ref dispatch (@aaronjmars)
- #693fix(vuln-scanner): make the scan arm functional (allowlist grant + tool-staging step) (@aaronjmars)
- #692docs(skills): kill the "sandbox blocks the network" myth (Sandbox note → Network note) (@aaronjmars)
- #691feat(secrets): read GitHub in-run (bd-radar / fleet / okf); retire all 3 prefetch scripts (@aaronjmars)
- #690chore(secrets): delete the dead prefetch-xai.sh (skills already tombstone it) (@aaronjmars)
- #689feat(secrets): route CoinGecko/Alchemy/Etherscan calls through ./secretcurl (non-XAI skills) (@aaronjmars)
- #688chore(ecosystem): update Root edge (RootAi) logo (@aaronjmars)
- #687Route all XAI skills through ./secretcurl for direct auth'd API calls (@aaronjmars)
- #685chore(airlock): remove prefetch-xai.sh - skills call api.x.ai directly (@aaronjmars)
- #684feat(secrets): shrink static env → activate per-skill key injection (@aaronjmars)
- #683fix(coingecko): use demo API-key header (free keys were 400'ing) (@aaronjmars)
- #682Per-skill least-privilege secrets + "under the hood" run summary (@aaronjmars)
- #680feat(notify): migrate email channel from SendGrid to Resend (@aaronjmars)
- #679chore(secrets): prune dead skill keys & fix stale catalog descriptions (@aaronjmars)
- #678fix(heartbeat): warming-up grace so fresh forks don't read DEGRADED (@aaronjmars)
- #677docs(readme): document the headless `aeon` CLI (@aaronjmars)
- #676feat(cli): non-interactive `aeon` CLI reusing dashboard lib (read + write, all phases) (@aaronjmars)
- #675copy(dashboard): schedule Edit→Change schedule, empty var state→No custom settings (@aaronjmars)
- #674fix(dashboard): scope toggle cursor to pill + skill-settings tweaks (@aaronjmars)
- #673feat(dashboard): clearer skill page - enable switch, schedule status, obvious var edit (@aaronjmars)
- #672copy(dashboard): Hire New Member→Add new skill (@aaronjmars)
- #671copy(dashboard): Assignment brief→Skill settings + var empty-state→Defaults settings (@aaronjmars)
- #670copy(dashboard): Team→Skills, Hire→Add, Search members→Search (@aaronjmars)
- #669dashboard: duty→enabled/disabled, Shift→Skill schedule, reorder skill page sections (@aaronjmars)
- #668dashboard: more-visible Templates buttons + rename skill Remove→Delete (@aaronjmars)
- #667copy(dashboard): rename Telegram button to 'Register again' + trim helper copy (@aaronjmars)
- #666fix(dashboard): style remaining inline actions (Set/Edit/Install) + move Re-register button (@aaronjmars)
- #665fix(dashboard): transparent bordered mini-buttons (match Off Duty pill) (@aaronjmars)
- #664feat(dashboard): remove Available filter + make inline actions read as buttons (@aaronjmars)
- #663docs(skills): trim skill descriptions + drop em dashes (@aaronjmars)
- #662Dashboard copy & layout cleanup (@aaronjmars)
- #661security(messages): nudge when Discord/Slack poll without an author allowlist (GHSA-252c F5) (@aaronjmars)
- #660fix(ci): P0 - unbreak aeon.yml + chain-runner.yml (empty ${{ }} in run: comment) (@aaronjmars)
- #659ci: cache Claude Code global install across skill + message runs (@aaronjmars)
- #658security: fix chain-input script injection + arbitrary file read (GHSA-h9v2 / GHSA-cqvj) (@aaronjmars)
- #657optimize: remove orphaned verdikta scaffolding + dead fetch-tweets legacy cache (@aaronjmars)
- #656optimize: Omit<PackSkill> + shared capabilities parser (/optimize follow-up) (@aaronjmars)
- #655optimize: dead-code, dedup, weak-types & a sync bug-fix (/optimize cleanup) (@aaronjmars)
- #654docs(ecosystem): remove Mneme + LawbWorld, update Solvr logo (@aaronjmars)
- #653fix(attestation): attest an immutable run-scoped snapshot (@aaronjmars)
- #652feat(attestation): sign a run manifest alongside the output (@aaronjmars)
- #651docs(attestation): document skill-execution provenance (@aaronjmars)
- #650feat(workflows): skill-execution attestation (Sigstore provenance) (@aaronjmars)
- #649refactor(workflows): decouple scheduler from messages (@aaronjmars)
- #648chore(docs): remove Smithery / MCP Registry submission package (@aaronjmars)
- #647Skill + pack restructure: 59 skills, 6 packs (category == pack) (@aaronjmars)
- #640docs(langfuse): record known gaps + decision not to add a cost-proxy sidecar (@aaronjmars)
OKF-native memory, repo compaction, grok-build
Aeon's `memory/topics/` is now an OKF-native knowledge bundle - every concept self-describes with `type:` frontmatter, enforced by a CI gate and exposed via MCP `okf://` resources. In the same batch the repo root compacted 31 → 14 tracked entries, the grok harness gained grok-build model selection, and the skill catalog pruned to 69.
- `memory/topics/` becomes an OKF-native knowledge bundle: `type:` frontmatter on every concept, `okf-validate` CI gate, MCP `okf://` resources (#627, #628, #629)
- Repo root compacted 31 → 14 tracked entries: CLI scripts → `bin/`, registries → `catalog/`, deliverables → `output/` (#607, #616, #617, #618, #619)
- Architecture audit across all 69 skills: silently-bypassed security scanner restored, 3 dead scripts pruned, .gitignore fixed (#620)
- `grok-build` is now a selectable model in the dashboard harness picker (#622)
- Connecting the grok harness in the dashboard auto-switches and pushes the config - no manual step (#624)
- Heartbeat shifted to once daily at 08:00 UTC; staleness heuristic updated from ~8h to ~26h (#625)
- `verdikta-hunter` ships as a prompt-style bounty-discovery skill with hard-capped on-chain execution, contributed by @nigelon11 (#605)
- SECURITY.md and CONTRIBUTING.md added; LICENSE restored to repo root so GitHub detects it; Sponsor button added via FUNDING.yml (#609, #610, #611)
- Skill catalog pruned 94 → 69 (25 removed, incl. 3 Core); community pack registry trimmed 24 → 10 (#603, #600)
- Maintenance: Telegram slash-commands now re-register daily; sync-upstream workflow dropped (no-op on canonical repo); FUNDING.yml location settled; misc admin cleanup (#626, #623, #621, #613, #614, #615, #612, #608, #601, #604)
28 PRs included
- #629docs(okf): document the OKF-native knowledge bundle in the README (@aaronjmars)
- #628feat(okf): make all knowledge+operational markdown OKF-conformant in place (@aaronjmars)
- #627feat(okf): make memory/topics an OKF-native knowledge bundle (@aaronjmars)
- #626chore(workflows): drop self-referential sync-upstream; daily TG command re-register (@aaronjmars)
- #625chore(heartbeat): once-daily schedule + 3 code fixes (Paperclip ref, optional RESEND, cron-state guard) (@aaronjmars)
- #624feat(dashboard): connecting grok harness auto-switches + pushes harness (@aaronjmars)
- #623fix(dashboard): silence npm allow-scripts warning on ./aeon (@aaronjmars)
- #622feat: add grok-build as a selectable Grok harness model (@aaronjmars)
- #621docs: how to add a Grok harness model (@aaronjmars)
- #620chore: architecture audit - restore security scanner, prune orphans, fix output/gitignore drift (@aaronjmars)
- #619
- #618chore: compact repo root round 3 - assets → docs/assets (fixes #617 logo) (@aaronjmars)
- #617chore: compact repo root round 2 - ECOSYSTEM/SHOWCASE/examples → docs/ (@aaronjmars)
- #616chore: compact repo root - unify output/, relocate templates/config (@aaronjmars)
- #615chore: reorder FUNDING.yml (aeon.fun first) (@aaronjmars)
- #614chore: move FUNDING.yml back to .github/ (@aaronjmars)
- #613chore: move FUNDING.yml to repo root (@aaronjmars)
- #612docs: remove PRs-welcome badge from README (@aaronjmars)
- #611chore: add FUNDING.yml (Sponsor button) (@aaronjmars)
- #610fix: move LICENSE back to repo root so GitHub detects it (@aaronjmars)
- #609chore: add SECURITY + CONTRIBUTING, consolidate community docs under .github/ (@aaronjmars)
- #608chore(repo): health files → .github/, remove dead Jekyll site + wallet-profile (@aaronjmars)
- #607chore(repo): declutter root - move CLI into bin/, registries into catalog/ (@aaronjmars)
- #605feat(skills): verdikta-hunter - prompt-style rework with hard-capped on-chain execution (reworks #582) (@nigelon11)
- #604docs: clean dangling refs to removed skills (SHOWCASE + smithery) (@aaronjmars)
- #603chore(skills): retire 25 skills (94 → 69), incl. 3 core (@aaronjmars)
- #601
- #600chore(registry): prune community skill packs 24 → 10 (@aaronjmars)
API-key audit, repair ledger, cadence-free shiplog
The API-key layer got a full audit across all 102 skills - routing is verified, vault descriptions corrected, and one orphaned key removed. shiplog collapses into a single cadence-agnostic skill that covers whatever window has elapsed since it last ran, and a public self-repair ledger backported from aaeron tracks every skill write, review, merge, and prune.
- API-key routing audited across all 102 skills: GH_READ_PAT added where missing, orphan removed, vault descriptions corrected to match real usage (#595)
- shiplog is now cadence-agnostic - one skill covers the full elapsed window since the last run, replacing the separate weekly and daily variants (#569)
- self-repair-ledger backported from aaeron: a dated public ledger of every skill the agent wrote, reviewed, merged, or pruned, auto-committed to the repo (#568)
- Phylax audit gains a hosted-engine fast path - canonical ALLOW/WARN/DENY verdict from the Phylax API, with inline 3-scanner fallback if the API is unreachable (#559)
- README and docs updated: default model corrected to claude-sonnet-4-6, stale skill counts synced to 102 (#596)
- pyyaml pinned to ==6.0.2 in CI - the last unpinned CLI install across all workflows (#577)
- Maintenance: 6 dependency/CI bumps
12 PRs included
- #599chore(deps): bump the dashboard group in /apps/dashboard with 2 updates (@dependabot[bot])
- #598chore(deps-dev): bump wrangler from 4.106.0 to 4.107.0 in /apps/webhook in the webhook group (@dependabot[bot])
- #596docs: sync stale skill counts to 102 + default model to sonnet-4-6 (@aaronjmars)
- #595fix(keys): API-key routing audit - add GH_READ_PAT, drop orphan, correct vault descriptions (@aaronjmars)
- #580chore(deps-dev): bump @types/node from 26.0.1 to 26.1.0 in /apps/dashboard in the dashboard group (@dependabot[bot])
- #577chore(ci): pin pyyaml to ==6.0.2 (@aaronjmars)
- #575chore(deps-dev): bump the dashboard group in /apps/dashboard with 3 updates (@dependabot[bot])
- #574chore(deps-dev): bump wrangler from 4.103.0 to 4.106.0 in /apps/webhook in the webhook group (@dependabot[bot])
- #573chore(actions): bump actions/checkout from 4 to 7 in the github-actions group (@dependabot[bot])
- #569Simplify shiplog: one cadence-agnostic skill (since last run) (@aaronjmars)
- #568Backport self-repair-ledger from aaeron (generic) (@aaronjmars)
- #559feat(phylax-audit): hosted-engine fast path for canonical verdicts (@usephylax)
Grok Build harness + skills consolidated to 102
aeon becomes multi-harness: run any skill through xAI's Grok Build CLI, logging in with your X account - fully additive, with Claude Code still the default. In parallel the skill catalog is consolidated from 187 hubs down to 102 with no capability lost, and Telegram's button + reply layer is wired across 16 skills.
- New Grok Build harness - run skills through xAI's grok CLI, authenticated with your X account (SuperGrok / X Premium+) or an XAI_API_KEY; Claude Code stays the default (#585)
- A Claude→grok compatibility layer lets existing skills run unchanged on grok, with no per-skill rewrites (#590)
- Grok harness gains native MCP support plus opt-in per-skill run-shaping - max_turns, best_of_n, verify, effort (#587)
- The harness is wired through every entry point - scheduled runs, chains, inbound Telegram/Discord/Slack, and the quality scorer - so a grok-only fork behaves identically (#586, #587)
- Note: grok's headless output carries no token counts, so grok-harness runs log 0 tokens on Actions and don't appear in cost tracking (#585)
- Skill catalog consolidated 187 → 102 hubs behind per-skill selectors; every absorbed behavior survives as a branch of its hub (#581, #583)
- Telegram buttons and stateless force-reply follow-ups wired across 16 skills - snooze/mute a noisy alert, refine a draft, or add to a watchlist straight from chat (#591)
- Then made zero-touch: every notification auto-carries global Run again / Schedule weekly quick-action buttons, and saving your bot token in the dashboard auto-registers the slash-command menu - no manual workflow run (#593, #594)
- Dashboard: harness picker with one-click Connect X account, Sonnet 4.6 as the default model, and grok model-id fixes (#585, #588, #589, #592)
- Docs and catalogs (smithery, skill-graph) regenerated to the 102-skill inventory (#584)
13 PRs included
- #594feat(dashboard): auto-register Telegram commands on token save + re-register button (@aaronjmars)
- #593feat(telegram): global Run again / Schedule weekly buttons on every skill notification (@aaronjmars)
- #592fix(dashboard): auth CTA per-harness + Sonnet 4.6 default + Anthropic modal tidy (@aaronjmars)
- #591feat(telegram): wire buttons + force-reply across 16 skills (@aaronjmars)
- #590feat(grok): Claude→grok compatibility layer so skills run unchanged on the grok harness (@aaronjmars)
- #589chore(dashboard): default to claude harness, packs skeleton, middleware→proxy (@aaronjmars)
- #588fix(dashboard): stop sanitizeModel stripping the dot from grok model ids (@aaronjmars)
- #587feat(grok): de-dupe AGENTS.md, wire MCP, add run-shaping flags + full harness parity (@aaronjmars)
- #586fix(grok): harness hardening - no thought-leak, safe cancels, harness-routed scorer, drop grok-build (@aaronjmars)
- #585feat(harness): add Grok Build (grok CLI) as an additive agent harness (@aaronjmars)
- #584docs: regenerate smithery + skill-graph catalogs to 102 skills (@aaronjmars)
- #583feat(skills): consolidation phase 2 - 85 merges → 49 hubs (187→102) (@aaronjmars)
- #581chore(skills): consolidation phase 1 - delete 16 skills, rename fork-firstrun→fork-events (@aaronjmars)
Interactive Telegram + a leaner core
Telegram gains slash commands, inline buttons, deep links, and force-reply follow-ups - all with no LLM in the loop for structured input. The codebase also sheds ~1,800 lines of dead weight, Claude Sonnet 5 lands as a selectable model, and the ecosystem list is refreshed.
- Telegram interactivity: /skill slash commands with autocomplete, inline snooze/mute/re-run buttons, t.me deep links, and stateless force-reply follow-ups - structured input runs with no LLM in the loop, on both the poller and the instant webhook (#578)
- Installers consolidated behind a shared library and the speculative a2a-server removed - net −1,823 lines, plus a fix for a footgun that shipped real treasury addresses into forks (#579)
- CLAUDE.md audited against the real workflows: drift fixed and an end-to-end architecture overview added (#576)
- Claude Sonnet 5 added as a selectable model - near-Opus quality on coding and agentic work at Sonnet pricing (#572)
- Ecosystem refresh: logos updated, Zetta added, x402Books and Bankrsynth removed (#571)
- shiplog's X-traction prefetch path wired up, config-driven from memory/products.md (#570)
6 PRs included
- #579refactor: consolidate installers, cut a2a-server, drop dead scripts (@aaronjmars)
- #578feat(telegram): slash commands, buttons, deep links & force-reply (@aaronjmars)
- #576docs(claude-md): fix drift + add architecture overview (@aaronjmars)
- #572feat(models): add Claude Sonnet 5 as a selectable model (@aaronjmars)
- #571chore(ecosystem): update logos, swap x402Books→Zetta, drop Bankrsynth (@aaronjmars)
- #570feat(prefetch): wire shiplog X-traction case into prefetch-xai.sh (@aaronjmars)
21 skills backported, vigil at 17 tools
The biggest skill expansion since the hardening trilogy: 21 skills from derivative instances land in canonical aeon (all disabled by default), vigil's tool count jumps from 9 to 17, and a new send-email skill ships while 5 others are retired. Heartbeat, repo-pulse, and disclosure-tracker all get richer implementations reverse-backported from live instances.
- vigil skill jumps from 9 to 17 tools: consensus, liquidity lock, tax check, and ownership audit added (#558)
- validate-config test suite wired into CI, closing a gate gap where the suite ran nowhere (#560)
- 21 skills from derivative instances backported to canonical aeon, all disabled by default (#562)
- repo-pulse, disclosure-tracker, and pvr-watchlist upgraded with richer reverse-backported implementations (#563)
- heartbeat status logic refined: status page no longer flaps red on a recovered transient failure (#564)
- private-repo prefetch now driven by products.md; GH_READ_PAT wired for per-product access (#565)
- send-email skill ships via Resend; polymarket, polymarket-comments, ecosystem-entrants, smithery-manifest, v4-readiness removed (#566)
- daily-shiplog and idea-forge generalized to config-driven skills via memory/products.md (#567)
- 8-agent optimize sweep: dead code removed, internal constants de-exported, knip now clean (#561)
9 PRs included
- #567Add generalized daily-shiplog + idea-forge (@aaronjmars)
- #566feat: add global send-email skill; remove 5 skills (@aaronjmars)
- #565feat: products.md-driven prefetch-private-repos.sh + wire GH_READ_PAT (@aaronjmars)
- #564Reverse-backport: richer heartbeat (status logic + token-pulse) (@aaronjmars)
- #563Reverse-backport: richer repo-pulse / disclosure-tracker / pvr-watchlist (@aaronjmars)
- #562Backport 21 derivative-instance skills + upgrade vuln-scanner (@aaronjmars)
- #561optimize: code-quality cleanup (8-agent /optimize sweep) (@aaronjmars)
- #560ci(tests): wire validate-config.test.js into ci-tests (@anajuliabit)
- #558vigil skill: refresh 9 → 17 tools (@vigilcodes)
hardening trilogy defaults on, chain and scanner fixes
Three hardening features from aeon-dev - capability tiers (§6), issues-as-state dual-write (§3), and votable health (§7) - now activate by default in any fork. The batch also fixes a silent coercion bug that had disabled §7, patches two latent chain-runner issues, and corrects the vuln-scanner disclosure endpoint.
- Port hardening easy wins: notify formatter, compact logs, verify output, schedule clusters, prune skills (#547)
- Capability tiers (§6) enforce read-only vs write mode per skill, now on by default (#548)
- Issues-as-state (§3) and votable health (§7) ship on by default with dual-write safety net (#550)
- `HEALTH_ISSUES` unset was coerced to 0, silently disabling votable health - now fixed (#552)
- Chain runner gets `issues:write` permission and var-less skill discovery fixed (#553)
- Hardening features documented: capability tiers, issues-as-state, votable health in README (#554)
- `validate-config.js` added - the shared validator `config-validator` already referenced but never committed (#546)
- Phylax-audit threat-string examples wrapped in backticks to prevent scanner false positives (#545)
- vuln-scanner disclosure endpoint corrected to `POST /security-advisories/reports` with explicit HTTP-code branching (#557)
- AeThree joins ecosystem: agent governance launchpad where token holders vote on AI models (#556)
- clawhunter-skills v0.2 listing: multi-venue support, per-bounty agentPlan, research tools (#555)
11 PRs included
- #557vuln-scanner: fix PVR reporting endpoint and disclosure flow (@aaronjmars)
- #556docs(ecosystem): add AeThree (@SamsShow)
- #555Update clawhunter desc (@clawhunter)
- #554docs: document capability tiers, issues-as-state, and votable health (@aaronjmars)
- #553fix(chain): add issues:write + fix var-less skill discovery in chain-runner (@aaronjmars)
- #552fix(§7): votable-health was silently default-OFF (unset HEALTH_ISSUES coerced to 0) (@aaronjmars)
- #550Enable §3 issues-as-state (dual-write) + §7 votable health by default, + read-only/gh-api hardening (@aaronjmars)
- #548Port hardening §6 capability tiers + §3 issues-as-state + §7 votable health Issues (@aaronjmars)
- #547Port hardening easy wins from aeon-dev (notify formatter, compact_logs, verify_output, schedule_clusters, prune_skills) (@aaronjmars)
- #546feat(scripts): add validate-config.js - the shared validator config-validator already calls (@aaronjmars)
- #545fix(phylax-audit): format example threat strings as inline-code (@usephylax)
skill-triage gets Phylax security pre-screen
Inbound skill PRs that reference a Base contract address or a declared payment/data endpoint now get a Phylax onchain + endpoint ALLOW/WARN/DENY verdict inline, alongside the existing static skill-scan pass. Pure-prompt skills - the common case - pass through unchanged.
- skill-triage runs Phylax onchain + endpoint audit on any skill PR declaring a contract address or payment endpoint (#544)
1 PR included
- #544feat(skill-triage): add Phylax onchain + endpoint security pre-screen (@aaronjmars)
dashboard README closes the last sub-app gap
The Aeon dashboard was the only sub-app without a README - the A2A and MCP servers got theirs in #501 and #512. One PR closes that gap: quickstart via `./aeon` or direct npm, the six views, configuration, and the loopback security gate, all documented.
- Dashboard README added: quickstart, six views, config reference, and remote-access security gate documented (#543)
1 PR included
- #543docs: add apps/dashboard/README.md (@aaronjmars)
phylax-audit skill, dashboard signal cleanup
Phylax ships a pre-install ALLOW/WARN/DENY verdict for external skills - the first supply-chain audit gate contributed from outside the core team. The dashboard feed gets fixed the same day to show only Aeon-launched runs, cutting Dependabot rows that were flooding real activity.
- `phylax-audit` gives a deterministic ALLOW/WARN/DENY verdict before any external skill install (#537)
- Dashboard feed and Runs tab now show only Aeon-launched events; Dependabot rows filtered out (#542)
- Phylax listed in ECOSYSTEM.md as an active security-layer contributor (#539)
- Code quality pass: shared utilities extracted, dead code removed, load-error UX improved (#540)
- Maintenance: 6 dependency/CI bumps
10 PRs included
- #542fix(dashboard): show only Aeon-launched runs in feed/runs (drop Dependabot) (@aaronjmars)
- #541chore(deps): group Dependabot updates per ecosystem + monthly (@aaronjmars)
- #540chore: code-quality pass - DRY, shared types, dead code, weak types + load-error UX fix (@aaronjmars)
- #539docs: add Phylax to ECOSYSTEM.md (@aaronjmars)
- #537feat(skill): add phylax-audit - pre-install ALLOW/WARN/DENY verdict for external skills (@usephylax)
- #536chore(deps-dev): bump @tailwindcss/postcss from 4.2.2 to 4.3.1 in /apps/dashboard (@dependabot[bot])
- #535chore(deps-dev): bump typescript from 5.9.3 to 6.0.3 in /apps/dashboard (@dependabot[bot])
- #534chore(deps): bump react and @types/react in /apps/dashboard (@dependabot[bot])
- #533chore(deps): bump react-dom from 19.2.4 to 19.2.7 in /apps/dashboard (@dependabot[bot])
- #532chore(deps-dev): bump @types/node from 22.19.15 to 26.0.0 in /apps/dashboard (@dependabot[bot])
community packs, MCP catalog, install pipeline hardening
Community packs drove this batch - Charon, Simmer, ClawHunter, Hunch, glim.sh, and logbook all joined the registry - while a run of dashboard fixes made pack discovery and install reliable enough that new forks start Core-only by default.
- Charon policy-guard pack runs pre-flight PASS/PAUSE/DENY checks before each skill (#511)
- Simmer Polymarket Trader: take live positions on Polymarket from an Aeon skill (#499)
- ClawHunter: Pump Fun bounty discovery and x402-paid content-studio skills (#498)
- Hunch: on-Base prediction markets with x402 position-taking (#472)
- glim.sh added to MCP catalog: semantic search, X, Reddit, GitHub live data (#470)
- Litebeam added to MCP catalog: x402-settled microservice routing layer (#508)
- Robinhood Agentic Trading MCP added: portfolio read and trade execution via OAuth (#489)
- logbook signed action-receipt pack listed in ecosystem (#507)
- Five ecosystem entries added: ClawHunter, Glim.sh, Lens, LiteBeam, Simmer (#528)
- Pack install auto-merges and ensures Actions can open PRs on fresh forks (#485)
- Installed community packs now appear in the dashboard skill roster (#490)
- Enabled-packs scoped per repo; new forks default to Core-only (#491)
- Pack `path` field forwarded correctly on dashboard one-click install (#493)
- `packs.json` regenerated on install so new skills appear without manual steps (#487)
- `validate-pack.sh` added for local pre-flight validation before opening a PR (#495)
- `skills.json` decoupled from `aeon.yml`; catalog CI no longer trips on config edits (#484)
- A2A gateway quickstart README added (#501)
- MCP server quickstart README added (#512)
- PR template added to surface contribution gates at submission time (#494)
- Stale skill references cleaned across docs, config, and issue templates (#503, #504, #505, #506, #531)
- README one-click dashboard pack install documented (#497)
- Only Claude models remain in aeon.yml; non-Claude Bankr options removed (#496)
- LICENSE copyright updated to Aeon Inc (#529)
- `@json-render` packages aligned on ^0.19 to eliminate dependency duplication (#526)
- Dependabot enabled for Actions workflows and npm workspaces (#513)
- README skill count synced to 183; packs table aligned, stale banner removed (#530, #488)
- Maintenance: 12 dependency/CI bumps
45 PRs included
- #531chore(skills): remove stale references to pruned skills (@aaronjmars)
- #530docs(readme): sync skill count to 183 (@aaronjmars)
- #529chore: update LICENSE copyright to Aeon Inc (@aaronjmars)
- #528docs(ecosystem): add ClawHunter, Glim.sh, Lens, LiteBeam, Simmer (@aaronjmars)
- #527docs(ecosystem): update NÜMETAL and GitKernal logo URLs (@aaronjmars)
- #526chore(dashboard): align @json-render/core + react on ^0.19 to dedupe (@aaronjmars)
- #525chore(deps): bump yaml from 2.8.3 to 2.9.0 in /apps/dashboard (@dependabot[bot])
- #524chore(deps): bump next from 16.2.6 to 16.2.9 in /apps/dashboard (@dependabot[bot])
- #523chore(deps-dev): bump tailwindcss from 4.2.2 to 4.3.1 in /apps/dashboard (@dependabot[bot])
- #522chore(deps-dev): bump wrangler from 4.98.0 to 4.103.0 in /apps/webhook (@dependabot[bot])
- #521chore(deps-dev): bump typescript from 5.9.3 to 6.0.3 in /apps/a2a-server (@dependabot[bot])
- #520chore(deps): bump gsap from 3.14.2 to 3.15.0 in /apps/dashboard (@dependabot[bot])
- #519chore(deps-dev): bump @types/node from 20.19.43 to 26.0.0 in /apps/a2a-server (@dependabot[bot])
- #518chore(deps-dev): bump typescript from 5.9.3 to 6.0.3 in /apps/mcp-server (@dependabot[bot])
- #517chore(deps-dev): bump @types/node from 22.20.0 to 26.0.0 in /apps/mcp-server (@dependabot[bot])
- #516chore(deps): bump @json-render/shadcn from 0.15.0 to 0.19.0 in /apps/dashboard (@dependabot[bot])
- #515chore(actions): bump actions/setup-node from 5 to 6 (@dependabot[bot])
- #514chore(actions): bump actions/checkout from 4 to 7 (@dependabot[bot])
- #513chore: add Dependabot for npm apps and GitHub Actions (@aaronjmars)
- #512docs: add apps/mcp-server/README.md with quickstart and Claude Desktop config (@aaronjmars)
- #511Add Charon AEON skill pack (@CharonAI-code)
- #509fix(mcp): use Litebeam's X avatar for the catalog logo (@aaronjmars)
- #508feat(mcp): add Litebeam as a featured MCP template (@aaronjmars)
- #507ecosystem: add logbook (@logbookbase)
- #506chore: purge remaining dangling refs to 2026-06-15 deleted skills (@aaronjmars)
- #505docs: refresh skill gallery + prune skill-graph of deleted skills (@aaronjmars)
- #504chore: remove dangling refs to 4 more skills deleted on 2026-06-15 (@aaronjmars)
- #503chore: remove dangling references to the deleted token-report skill (@aaronjmars)
- #501docs(a2a-server): add README quickstart for the A2A gateway (@aaronjmars)
- #499Add Polymarket Trader by Simmer to community skill packs (@adlai88)
- #498Add community skill pack: clawhunter-skills (@clawhunter)
- #497docs(readme): document one-click dashboard pack install (@aaronjmars)
- #496chore: list only Claude models (drop Bankr gateway non-Claude options) (@aaronjmars)
- #495feat: add scripts/validate-pack.sh - local pre-flight validator for community packs (@aaronjmars)
- #494docs: add pull request template (@aaronjmars)
- #493fix(dashboard): forward pack `path` as --path on install + copy command (@aaronjmars)
- #491fix(dashboard): scope enabled-packs per repo so forks default to Core-only (@aaronjmars)
- #490fix(dashboard): render installed community packs in the roster (data-driven groups) (@aaronjmars)
- #489feat(mcp-catalog): add Robinhood Agentic Trading MCP (@aaronjmars)
- #488docs(readme): align packs table + remove stale skills-aeon-197 image (@aaronjmars)
- #487fix(install): install-skill-pack regenerates packs.json so installs aren't invisible (@aaronjmars)
- #485feat(install-skill): zero-touch auto-merge + ensure Actions can open PRs (@aaronjmars)
- #484fix(catalog): decouple skills.json from aeon.yml (drop schedule field) (@aaronjmars)
- #472Add Hunch Prediction Markets skill pack (crypto) (@rajkaria)
- #470feat(mcp-catalog): add glim.sh (live-data MCP, x402 + MPP) (@tenequm)