* feat(holder-analysis): redesign output template for better readability
Replace the 8-section verbose output with a concise 6-section layout
optimised for the GMGN Giga AI dialog.
Key changes:
- §1 砸盘风险: Top10/Top20/平均持仓 on one line; 转入筹码+风险钱包
summary with breakdown; Top5 出货风险 shows category counts and
the single most-dangerous wallet (priority: zero-cost > high-profit >
selling)
- §2 Dev: conclusion-first one-liner (✅已清仓 / ⚠️持仓X% / 主号清仓
但小号持仓); show sub-wallets only when they exist; use "已获利"
instead of "套现"; history + ATH on compact lines
- §3 关联资金: two-row table (相同资金来源 / 同一时间段注资); ✅ if none
- §4 优质信号: each of 聪明钱/KOL/鲸鱼/钻石手 on its own line with
live trend; skip categories at 0; show "均无" when all three are 0
- §5 持仓购买力: collapsed to two rows (高余额大户 / 低/零余额)
- §6 🤖 建议: rating + one-line core judgment + 💡 离场信号
Removed sections: 📈入场成本分析, 📊筹码结构 (rarely useful, added noise)
All upstream data-collection improvements are preserved intact:
float-based percentages (fpct/fs/f1), live native price, strong/weak
related funds (TIGHT=60s/WINDOW=300s), diamond-hand buy_tx guard,
degenerate-float and no-data banners.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(holder-analysis): improve output wording
- 历史最高 → 历史最高市值
- 关联资金:有数据时补显示缺失的一行(✅ 未发现)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Gina <gina@gmgn.ai>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* enhance skill
* fix(holder-analysis): stop reporting artifacts and empty data as verdicts
The report could reach a confident rating from numbers that carried no
information. Six fixes, all of the same shape: never turn a divide-by-zero
or an empty set into a conclusion.
- Degenerate float guard (FLOAT_MIN 2%): when burn + DEX hold nearly all
supply, every `/ float_share` inflated dust wallets to double digits. A
wallet holding ~$2 was rated "largest wallet holds 100% — extreme
concentration → Not Recommended". Now prints absolute token/USD figures,
forces percentage flags to ⚪ and rates ⚪ Cannot Assess. The dev
sock-puppet rule uses no percentage, so it still escalates to 🔴.
- Empty holder list: upstream returns {"list":[]} for dead or de-indexed
tokens. Every percentage read 0.00%, no threshold fired, and the report
printed "no obvious dump risk" and "Normal" — a positive verdict on zero
data. Same treatment as above, plus "none found 🟢" lines become ⚪.
- Coverage caveat now follows actual coverage: floors below 99.5%, complete
values when Top100 covers the whole float. It previously contradicted the
line directly above it.
- Chip quality split into three exclusive buckets (bought-in / zero-cost
airdrop / risk-tagged) instead of one healthy ratio that collapsed to
"0.0% 🔴" on any airdrop-distributed token. 🔴 is reserved for
risk-tagged >30%: unknown provenance is not proven-bad.
- Diamond hands now require buy_tx_count_cur > 0. Never-bought wallets were
counted as diamond hands, so an airdropped token claimed both "airdrop
79% 🔴" and "diamond hands 80% ✅" from the same wallets. They are now a
separate Idle airdrop line.
- ATH staleness: upstream ath_price has been seen equal to price_24h, so
creator_ath_info.ath_mc can sit below current MC. Cannot be recomputed
here, so it is flagged rather than presented as the dev's peak.
Also fixes a NameError in the dev created-tokens Top3 loop (mig_lcomabel
assigned, mig_label read) that fired for any dev with a non-empty tokens
array.
Verified on live data in zh and en: a degenerate-float token, an
empty-holder token, and a token with real holders; the full-coverage and
created-tokens branches were covered with a stub CLI.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* fix(holder-analysis): 无法评估时不再打印流通盘占比数字
上一版只把旗标中和成 ⚪,占比数字照原样打印。实测退化流通盘(可流通
0.0035%)的输出里仍有 17 处除零产物,同一份报告同时出现 "hold 100.00%"
和 "hold 0.00%":
· Rat Trader 1 hold 100.00% 🚨 ← 该钱包实际只握着约 $2 代币
Batch1(1d ago) 15 wallets hold 100.00% 🟢 ← 数字和旗标同时错
KOL 1 hold 0.00% ✅ ← 这一行连 ⚪ 都没有
顶部横幅只解释一次,读者扫到这些行仍会当成结论。改为所有流通盘占比统一走
新的 fpct(),无法评估时渲染 n/a / 无法评估;入场批次旗标补上 pf()。
保留照常打印的部分:钱包个数、代币数量、美元金额、市值(都不经过
float_share),以及总供应口径的百分比(burn / DEX / 流通盘自身 / 筹码质量
三桶,分母不受影响)。
可评估路径为严格 no-op:同一份 stub 数据下中英文输出与改动前逐字节相同。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
---------
Co-authored-by: Jiujiu Pan <panjiujiu@quantbay.tech>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Document the new `market search` command backed by the openapi-service
`GET /v1/market/search` endpoint (search_v3). Covers parameters, the
coins/wallets response shape, usage examples, and output format, plus
updates to the frontmatter, sub-commands table, supported chains note,
rate-limit table, and Notes.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Arc and stable chains were missing from TRENCHES_PLATFORMS, causing
trenches queries to return empty results when --launchpad-platform
was not explicitly specified.
Arc: dyorfun_v3, dyorswap, trench, onmifun, sharcfun, klik
Stable: dyorfun_v3, dyorswap, trench
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Without this warning, an agent omitting --launchpad-platform on arc/stable
gets empty results for all categories (no server-side default exists for
these chains, unlike sol/bsc/base/eth).
Add a blockquote warning above the platform table and mark arc/stable rows
as "must be specified explicitly" so agents always pass the platforms.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add `arc` (dyorfun_v3, dyorswap) and `stable` (dyorswap) to the
--launchpad-platform table; without these, omitting --launchpad-platform
on arc/stable returns empty results for all three categories
- Add Arc Trenches Examples and Stable Trenches Examples sections with
all-three-categories, new_creation, near_completion, and completed
examples, following the same pattern as Solana/BSC/Base/ETH
Verified by real API calls: passing --launchpad-platform dyorfun_v3 or
dyorswap on arc/stable returns correct data; omitting it returns {}.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add EVM chains arc and stable everywhere robinhood is supported:
- src/validate.ts: add arc + stable to VALID_CHAINS and EVM address check
- src/commands/{token,market,portfolio,swap,track}.ts: extend --chain
option help and the market-signal chain gate
- src/client/OpenApiClient.ts: HotSearchesParam chain comment
- Sync SKILL.md files, Readme.md, Readme.zh.md, docs/cli-usage.md;
update the default hot-search set wording from 6-chain to 7-chain
Cooking/create_token remains sol/bsc/base/robinhood only (no launchpad
on arc or stable), matching the openapi service.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
When CHAIN is explicitly set to 'robinhood', the auto-detection logic
previously treated it as unknown and fell back to probing bsc/eth/base,
returning empty data and forcing slow inline workarounds.
Adding a KNOWN_CHAINS tuple that includes 'robinhood' (and 'sol') causes
the script to skip the probe entirely and query the specified chain directly.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Missed one stale "sol / bsc only" reference in the Parameters section;
signal supports sol / bsc / robinhood.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Remove the robinhood-rejection guards in kol, smartmoney, signal and
cooking create-token so the CLI matches the backend, which now accepts
robinhood on these endpoints
- Update --chain / --dex / --raised-token help text and error messages
- cooking: robinhood launchpad uses trench / pons DEXes, native raised
token only
- Sync SKILL.md files, cli-usage.md and both Readmes with the new chain
support
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds a new skill that scores any wallet address across three angles —
profitability (track-record score), copy-tradeability (score + a
latency/slippage/gas backtest), and Dev reputation for token-creator
wallets — plus trading-style tags, computed deterministically from
GMGN portfolio data. Wires it into CLAUDE.md's skill routing and the
Readme skill tables/install instructions, and refreshes the stale
plugin metadata descriptions/keywords to reflect all 8 current skills.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Fix output appearing twice by clarifying Output Rule in SKILL.md
- Simplify entry cost batch detail: replace per-wallet lists with
selling/accumulating counts on the batch summary line
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Give operators/agents visibility into when the CLI neutralizes suspicious token
metadata in an API response.
- sanitizeForOutputWithCount returns the cleaned value plus the number of altered
strings; sanitizeForOutput kept as a thin wrapper
- printResult prints "[gmgn-cli] Notice: neutralized N suspicious metadata value(s)"
to stderr when anything was filtered (extra detail under GMGN_DEBUG); sanitized
JSON still goes to stdout so piping is unaffected
- document the notice in the gmgn-token SKILL untrusted-data warning
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Address HackenProof report GMGNWM-143, where attacker-controlled token metadata
could hijack an AI agent driving gmgn-cli into executing an unauthorized trade.
Move guardrails from overridable SKILL.md text into code.
- Add src/sanitize.ts: neutralize prompt-injection framing and hidden/control
characters in API output (via printResult) and validate create-token metadata
- Add src/confirm.ts: code-enforced human confirmation for financial writes
(swap, multi-swap, order strategy create, cooking create) — reads a typed
"yes" from /dev/tty; automation requires GMGN_ALLOW_AUTOMATED_TRADES=1 + --yes
- Harden config.ts: tighten ~/.config/gmgn/.env to 0600 and warn if world-readable
- Update SKILL.md files, Readme.md and Readme.zh.md to document the gate,
the --yes flag, and untrusted-metadata handling
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Two improvements:
1. Extract 700-line inline Python script to analyze.py — Claude no longer
streams the entire script as text, reducing response time from ~2min to
~5s (API calls take ~3s, script execution <1s).
Also adds full 3-way concurrency: holders + dev fetched in parallel, then
created-tokens fires immediately when dev result arrives — saving ~1.2s vs
prior serial approach. EVM addresses auto-detect chain (bsc→eth→base).
2. Add Output Rule section after the run command — Claude's reply MUST contain
only the raw stdout verbatim, no summary or omission. Previously the CRITICAL
note appeared before the command, so it was forgotten by reply time; moving
it after (as the last thing Claude reads before replying) enforces compliance.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
New skill for analyzing token holder chip structure.
Includes dump risk, dev wallet status, related funds,
quality signals, entry cost batches, buying power,
and AI recommendation. Supports zh/en bilingual output
via LANG env var. Uses pure Python subprocess + ThreadPoolExecutor,
no /tmp files.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Complements the robinhood config: buildTrenchesBody now only sends
launchpad_platform / quote_address_type when non-empty. These fields are
allow-list filters, so an empty array returned an all-empty response. A
future chain missing from the config maps now degrades to API defaults
instead of silently returning nothing (chains should still be added to
both maps).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
market trenches returned all-empty on robinhood because
TRENCHES_PLATFORMS and TRENCHES_QUOTE_ADDRESS_TYPES had no robinhood
entry, so an empty quote_address_type filtered out every result.
Add robinhood config:
- platforms: noxa, virtuals_v2, bankr, dyorswap, pool_uniswap_v2/v3/v4
- quote_address_type: [11, 20, 24, 12, 0]
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Update hot-searches default-set docs from 4 chains to 5
(sol/bsc/base/eth/robinhood) and fix two stale "7-chain" leftovers.
- skills/gmgn-market/SKILL.md, docs/cli-usage.md: 5-chain default
- src/commands/market.ts: update default-config comment
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add robinhood as a supported chain across the CLI and skills, and stop
advertising chains that are not publicly supported yet.
robinhood:
- validate.ts: add to VALID_CHAINS and treat as EVM for address checks
- reject guards for commands that do not support it: track kol,
track smartmoney, cooking create (mirrors market signal)
- --chain help updated for supported commands (token/portfolio/swap/
market kline·trending·trenches·hot-searches/track follow-*/order get/
gas-price); OpenApiClient chain comment
- docs: all SKILL.md, Readme.md, Readme.zh.md (split-out row for
unsupported commands), cli-usage.md, plugin/marketplace descriptions
disable monad/megaeth/hyperevm/tron:
- comment monad out of VALID_CHAINS (kept for quick re-enable)
- strip these chains from all --chain help, SKILL.md, cli-usage.md
(hot-searches default now 4 chains: sol/bsc/base/eth)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>