token-pick
One token recommendation and one prediction market pick - scored, quantified, with a skip branch when signals are weak
git clone --depth 1 https://github.com/aeonfun/aeon /tmp/token-pick && cp -r /tmp/token-pick/skills/token-pick ~/.claude/skills/token-pickSKILL.md
<!-- autoresearch: variation B — sharper output via signal scoring, edge calculation, conviction tiers, and a skip-day branch -->
> **${var}** — Focus area or thesis (e.g. "AI tokens", "election markets", "contrarian bets"). If empty, scans broadly.
Read `memory/MEMORY.md` for context.
Read the last 7 days of `memory/logs/` and grep for prior `Token Pick` entries — extract the symbols and market questions already picked. **Hard dedup gate**: do not re-pick the same token or the same prediction market unless there is a materially new catalyst that you can name in one sentence.
## Goal
Produce ONE token call and ONE prediction-market call per day, each with a numeric signal/edge score and a conviction tier. If neither qualifies for at least MEDIUM conviction, send a short "no picks today" message rather than forcing a weak pick.
## Steps
### 1. Fetch token data
```bash
# Trending coins
curl -s "https://api.coingecko.com/api/v3/search/trending" \
${COINGECKO_API_KEY:+-H "x-cg-demo-api-key: $COINGECKO_API_KEY"}
# Top 250 by market cap with 24h and 7d changes
curl -s "https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&order=market_cap_desc&per_page=250&page=1&sparkline=false&price_change_percentage=24h,7d" \
${COINGECKO_API_KEY:+-H "x-cg-demo-api-key: $COINGECKO_API_KEY"}
# BTC + ETH 24h/7d for relative-strength benchmark (extract from the markets call above; no extra request needed)
# DEX-side cross-confirmation (no auth, optional but preferred)
curl -s "https://api.dexscreener.com/latest/dex/search?q=trending"
```
If any curl returns empty or errors, retry once with **WebFetch** for the same URL. Track per-source status (`cg=ok|fail`, `dex=ok|fail`) — surfaced in the output footer.
### 2. Fetch prediction markets
```bash
# Top events by 24h volume (events group multi-outcome questions)
curl -s "https://gamma-api.polymarket.com/events?active=true&closed=false&order=volume_24hr&ascending=false&limit=30"
# Newer markets gaining traction
curl -s "https://gamma-api.polymarket.com/markets?closed=false&order=startDate&ascending=false&limit=20"
```
WebFetch fallback on failure. Track `poly=ok|fail`.
### 3. Score every candidate token (0–10 scale)
For each token in the top 250 (and the trending list), compute a signal score:
| Signal | Points |
|---|---|
| 24h price change > 0 | +1 |
| 7d price change > 0 | +1 |
| Both 24h and 7d > +5% | +2 (in addition to above) |
| Appears on CoinGecko trending list | +2 |
| Volume/MarketCap ratio ≥ 0.10 | +2 |
| Volume/MarketCap ratio ≥ 0.20 (replaces above) | +3 |
| Outperforming BOTH BTC and ETH on the 7d | +2 |
| Confirmed on DexScreener trending/gainers (cross-source) | +1 |
| Matches `${var}` thesis when set | +1 |
Drop candidates with market cap < $20M (too pumpable) unless `${var}` explicitly targets micro-caps. Drop any token already picked in the last 7 days (per dedup gate) unless you can name a fresh catalyst.
Pick the highest-scoring token. Use **WebSearch** to surface the most likely catalyst and at least one named risk (regulatory, unlock, narrative-faded, exchange listing, etc.).
### 4. Score prediction markets — edge calculation
For the top ~10 markets by 24h volume that pass the dedup gate (and `${var}` filter when set), do this for each:
1. Read the question and current YES price (`price`/`outcomePrices`).
2. Use **WebSearch** to gather 1–3 recent data points relevant to the resolution.
3. Estimate a **fair YES probability** as a single number (your best calibrated guess, not a range). State the 1–3 inputs you used.
4. Compute `edge = |fair − current_price|` as percentage points.
5. Liquidity gate: require 24h volume ≥ $50k AND market not resolving in < 24h (no last-minute mean-reversion roulette).
Pick the market with the largest edge that clears the gate. If you cannot defend a fair-value estimate within ±10% (insufficient public info), discard and try the next market.
### 5. Conviction tiers
| Tier | Token criterion | Market criterion |
|---|---|---|
| HIGH | signal score ≥ 7 | edge ≥ 10pp |
| MEDIUM | signal score 4–6 | edge 5–10pp |
| SKIP | signal score < 4 | edge < 5pp |
**Skip-day branch**: if BOTH the chosen token and the chosen market land in SKIP, do not synthesize a pick. Send the skip message (step 6b) and log accordingly. This is a feature — forcing low-conviction picks degrades the signal of the whole feed.
### 6a. Notification — normal day (under 4000 chars)
Send via `./notify`:
```
*Daily Pick — ${today}*
*Token: SYMBOL* [HIGH | MEDIUM] signal X/10
Price: $X.XX (±X.X% 24h / ±X.X% 7d) | mcap $XB | vol $XM (vol/mcap X.XX)
Score breakdown: [trending+2, vol/mcap+3, RS vs BTC/ETH+2, narrative+1] = 8/10
Catalyst: [one sentence — what's driving this right now, named source/event]
Risk: [one sentence — concrete risk, not generic "could go down"]
Vs recent picks: [first time / repeat with new catalyst: ...]
*Market: "Question?"* [HIGH | MEDIUM] edge Xpp
Current: YES X¢ / NO Y¢ | 24h vol $Xm | resolves: DATE
Fair YES: ~Y% (inputs: [src1], [src2], [src3])
Thesis: [one sentence — why the market is wrong, action implied]
Risk: [one sentence — what could make your fair-value estimate wrong]
sources: cg=ok|fail, dex=ok|fail, poly=ok|fail
not financial advice — pattern-matching only
```
If only one of the two pick types qualifies, send just that one section (omit the other entirely — do not include a HIGH and a SKIP in the same message).
### 6b. Notification — skip day
```
*Daily Pick — ${today}* — no picks
Token signals weak today (best: SYMBOL @ score 3/10).
Markets either thin liquidity or no defensible edge ≥ 5pp (best: "Question?" edge 2pp).
Tomorrow.
sources: cg=ok|fail, dex=ok|fail, poly=ok|fail
```
If all sources failed, send `TOKEN_PICK_NO_DATA` with the source-status line — do not invent picks from cached intuition.
### 6c. Offer a deep-dive (force-reply — normal-day only)
Only after a **normal-day** send (6a) — never on the skip-day (6b) or the no-data path (weak signals →Set up and run an Aeon agent instance — get started from scratch, pick which skills to turn on or install more from packs, reschedule or change what runs, edit what an existing skill does, fix a skill that isn't firing, set the STRATEGY.md north star and soul/ voice, turn a coding-agent chat into a scheduled Aeon skill, and mine past coding-agent conversations for recurring work worth automating as a skill. Use when the user mentions Aeon, aeon.yml, an Aeon skill / instance / routine / pack, asks to schedule, enable, edit, or debug an agent that runs on a cron, or asks what of their repeated/manual work Aeon could take over.
Mention/keyword sweep on social platforms for [REPLACE: KEYWORDS] — trends, sentiment, top posts
5 concrete real-life actions, leverage-scored against open loops with specificity and anti-fluff gates
Static config-correctness linter for this instance - catches the silent-failure class (unquoted schedules, duplicate keys, unconfigured skills, mode typos, broken requires/MCP refs) that no run-based health skill can see. Notifies only on problems.
Pull framework updates from the upstream Aeon repo into this instance - 3-way merges canon's new commits into a PR, never clobbering operator config.
Write a publication-ready article in one of three angles - a trending long-form piece, a watched-repo thesis, or a project-through-a-lens essay. Optional Replicate hero image with --visual.
Automatically merge open PRs that have passing CI, no blocking reviews, and no conflicts
Two-mode aeon.yml workflow builder - analyze inspects URLs and emits a tiered, signal-verified skill-enablement plan plus an aeon.yml diff; enable flips slugs to enabled:true and opens a PR.