Skip to content
Agentmart
Submit a tool

token-movers

Crypto market scanner and single-token analyst - movers scans top winners/losers/trending or on-chain runners with pump-risk flags; single-token produces a…

Skill by aeonfun

IndexedMIT★ 782
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/aeonfun-token-movers

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Crypto market scanner and single-token analyst - movers scans top winners/losers/trending or on-chain runners with pump-risk flags; single-token produces a verdict-first deep report for one token.

Use cases: documents, finance

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/token-movers

What's inside

Skill name
token-movers
Description
Crypto market scanner and single-token analyst - movers scans top winners/losers/trending or on-chain runners with pump-risk flags; single-token produces a verdict-first deep report for one token.
License
MIT
Metadata
var: · mode: write · title: Token Movers · category: basics
Instructions
674 lines in SKILL.md · view on GitHub

Before installing

  • Instructions call the network

Agent Skills spec issues

  • body: 674 lines (spec recommends under 500)

Files (1)

  • SKILL.md

SKILL.md (first lines)

<!-- autoresearch: variation B — consolidated hub. Folds monitor-runners (GeckoTerminal on-chain runner scan w/ composite Runner Score) and token-report (verdict-first single-token deep report) behind a source + mode selector. Movers = broad market scan (CoinGecko winners/losers/trending OR GeckoTerminal runners); single-token = deep per-token report. Sharper output everywhere: enrich, score, flag pump risk, lead with the verdict. -->

> **${var}** — selects the scan. Two behavioral modes (`movers`, `single-token`) over two sources (`coingecko`, `geckoterminal`):
> - **empty** → movers scan on the default source (CoinGecko): top winners, losers, trending.
> - **`coingecko`** → same movers scan, CoinGecko source (explicit).
> - **`geckoterminal`** → movers scan on GeckoTerminal: on-chain "runners" across major chains.
> - **`geckoterminal:<chain>`** or a bare chain slug (`solana`, `eth`, `ethereum`, `base`, `bsc`, `arbitrum`, `polygon`, `optimism`, `avalanche`, `avax`) → GeckoTerminal runners scoped to that one chain.
> - **`category:<name>`** (e.g. `category:layer-2`, `category:meme`) — or a bare hyphen/space value like `layer-2` / `meme coins` → CoinGecko movers scoped to that category.
> - **`<contract>`** or **`<contract>:<chain>`** (e.g. `0xabc…`, `0xabc…:base`) → single-token deep report on that contract.
> - **`<SYMBOL>`** (e.g. `SOL`, `WIF`) → single-token deep report; resolve the symbol to its top contract first.
> - **`token`** / **`single-token`** → single-token deep report on the token configured in `memory/token-report.md`.
> - **`deep-dive:<symbol|contract>`** (e.g. `deep-dive:WIF`, `deep-dive:0xabc…:base`) → single-token deep report — the shape the Telegram force-reply sends. Strips the `deep-dive:` prefix and resolves the remainder exactly like a bare symbol/contract.
>
> Examples: `""` (global movers), `geckoterminal:base` (Base runners), `category:layer-2` (L2 movers), `0x4ed…:base` or `WIF` (single-token report).

## Preamble (every run)

