Repository navigation
Expand file tree
/
Copy pathaeon.yml
More file actions
303 lines (260 loc) · 29.4 KB
/
Copy pathaeon.yml
File metadata and controls
303 lines (260 loc) · 29.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
# Aeon configuration
#
# Enable skills by setting enabled: true. Multiple skills at the same time run in parallel.
# Set var: "value" to pass a default parameter to the skill.
# Set model: "claude-haiku-5-5" per skill to override the default model (cost optimization).
# Set harness: "<name>" per skill (claude, grok, codex, pi, vibe, kimi, fx, cursor,
# hermes) to run it on a different coding-agent CLI than the default Claude Code
# harness (see the top-level `harness:` key below).
skills:
# --- Morning aggregation (7 AM UTC) ---
# --- Mid-morning (9 AM UTC) ---
miroshark-matchday: { enabled: false, schedule: "0 9 * * 5", var: "" } # Friday — pays $1 USDC each (x402, Finance District wallet, $4/run cap) for one MiroShark matchday sim per league (PL, Serie A, La Liga); delivers share links + reports, renders videos on local runs. var: league subset (pl,seriea,laliga) or one custom scenario
pr-triage: { enabled: false, schedule: "30 9 * * *", var: "" } # first-touch external-PR triage (verdict + label + welcoming comment); var: owner/repo or owner/repo#N for one-shot
pr-review: { enabled: false, schedule: "0 9 * * *", var: "" } # var: empty/owner/repo=per-PR review (posts comments) | --survey [dry-run] [owner/repo]=risk-tiered PR triage digest (folds in pr-merge)
auto-merge: { enabled: false, schedule: "0 14 * * *" } # merge green PRs daily at 2 PM UTC; max 3 per run
github-monitor: { enabled: false, schedule: "0 9 * * *", var: "" } # watch your repos. var: empty=combined monitor (PRs/issues/releases) | issues | releases | prs | owner/repo (folds in github-issues/github-releases/pr-tracker)
github-trending: { enabled: false, schedule: "0 9 * * *", var: "" } # trending repos + Hugging Face Hub. var: empty=GitHub | <lang> | hf | hf:{models,datasets,spaces}
# --- Midday (12 PM UTC) ---
token-movers: { enabled: false, schedule: "0 12 * * *", var: "" } # market-movers scan + single-token deep report. var: empty=movers (CoinGecko) | geckoterminal[:chain]=on-chain runners | category:<slug> | <address|symbol|token:sym>=single-token report. Optional COINGECKO/ALCHEMY/XAI/BASE_RPC keys.
onchain-monitor: { enabled: false, schedule: "0 12 * * *" }
distribute-tokens: { enabled: false, schedule: "workflow_dispatch", var: "" } # on-demand contributor rewards. var: empty/<label>=distribute (send) | plan[:week]=compute reward plan | all[:week]=plan+send | dry-run (folds in contributor-reward). BANKR_API_KEY for send.
defi-overview: { enabled: false, schedule: "0 12 * * *", var: "" } # one-pass DeFi read: tracked-protocol positions + macro context (regime verdict, movers, yields, fees, F&G, prediction markets; refreshes memory/topics/market-context.md). var: empty=full | positions[:label] | macro | <chain/protocol focus>. Optional COINGECKO_API_KEY.
compute-resell: { enabled: false, schedule: "15 6,14,18 * * *", var: "" } # resell free/low-cost provider compute on the Surplus Intelligence marketplace, one reactive engine per enabled provider (bankr / aws / vertex). Reads the live order book + your cost + usage, auto-lists your models, prices each offer to win routing within floor/cap guardrails. Enable a provider by setting its wallet + credential: bankr = SURPLUS_SELLER_KEY + BANKR_LLM_KEY; aws = SURPLUS_SELLER_AWS_KEY + BEDROCK_API_KEY + BEDROCK_BASE_URL var; vertex = SURPLUS_SELLER_VERTEX_KEY + VERTEX_SERVICE_ACCOUNT_JSON + VERTEX_PROJECT_ID/VERTEX_LOCATION vars. var: empty=all enabled providers reactive | <provider> | [<provider>:]{monitor|reprice|pause|resume}. Optional per-provider *_COMPUTE_RESELL_CONFIG.
# --- Hound onchain investigation (on-demand; var = address / tx hash) ---
investigation-report: { enabled: false, schedule: "workflow_dispatch", var: "" } # var: <token-address> [--checks=rug,contract,deployer,holders,honeypot,lp] [--depth=quick|deep] — composite investigation (folds in rug-scan/contract-audit/deployer-trace/holder-concentration/honeypot-check/lp-lock). read-only
tx-explain: { enabled: false, schedule: "workflow_dispatch", var: "" } # var: tx hash — plain-English decode
deploy-uni-hook: { enabled: false, schedule: "workflow_dispatch", harness: "claude", model: "claude-opus-5-5", var: "" } # generate+audit+simulate+deploy a Uniswap v4 hook + test pool on any v4 chain. var: [arm:][template:dynamic|noop|skim] [chain:base-sepolia] <brief>. Dry-run by default; arm: to broadcast (needs HOOK_DEPLOYER_PRIVATE_KEY burner). Testnet default; mainnet behind arm:+explicit chain:+HOOK_MAINNET_OK=1. Opus-pinned: freeform hook-gen is hard.
arc-studio: { enabled: false, schedule: "workflow_dispatch", var: "" } # Drive Arc Studio on Arc testnet. var: empty/poll=attach an in-flight turn, else silent | <prompt>=one detached turn | answer:<json array or sentence>=reply to needs_input. Needs ARC_STUDIO_TOKEN. One turn at a time. On-demand until you set a cron to poll.
monitor-polymarket: { enabled: false, schedule: "30 12 * * *", var: "" } # prediction-market monitor (Polymarket + Kalshi) — 24h moves, volume, comments, conviction alerts. var: empty=both | polymarket | kalshi | polymarket:<slug> | kalshi:<ticker>
token-pick: { enabled: false, schedule: "0 12 * * *" }
price-alert: { enabled: false, schedule: "*/30 * * * *", var: "" } # every 30 minutes — fire on tracked-token ATH, ±20% 1h move, or operator-set target crossing (var=target_price,target_price2,...). Silent on normal runs. Set var=dry-run to skip notify.
narrative-tracker: { enabled: false, schedule: "30 13 * * *" } # track rising/peaking/fading narratives
unlock-monitor: { enabled: false, schedule: "0 10 * * 1" } # weekly token unlock/vesting tracker
# --- Afternoon (2 PM UTC) ---
article: { enabled: false, schedule: "0 14 * * *", var: "" } # long-form article. var: empty=standard | repo:<owner/repo> | lens:<topic>; append --visual for a Replicate hero image (angles fold in repo-article/project-lens/technical-explainer)
digest: { enabled: false, schedule: "0 14 * * *", var: "" } # topic digest across web + X + RSS. var: empty=web | <topic> | rss[:<topic>] | "<topic> +rss" (RSS feeds from memory/feeds.yml)
you-web-search: { enabled: false, schedule: "workflow_dispatch", var: "" } # on-demand — high-quality web search via You.com API. var: search query/topic; runs keyless with no setup (100/day per IP), YDC_API_KEY unlocks keyed limits + livecrawl via YOUCOM_LIVECRAWL
last30: { enabled: false, schedule: "workflow_dispatch", var: "" } # on-demand — cross-platform 30-day social research
search-skill: { enabled: false, schedule: "0 14 * * *" }
# --- Repo intelligence (3 PM UTC) ---
# --- Late afternoon (4 PM UTC) ---
changelog: { enabled: false, schedule: "0 16 * * *", var: "" } # changelog from recent commits/PRs. var: empty/owner/repo=in-repo | push-to:owner/website-repo=cross-repo changelog PR (needs GH_GLOBAL)
vuln-scanner: { enabled: false, schedule: "0 16 * * 6", var: "" } # security scan + disclose. var: empty/owner/repo=scan | resubmit[:owner/repo]=PVR re-submit | disclose=queue armed emails (folds in pvr-watchlist/disclosure-emailer). RESEND_* for email.
sc-audit: { enabled: false, schedule: "workflow_dispatch", model: "claude-opus-5-5", var: "" } # deep smart-contract audit (Slither best-effort + agentic invariant/access-control/oracle pass + optional Echidna/Medusa fuzz) of a Solidity repo OR live onchain contract. var: empty=auto-select fresh Solidity feed | owner/repo | <chain>:0x<addr> (onchain, operator-gated, never auto-filed) | fixture:<name>. Contract arm split out of vuln-scanner; routes findings through its shared disclosure machinery. ETHERSCAN/BLOCKSCOUT/RESEND_* optional. Opus-pinned: invariant reasoning is hard.
deploy-prototype: { enabled: false, schedule: "workflow_dispatch", var: "" } # on-demand — build app and deploy to Vercel
base-mcp: { enabled: false, schedule: "workflow_dispatch", var: "" } # on-demand — Base Account access via the Base MCP server (mcp.base.org)
robinhood-mcp: { enabled: false, schedule: "workflow_dispatch", var: "" } # on-demand — Robinhood Agentic Trading via the Robinhood MCP (agent.robinhood.com, OAuth Connect in the dashboard). var: empty=portfolio report | orders[:N] | trade:<explicit one-order instruction> (only writing branch; refuses ambiguous orders)
glim-mcp: { enabled: false, schedule: "workflow_dispatch", var: "" } # on-demand — live-data research via the glim.sh MCP (web/X/Reddit/GitHub/Amazon/YouTube; OAuth Connect in the dashboard, pay-per-call from glim balance). var: research question, append --deep for a wider sweep
executor-mcp: { enabled: false, schedule: "workflow_dispatch", var: "" } # on-demand — run a task through the Executor Cloud tool catalog (executor.sh/mcp; one MCP endpoint proxying the operator's connected integrations, per-tool allow/approve/block policies; OAuth Connect in the dashboard). var: the task
finance-district-mcp: { enabled: false, schedule: "workflow_dispatch", var: "" } # on-demand — multichain non-custodial agent wallet via the Finance District MCP (keys in a TEE, server-side spend caps; OAuth Connect in the dashboard). var: empty=daily wallet brief | best USDC yield on Base | swap 5 USDC to ETH on Base | pay <x402-url> for <data>
taskmarket-delegate: { enabled: false, schedule: "workflow_dispatch", var: "" } # on-demand — browse/create/submit work on the TaskMarket agent-worker market (api.taskmarket.dev). var: browse[:query] | create "<title>" "<desc>" [reward] | submit <taskId> <message> [url]. Write actions need TASKMARKET_API_KEY + explicit operator authorization.
autoresearch: { enabled: false, schedule: "workflow_dispatch", var: "" } # on-demand — set var to skill name to evolve
create-skill: { enabled: false, schedule: "workflow_dispatch", var: "" } # one-shot skill creator — set var to a description prompt
install-skill: { enabled: false, schedule: "workflow_dispatch", var: "" } # on-demand — install a community skill pack and open a PR; var: owner/repo [skill...]
pack-submit: { enabled: false, schedule: "workflow_dispatch", var: "" } # on-demand — publish a local skill as a community pack + submit registry PR; var: skill-slug [--repo o/r] [--no-register] [--dry-run]
# --- X / social (5 PM UTC) ---
fetch-tweets: { enabled: false, schedule: "0 17 * * *", var: "" } # curate X/Twitter. var: keyword:<q> | topic:<t> | account:<handle> (empty=digest tracked accounts) | list:<ids>[|topic] | agent-buzz[:<t>]. Optional XAI_API_KEY.
reply-maker: { enabled: false, schedule: "0 17 * * *", var: "" } # draft X replies. var: empty=discover reply-worthy tweets | @handle | <listID> | <topic> | from-logs (reply to flagged log opportunities). Optional XAI_API_KEY.
# --- Content distribution (runs 30 min after article-generating skills) ---
# --- Evening / meta (6 PM UTC) ---
strategy-builder: { enabled: false, schedule: "workflow_dispatch", var: "" } # on-demand — draft STRATEGY.md (north-star / priorities / audience / constraints) from a brief + repo README + memory. var: bare goal text, or structured brief "repo=owner/repo | links=url1,url2 | goal=free text". Powers the dashboard Strategy → Build my strategy button. No API key needed.
skill-health: { enabled: false, schedule: "0 18 * * *", var: "" } # self-healing health audit + analytics. var: empty=health (files/resolves issues) | <skill>=single | analytics[:hours]=fleet run/pass-rate metrics (folds in skill-analytics)
aeon-doctor: { enabled: false, schedule: "0 15 * * 1", var: "" } # weekly Mon 15:00 UTC — static config-correctness linter (silent-failure class: unquoted schedules, dup keys, unconfigured-on-disk, requires-as-list, mode typo, mcp ${VAR}, multi-line entries). read-only; notifies only on problems. var: empty=whole config | <skill>=one skill
self-improve: { enabled: false, schedule: "0 18 1/2 * *", var: "" } # every other day — improve the agent, or audit it. var: empty/improve[:focus]=propose+apply one fix | audit[:focus]=review what ran/failed (folds in self-review)
action-converter: { enabled: false, schedule: "0 18 * * *" }
skill-repair: { enabled: false, schedule: "reactive", var: "" } # reactive — auto-fix failing skills
# --- Cost tracking (Monday 7 AM UTC, weekly) ---
# --- Weekly (Monday only) ---
fork-fleet: { enabled: false, schedule: "0 10 * * 1", var: "" } # fork divergence: code (unique commits/skills) + config (aeon.yml vs upstream defaults; folds in fork-digest). var: empty=both | code | config | fork=owner/repo | repo=owner/repo
aeon-update: { enabled: false, schedule: "0 11 * * 1", var: "" } # weekly Mon 11:00 UTC — pull upstream framework changes (canon) into this instance as a PR; 3-way merge, never clobbers operator config. var: empty=sync | report (dry) | repo=owner/name | reset=fork-point
spawn-instance: { enabled: false, schedule: "workflow_dispatch", var: "" } # on-demand — var: "name: purpose"
fleet-control: { enabled: false, schedule: "0 9,15 * * *", var: "" } # managed child instances. var: empty=health check | status | dispatch <inst|*> <skill> [var=…] | scorecard (fleet-wide runs/tokens/cost/reliability; folds in fleet-scorecard)
shiplog: { enabled: false, schedule: "0 9 * * 1" } # everything shipped SINCE THE LAST RUN (memory/state/shiplog-last.json) — cross-repo PRs/commits, security fixes merged into others' repos, star deltas, X/ecosystem traction → digest article + ready-to-post shiplog in the operator's voice. Cadence-agnostic: this schedule just sets frequency (daily/weekly/on-demand). Config: memory/products.md + memory/watched-repos.md. Optional XAI_API_KEY (X traction) + GH_GLOBAL (cross-repo reach). var: since:DATE | days:N | dry-run | owner/repo | <theme>.
operator-scorecard: { enabled: false, schedule: "30 10 * * 1", var: "" } # Monday — weekly plain-language scorecard: agent health + community growth + economic activity (worst-of-three OK/WATCH/DEGRADED verdict). var: empty=scorecard (7d) | dry-run=no notify | N=window N hours | ops[ DATE]=end-of-day ops recap (shipped/failed/follow-up) | push[ owner/repo]=diff-deep-dive push recap (folds in ops-recap + push-recap)
# --- Paid ads (AdManage.ai) ---
schedule-ads: { enabled: false, schedule: "0 8 * * *", var: "" } # daily 08:00 UTC — paid ads via AdManage.ai. var: empty=schedule ad launches across Meta/TikTok/Snapchat/Pinterest/LinkedIn from config.yaml (PAUSED by default) | create=provision Meta campaigns/ad sets on-demand from config.create.yaml (PAUSED, IDs written back to state so the schedule branch can launch into them; folds in create-campaign)
# --- Utilities ---
auto-workflow: { enabled: false, schedule: "workflow_dispatch", var: "" } # on-demand aeon.yml builder. var: <url[,url]>=analyze→enablement plan | enable:<slugs>=flip enabled:true (validate, commit, PR); enable:dry-run:<slugs> (folds in skill-enabler)
# --- Ported from derivative instances (PR #219) ---
# Markets & crypto
pm-manipulation: { enabled: false, schedule: "15 13 * * *" } # daily — flag suspected PM manipulation from 3-day price/volume/comment + local-press anomalies
# Research & content
narrative-convergence: { enabled: false, schedule: "0 13 * * *", var: "" } # daily 13:00 UTC — cross-skill convergence detector: entities/themes surfaced by 3+ independent skill categories in 48h = high-confidence write opportunities. Category map in memory/topics/signal-categories.md. Pass var to filter.
# Security
vuln-tracker: { enabled: false, schedule: "30 16 * * *", var: "" } # daily lifecycle poll: vuln-scanner PR/advisory status + PVR triage + disclosure-queue aging (folds in pvr-triage/disclosure-tracker). var: empty=full | pvr | queue | prs | <GHSA-id>
# Ideas & productivity
idea-pipeline: { enabled: false, schedule: "0 18 * * 1" } # Monday — execution-gap audit: top 3 backlog ideas to build this week
# Self-maintenance / meta
# --- Ported from aeon-aaron ---
# Infra & health
# Markets & crypto
picks-tracker: { enabled: false, schedule: "0 9 * * 0" } # Sunday 09:00 UTC — 30-day retrospective scoring token + prediction-market picks from logs against current prices; W/H/L + hit rate; honest record-keeping. Pairs with token-pick / monitor-polymarket.
# Content pipeline
soul-builder: { enabled: false, schedule: "workflow_dispatch", var: "" } # on-demand — build a SOUL from any mix of sources (X handle, full name, links), drafting soul/SOUL.md + STYLE.md + examples so every content skill speaks in that voice. var: bare X handle, or structured brief "x=handle | name=Full Name | links=url1,url2". Powers the dashboard Soul → Build my soul button. XAI_API_KEY optional (name/links use built-in WebSearch/WebFetch).
# Social
mention-radar: { enabled: false, schedule: "25 7 2/2 * *", var: "" } # every other day — external web/social mentions of the operator's projects (discovery/confusion/friction/competitor taxonomy + engagement opportunities). var: comma-separated project names; falls back to MEMORY.md / memory/topics/projects.md
# Sports
# --- Ported from derivative instances (2026-06-29) ---
# Security (pairs with vuln-scanner ↑ channel 5d)
inbox-triage: { enabled: false, schedule: "30 11 * * *" } # daily 11:30 — GitHub notification-inbox triage (maintainer replies to disclosures/advisories/mentions)
# Dev & repo
feature: { enabled: false, schedule: "0 10 * * 6", var: "" } # build a feature + open PR. var: watched (default) | external:<owner/repo> | dormant[:<owner/repo>], append --fix-issues (folds in external-feature/repo-revive). GH_GLOBAL for external.
feedback-builder: { enabled: false, schedule: "0 */6 * * *", var: "" } # read agent reports from a service's /feedback endpoint, triage + cluster, build the top accepted one as a PR. Sources in memory/feedback-sources.md or var "<feedback-url> <owner/repo>"; dry-run: prefix; --max N. Optional FEEDBACK_TOKEN.
# Research & content
write-tweet: { enabled: false, schedule: "0 21 * * *", var: "" } # tweet studio. var: empty=drafts (10×5 tiers) | thread [topic] | remix [window]. Optional XAI_API_KEY (required for remix).
bd-radar: { enabled: false, schedule: "20 7 * * *", var: "" } # daily 07:20 — BD radar: who's building/forking/integrating/mentioning your products → ranked leads. Products from memory/products.md. Quiet unless high-intent.
# --- Ported from derivative instances (2026-08-08) ---
# Security (pairs with vuln-scanner)
hunter-22: { enabled: false, schedule: "0 10 * * *", var: "" } # daily bounty scan against ClawHunter's free discovery API (docs/ClawHunter-API.md) — capability-matched, triaged for real work vs content-farming, dedup'd against memory/topics/hunter-22-seen.json. Discovery only, no wallet, never claims/submits; audit-shaped matches with a linked GitHub repo get a one-tap "run vuln-scanner on it" button in the notification.
# Product / ops (config: memory/products.md)
# Self-maintenance / meta
memory-flush: { enabled: false, schedule: "30 23 * * *" } # daily — promote important recent log entries into MEMORY.md
# Utilities / on-demand
send-email: { enabled: false, schedule: "workflow_dispatch", var: "" } # on-demand — compose + send a 1:1 email to a named recipient via Resend (general sibling of disclosure-emailer). var: "to=… | subject=… | about=…"
idea-forge: { enabled: false, schedule: "0 9 * * 1", var: "" } # weekly business-idea engine. var: empty/generate=timing-scored wedges | validate[:theme]=viability screen | memo[:theme]=2 evidence-backed memos
seo-audit: { enabled: false, schedule: "0 13 * * *", var: "" } # daily on-page + technical SEO audit of every page on a site. var: comma-separated origins (empty = no target, no-op). PAGESPEED_API_KEY folds in Core Web Vitals
posthog-errors: { enabled: false, schedule: "0 15 * * 1", var: "" } # weekly cross-project PostHog error digest. Needs PostHog MCP connected in the dashboard. var: empty=all projects/7d | Nd window | project-name substrings
rightstack: { enabled: false, schedule: "workflow_dispatch", var: "" } # on-demand Web3 stack advisor. var: <build goal> | recommend:<goal> | workflow:<id> | compare:<a>|<b> | explain:<tool> | migrate:<package>. Read-only; pinned to rightstack@0.3.2 schema v1 JSON.
# On-demand (run from the dashboard / `./aeon skills run`; create-prove is also dispatched by the dev-loop chain)
competitor-monitor: { enabled: false, schedule: "workflow_dispatch", var: "" } # snapshot competitor pages (pricing, headings, CTAs, new/removed pages) and report what changed. var: comma-separated URLs
cortx-reliability: { enabled: false, schedule: "workflow_dispatch", var: "" } # check an x402 endpoint's paid delivery rate, incidents, and latency before spending on it. var: endpoint URL (required)
create-prove: { enabled: false, schedule: "workflow_dispatch", var: "" } # run a changed skill for real at a PR head and attach SHA-bound proof. var: owner/repo#pr@<40-char sha>
higgsfield: { enabled: false, schedule: "workflow_dispatch", var: "" } # generate images/video via the Higgsfield MCP. var: the generation request (required)
remotion: { enabled: false, schedule: "workflow_dispatch", var: "" } # render a short (~10s) Remotion video from a brief. var: <brief> [--orientation ...] [--theme ...]; empty = no-op
skill-article: { enabled: false, schedule: "workflow_dispatch", var: "" } # receipts-first launch article for any skill in this instance. var: <skill-name> [--brand <handle>] [--banner]
spend-watch: { enabled: false, schedule: "workflow_dispatch", var: "" } # cloud-cost analyst across Neon, Vercel, Railway, GitHub Actions. var: scope selector + optional arm flag
submit-hook: { enabled: false, schedule: "workflow_dispatch", var: "" } # submit a deployed Uniswap v4 hook to the univ4-hooks registry. var: hook address; empty = latest live deploy
video-script: { enabled: false, schedule: "workflow_dispatch", var: "" } # receipts-first, recording-ready video script. var: <source> [--minutes N]
weekly-aeoncard: { enabled: false, schedule: "workflow_dispatch", var: "" } # weekly token-consumption recap card (SVG) from memory/token-usage.csv. var: window + delivery control
# --- Fallback (must be last) ---
heartbeat: { enabled: true, schedule: "0 8 * * *", var: "" } # ambient fleet-health check (default) — surfaces anything worth attention. var: empty=ambient check | <area>=ambient focused on that area | brief[:<area>]=priority brief (3 things to focus on, why now, what moved; folds in priority-brief)
# Reactive triggers — event-driven skill dispatch based on cron-state.json conditions.
# Skills with schedule: "reactive" are never cron-matched. Instead, the scheduler
# evaluates their trigger rules after processing cron skills.
#
# Format: trigger: { on: <source-skill>, when: "<condition>" }
# Conditions (evaluated by scripts/reactive_when.sh):
# consecutive_failures >= N - source skill failed N+ times in a row
# success_rate <op> X - success rate vs threshold; op is < <= > >= and X
# is a 0.0-1.0 float. Only checked once the source
# skill has run at least once (a never-run skill is
# 0.0 and would otherwise false-fire `< X`).
# last_status = <value> - source skill's last run ended <value> (e.g.
# success), for chaining
#
# Multiple triggers: trigger: [{ on: a, when: "..." }, { on: b, when: "..." }]
# Any matching trigger fires the skill (OR logic).
reactive:
# skill-repair:
# trigger:
# - { on: "*", when: "consecutive_failures >= 3" }
# autoresearch:
# trigger:
# - { on: skill-health, when: "last_status = success" }
# Chains — multi-step skill pipelines with parallel execution and output passing.
# Steps run sequentially; use parallel: [...] for concurrent execution within a step.
# Skills with consume: [...] receive prior step outputs injected into their context.
#
# Format:
# chains:
# chain-name:
# schedule: "cron expression"
# on_error: fail-fast # fail-fast (default) | continue
# max_dispatches: 10 # optional total-dispatch cap for the chain
# steps:
# # Multi-key steps use flow-brace form so they stay valid YAML when uncommented.
# - { parallel: [skill-a, skill-b] }
# - { skill: skill-c, consume: [skill-a, skill-b] }
# # Conditional routing on the consumed skill's Haiku score (1-5). A step
# # with when: runs only if the condition holds; a missing score does NOT
# # fire, so always pair branches with an unconditional fall-through.
# # Operators: == != < > <= >= (ordering needs an integer on both sides).
# - { skill: polish, consume: [skill-c], when: "score > 3" }
# - { skill: rewrite, consume: [skill-c], when: "score <= 3" }
chains:
# Provider-neutral, operator-dispatched coding loop: the feature and review
# skills use whichever harnesses the operator configured for those skills.
# A human still decides whether to merge. An explicit external target is
# required so feature can never fall back to every watched repository.
dev-loop:
schedule: "workflow_dispatch"
on_error: fail-fast
max_dispatches: 5
steps:
- { skill: feature, var: "$chain_target" }
- { skill: pr-review, var: "$feature_pr", consume: [feature] }
# morning-digest:
# schedule: "0 7 * * *"
# on_error: fail-fast
# steps:
# - { parallel: [token-movers, github-trending] }
# - { skill: digest, consume: [token-movers, github-trending] }
# Default model for all skills. Override per-run via workflow_dispatch.
# Options: claude-sonnet-5-5, claude-opus-5-5, claude-haiku-5-5
# (older claude-sonnet-5 / claude-opus-4-8 still accepted)
# (Grok harness model: grok-4.7, the flagship reasoning model and grok's current
# default, run with --no-subagents in CI; grok-4.6 is also offered, and an existing
# grok-4.5 pin is still accepted on an X-account login. grok-4.7 is the gateway
# default too. The older coding ids (grok-build-0.1, grok-composer-2.5-fast,
# grok-4.3) are gateway-only, reachable via XAI_API_KEY + the GROK_MODEL var.)
# The non-claude harnesses use their OWN model ids (codex openai/*, kimi moonshotai/*,
# vibe mistralai/*, pi deepseek/*) — surfaced in the dashboard picker per harness; see
# docs/harnesses.md. The value below only applies to the claude/grok harnesses.
model: claude-sonnet-5-5
# Agent harness — which coding-agent CLI runs your skills.
# claude (default) — Claude Code (`claude -p`); uses the AI Gateway below.
# grok — Grok Build (`grok`); logs in with your X account
# (GROK_CREDENTIALS, captured in the dashboard) or an
# XAI_API_KEY. Bypasses the gateway (grok has its own auth).
# codex/pi/vibe/kimi - OpenAI Codex, Pi, Mistral Vibe, Moonshot Kimi. A single
# OPENROUTER_API_KEY drives all four, or each can use its own
# native auth (ChatGPT/Moonshot login, provider key).
# fx - Vercel fx (AI_GATEWAY_API_KEY; no OpenRouter fallback).
# cursor - Cursor CLI (CURSOR_API_KEY).
# hermes - Nous Research Hermes Agent (HERMES_AUTH or OpenRouter).
# All nine run through harness-adapter/run-harness (one Claude-Code-shaped
# contract). GLM is a gateway provider, not a harness. See docs/harnesses.md for
# models, auth, and verification.
# Override per-skill with `harness: "<name>"` in the skill entry, or per-run via
# the workflow_dispatch `harness` input. Default stays claude — everything
# already configured keeps working unchanged.
harness: claude
# AI Gateway — route Claude Code requests through an LLM provider.
#
# provider: auto (default) resolves at RUN TIME from whichever provider secret
# is set, in priority order — no need to re-pin when you add/remove a key:
# claude (CLAUDE_CODE_OAUTH_TOKEN) → anthropic (ANTHROPIC_API_KEY) →
# openrouter → bankr → usepod → venice → surplus → grok → glm → direct (fallback)
# Override the order with the repo variable GATEWAY_ORDER (space-separated).
#
# Or PIN one explicitly: direct | bankr | openrouter | usepod | venice | surplus | grok | glm |
# hivemindos. hivemindos routes Claude Code at HivemindOS Models, an
# OpenAI-compatible endpoint billed to a credit balance rather than to a provider
# account of your own: set the secret HIVEMINDOS_CREDIT_TOKEN, and optionally the
# repo variables HIVEMINDOS_MODEL (a catalog id such as anthropic/claude-sonnet-5.5;
# default inclusionai/ling-3.0-flash) and HIVEMINDOS_BASE_URL. On a model that
# honours it, HIVEMINDOS_REASONING=keep drops the reasoning tokens an unattended
# run does not need.
# grok routes Claude Code at xAI's Anthropic-compatible api.x.ai (XAI_API_KEY) —
# this is the gateway path; to run the grok CLI itself, set `harness: grok` above.
# glm routes Claude Code at Z.AI's Anthropic endpoint (GLM_API_KEY / ZAI_API_KEY).
# For Anthropic-compatible endpoints (direct), set repo variable ANTHROPIC_BASE_URL
# + secret ANTHROPIC_API_KEY. Example: https://api.deepseek.com/anthropic
# Bankr docs: https://docs.bankr.bot/llm-gateway/overview
gateway:
provider: auto
# Output channels
channels:
jsonrender:
enabled: true # Set to true (or JSONRENDER_ENABLED=true as repo var) to write json-render specs
# Messaging integration
# Polls for messages every 5 minutes on Telegram/Discord/Slack.
telegram:
enabled: true
# Observability (optional) — no config lives here; it's credential-driven.
# Set the repo secrets LANGFUSE_PUBLIC_KEY + LANGFUSE_SECRET_KEY and every
# Claude Code run streams to your Langfuse project as a trace (LLM calls,
# tokens, cost, prompts/responses). Region/toggles are repo variables:
# LANGFUSE_HOST (default EU cloud), LANGFUSE_TRACING (0 to disable),
# LANGFUSE_LOG_CONTENT (0 = metadata only). See docs/langfuse.md.