Onchain Pay Open API
npc-live/clawfirm
Binance Onchain Pay enables users to buy cryptocurrency with fiat (e.g., EUR, USD) or send existing crypto from their Binance account directly to any external on-chain wallet address in a single…
A short trading portrait of ONE wallet address — a single style tag (磨损户 / P小将 / 印钞机 … plus a speed subtitle), one sentence recapping its record and one sentence of next-step advice, for 1D / 7D /…
$ npx skills add GMGNAI/gmgn-skills --skill gmgn-wallet-review -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install GMGNAI/gmgn-skills gmgn-wallet-review --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/GMGNAI/gmgn-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/gmgn-wallet-review .claude/skills/gmgn-wallet-review && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "gmgn-wallet-review" agent skill from https://github.com/GMGNAI/gmgn-skills/tree/main/skills/gmgn-wallet-review into .claude/skills/gmgn-wallet-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gmgn-wallet-review", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/GMGNAI/gmgn-skills/tree/main/skills/gmgn-wallet-reviewType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add GMGNAI/gmgn-skills --skill gmgn-wallet-review -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install GMGNAI/gmgn-skills gmgn-wallet-review --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/GMGNAI/gmgn-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/gmgn-wallet-review .agents/skills/gmgn-wallet-review && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "gmgn-wallet-review" agent skill from https://github.com/GMGNAI/gmgn-skills/tree/main/skills/gmgn-wallet-review into .agents/skills/gmgn-wallet-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gmgn-wallet-review", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add GMGNAI/gmgn-skills --skill gmgn-wallet-review -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install GMGNAI/gmgn-skills gmgn-wallet-review --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/GMGNAI/gmgn-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/gmgn-wallet-review .cursor/skills/gmgn-wallet-review && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "gmgn-wallet-review" agent skill from https://github.com/GMGNAI/gmgn-skills/tree/main/skills/gmgn-wallet-review into .cursor/skills/gmgn-wallet-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gmgn-wallet-review", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/GMGNAI/gmgn-skills.git --path skills/gmgn-wallet-review--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add GMGNAI/gmgn-skills --skill gmgn-wallet-review -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install GMGNAI/gmgn-skills gmgn-wallet-review --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/GMGNAI/gmgn-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/gmgn-wallet-review .gemini/skills/gmgn-wallet-review && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "gmgn-wallet-review" agent skill from https://github.com/GMGNAI/gmgn-skills/tree/main/skills/gmgn-wallet-review into .gemini/skills/gmgn-wallet-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gmgn-wallet-review", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install GMGNAI/gmgn-skills gmgn-wallet-reviewInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add GMGNAI/gmgn-skills --skill gmgn-wallet-review -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/GMGNAI/gmgn-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/gmgn-wallet-review .github/skills/gmgn-wallet-review && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "gmgn-wallet-review" agent skill from https://github.com/GMGNAI/gmgn-skills/tree/main/skills/gmgn-wallet-review into .github/skills/gmgn-wallet-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gmgn-wallet-review", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add GMGNAI/gmgn-skills --skill gmgn-wallet-review -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install GMGNAI/gmgn-skills gmgn-wallet-review --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/GMGNAI/gmgn-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/gmgn-wallet-review .opencode/skills/gmgn-wallet-review && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "gmgn-wallet-review" agent skill from https://github.com/GMGNAI/gmgn-skills/tree/main/skills/gmgn-wallet-review into .opencode/skills/gmgn-wallet-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gmgn-wallet-review", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
gmgn-wallet-reviewA short trading portrait of ONE wallet address — a single style tag (磨损户 / P小将 / 印钞机 … plus a speed subtitle), one sentence recapping its record and one sentence of next-step advice, for 1D / 7D /…
Gmgn Wallet Review is an agent skill from GMGNAI/gmgn-skills. A short trading portrait of ONE wallet address — a single style tag (磨损户 / P小将 / 印钞机 … plus a speed subtitle), one sentence recapping its record and one sentence of next-step advice, for 1D / 7D / 30D / 全部, voiced 你 for the user's own wallet and 他 for anyone else's; SOL and all 8 EVM chains, chain auto-detected for a 0x address; can render it as a page. USE WHEN a wallet address comes with a request for a brief recap or for what to change — 「帮我复盘一下这个钱包」, 「一句话总结他的战绩」, 「我的打法有什么问题」, 「我钱包下一步该怎么打」, 「交易画像」…
Its SKILL.md is about 8.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Media & Creative, covering Trading and backtesting, Smart contracts and Transcription. The repository describes itself as: GMGN OpenAPI skills for AI Agent — query tokens, wallets, and market data, and execute on-chain trades across Solana, BSC, and Base. The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 4575ef5. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npmpython3From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
GMGN_PRIVATE_KEYGMGN_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Gmgn Wallet Review loads about 8.2k tokens when it runs. Until then it costs about 252 tokens; SKILL.md has 4,172 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
`~/.config/gmgn/.env`; the CLI signs `holdings` by itself.Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from GMGNAI/gmgn-skills at commit 4575ef5, republished under its MIT licence (© GMGNAI). 4,172 words, ~8,168 tokens.
.claude/skills/gmgn-wallet-review/SKILL.md (or your agent's skills folder).BEFORE RUNNING ANY COMMAND: Run gmgn-cli config --check. If exit code is 0, proceed. If 1, run gmgn-cli config, show the output, and once the user sends the key run gmgn-cli config --apply <KEY>. If the option is unknown, tell the user to run npm install -g gmgn-cli.
Always use gmgn-cli for data. Never WebFetch, curl, or browse gmgn.ai — the wallet page needs login and renders dynamically.
This skill is a single file on purpose: there is no bundled script. You pull the data with
gmgn-cli, compute the numbers below yourself (a throwaway jq or python3 -c over the saved
responses is fine and usually more accurate than reading 300 rows by eye), apply the rules, and
fill the fixed sentence templates. Follow the rules and templates exactly — they are what makes
two runs on the same wallet say the same thing.
Three lines, nothing more:
⚙️ 全自动P机 · ⚡ 秒杀流 (7D)
一句话复盘:你近 7 天赚了 $41.9K,止损干脆,但手续费吃掉了 78% 的利润。
下一步:少做持仓不到 1 分钟的单子(这部分在亏钱),持仓 1–30 分钟的单子收益率有 17%。This shape is deliberate. It is designed for a small slot on an already number-heavy wallet page, where dense columns, badge rows, KPI lines or a detail popover read as noise next to the page's own numbers. Evaluate every rule, but let only the top strength, the top problem and the top fix reach the output. Don't add lines, badges or numbers unless the user asks.
The address and chain go straight into shell commands, so check them first. Never "fix up" a string to make it pass.
sol bsc base eth arbitrum hyperevm robinhood arc stable. A base58
address is sol. A 0x… address could be on any of the eight EVM chains: if the user named
one, use it; otherwise find it with the probe in Step 0a.^0x[0-9a-fA-F]{40}$. Solana must match
^[1-9A-HJ-NP-Za-km-z]{32,44}$. Anything else (spaces, quotes, ;, $, a leading -) → say
it isn't a valid wallet address and stop.The same 0x address exists on every EVM chain, and many wallets trade on only one of them.
Guessing BSC and reporting 「没有交易」 would be wrong for a Base or ETH trader, so probe first:
gmgn-cli portfolio stats --chain <c> --wallet W --period 30d --raw for all eight EVM
chains (bsc, base, eth, arbitrum, hyperevm, robinhood, arc, stable), one after another, and
take buy + sell from each.bsc so the
token-contract check in Step 2 can tell a contract or a transfer-only address from a wallet.Probe all eight, not the popular ones first. In a test of nine active wallets, several traded mainly on Robinhood or Arc while also showing a few hundred trades on BSC or Base: one had 5,227 trades on BSC and 24,691 on Robinhood. Stopping at the first chain with trades would have profiled the wrong book.
Each probe is one call. Stop probing on a rate limit, and use the best chain found so far if
any trades were seen. A probe response is also the 30D stats for that chain, so reuse it rather
than asking for it again in Step 2. Name the chain in the reply's title line when it wasn't
given, e.g. (7D · Base). Chain display names: BSC, Base, ETH, Arbitrum, HyperEVM, Robinhood, Arc,
Stable, SOL.
portfolio info to guess: it only knows wallets bound
to the API key and would misclassify the user's unbound wallets.The voice changes more than the pronoun. For the owner, the advice is about their own play. For a visitor, telling them what a stranger should change is useless, so the same finding becomes guidance for the reader.
Save every response to a file in a temp directory so you can compute over it. Run the calls
in this order; --raw gives single-line JSON.
| # | Command | Needed for |
|---|---|---|
| 1 | gmgn-cli portfolio stats --chain C --wallet W --period 7d --raw | 7D numbers, common (tags, followers, launches, wallet age) |
| 2 | … portfolio stats … --period 30d --raw | 30D numbers |
| 3 | … portfolio profits … --period 1d --raw, then 7d, 30d, all | ROI per window, 1D / 全部 numbers |
| 4 | … portfolio activity … --limit 50 --raw, then --cursor <next>, 4 pages | speed, entry mcap, payoff, fallback holding split |
| 5 | … portfolio created-tokens … --raw | launches that graduated (open_count) |
| 6 | … portfolio holdings … --limit 50 --order-by last_active_timestamp --hide-closed false --raw, then --cursor <next>, up to 6 pages | holding-time split |
Rules for pulling:
[gmgn-cli] before parsing. That is the CLI's own
injection-defense notice printed ahead of the JSON. A token in the wallet carried suspicious
metadata; it is not an error.--limit above 50 silently falls back to 20. Always use 50 and paginate with next.429 or RATE_LIMIT. It never arrives as a normal JSON body. Don't
search the returned data for "429": prices, amounts and timestamps contain it all the time.429 / RATE_LIMIT stops everything. Make no further calls and don't
retry; retries extend a RATE_LIMIT_BANNED ban. If calls 1–4 succeeded, continue without 5–6
and say those parts were skipped. If 1–4 did not finish, tell the user to wait for the reset
time and stop.config --check only confirms a key is present, not
that GMGN accepts it. If a call fails with 401 / AUTH_KEY_INVALID, make no further calls,
tell the user the API key was rejected and needs reconfiguring with gmgn-cli config, and give
no tag or sentences. Don't run gmgn-cli config for them: it creates a new key pair.holdings needs critical auth (GMGN_PRIVATE_KEY). If it errors, fall back as described
in Step 3d. Don't ask the user to configure a key just for this.buy+sell is 0, pnl_stat.token_num is 0,
common.created_token_count is 0, and all-time profits buy is 0, the address has no
trades at all. It is a token contract, a fresh wallet, or transfer-only. Say that and stop; do
not invent a tag.7D and 30D come from stats ("full" periods). 1D and 全部 exist only in profits, so they
have no win rate, fees or P&L buckets.
| Value | 7D / 30D (stats) | 1D / 全部 (profits list[0]) |
|---|---|---|
| buys, sells | buy (fallback buy_count), sell (fallback sell_count) | buy, sell |
| realized $ | realized_profit | realized_profit |
ROI (pnl) | realized_profit_pnl (fallback pnl), a ratio: 0.08 = 8% | realized_profit ÷ realized_profit_cost |
| win rate | pnl_stat.winrate | — |
| fees $ | bought_fee + sold_fee | — |
| buckets | pnl_stat.pnl_gt_5x_num, pnl_2x_5x_num, pnl_0x_2x_num, pnl_nd5_0x_num, pnl_lt_nd5_num | — |
| days | 7 / 30 | 1 / wallet age in days from common.created_at (Unix seconds), minimum 1 |
tn = pnl_stat.token_num, the same field analyze.py and gmgn-wallet-style use (in live
responses it equals the sum of the five buckets; use that sum only if token_num is missing).lt50 = pnl_lt_nd5_num ÷ max(1, tn) (share of tokens down more than 50%).small = pnl_nd5_0x_num ÷ max(1, tn) (share of tokens down 0–50%).buy + sell = 0 has no reading. Show 「{period} 没有交易」 for it.Use only buy / sell rows; ignore transfers. Group rows by token.address.
cw: per token, the time from the first buy to the first sell after it.
Take the median across tokens. If fewer than 3 tokens have one, or the median is 0 s, there is no speed reading.flash5s: share of those round trips that took 5 seconds or less.price_usd × token.total_supply over buy rows, ignoring zeros.cost_usd − buy_cost_usd over its sell rows. Payoff =
average win ÷ average loss. It counts only when there are at least 5 winning and 5 losing
tokens. Skip sell rows where buy_cost_usd is missing or empty; treating it as 0 turns every
such sale into a pure win and inflates the payoff. Apply the same skip in the Step 3d fallback.Never use pnl_stat.avg_holding_period. It counts positions that were never sold and
overstates hold time by orders of magnitude on active wallets.
follow = common.follow_count.created = common.created_token_count.graduated = created-tokens open_count. If call 5 failed, use 0 and skip the launcher rule.Build one list of closed positions, each with (hold seconds, realized $, cost $):
start_holding_at > 0, end_holding_at ≥
start_holding_at, and history_total_sells > 0. Hold = end − start, realized =
realized_profit, cost = history_bought_cost.cost_usd − buy_cost_usd) over sells,
cost = Σcost_usd over buys.Put positions into four groups: 「不到 1 分钟」 (≤60s), 「1–30 分钟」 (≤30 min), 「30 分钟到 6 小时」 (≤6 h), 「超过 6 小时」. For each group compute n, share of positions, and ROI = Σrealized ÷ Σcost.
Choose by ROI and count, never by dollar totals. holdings P&L is cumulative per token, so a
few long-held large caps can dominate the dollars and point at the wrong group.
Use the same closed positions as 3d, from holdings only. The activity fallback is too thin
for these, so if holdings gave fewer than 30 closed positions, skip all four. Winners have
realized_profit > 0, losers < 0, and hold = end_holding_at − start_holding_at.
| id | rule | fires when |
|---|---|---|
| hold_losers (A) | losers held longer than winners | ≥10 winners and ≥10 losers ∧ median loser hold ≥ 2 × median winner hold |
| size_losers (B) | losers sized bigger than winners | ≥10 winners and ≥10 losers ∧ median loser ticket ≥ 1.5 × median winner ticket, where ticket = history_bought_cost ÷ history_total_buys |
| bad_adds (C) | added-to positions did worse | ≥10 positions with history_total_buys ≥ 3 and ≥10 with exactly 1 ∧ ROI(added) ≤ ROI(single) − 10 percentage points; ROI = Σrealized ÷ Σhistory_bought_cost |
| bag_hold (D) | deep losers left open | open positions (end_holding_at = 0, balance > 0) with unrealized_profit_pnl ≤ −0.5 and history_bought_cost ≥ $50 number at least 3 |
B must use the per-buy ticket, never history_bought_cost itself. That field is cumulative
volume: a tokenized stock traded hundreds of times shows $248K of "cost" on a $75 loss, and the
mean over such rows made B fire on six of six test wallets that in fact sized every buy the same.
Use the median for the same reason.
The $50 floor in D keeps dust out: a wallet that snipes hundreds of tiny launches is left holding dozens of worthless crumbs, which says nothing about its loss-cutting.
Hold times in sentences: <60s → N 秒, <1h → N 分钟, <1d → X.X 小时, otherwise X.X 天.
The tag rules below are the same as freq_level / pnl_level / style_title / style_speed in
gmgn-wallet-analysis/analyze.py (and gmgn-wallet-style), so a wallet gets the same title
whichever skill the question lands on. The single deliberate difference is the L4 净盈 line
(see below). If you change a threshold here, change it there too.
Too few tokens → no reading. If the period's tn is below 5 (for 1D and 全部, use the 7D
tn), there is no tag, recap or next step for that period. Output 「{period} 交易太少(不足 5 个币),
暂不给结论」 instead, the same "no read" the production dossier gives a sub-5-token wallet.
Frequency perDay = (buy + sell) ÷ days → L1 <1, L2 <10, L3 ≤50, otherwise L4 (exactly 10
trades a day is L3; exactly 50 is L3).
P&L, first match wins:
pnl > 0.5 ∧ tn ≥ 5 ∧ (winrate ≥ 0.5 or lt50 < 0.15 — one
corroborating shape is enough). Memecoin P&L is low-hit-rate with a fat right tail;
requiring both drops genuine top performers to P4.pnl > 0.1, or L4 ∧ pnl > 0.03 ∧ realized > 0lt50 ≥ 0.4 ∧ realized < 0pnl| ≤ 0.1pnl < 0| P5 | P4 | P3 | P2 | P1 | |
|---|---|---|---|---|---|
| L4 | 🖨️ 印钞机 | ⚙️ 全自动P机 | 🪫 磨损户 | 🔥 烧Gas机 | 💥 自毁装置 |
| L3 | 🌾 收割机 | ⚔️ P小将 | 🌀 陀螺 | 💸 手续费贡献者 | 🩸 连败突击兵 |
| L2 | 🦅 老猎手 | 📈 稳步选手 | ☕ 空转户 | 🐑 亏损散户 | 🕳️ 深套户 |
| L1 | 🗡️ 一击必杀 | 🧘 佛系赢家 | 👀 观望者 | 💧 试水亏损 | ⚰️ 一把归零 |
The L4 exception exists because 全自动P机 means exactly "thin margin, huge volume". A machine-speed
wallet re-buys constantly, which inflates cumulative cost and keeps its ratio low even when it
is clearly making money: one wallet made $73K in a week at 8.4%. 磨损户 is kept for machine-speed
wallets whose ratio is near zero or negative, where fees really do take the gains back. This
threshold is specific to this skill; gmgn-wallet-style and analyze.py still use 10% for every
level, so at machine speed with a 3–10% ratio this skill says 全自动P机 where they say 磨损户.
Speed from the median round trip: <60s ⚡ 秒杀流, <24h 🐇 日内流, <7d 🧭 波段流, otherwise 💎 长持流. Omit it if there's no speed reading, i.e. fewer than 3 round trips or a median of 0 s.
Tone (for rendering): P4/P5 win, P3 flat, P1/P2 loss.
$1.23M; ≥1K → $73.0K; <20 → $12.3; otherwise $456. Always the absolute
value; 赚了 / 亏了 carries the sign.3.3%); otherwise a whole number (32%).N 万 rounded (99,586 → 10 万); otherwise with commas.10).tn ≥ 5 ∧ lt50 < 0.05 ∧ neither hold_losers nor bag_hold fired (they say
the opposite, and 「止损干脆,但亏的单拿得比赚的单久」 contradicts itself)tn ≥ 5 ∧ winrate ≥ 0.6 (a wallet with two closed tokens both up
is not a 100% win rate worth stating)| id | fires when | recap clause |
|---|---|---|
| heavy_loss | full ∧ lt50 ≥ 0.35 | {lt50}% 的币亏超一半 |
| fee | full ∧ realized > 0 ∧ fees ÷ realized ≥ 0.30 | ratio <0.95 → 手续费吃掉了 {ratio}% 的利润 · <1 → 手续费几乎吃光了利润 · ≥1 → 付的手续费比赚到的还多 |
| net_loss | realized < 0 | (none — the head already says 亏了) |
| decline | the previous window's ROI > 0 ∧ this ROI < 0.75 × it (1D vs 7D, 7D vs 30D, 30D vs 全部; 全部 has none) | vs 7D / 30D → 收益率比 7D 在走弱 / 收益率比 30D 在走弱 (short label, never 近 30 天) · vs 全部 → 收益率比历史整体在走弱 |
| small_loss | full ∧ small ≥ 0.35 | {small}% 的币小亏离场 |
| launcher | created ≥ 20 ∧ graduated ÷ created < 0.05 | 发的 {created} 个币只有 {graduated} 个毕业 |
| crowd | follow ≥ 10,000 ∧ entry mcap < $1M | (none — visitor next-step input only; never in the recap or the owner's advice) |
| hold_split | the split fired | W ROI ≥ 0 → {W share}% 的币持仓{W},收益率只有 {W ROI} · W ROI < 0 → {W share}% 的币持仓{W},这部分是亏的 |
| size_losers | 3e B | 亏的单仓位反而更大 |
| hold_losers | 3e A | 亏的单拿得比赚的单久 |
| bad_adds | 3e C | 补过仓的币收益率反而更低 |
| bag_hold | 3e D | 还有 {n} 个仓位浮亏超 50% 没走 |
| fast | median round trip < 60s | (none — next-step input only) |
{你|他}{window}{赚了|亏了} {money} (when |realized| < $1, write {你|他}{window}基本打平 instead) + ,{strength} if there is one + ,但{clause}。 using the
first problem with a clause in this order: heavy_loss, fee, hold_split, size_losers,
hold_losers, bad_adds, bag_hold, decline, small_loss, launcher. If none fires, end with 。.
The recap is the conclusion, so it only names problems in the trader's own trading: fees, holding time, loss cutting, entries, the trend of returns, launches. How many people follow or copy the wallet is outside the trader's control, so crowd and fast never appear here. The same holds for the owner's next step: advice to the owner uses only their own trading, so crowd is not in the self order at all. Follower count appears only in visitor advice, as a warning to the reader. If no own-behaviour problem fires, the recap is just the result and the strength, e.g. 「他近 7 天赚了 $64.0K,止损干脆。」 Don't fill the slot with an external factor.
Take the first problem that fired, in this order, skipping the one the recap already used. Only when that is the sole problem that fired may both sentences name it:
The skip keeps the two lines from saying the same thing twice. For example, a recap of 「……但亏的单仓位反而更大」 should be followed by a different fix, such as the added-to positions, not by the same finding rephrased. The discipline rules sit above fee for the owner because they are concrete habits to change, while "trade less" is generic.
In the visitor voice, hold_split and fee sit above fast because they are specific to this wallet, while "he is too fast to follow" is true of every bot. When fast also fired, the hold_split and fee sentences carry the speed warning inside them (see the table), so it isn't lost.
Then use its sentence, verbatim apart from the numbers:
| id | self (下一步) | other (参考建议) |
|---|---|---|
| heavy_loss | 给每笔设硬止损,跌到 -50% 之前必须走。 | 他不太止损,跟单一定要自己设止损。 |
| net_loss | 先把频次降下来,只做最有把握的那几类盘。 | 他目前在亏钱,先别跟。 |
| hold_split | 少做持仓{W}的单子(W ROI ≥ 0 → 收益率 {W ROI} · W ROI < 0 → 这部分在亏钱),持仓 {B}的单子收益率有 {B ROI}。 | 他持仓 {B}的单子收益率 {B ROI},{W}的(W ROI ≥ 0 → 只有 {W ROI} · W ROI < 0 → 在亏钱),要参考只看前一类 + fast fired → ;秒进秒出的别跟。 · otherwise → 。 |
| fee | flash5s ≥ 20% → 少做 5 秒内的快进快出(占 {flash5s}),省下的手续费就是利润。 · otherwise → 减少频次、合并分批卖出,省下的手续费就是利润。 | fast fired → 他每笔只赚 {realized ÷ (buy+sell)}、{cw} 秒就平仓,算上你的延迟和滑点,跟单基本吃不到。 · otherwise → 他每笔只赚 {realized ÷ (buy+sell)},算上你的延迟和滑点,跟单基本吃不到。 |
| fast | — | 只当选币参考,别抄买卖点:他 {cw} 秒就平仓 + crowd fired → ,还有近 {follow}人跟你抢价。 · otherwise → ,你跟不上。 |
| size_losers | 亏的单单笔仓位是赚的单的 {loser ticket ÷ winner ticket, 1 decimal} 倍,没把握的盘先小仓试。 | 他亏的单反而下得更重(单笔中位 {loser ticket} vs {winner ticket}),别按他的仓位比例跟。 |
| hold_losers | 亏的单拿得比赚的单久(中位 {loser hold} vs {winner hold}),止损要和止盈一样快。 | 他亏的单拿得比赚的单久(中位 {loser hold} vs {winner hold}),跟的话亏损要自己先走。 |
| bad_adds | single ROI ≥ 0 → 补过仓的币收益率 {added ROI},只买一次的有 {single ROI} · single ROI < 0 → 补过仓的币亏得更多({added ROI} vs 只买一次的 {single ROI}); then ,别在走势不对的盘上补仓。 | same two cases with 他补过仓的币…; then ,他补仓的那些别跟。 |
| bag_hold | 还有 {n} 个仓位浮亏超 50% 没处理,该割的先割。 | 他手里有 {n} 个浮亏超 50% 的仓位还拿着,别跟着一起扛。 |
| decline | 复盘最近多出来的亏损单,看是盘变了还是打法钝了。 | 他最近在走弱,先观察一两周再说。 |
| crowd | — | 近 {follow}人在跟他,等你买入价格早被抬高了。 |
| small_loss | 入场再挑一点,先滤掉最早期的盘(现在进场市值中位 {entry mcap})。 | 他靠快止损赚钱,跟了买入就必须跟卖出。 |
| launcher | 少批量发币,发币方身份会拉低别人对你的信任。 | 他自己发的币别跟。 |
| none fired | 保持现在的节奏,重点盯住止损纪律。 | 没有明显短板,可以先观察一段时间。 |
Negative ROI in the hold_split sentences is said in words (这部分是亏的 / 在亏钱), never clipped to 「0.0%」: a group that lost money must not read as one that merely broke even.
Spacing: put a space between Chinese and a number (持仓 1–30 分钟, 但 80% 的币), but none before 不到 or 超过 (持仓不到 1 分钟). The recap clauses for heavy_loss, small_loss and hold_split start with a number, so they read 「,但 80% 的币…」, not 「,但80%」.
Why the two orders differ: fee sits above hold_split in the recap, and hold_split above fee in the next step. When both fire, the recap states the symptom (fees ate the profit) and the next step states the cause and the fix (stop the sub-minute trades), so the two sentences don't repeat each other.
Default period is 7D. Match the user's window if they named one (「30 天」→ 30D, 「今天/24 小时」→ 1D, 「全部/累计/历史」→ 全部). Print exactly:
{emoji} {title} · {speed} ({period}) ← ({period} · {Chain}) when the chain was probed
一句话复盘:{recap}
{下一步 | 参考建议}:{next}Drop · {speed} if there's no speed reading. No preamble, and no metric dump afterwards.
Add one short note only when it's needed:
holdings access. Say which, in one line.GMGN's own labels (common.tags, e.g. wash_trader) are deliberately not shown: the module
describes the trader's own behaviour, not third-party labels. If the user asks whether the wallet carries GMGN labels, quote
them verbatim as data.
Render only when the user wants to see it: 「做成页面」, 「预览」, 「放到截图上」, 「个人页板块」.
Standalone page. Compute all four periods, then write one HTML file next to the user's
files from the template below. Replace __DATA__ with a JSON object shaped like
{"voice":"self|other","periods":{"1d":{"tag":{"emoji","title","speed","tone"},"recap","next"} | {"no_read":"…"}, "7d":…, "30d":…, "all":…}},
and replace __PERIOD__ with the requested window (7d if none). Before inserting the JSON,
replace every < with \u003c, > with \u003e and & with \u0026 (the JSON escapes, not
HTML entities), so no string can close the <script> element. Embed only these fields; never add token names or GMGN labels.
<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
<title>交易画像</title>
<style>
:root{--page:#111111;--card:#1f1f1f;--line:#2c2c2c;--t1:#f5f5f5;--t3:#808080;--gr:#4db77e;--rd:#c9534b}
*{box-sizing:border-box}body{margin:0;padding:24px 16px;background:var(--page);color:var(--t1);font-family:-apple-system,"PingFang SC","Helvetica Neue","Microsoft YaHei",sans-serif}
.period{display:flex;gap:4px;margin:0 0 12px auto;width:max-content}
.period button{all:unset;cursor:pointer;padding:4px 12px;border-radius:6px;font-size:14px;color:var(--t3)}
.period button.on{background:#242424;color:#f0f0f0;font-weight:600}
.strip{max-width:1294px;margin:0 auto;background:var(--card);border-radius:12px;padding:0 30px;min-height:157px;display:grid;grid-template-columns:330px 1fr;align-items:center}
.id{display:flex;align-items:center;gap:16px;min-height:157px;border-right:1px solid var(--line)}
.logo{width:76px;height:76px;border-radius:20px;display:grid;place-items:center;font-size:42px;flex:none}
.logo.win{background:radial-gradient(circle at 30% 25%,rgba(77,183,126,.32),rgba(77,183,126,.08) 70%);box-shadow:inset 0 0 0 1px rgba(77,183,126,.35)}
.logo.flat{background:radial-gradient(circle at 30% 25%,#3a3a3a,#262626 70%);box-shadow:inset 0 0 0 1px #3c3c3c}
.logo.loss{background:radial-gradient(circle at 30% 25%,rgba(201,83,75,.32),rgba(201,83,75,.08) 70%);box-shadow:inset 0 0 0 1px rgba(201,83,75,.35)}
.name{font-size:28px;font-weight:700;letter-spacing:.5px;line-height:1.15}.sub{font-size:14px;color:var(--t3);margin-top:6px}
.lines{padding-left:34px;display:flex;flex-direction:column;gap:18px}.k{font-size:13px;color:var(--t3);margin-bottom:5px}
.v{font-size:19px;line-height:1.35}.v .g{color:var(--gr);font-weight:600}.v .r{color:var(--rd);font-weight:600}
@media (max-width:760px){.strip{grid-template-columns:1fr;padding:20px}.id{min-height:0;border-right:0;border-bottom:1px solid var(--line);padding-bottom:16px}.lines{padding:16px 0 0}.v{font-size:16px}}
</style></head><body>
<div class="period" id="period"></div><div class="strip" id="strip"></div>
<script>
const DATA = __DATA__;
const PNAME = {"1d":"1D","7d":"7D","30d":"30D","all":"全部"};
let period = "__PERIOD__"; if (!DATA.periods[period]) period = "7d";
const esc = s => String(s ?? "").replace(/[&<>"']/g, c => ({"&":"&","<":"<",">":">",'"':""","'":"'"}[c]));
const money = s => s.replace(/(赚了|亏了) (\$[\d.,]+[KM]?)/, (_, w, v) => `${w} <span class="${w==="赚了"?"g":"r"}">${v}</span>`);
function render(){
const bar = document.getElementById("period");
bar.innerHTML = Object.keys(PNAME).map(k => `<button class="${k===period?"on":""}" data-p="${k}">${PNAME[k]}</button>`).join("");
bar.querySelectorAll("button").forEach(b => b.onclick = () => { period = b.dataset.p; render(); });
const r = DATA.periods[period], el = document.getElementById("strip");
if (!r || r.no_read) { el.innerHTML = `<div class="k" style="grid-column:1/-1">${esc(r ? r.no_read : "无数据")}</div>`; return; }
const t = r.tag, tone = ["win","flat","loss"].includes(t.tone) ? t.tone : "flat";
el.innerHTML = `<div class="id"><div class="logo ${tone}">${esc(t.emoji)}</div><div><div class="name">${esc(t.title)}</div>
<div class="sub">${t.speed ? esc(t.speed) + " · " : ""}${PNAME[period]} 交易画像</div></div></div>
<div class="lines"><div><div class="k">一句话复盘</div><div class="v">${money(esc(r.recap))}</div></div>
<div><div class="k">${DATA.voice === "self" ? "下一步" : "参考建议"}</div><div class="v">${esc(r.next)}</div></div></div>`;
}
render();
</script></body></html>Overlaid on a real GMGN screenshot. Follow gmgn-wallet-style Step 9: measure native
pixels, place elements in the image's own coordinates, scale the stage responsively, and fail
visibly if the image doesn't load. Serve the page over a local HTTP server, because file
previews can't load a sibling image.
#1f1f1f, page #111111, radius 12px, 22px gutter.Sizing: 76px icon tile (radius 20, emoji ~42px), title 28px bold, subtitle 14px grey, left column ~330px, sentences 19px. Go no larger: at 104px / 36px the tag overpowers the rest of the wallet page.
holdings: without it they are skipped.gmgn-cli portfolio stats / profits / activity / holdings / created-tokens (plus config --check). Never run trade, swap, order, multi-swap or cooking
commands from this skill. Don't read, print or echo GMGN_API_KEY, GMGN_PRIVATE_KEY or
~/.config/gmgn/.env; the CLI signs holdings by itself.< > & in the JSON, and keep the
template's esc() on every inserted string.gmgn-wallet-style's English names and translate the two
sentences faithfully without adding content.© GMGNAI, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/gmgn-wallet-review of GMGNAI/gmgn-skills.
Open the folder on GitHubat commit 4575ef5
Gmgn Wallet Review next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Gmgn Wallet Review this skillGMGNAI/gmgn-skills | 609 | — | ~8.2k | Automated safety check: Notes | MIT | |
| Onchain Pay Open APInpc-live/clawfirm | 156 | 1 repos | ~4.9k | Automated safety check: Pass | MIT | |
| Metamask Agent Walletnirholas/three.ws | 230 | — | ~4.5k | Automated safety check: Pass | MIT | |
| P2pnpc-live/clawfirm | 156 | — | ~2.3k | Automated safety check: Notes | MIT | |
| Verifyalsk1992/CloddsBot | 3k | — | ~1.2k | Automated safety check: Pass | MIT | |
| Binance Tokenized Securities Infonpc-live/clawfirm | 156 | 1 repos | ~7.7k | Automated safety check: Pass | None |
npc-live/clawfirm
Binance Onchain Pay enables users to buy cryptocurrency with fiat (e.g., EUR, USD) or send existing crypto from their Binance account directly to any external on-chain wallet address in a single…
nirholas/three.ws
A skill your agent uses when the user asks anything about blockchain wallets, transactions, signing, token transfers, supported chains, wallet balances, perpetual futures trading, prediction…
npc-live/clawfirm
Binance P2P trading assistant for natural-language queries about P2P/C2C market ads and (optionally) the user’s own P2P order history.
alsk1992/CloddsBot
Verify agent identity using ERC-8004 on-chain registry. An agent skill from alsk1992/CloddsBot.
npc-live/clawfirm
Query Ondo tokenized US stock data on Binance Web3. An agent skill from npc-live/clawfirm.
binance/binance-skills-hub
Binance P2P trading assistant for natural-language queries about P2P/C2C market ads, the user's own P2P order history, order detail & appeal tracking, and advertisement publish & management.
GMGNAI/gmgn-skills
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…
GMGNAI/gmgn-skills
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…
GMGNAI/gmgn-skills
[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…
GMGNAI/gmgn-skills
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.), the…
GMGNAI/gmgn-skills
Analyze one or many crypto wallets by address — holdings, batch realized/unrealized P&L, win rate, trading history, performance stats, specific token balance, and tokens created by a developer…
GMGNAI/gmgn-skills
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…
A short trading portrait of ONE wallet address — a single style tag (磨损户 / P小将 / 印钞机 … plus a speed subtitle), one sentence recapping its record and one sentence of next-step advice, for 1D / 7D /…. Gmgn Wallet Review is an agent skill from GMGNAI/gmgn-skills. A short trading portrait of ONE wallet address — a single style tag (磨损户 / P小将 / 印钞机 … plus a speed subtitle), one sentence recapping its record and one sentence of next-step advice, for 1D / 7D / 30D / 全部, voiced 你 for the user's own wallet and 他 for anyone else's; SOL and all 8 EVM chains, chain auto-detected for a 0x address; can render it as a page.
Gmgn Wallet Review fits situations like: A wallet address comes with a request for a brief recap; for what to change — 「帮我复盘一下这个钱包」; sum up this wallet in one line.
Run `npx skills add GMGNAI/gmgn-skills --skill gmgn-wallet-review -a claude-code`. Or copy the skill folder (skills/gmgn-wallet-review in GMGNAI/gmgn-skills) into .claude/skills/gmgn-wallet-review in your project. Claude Code loads it when a task matches its description.
Run `npx skills add GMGNAI/gmgn-skills --skill gmgn-wallet-review -a codex`. Or copy the skill folder (skills/gmgn-wallet-review in GMGNAI/gmgn-skills) into .agents/skills/gmgn-wallet-review in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add GMGNAI/gmgn-skills --skill gmgn-wallet-review -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/gmgn-wallet-review, .gemini/skills/gmgn-wallet-review, .github/skills/gmgn-wallet-review and .opencode/skills/gmgn-wallet-review in your project.
Going by SKILL.md and its folder, Gmgn Wallet Review needs the command-line tools its instructions call (npm and python3) and credentials named GMGN_PRIVATE_KEY and GMGN_API_KEY. Our summary lists: Python 3; Node.js; A credential in GMGN_PRIVATE_KEY.
SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Gmgn Wallet Review is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 8.2k tokens (SKILL.md is roughly 33k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Gmgn Wallet Review: Onchain Pay Open API (npc-live/clawfirm, 156 stars), Metamask Agent Wallet (nirholas/three.ws, 230 stars), P2p (npc-live/clawfirm, 156 stars) and Verify (alsk1992/CloddsBot, 3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
GMGNAI (a GitHub user) maintains it in GMGNAI/gmgn-skills, which has 609 GitHub stars. The repository holds 11 skills in this directory. The repository was last updated on September 28, 2026.
Source: GMGNAI/gmgn-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.