token-movers
Installation
SKILL.md
${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 likelayer-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 inmemory/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 thedeep-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…:baseorWIF(single-token report).
Preamble (every run)
- Read
memory/MEMORY.mdfor context. - 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 itsTOKEN_REPORT_STATE:delta lines — see that branch.) - Parse
${var}→source+mode(+ optionaltoken/chain/category). Trim whitespace; evaluate the rules top-to-bottom, first match wins (fully deterministic):