计划执行与检查节点
executing-plans
按既定实施计划完成工作,保持过程检查和反馈。
on the same line, ignoring `~` approximations)\n\nAlso extract prediction market picks from lines matching `**Market:**`:\n- The question text (in quotes)\n- The position taken (YES or NO)\n- The price/odds at pick time\n\nExpected log format (written by token-pick and monitor-polymarket):\n```\n- **Token:** XMR — $350.52 (+1.17% 24h, +2.55% 7d)\n- **Market:** \"US x Iran permanent peace deal by April 30?\" — NO $0.615 (YES 38.5%)\n```\n\nFocus on the last **30 days** of logs. If a token was picked multiple times, record each instance separately.\n\nIf zero picks are found in the window, log `PICKS_TRACKER_SKIP: no picks in last 30 days — enable token-pick / monitor-polymarket` and stop (no notification).\n\n### 2. Fetch current token prices\n\nFor each unique token symbol, fetch the current price from CoinGecko.\n\nFirst, try the search endpoint to get the coin ID. The optional demo key rides `./secretcurl`'s `{COINGECKO_API_KEY}` placeholder (never a bare `$SECRET` on the line); the header is only sent when a key is set:\n```bash\nCG_HDR=(); [ -n \"${COINGECKO_API_KEY:+x}\" ] && CG_HDR=(-H \"x-cg-demo-api-key: {COINGECKO_API_KEY}\")\n./secretcurl -s \"${CG_HDR[@]}\" \"https://api.coingecko.com/api/v3/search?query=SYMBOL\"\n```\n\nThen fetch the price:\n```bash\n./secretcurl -s \"${CG_HDR[@]}\" \"https://api.coingecko.com/api/v3/simple/price?ids=COIN_ID&vs_currencies=usd&include_24hr_change=true\"\n```\n\n**Fallback:** If curl fails, use WebFetch for the same URL (drop the API key header).\n\n**Common ID mappings** (use directly, skip search step):\n- HYPE → hyperliquid\n- XMR → monero\n- TAO → bittensor\n- ENJ → enjincoin\n- DASH → dash\n- ORDI → ordinals\n- MORPHO → morpho\n- RENDER → render-token\n- JUP → jupiter-exchange-solana\n- KAS → kaspa\n- ENA → ethena\n- ALGO → algorand\n- APT → aptos\n- FET → fetch-ai\n- ZEC → zcash\n- ETHFI → ether-fi\n\nFor tokens not in the list, use the search endpoint. If a symbol is ambiguous or the token isn't found, mark as `N/A (not found)`.\n\n### 3. Calculate performance\n\nFor each pick:\n```\nperformance % = ((current_price - pick_price) / pick_price) * 100\n```\n\nRound to 1 decimal place. Use a `~` prefix if the pick price was approximate.\n\nIf the same token was picked multiple times, calculate performance from each individual pick date.\n\nClassify each pick:\n- 🟢 **Win** — +10% or better\n- 🟡 **Hold** — between -10% and +10%\n- 🔴 **Loss** — -10% or worse\n\n### 4. Check prediction market pick resolution\n\nFor each prediction market pick, search the Polymarket API to check if the market resolved:\n```bash\n# Search by question text\ncurl -s \"https://gamma-api.polymarket.com/markets?closed=true&limit=10&q=KEYWORDS_FROM_QUESTION\"\n```\n\nIf WebFetch is needed: `https://gamma-api.polymarket.com/markets?closed=true&limit=10&q=KEYWORDS_FROM_QUESTION`\n\nFor each market pick:\n- If resolved: was the position correct? Mark ✅ (correct) or ❌ (wrong) or ⏳ (still open)\n- Note the resolution price/outcome if available\n\nMarkets with no Polymarket equivalent (internal or experimental markets) — mark as ⏳ or skip.\n\n### 5. Score summary\n\nTally the token picks:\n- Total picks in window\n- Wins / Holds / Losses count\n- Average return across all picks (equally weighted)\n- Best pick (highest % gain)\n- Worst pick (biggest % loss)\n- Hit rate: (wins / total_picks) * 100\n\nKeep it honest. No cherry-picking dates.\n\n### 6. Format and send notification\n\nSend via `./notify` (inline multi-line literal — do NOT pipe or use `$(cat)`):\n\n```\n*picks scorecard — [START_DATE] → [TODAY]*\n\n*token picks ([N] total)*\n[SYMBOL] [DATE] — picked $[PICK] → now $[CURRENT] ([PERF]%) [EMOJI]\n...sorted best to worst...\n\n*score: [WINS]W [HOLDS]H [LOSSES]L | avg [AVG]% | hit rate [HIT_RATE]%*\n*best: [SYMBOL] +[BEST]% | worst: [SYMBOL] [WORST]%*\n\n*market picks*\n[QUESTION_SNIPPET] — [POSITION] [STATUS_EMOJI]\n...\n\nno financial advice. just tracking the record.\n\nread it: https://github.com/aeonfun/aeon/blob/main/output/articles/picks-scorecard-${today}.md\n```\n\nKeep the message under 3000 chars. If too long, truncate to the most recent 10 picks.\n\n### 7. Save scorecard\n\nWrite a brief scorecard to `output/articles/picks-scorecard-${today}.md`:\n```markdown\n# Picks Scorecard — [DATE]\n\n## Token Performance\n| Symbol | Picked | Pick Price | Current | Change | Result |\n|--------|--------|-----------|---------|--------|--------|\n...\n\n## Summary\n- Window: last 30 days\n- Total picks: N\n- Wins / Holds / Losses: X / Y / Z\n- Average return: X%\n- Hit rate: X%\n\n## Market Picks\n| Question | Position | Status |\n...\n```\n\n### 8. Log to memory\n\nAppend to `memory/logs/${today}.md`:\n```\n### picks-tracker\n- **Window:** last 30 days (N picks)\n- **Score:** [WINS]W [HOLDS]H [LOSSES]L | avg [AVG]% | hit rate [HIT_RATE]%\n- **Best:** [SYMBOL] +[BEST]%\n- **Worst:** [SYMBOL] [WORST]%\n- **Notification sent:** yes\n- PICKS_TRACKER_OK\n```\n\n## Environment Variables\n\n- `COINGECKO_API_KEY` — optional, increases rate limits. Skill works without it via free tier + WebFetch fallback.\n","licenseDocuments":[]}}
picks-tracker【效率与协作】Retrospective on past token and prediction market picks - what hit, what flopped, what the score is
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Today is ${today}. Your task is to audit the last 30 days of token picks and score them against current prices.
Read memory/MEMORY.md for context.
curl works — there is no network sandbox. For every curl call, if it fails or returns empty/error, use WebFetch for the same URL as a fallback for a flaky public GET.
Scan the last 30 days of memory/logs/ for token picks. For each log file, grep for lines matching **Token:**. Extract:
$ on the same line, ignoring ~ approximations)Also extract prediction market picks from lines matching **Market:**:
Expected log format (written by token-pick and monitor-polymarket):
- **Token:** XMR — $350.52 (+1.17% 24h, +2.55% 7d)
- **Market:** "US x Iran permanent peace deal by April 30?" — NO $0.615 (YES 38.5%)
Focus on the last 30 days of logs. If a token was picked multiple times, record each instance separately.
If zero picks are found in the window, log PICKS_TRACKER_SKIP: no picks in last 30 days — enable token-pick / monitor-polymarket and stop (no notification).
For each unique token symbol, fetch the current price from CoinGecko.
First, try the search endpoint to get the coin ID. The optional demo key rides ./secretcurl's {COINGECKO_API_KEY} placeholder (never a bare $SECRET on the line); the header is only sent when a key is set:
CG_HDR=(); [ -n "${COINGECKO_API_KEY:+x}" ] && CG_HDR=(-H "x-cg-demo-api-key: {COINGECKO_API_KEY}")
./secretcurl -s "${CG_HDR[@]}" "https://api.coingecko.com/api/v3/search?query=SYMBOL"
Then fetch the price:
./secretcurl -s "${CG_HDR[@]}" "https://api.coingecko.com/api/v3/simple/price?ids=COIN_ID&vs_currencies=usd&include_24hr_change=true"
Fallback: If curl fails, use WebFetch for the same URL (drop the API key header).
Common ID mappings (use directly, skip search step):
For tokens not in the list, use the search endpoint. If a symbol is ambiguous or the token isn't found, mark as N/A (not found).
For each pick:
performance % = ((current_price - pick_price) / pick_price) * 100
Round to 1 decimal place. Use a ~ prefix if the pick price was approximate.
If the same token was picked multiple times, calculate performance from each individual pick date.
Classify each pick:
For each prediction market pick, search the Polymarket API to check if the market resolved:
# Search by question text
curl -s "https://gamma-api.polymarket.com/markets?closed=true&limit=10&q=KEYWORDS_FROM_QUESTION"
If WebFetch is needed: https://gamma-api.polymarket.com/markets?closed=true&limit=10&q=KEYWORDS_FROM_QUESTION
For each market pick:
Markets with no Polymarket equivalent (internal or experimental markets) — mark as ⏳ or skip.
Tally the token picks:
Keep it honest. No cherry-picking dates.
Send via ./notify (inline multi-line literal — do NOT pipe or use $(cat)):
*picks scorecard — [START_DATE] → [TODAY]*
*token picks ([N] total)*
[SYMBOL] [DATE] — picked $[PICK] → now $[CURRENT] ([PERF]%) [EMOJI]
...sorted best to worst...
*score: [WINS]W [HOLDS]H [LOSSES]L | avg [AVG]% | hit rate [HIT_RATE]%*
*best: [SYMBOL] +[BEST]% | worst: [SYMBOL] [WORST]%*
*market picks*
[QUESTION_SNIPPET] — [POSITION] [STATUS_EMOJI]
...
no financial advice. just tracking the record.
read it: https://github.com/aeonfun/aeon/blob/main/output/articles/picks-scorecard-${today}.md
Keep the message under 3000 chars. If too long, truncate to the most recent 10 picks.
Write a brief scorecard to output/articles/picks-scorecard-${today}.md:
# Picks Scorecard — [DATE]
## Token Performance
| Symbol | Picked | Pick Price | Current | Change | Result |
|--------|--------|-----------|---------|--------|--------|
...
## Summary
- Window: last 30 days
- Total picks: N
- Wins / Holds / Losses: X / Y / Z
- Average return: X%
- Hit rate: X%
## Market Picks
| Question | Position | Status |
...
Append to memory/logs/${today}.md:
### picks-tracker
- **Window:** last 30 days (N picks)
- **Score:** [WINS]W [HOLDS]H [LOSSES]L | avg [AVG]% | hit rate [HIT_RATE]%
- **Best:** [SYMBOL] +[BEST]%
- **Worst:** [SYMBOL] [WORST]%
- **Notification sent:** yes
- PICKS_TRACKER_OK
COINGECKO_API_KEY — optional, increases rate limits. Skill works without it via free tier + WebFetch fallback.