Binance Wallet Tracker Skill
On-chain wallet tracking and monitoring. Monitor token-level and trade-level activity for private groups or public Smart Money / KOL data. Includes 9 built-in analysis scenarios for replay and pattern detection.
Prerequisites
This skill requires the baw CLI (@binance/agentic-wallet npm package). If baw is not found:
Verify: baw --version should print 1.6.2 or higher. If installation fails or the user doesn't have Node.js, inform them that Node.js >= 18 is required.
When to Use
Discovery
Evaluation
Replay
Full 9-scenario analysis rules: references/analytics.md [blocked]
Management
Supported Chains
This table lists chains verified for tracker use; it is a subset of baw wallet chains (which returns all wallet-supported chains, e.g. Arbitrum 42161, Polygon 137). Before treating a chain as unsupported for tracking, probe it first — the wallet chain list is dynamic.
Command Tree
All commands support --json for structured output.
token query and tx query require either --group-id (private group) or --tag-type (public KOL/SMY). Calling without either returns an error.
--tag-type accepts: kol (KOL), smy (Smart Money).
Token Monitor (A2)
Returns per-token aggregated data: token name, CA, price, market cap, volume, addressList[] (per-address buy/sell/inflow), launchTime, tokenRiskLevel, tokenTag.
Consensus computation: The API does NOT return top-level traderNum or inFlow. The CLI aggregates consensusCount = addressList.length, netInflow = Σ addressList[].inflow, countBuy/countSell = Σ buy/sell counts. Use these fields directly.
Per-address fields: address, label, buyCount, sellCount, inflow, tokenQty, latestTxTime, lastTrade, addressLogoUrl.
Full parameter and return field reference: references/cli.md [blocked]
Tx Monitor (A3)
Returns per-trade records: txHash, logId, address, ts, tradeSideCategory, txUsdValue, tokenPrice, currentPrice, ca, tokenName, marketCap, tokenRiskLevel, tokenTag, plus optional toAddress, toLabel, nativePrice, txNativeTokenQty, tokenDecimals, tokenSupply, launchTime, rwaType.
⚠️ Critical: ts is in SECONDS (not milliseconds) — 10-digit Unix timestamp. All time-window calculations (round-trip <1h, wake-up >72h, co-buy 10min window) must use seconds. A2's latestTxTime/launchTime ARE in milliseconds (13-digit).
No pagination — returns all matching records in one response.
ca/address filtering (Skill responsibility): The A3 API does NOT accept ca or address as filter parameters. The Skill handles this filtering: fetch all records from tx query, then filter by matching ca (contract address) or address (wallet) in the results. This enables the core scenario "who in a group is buying a specific token" — fetch the group's full trade flow, then filter by ca.
Follow Query (A4)
Returns a map where key = followed address, value = {label}.
Limitation: Only queries the current user's follow list. You cannot query another user's follow list. For "evaluate follow list" scenarios, combine with binance-leaderboard skill's leaderboard analyze to score each followed address.
Group Management (B1)
Group fields: groupId, groupName, addressCount, displayOrder. Sort groups by displayOrder: All=-1, Default=0, others sequential.
Address Management (B2)
Import defaults: allowOverwrite defaults to true (overwrites existing label). enforce defaults to false. Use --no-overwrite to disable overwrite.
Follow response: Returns {address, followed: true} — NO groupId field. followed is a boolean status flag.
Address search/list fields: Returns address, label, emoji, color, groupId, groupName, isFollowed, addressLogoUrl, genericAddressTagList, lastActiveTime, nativeTokenQty.
Full parameter and return field reference: references/cli.md [blocked]
Core Rules
Consensus & Inflow Computation (A2)
The API does NOT return top-level traderNum, inFlow, countBuy, or countSell fields. The CLI aggregates these from addressList[] and exposes them as:
consensusCount(Consensus) =addressList.lengthnetInflow(Net Inflow) = ΣaddressList[].inflowcountBuy(accumulation count) = ΣaddressList[].buyCountcountSell(distribution count) = ΣaddressList[].sellCount
Use these CLI-aggregated fields directly — no need to re-compute from addressList.
Accumulation vs Distribution
buyCount and sellCount are returned per-address directly. No need to aggregate tradeSideCategory — use these fields directly for Accumulation/Distribution analysis.
Client-Side Filtering (Skill responsibility)
The A2/A3 APIs do NOT accept ca or address as filter parameters. The caList param on A2 token/query is accepted but silently ignored by the backend. The Skill handles this filtering:
- Fetch all records via
token queryortx query(no ca/address filter) - Filter by matching
ca(contract address) oraddress(wallet) in the results
This enables core scenarios like "who in a group is buying a specific token" — fetch the group's full trade flow, then filter by ca.
This affects: Find Buyers by Token (co-buy), token-based buyer lookup, and any scenario requiring single-token or single-address focus.
Follow List Limitation (A4)
tracker follow only queries the current user's follow list (chainId only, no address param). You cannot evaluate another user's follow list. For "evaluate follow list" scenarios, combine with binance-leaderboard skill's analyze command.
Group Field Names
group list returns displayOrder. Sort groups by displayOrder: All=-1, Default=0, others sequential.
Follow Response Fields
address follow response returns {address, followed: true}. followed is a boolean status flag.
Write-Back Confirmation
After any write operation (create/update/delete/import/follow/unfollow/link), re-fetch the affected resource to confirm the operation succeeded — this guards against agentSessionId silent expiry and backend silent failures.
Readback failure handling: If readback shows the operation didn't take effect (e.g. address still exists after delete, group not found after create), tell the user "Operation may not have taken effect, please try again later" — never mention backend bugs, silent failures, or error codes.
Destructive Operation Safety
Delete, link, and unfollow operations require -y flag (or interactive confirmation) before execution. Always confirm with the user before executing destructive operations.
EVM Address Case Normalization (delete only)
The backend stores EVM addresses as lowercase (import API lowercases them), but address/delete does case-sensitive matching. If the user provides an EIP-55 mixed-case address (e.g. 0x52908400098527886E0F7030069857D03E3248B4), delete will silently fail — return success:true without actually deleting. The CLI does NOT normalize; it passes through as-is.
Skill responsibility: Before calling baw tracker address delete, normalize EVM addresses to lowercase:
- EVM (
0x+ 40 hex):address.toLowerCase() - Solana (Base58, case-sensitive): pass through as-is — do NOT lowercase
This is verified against QA: import with mixed case stores as lowercase, delete with lowercase succeeds, delete with mixed case returns success:true but address remains.
Batch Import Behavior
address batch / address add:
allowOverwritedefaults totrue— existing labels are overwrittenenforcedefaults tofalse— skips validation enforcement- Chain is specified by
-c— CLI does NOT auto-detect address format - Cross-chain auto-dispatch (Skill responsibility): When the user provides a mixed list of EVM + Solana addresses, the Skill must:
- Classify each address by format:
- EVM: matches
^0x[a-fA-F0-9]{40}$→ chainId56(BSC) or8453(Base) — determine by user context or ask - Solana: Base58, 32-44 chars, no
0xprefix → chainIdCT_501
- EVM: matches
- Group addresses by chain
- Call
baw tracker address batch -c <chainId>once per group - Aggregate results (new/exist/overwrite counts) across all chains
- Classify each address by format:
Real-Time Monitoring (WebSocket)
tracker ws subscribes to WSP WebSocket push events. It streams real-time trade data (buys, sells, price changes) for the selected scope. In --json mode, only push messages are written to stdout (no meta info), enabling pipeline processing with | jq.
--duration is required unless the user explicitly asks for an unlimited stream. Extract the duration from the user's instruction when available (e.g. "monitor for 60 seconds" → --duration 60). If no duration is specified, default to --duration 15.
--followingtip: When the followed address list is large, the CLI may fall back to a broader chain-level stream. If the user only wants events for their followed addresses, filter push messages byaddressagainst the follow list (tracker follow -c <chainId> --json).
Limitations
- Token price change:
token/querymay not reliably returnpriceChangeRatefor all tokens. For reliable price data, use marketCap + risk + pioneer timing as proxy. - Time window filtering:
token/queryhas aperiodparam (1m/5m/1h/4h/24h), but granular time-window queries (e.g., "past 4h") rely on client-side aggregation oftx/querytsfields. - A4 Follow read-only:
tracker followonly queries the current user's own follow list. Follow/unfollow writes useaddress follow/unfollowcommands (B2).
9 Analysis Scenarios (A3)
Built-in analysis patterns for tracker tx query data. Full rules and algorithms: references/analytics.md [blocked]
Error Codes
Error codes are for internal lookup only — never show numeric codes or internal names to users. Translate to natural-language messages.
Display Templates
Consensus token:
Trade flow entry:
Group info:
User-Facing Presentation
This skill serves end users, not developers. Internal field names, error codes, and CLI internals must never appear in user-facing output.
1. Term Mapping (internal → user-facing)
Raw enum values (19, 11, etc.) may appear in CLI syntax examples and internal lookup tables, but never in user-facing replies.
2. Never expose internal identifiers
groupId,displayOrder— internal IDs, never shown to users- Error codes (
70001001, etc.) — translate to natural-language messages only - Backend behavior details (e.g. delete silently failing on case mismatch, preset save not persisting) — never mention "backend bug" or "silent failure"; handle gracefully with readback
3. Display template hygiene
Use user-facing terms in all output. The tradeSideCategory field should be translated to its display term (Buy, Sell, etc.) — never show the raw numeric value. tokenRiskLevel should be shown as Low Risk/High Risk, not as a number. groupId and displayOrder should not appear in display templates.
Full CLI Reference
references/cli.md[blocked] — All commands with parameter tables, return field tables, and examplesreferences/analytics.md[blocked] — 9 analysis scenarios with detection rules and algorithms