1. Read `memory/MEMORY.md` for context.
2. Read the last 2 days of `memory/logs/` to avoid repeating the same movers/trending/runner names unless the move is materially different — **repeat runners across days are the real signal**. (The single-token branch reads the last **30 days** for its `TOKEN_REPORT_STATE:` delta lines — see that branch.)
3. **Parse `${var}` → `source` + `mode` (+ optional `token`/`chain`/`category`).** Trim whitespace; evaluate the rules top-to-bottom, first match wins (fully deterministic):

   0. **Force-reply intercept (Telegram deep-dive).** starts with `deep-dive:` → strip the prefix (`${var#deep-dive:}`) and treat the remainder EXACTLY as a single-token target, resolving it contract-or-symbol just like rule 8 (`token:`) does → **single-token**. Single-token branch. This is the shape the Telegram force-reply sends; it reuses all existing single-token logic (no separate handler, no confirmation — the single-token report IS the response).
   1. empty → **mode=movers, source=coingecko** (global). Go to **Movers branch**.
   2. `coingecko` (case-insensitive) → **movers / coingecko** (global). Movers branch.
   3. `geckoterminal` → **movers / geckoterminal** (all major networks). Movers branch.
   4. starts with `geckoterminal:` or `chain:` → **movers / geckoterminal**, `chain` = remainder. Movers branch.
   5. a known chain slug (`solana|eth|ethereum|base|bsc|arbitrum|polygon|optimism|avalanche|avax`) → **movers / geckoterminal**, `chain` = value. Movers branch. *(Preserves monitor-runners' `var`=chain behaviour. To report on a token that shares a chain name, e.g. the ETH token, use `token:eth` or its contract.)*
   6. starts with `category:` → **movers / coingecko**, `category` = remainder. Movers branch.
   7. equals `token` or `single-token` → **single-token**, token from `memory/token-report.md` config. Single-token branch.
   8. starts with `token:` → **single-token**, resolve remainder as contract-or-symbol. Single-token branch.
   9. matches a contract address — EVM `0x[0-9a-fA-F]{40}` or a Solana base58 address — optionally `:chain` → **single-token**, that contract. Single-token branch.
   10. contains a space or a hyphen and is not a contract (e.g. `layer-2`, `meme coins`) → **movers / coingecko**, `category` = value. Movers branch.
   11. otherwise (a bare word, a plausible ticker) → **single-token / geckoterminal**, resolve `symbol` = value to its top contract. Single-token branch.

---

# Mode: movers (default)

Produce an **actionable** movers report. Plain % change lists are noise — the value is in distinguishing real signal (on volume, from a credible cap tier / deep liquidity) from pump-and-dump noise. Run **exactly one** source path below, chosen in the preamble.

## Source: coingecko — market movers (winners / losers / trending)

### 1. Fetch data

Fetch market data and trending coins in parallel. Request multi-timeframe changes for context:

```bash
# CoinGecko auth: a free/Demo key (the common case) authenticates on
# api.coingecko.com with the `x-cg-demo-api-key` header — send it only when a key
# is set; without one the same public endpoint still works at a lower rate limit.
# (A paid Pro key instead uses pro-api.coingecko.com with `x-cg-pro-api-key`.)
# Pass the key through ./secretcurl's {ENV_NAME} placeholder so no `$SECRET` ever
# lands on the command line (a bare $COINGECKO_API_KEY is refused by the Bash
# permission analyzer). Build the header array only when the key is set, so the
# call stays keyless-public when it isn't.
CG_HDR=(); [ -n "${COINGECKO_API_KEY:+x}" ] && CG_HDR=(-H "x-cg-demo-api-key: {COINGECKO_API_KEY}")

# Top 250 coins by market cap with 1h, 24h, and 7d % change
./secretcurl -s "${CG_HDR[@]}" "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=1h,24h,7d"

# Trending searches (top coins people are searching for)
./secretcurl -s "${CG_HDR[@]}" "https://api.coingecko.com/api/v3/search/trending"
```

If curl fails or returns empty JSON, retry once with **WebFetch** against the same URL.

### 2. Filter before ranking

Before picking winners/losers, drop noise. All numeric thresholds below are starting points — tune as needed if the output consistently feels too loose or too strict:

- **Stablecoins**: exclude symbols/ids that peg to fiat — `tether`, `usd-coin`, `dai`, `first-digital-usd`, `usde`, `tusd`, `usdd`, `pyusd`, `fdusd`, `paxg` (gold-pegged), and anything whose symbol starts with `USD`/`EUR`/`GBP` or name contains "stablecoin".
- **Illiquid tokens**: drop coins with 24h `total_volume` < **$1,000,000** (tune as needed). Sub-$1M volume on a top-250 coin is a pump/wash-trading target and generates misleading % moves.
- **Wrapped dupes** (optional): if a wrapped version (e.g. `wbtc`, `weth`, `steth`) would otherwise dominate a list, keep only one representative.

### 3. Pick the lists

From the filtered market data, sort by `price_change_percentage_24h`:
- **Top 10 winners** (highest 24h %)
- **Top 10 losers** (lowest 24h %)

For each item, capture: name, symbol, market cap rank, current price (USD), **24h %**, **7d %**, **1h %**, 24h volume (USD), market cap (USD).

From the trending endpoint, take the top 7 trending coins with: name, symbol, rank, price, 24h %.

### 4. Enrich with signal + risk tags

For every entry in the three lists, compute tags. Attach at most 2 tags per coin to keep the output clean. All numeric thresholds below are starting heuristics — tune as needed:

- **[TRENDING+UP]** — appears in trending AND is a top winner. Strong positive signal.
- **[TRENDING+DOWN]** — appears in trending AND is a top loser. Capitulation / bad-news signal.
- **[BREAKOUT]** — 24h change > +15% AND 7d change > +25%. Sustained move, not a flash pump.
- **[FADE]** — 24h change > +20% BUT 7d change is negative. Likely relief bounce in a downtrend.
- **[CAPITULATION]** — 24h change < −10% AND 24h volume > 3× the coin's typical daily volume (approximate: use `total_volume` vs `market_cap` ratio > 0.25 as a rough proxy if no historical data).
- **[PUMP-RISK]** — market cap rank > 150 AND 24h change > +30%. Low-cap, big spike — high manipulation probability. Warn the reader.
- **[MICROCAP]** — market cap < $50M. Disclose; these moves rarely predict direction.
- **[MAJOR]** — market cap rank ≤ 20. Large-cap moves are more informative per unit % change.

### 5. Market commentary (one sentence, calibrated)

Compute a quick market pulse: among the top 100 by mcap (after filters), what fraction had positive 24h change? What was the median 24h change of the top 50?

Write **one sentence** characterizing the tape. Examples:
- "Broad risk-off — 78/100 top coins are red, median −3.2%; losers dominate across L1s and DeFi."
- "Mixed tape with alt rotation — BTC flat but 62% of top-100 alts green, meme and AI-coin names leading."
- "Quiet — median move under 1% either way; trending is dominated by new listings rather than price action."

Don't editorialize beyond what the numbers show. No predictions.

### 6. Category scoping (when `category` is set)

When the preamble resolved a `category` (rules 6 / 10), scope the whole pipeline to it: use `/coins/categories/list` to resolve the category id, then `/coins/markets?vs_currency=usd&category=X&order=market_cap_desc&per_page=250&price_change_percentage=1h,24h,7d` in place of the plain markets call, and run steps 2–5 over that subset. Keep the trending call as-is (trending is global) and tag any trending coin that also falls in the category.

### 7. Send notification

Via `./notify`, under 4000 chars:

```
*Token Movers — ${today}*

_[one-sentence market pulse from step 5]_

From aeonfun/aeon, MIT.

More from aeonfun/aeon

Signals

Stars
782
Forks
292
Open issues
0
Last commit (this folder)
Oct 1, 2026 (27 days ago)
Last release
Jul 9, 2026 (3 months ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from aeonfun

Cite this page

token-movers skill. Agent Mart. https://agentmart.dev/skills/aeonfun-token-movers (last updated 2026-10-24)