/gmgn-holder-analysis
Token holder chip analysis — deep analysis of holder structure including chip distribution, entry cost, whale/dev/KOL behavior, risk wallets (rat traders, bundlers, snipers), related wallets, smart money signals, and an AI rating based purely on token structure. Use when user
$ npx -y skills add gmgnai/gmgn-skills --skill gmgn-holder-analysis --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/gmgn-holder-analysis
Context preview
The summary Claude sees to decide when to auto-load this skill.
Token holder chip analysis — deep analysis of holder structure including chip distribution, entry cost, whale/dev/KOL behavior, risk wallets (rat traders, bundlers, snipers), related wallets, smart money signals, and an AI rating based purely on token structure. Use when user
SKILL.md
gmgn-holder-analysis.SKILL.mdname: gmgn-holder-analysis
description: Token holder chip analysis — deep analysis of holder structure including chip distribution, entry cost, whale/dev/KOL behavior, risk wallets (rat traders, bundlers, snipers), related wallets, smart money signals, and an AI rating based purely on token structure. Use when user asks about holder analysis, 筹码分析, 持仓分析, chip structure, who is holding, or whether a token is safe to buy based on its holder composition.
argument-hint: "--chain <sol|bsc|base|eth|robinhood|arc|stable> --address <token_address>"
metadata:
cliHelp: "gmgn-cli token holders --help && gmgn-cli portfolio created-tokens --help"
**BEFORE RUNNING ANY COMMAND: Run `gmgn-cli config --check`. If exit code is 0, proceed normally. If exit code is 1, run `gmgn-cli config` and show output, then apply the key with `gmgn-cli config --apply <KEY>`. If unknown option, tell user to run `npm install -g gmgn-cli`.**
**IMPORTANT: Always use `gmgn-cli` commands. Do NOT use curl, WebFetch, or visit gmgn.ai.**
When the user asks to analyze holders for a token, extract `--chain` and `--address` from their message, then run the analysis script below. Also detect the user's language: set `LANG` to `'zh'` if the user wrote in Chinese, `'en'` if in English (default `'zh'`).
Analysis Script
Run the following command, replacing the placeholders with the actual values:
python3 ~/.claude/skills/gmgn-holder-analysis/analyze.py <FILL_IN_TOKEN_ADDRESS> <FILL_IN_CHAIN> <FILL_IN_LANG>
- FILL_IN_CHAIN: `sol` for Solana addresses; for EVM `0x...` addresses use `auto` unless the user explicitly specifies a chain (`bsc`/`eth`/`base`)
- FILL_IN_LANG: `zh` if user wrote Chinese, `en` if English, default `zh`
Output Rule
After the script finishes, paste the complete stdout verbatim into your reply — every line, every section, nothing omitted or summarized. Do NOT add any introduction, commentary, or summary before or after the output block.
<!-- legacy inline script kept below for reference — DO NOT run this block --> <!--
python3 << 'PYEOF'
import json, subprocess, time
from collections import defaultdict
from concurrent.futures import ThreadPoolExecutor
TOKEN_ADDR = "<FILL_IN_TOKEN_ADDRESS>"
CHAIN = "<FILL_IN_CHAIN>"
LANG = "<FILL_IN_LANG>" # 'zh' or 'en'
WINDOW = 1800
now_ts = int(time.time())
ZH = (LANG == 'zh')
def _(zh, en): return zh if ZH else en
def run_cli(args, timeout=30):
r = subprocess.run(['gmgn-cli'] + args + ['--raw'],
capture_output=True, text=True, timeout=timeout)
if r.returncode != 0:
raise RuntimeError(r.stderr)
return json.loads(r.stdout)
# Fetch holders and devs in parallel, then created-tokens after extracting creator
with ThreadPoolExecutor(max_workers=2) as ex:
f_holders = ex.submit(run_cli, ['token', 'holders', '--chain', CHAIN, '--address', TOKEN_ADDR, '--limit', '100'])
f_devs = ex.submit(run_cli, ['token', 'holders', '--chain', CHAIN, '--address', TOKEN_ADDR, '--tag', 'dev', '--limit', '20'])
holders = f_holders.result()['list']
devs = f_devs.result()['list']
_creator_tmp = next((d for d in devs if 'creator' in (d.get('maker_token_tags') or [])), None)
created_data = None
if _creator_tmp:
try:
created_data = run_cli(['portfolio', 'created-tokens', '--chain', CHAIN,
'--wallet', _creator_tmp['address'],
'--order-by', 'market_cap', '--direction', 'desc'])
except: pass
# ── Wallet classification ────────────────────────────────
# addr_type: 0=normal, 1=burn, 2=DEX/pool
normal = [h for h in holders if h.get('addr_type', 0) == 0]
burn = [h for h in holders if h.get('addr_type', 0) == 1]
dex = [h for h in holders if h.get('addr_type', 0) == 2]
# ── Helpers ──────────────────────────────────────────────
def pct(v): return v * 100
def usd(v):
if v is None: return "$0"
if abs(v) >= 1_000_000: return f"${v/1_000_000:.2f}M"
if abs(v) >= 1_000: return f"${v/1_000:.1f}K"
return f"${v:.0f}"
def fmt_amt(v):
if v >= 1_000_000: return f"{v/1_000_000:.1f}M"
if v >= 1_000: return f"{v/1_000:.0f}K"
return f"{v:.0f}"
def age_label(entry_ts):
secs = now_ts - entry_ts
days = secs // 86400
hours = secs // 3600
if ZH: return f"{hours}小时前入场" if days == 0 else f"{days}天前入场"
else: return f"{hours}h ago" if days == 0 else f"{days}d ago"
def addr_short(addr):
return f"{addr[:4]}...{addr[-4:]}"
# ── Price / MC ───────────────────────────────────────────
supply_list = [h['balance']/h['amount_percentage'] for h in normal
if h.get('amount_percentage',0)>0 and h.get('balance',0)>0]
total_supply = sorted(supply_list)[len(supply_list)//2] if supply_list else 1_000_000_000
price_list = [h['usd_value']/h['balance'] for h in normal
if h.get('balance',0)>0 and h.get('usd_value',0)>0]
cur_price = sorted(price_list)[len(price_list)//2] if price_list else 0
cur_mc = total_supply * cur_price
burn_pct = sum(h['amount_percentage'] for h in burn)
dex_pct = sum(h['amount_percentage'] for h in dex)
top10 = sum(h['amount_percentage'] for h in holders[:10])
top20 = sum(h['amount_percentage'] for h in holders[:20])
# ── Risk wallets ─────────────────────────────────────────
# maker_token_tags: bundler, rat_trader, sniper, whale, top_holder, transfer_in, dev_team, creator
# tags: smart_degen, pump_smart, renowned, fresh_wallet, wash_trader, fomo, kol
airdrop = [h for h in normal if h.get('buy_tx_count_cur', 0)==0 and h.get('balance', 0)>0]
bundlers = [h for h in normal if 'bundler' in (h.get('maker_token_tags') or [])]
rats = [h for h in normal if 'rat_trader' in (h.get('maker_token_tags') or [])]
snipers = [h for h in normal if 'sniper' in (h.get('maker_token_tags') or [])]
fresh = [h for h in normal if 'fresh_wallet' in (h.get('tags') or [])]
wash = [h for h in normal if 'wash_trader' iRead more
name: gmgn-holder-analysis description: Token holder chip analysis — deep analysis of holder structure including chip distribution, entry cost, whale/dev/KOL behavior, risk wallets (rat traders, bundlers, snipers), related wallets, smart money signals, and an AI rating based purely on token structure. Use when user asks about holder analysis, 筹码分析, 持仓分析, chip structure, who is holding, or whether a token is safe to buy based on its holder composition. argument-hint: "--chain <sol|bsc|base|eth|robinhood|arc|stable> --address <token_address>" metadata: cliHelp: "gmgn-cli token holders --help && gmgn-cli portfolio created-tokens --help"
**BEFORE RUNNING ANY COMMAND: Run `gmgn-cli config --check`. If exit code is 0, proceed normally. If exit code is 1, run `gmgn-cli config` and show output, then apply the key with `gmgn-cli config --apply <KEY>`. If unknown option, tell user to run `npm install -g gmgn-cli`.**
**IMPORTANT: Always use `gmgn-cli` commands. Do NOT use curl, WebFetch, or visit gmgn.ai.**
When the user asks to analyze holders for a token, extract `--chain` and `--address` from their message, then run the analysis script below. Also detect the user's language: set `LANG` to `'zh'` if the user wrote in Chinese, `'en'` if in English (default `'zh'`).
Analysis Script
Run the following command, replacing the placeholders with the actual values:
python3 ~/.claude/skills/gmgn-holder-analysis/analyze.py <FILL_IN_TOKEN_ADDRESS> <FILL_IN_CHAIN> <FILL_IN_LANG>
- FILL_IN_CHAIN: `sol` for Solana addresses; for EVM `0x...` addresses use `auto` unless the user explicitly specifies a chain (`bsc`/`eth`/`base`)
- FILL_IN_LANG: `zh` if user wrote Chinese, `en` if English, default `zh`
Output Rule
After the script finishes, paste the complete stdout verbatim into your reply — every line, every section, nothing omitted or summarized. Do NOT add any introduction, commentary, or summary before or after the output block.
<!-- legacy inline script kept below for reference — DO NOT run this block --> <!--
python3 << 'PYEOF'
import json, subprocess, time
from collections import defaultdict
from concurrent.futures import ThreadPoolExecutor
TOKEN_ADDR = "<FILL_IN_TOKEN_ADDRESS>"
CHAIN = "<FILL_IN_CHAIN>"
LANG = "<FILL_IN_LANG>" # 'zh' or 'en'
WINDOW = 1800
now_ts = int(time.time())
ZH = (LANG == 'zh')
def _(zh, en): return zh if ZH else en
def run_cli(args, timeout=30):
r = subprocess.run(['gmgn-cli'] + args + ['--raw'],
capture_output=True, text=True, timeout=timeout)
if r.returncode != 0:
raise RuntimeError(r.stderr)
return json.loads(r.stdout)
# Fetch holders and devs in parallel, then created-tokens after extracting creator
with ThreadPoolExecutor(max_workers=2) as ex:
f_holders = ex.submit(run_cli, ['token', 'holders', '--chain', CHAIN, '--address', TOKEN_ADDR, '--limit', '100'])
f_devs = ex.submit(run_cli, ['token', 'holders', '--chain', CHAIN, '--address', TOKEN_ADDR, '--tag', 'dev', '--limit', '20'])
holders = f_holders.result()['list']
devs = f_devs.result()['list']
_creator_tmp = next((d for d in devs if 'creator' in (d.get('maker_token_tags') or [])), None)
created_data = None
if _creator_tmp:
try:
created_data = run_cli(['portfolio', 'created-tokens', '--chain', CHAIN,
'--wallet', _creator_tmp['address'],
'--order-by', 'market_cap', '--direction', 'desc'])
except: pass
# ── Wallet classification ────────────────────────────────
# addr_type: 0=normal, 1=burn, 2=DEX/pool
normal = [h for h in holders if h.get('addr_type', 0) == 0]
burn = [h for h in holders if h.get('addr_type', 0) == 1]
dex = [h for h in holders if h.get('addr_type', 0) == 2]
# ── Helpers ──────────────────────────────────────────────
def pct(v): return v * 100
def usd(v):
if v is None: return "$0"
if abs(v) >= 1_000_000: return f"${v/1_000_000:.2f}M"
if abs(v) >= 1_000: return f"${v/1_000:.1f}K"
return f"${v:.0f}"
def fmt_amt(v):
if v >= 1_000_000: return f"{v/1_000_000:.1f}M"
if v >= 1_000: return f"{v/1_000:.0f}K"
return f"{v:.0f}"
def age_label(entry_ts):
secs = now_ts - entry_ts
days = secs // 86400
hours = secs // 3600
if ZH: return f"{hours}小时前入场" if days == 0 else f"{days}天前入场"
else: return f"{hours}h ago" if days == 0 else f"{days}d ago"
def addr_short(addr):
return f"{addr[:4]}...{addr[-4:]}"
# ── Price / MC ───────────────────────────────────────────
supply_list = [h['balance']/h['amount_percentage'] for h in normal
if h.get('amount_percentage',0)>0 and h.get('balance',0)>0]
total_supply = sorted(supply_list)[len(supply_list)//2] if supply_list else 1_000_000_000
price_list = [h['usd_value']/h['balance'] for h in normal
if h.get('balance',0)>0 and h.get('usd_value',0)>0]
cur_price = sorted(price_list)[len(price_list)//2] if price_list else 0
cur_mc = total_supply * cur_price
burn_pct = sum(h['amount_percentage'] for h in burn)
dex_pct = sum(h['amount_percentage'] for h in dex)
top10 = sum(h['amount_percentage'] for h in holders[:10])
top20 = sum(h['amount_percentage'] for h in holders[:20])
# ── Risk wallets ─────────────────────────────────────────
# maker_token_tags: bundler, rat_trader, sniper, whale, top_holder, transfer_in, dev_team, creator
# tags: smart_degen, pump_smart, renowned, fresh_wallet, wash_trader, fomo, kol
airdrop = [h for h in normal if h.get('buy_tx_count_cur', 0)==0 and h.get('balance', 0)>0]
bundlers = [h for h in normal if 'bundler' in (h.get('maker_token_tags') or [])]
rats = [h for h in normal if 'rat_trader' in (h.get('maker_token_tags') or [])]
snipers = [h for h in normal if 'sniper' in (h.get('maker_token_tags') or [])]
fresh = [h for h in normal if 'fresh_wallet' in (h.get('tags') or [])]
wash = [h for h in normal if 'wash_trader' iGMGN OpenAPI skills for AI Agent — query tokens, wallets, and market data, and execute on-chain trades across Solana, BSC, and Base.
Repo: gmgnai/gmgn-skills
Other skills on gmgn-cli.
- /gmgn-cooking
[FINANCIAL EXECUTION] Create and launch meme coins and crypto tokens on launchpads (Pump.fun, FourMeme, Bonk, BAGS, Flap, Klik, Clanker, etc.) via bonding curve fair launch, or query token creation stats by launchpad via GMGN API. Requires explicit user confirmation. Use when
Open skill - /gmgn-market
Get crypto and meme token price charts (K-line, candlestick, OHLCV), trending meme coin rankings by volume, newly launched tokens on launchpads (pump.fun, fourmeme, letsbonk, Raydium, etc.), and the hot-search ranking (most-searched tokens) via GMGN API on Solana, BSC, Base, or
Open skill - /gmgn-portfolio
Analyze any crypto wallet by address — holdings, realized/unrealized P&L, win rate, trading history, performance stats, specific token balance, and tokens created by a developer wallet (with ATH market cap and DEX graduation status) via GMGN API on Solana, BSC, Base, or
Open skill - /gmgn-swap
[FINANCIAL EXECUTION] Buy and sell meme coins and crypto tokens on Solana, BSC, Base, or Ethereum — single swap, multi-wallet batch trading, limit orders, stop loss, take profit, trailing stop loss, trailing take profit via GMGN API. Requires explicit user confirmation. Use when
Open skill - /gmgn-token
Research any crypto or meme token by address — real-time price, market cap, liquidity, holder list, trader list, top Smart Money and KOL positions, security audit (honeypot, rug pull risk, dev wallet, renounced status), social links (Twitter/X, website) via GMGN API on Solana,
Open skill - /gmgn-track
Get real-time crypto buy/sell activity from Smart Money wallets, KOL influencer wallets, and personally followed wallets via GMGN API — alpha signals, whale tracking, meme token copy-trading ideas on Solana, BSC, Base, or Ethereum. Also query which tokens a wallet has followed
Open skill

