claude/skills/cex-earn-analyzer/SKILL.md
Scan Binance "币安最新活动" announcements for stablecoin earning/holding activities, extract structured details, and estimate real APY using on-chain data and price APIs. Use when the user wants to check stablecoin yields, compare earn products, find new stablecoin activities, or analyze whether advertised APY is realistic. Triggers on: "稳定币活动", "stablecoin yields", "理财活动", "earn products", "看看有什么活动", "稳定币收益", "活期产品", "定期产品", "币安理财", "yield arena", "赚币", "有什么稳定币可以投", "收益对比", "哪个稳定币收益高". Also trigger when the user mentions Binance earn, stablecoin comparison, or asks about safe yield opportunities on Binance.
npx skillsauth add dragonkid/dotfiles cex-earn-analyzerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Scan Binance announcements for stablecoin earning activities, verify advertised APY against on-chain reality, and produce a risk-adjusted comparison.
All data fetching uses public APIs — no browser or login required. The bundled scripts/fetch_data.py handles all network calls and returns structured JSON.
scripts/fetch_data.py provides these subcommands:
SCRIPT="$(dirname "$0")/../scripts/fetch_data.py" # when called from skill dir
# Or use the absolute path shown by the skill loader
python3 scripts/fetch_data.py announcements [--days N] # Binance CMS API → JSON list
python3 scripts/fetch_data.py stablecoins # DefiLlama → JSON list
python3 scripts/fetch_data.py ticker USDCUSDT RLUSDUSDT # Binance 24h ticker → JSON
python3 scripts/fetch_data.py price WLFIUSDT # Binance spot price → JSON
python3 scripts/fetch_data.py detail CODE1 CODE2 # defuddle → clean markdown per page
python3 scripts/fetch_data.py parse CODE1 CODE2 # detail + structured extraction → JSON
All output is JSON to stdout, errors to stderr.
fetch_data.py announcements → LLM classify → Exa verify unknowns → fetch_data.py detail → Filter → Verify APY → Output
python3 <skill-dir>/scripts/fetch_data.py announcements --days 30
Returns JSON array: [{title, code, date}, ...]
Key notes:
catalogId=93 = "币安最新活动" category. Only use this category.Do NOT use keyword-based filtering — it misses new stablecoins and produces false positives (e.g., "Share 300 USDT in rewards" is not a stablecoin earn activity).
Send all titles to the LLM in a single prompt and classify each as:
What counts as "stablecoin_earn":
Note: region restrictions and activity end dates cannot be determined from titles alone — these are filtered in Step 5 after extracting details.
For coins classified as "uncertain", search to determine if they are stablecoins:
web_search_exa: "[COIN_NAME] stablecoin OR pegged OR 稳定币"
Reclassify based on results. If still unclear, include in output with a note.
Use the parse subcommand instead of detail — it fetches the page via defuddle AND automatically extracts structured fields:
python3 <skill-dir>/scripts/fetch_data.py parse CODE1 CODE2 CODE3
Returns JSON array with pre-extracted fields:
[{
"code": "...", "url": "...",
"coin": "USDC", // auto-detected from table
"type": "Flexible", // Flexible / Locked / Hold Airdrop
"advertised_apr": "5.8%", // headline APR
"tier_limit": 200.0, // max amount at tier APR (e.g., ≤200 USDC gets 5.8%)
"tier_apr": "5.8%", // APR within tier limit
"base_apr": "0.8%", // APR above tier limit (Real-Time APR only)
"personal_limit": 300000000.0, // per-user max subscription
"start_time": "2026-04-01 00:00:00 UTC",
"end_time": "2026-04-30 23:59:59 UTC",
"is_ended": false, // auto-compared with current time
"reward_currency": "USDC", // same coin or different token
"region_restriction": null, // "Bahrain", "CIS", "GCC", etc. or null
"new_user_only": false,
"raw_table_text": "..." // fallback if auto-extraction missed something
}]
The script handles HTML table parsing, promotion period extraction, and tier limit detection automatically. This avoids the 100KB+ raw markdown problem from detail.
When to fall back to detail: If parse returns null for critical fields (coin, tier_limit) on a specific activity, use detail for that code and parse manually. The raw_table_text field provides a compact summary of the first table for quick LLM review.
Important distinctions:
The parse output already includes is_ended and region_restriction fields. Simply:
is_ended = trueregion_restriction (report them at the bottom as region-limited)new_user_only = true if the user is not a new user (ask if unclear)Two categories:
Fixed-rate earn products (e.g., USDC 5.5%, RLUSD 8%): Tiered APY is guaranteed within the tier limit. No verification needed — just note the tier cap.
Variable APY activities (e.g., hold-to-earn airdrops with fixed token pool): The advertised APY is illustrative only. Announcements use hypothetical numbers in examples (e.g., "假设年化收益率20%") — these are NOT promises. Always calculate an estimated range:
6a. Get reward token price:
python3 <skill-dir>/scripts/fetch_data.py price WLFIUSDT
6b. Get stablecoin circulating supply:
python3 <skill-dir>/scripts/fetch_data.py stablecoins
Find the coin by symbol, use market_cap_usd. Assume Binance holds 20-40% of total supply.
6c. Calculate estimated APY range:
annual_reward_value = (pool_per_period * token_price) * periods_per_year
APY = annual_reward_value / total_participating_amount
Conservative: 40% of circulating supply on Binance, 100% participate
Moderate: 40% on Binance, 25% participate
Optimistic: 40% on Binance, 5% participate
7a. Get market data:
python3 <skill-dir>/scripts/fetch_data.py ticker USDCUSDT RLUSDUSDT UUSDT USD1USDT WLFIUSDT
Returns [{symbol, price, volume_24h_usd}, ...]
For market cap, use the DefiLlama data already fetched in Step 6b.
7b. Assess each coin's risk level:
| Factor | Low | Medium | High | |--------|-----|--------|------| | Issuer track record | Years of operation, major issuer | Backed by known company, < 2 years | New project, unproven | | Regulatory status | Licensed (e.g., NYDFS) | Partial compliance | No clear regulation | | Reserve transparency | Regular third-party audits | Self-reported reserves | Opaque | | 24h trading volume | > $100M | $10M - $100M | < $10M | | Market cap | > $1B | $100M - $1B | < $100M | | Peg stability | Consistent $1.00 | Minor deviations (±0.5%) | Significant deviations | | Reward currency risk | Same coin (USDC→USDC) | N/A | Different volatile token |
Tag activities with status icons:
[NEW] — announced within the last 3 days[EXPIRING] — ends within the next 3 daysOutput each activity:
## [NEW] [Coin] [Type] — [Advertised APY]
| Field | Detail |
|-------|--------|
| Coin | ... |
| Risk | Low / Medium / High — [one-line reason] |
| Participation | ... |
| APY | ... (with tier breakdown) |
| Time | start → end [EXPIRING: highlight days remaining] |
| Link | announcement URL |
[If variable APY: include estimated range from Step 6]
End with a horizontal comparison table sorted by risk-adjusted return:
| 币种 | APR | 类型 | Tier 限额 | 截止时间 (UTC / 本地) | 风险 | 奖励币种 | 24h Vol | Market Cap | 状态 |
Show both UTC and the user's local timezone. Detect the user's timezone from system environment or conversation context. Example: Apr 30 23:59 UTC / May 1 07:59 UTC+8.
stablecoins subcommand returns market cap and circulating supply for all stablecoins.ticker and price subcommands are public, no API key needed.tools
Use when user wants to manage TODO items - adding tasks, listing pending items, marking done, removing, or searching. Triggers on /todo command or TODO-related requests.
tools
Use when creating a new skill, updating an existing skill, or troubleshooting skill frontmatter, gating, or slash command registration issues in OpenClaw.
tools
手动触发自我改进与记忆维护。分析近期 memory 文件,维护工作区文件,提出改进提案。触发方式:/self_improve 或用户说"自我改进"、"self improve"。
testing
测试 OpenClaw 配置中 LLM provider 的可用性。触发方式:/provider_check 或用户问"测试 provider 可用性"、"检查 provider 状态"、"provider 健康检查"。