@vike-io/cli 0.13.1 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/README.md +33 -19
- package/package.json +4 -4
- package/skills/vike/SKILL.md +144 -192
- package/skills/vike-alerts-setup/SKILL.md +37 -6
- package/skills/vike-alerts-webhook/SKILL.md +15 -8
- package/skills/vike-candles/SKILL.md +9 -2
- package/skills/vike-core/SKILL.md +16 -12
- package/skills/vike-hl-position-match/SKILL.md +8 -8
- package/skills/vike-hl-top-traders/SKILL.md +46 -11
- package/skills/vike-perp-funding/SKILL.md +82 -0
- package/skills/vike-perp-overview/SKILL.md +69 -0
- package/skills/vike-polymarket-market-detail/SKILL.md +2 -1
- package/skills/vike-polymarket-markets/SKILL.md +12 -7
- package/skills/vike-polymarket-smart-money/SKILL.md +38 -13
- package/skills/vike-polymarket-trader/SKILL.md +23 -20
- package/skills/vike-smart-money-discovery/SKILL.md +26 -32
- package/skills/vike-stream/SKILL.md +98 -0
- package/skills/vike-token-holders/SKILL.md +2 -1
- package/skills/vike-token-research/SKILL.md +22 -14
- package/skills/vike-token-screener/SKILL.md +35 -28
- package/skills/vike-token-transfers/SKILL.md +21 -11
- package/skills/vike-wallet-balances/SKILL.md +19 -13
- package/skills/vike-wallet-batch/SKILL.md +18 -14
- package/skills/vike-wallet-compare/SKILL.md +2 -0
- package/skills/vike-wallet-counterparties/SKILL.md +5 -1
- package/skills/vike-wallet-discover/SKILL.md +17 -10
- package/skills/vike-wallet-ens/SKILL.md +8 -4
- package/skills/vike-wallet-label-provenance/SKILL.md +25 -16
- package/skills/vike-wallet-pnl-history/SKILL.md +4 -1
- package/skills/vike-wallet-portfolio/SKILL.md +23 -21
- package/skills/vike-wallet-summary/SKILL.md +22 -9
- package/skills/vike-wallet-trace/SKILL.md +15 -11
- package/skills/vike-wallet-transactions/SKILL.md +3 -1
- package/skills.sh.json +17 -15
- package/src/auth.js +1 -1
- package/src/commands/alerts.js +85 -15
- package/src/commands/call.js +32 -0
- package/src/commands/candles.js +11 -15
- package/src/commands/doctor.js +4 -4
- package/src/commands/hl.js +274 -0
- package/src/commands/init.js +1 -1
- package/src/commands/labels.js +1 -1
- package/src/commands/perp.js +10 -9
- package/src/commands/polymarket.js +105 -5
- package/src/commands/search.js +10 -0
- package/src/commands/stream.js +308 -0
- package/src/commands/token.js +2 -0
- package/src/commands/tool-command.js +27 -0
- package/src/commands/wallet.js +24 -3
- package/src/index.js +10 -1
- package/src/mcp-client.js +37 -16
- package/skills/vike-cross-venue-perps/SKILL.md +0 -52
- package/skills/vike-hl-trader-profile/SKILL.md +0 -65
- package/skills/vike-perp-funding-arb/SKILL.md +0 -53
- package/skills/vike-perp-screener/SKILL.md +0 -48
- package/skills/vike-perp-spread-arb/SKILL.md +0 -38
- package/skills/vike-polymarket-screener/SKILL.md +0 -59
- package/skills/vike-router/SKILL.md +0 -54
|
@@ -1,74 +1,68 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vike-smart-money-discovery
|
|
3
|
-
description:
|
|
3
|
+
description: Smart-money discovery on Ethereum — which tokens the smart-money cohort is flowing into, and who the biggest net buyers of one token are. Use when the user asks "is smart money buying X" / "find smart money" / "any alpha wallets in Z".
|
|
4
4
|
allowed-tools: Bash(vike-data:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# vike-smart-money-discovery
|
|
8
8
|
|
|
9
|
-
Composite playbook
|
|
9
|
+
Composite playbook built on `token screener --smart-money-only`. Smart money here means the cohort behind the screener's `smart_inflow` and `--smart-money-only`, which exist for **Ethereum only** (a 400 on bsc and base).
|
|
10
|
+
|
|
11
|
+
**What this can and cannot say.** It can say which tokens the cohort is flowing into and how much, and who the biggest net buyers of a token are. It cannot list which of those buyers belong to the cohort: no tool returns cohort membership. State that limit in the answer.
|
|
10
12
|
|
|
11
13
|
## Workflow
|
|
12
14
|
|
|
13
|
-
### A.
|
|
15
|
+
### A. Which tokens is the cohort buying?
|
|
14
16
|
|
|
15
17
|
```bash
|
|
16
|
-
vike-data
|
|
18
|
+
vike-data token screener --chain ethereum --window 7d --sort smart_inflow --smart-money-only --limit 100 --json
|
|
17
19
|
```
|
|
18
20
|
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
- `
|
|
22
|
-
- `label` is empty OR not a known CEX (these are real wallets, not exchanges)
|
|
23
|
-
|
|
24
|
-
That set = your "smart money universe" for the next step.
|
|
25
|
-
|
|
26
|
-
### B. Cross-reference with a specific token
|
|
21
|
+
- Skip the row `0x0000000000000000000000000000000000000000`: it is the native coin, not a token you can drill into.
|
|
22
|
+
- Rows carry `token_address` (the `symbol` is often blank): identify tokens by address, and resolve names with `vike-data token search`.
|
|
23
|
+
- If the user named a token: resolve it (`vike-data token search <symbol> --limit 3 --json`) and look for its `token_address` in the rows. Present means the cohort moved it; absent from the top 100 means no visible cohort inflow in that window.
|
|
27
24
|
|
|
28
|
-
|
|
25
|
+
### B. Who is accumulating it?
|
|
29
26
|
|
|
30
27
|
```bash
|
|
31
|
-
vike-data token
|
|
28
|
+
vike-data token transfers <addr> --tab bought --period 7d --json
|
|
32
29
|
```
|
|
33
30
|
|
|
34
|
-
|
|
31
|
+
The list is the **top 10 by volume**, not the cohort. **Rank on `net_tokens`**, not `bought`: `bought` counts every inbound transfer, flash-loan and router round trips included. Keep rows with a clearly positive `net_tokens`; drop rows where `net_tokens` is near zero.
|
|
32
|
+
|
|
33
|
+
### C. Strip the intermediaries
|
|
35
34
|
|
|
36
35
|
```bash
|
|
37
|
-
vike-data
|
|
36
|
+
vike-data wallet batch <addr1> <addr2> ... --json
|
|
38
37
|
```
|
|
39
38
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
### C. Profile each match
|
|
39
|
+
Drop rows labelled `cex`, `dex`, router or contract. What is left are the real net buyers of the token.
|
|
43
40
|
|
|
44
|
-
|
|
41
|
+
### D. Profile the survivors (cap at 5)
|
|
45
42
|
|
|
46
43
|
```bash
|
|
47
44
|
vike-data wallet summary <addr> --json
|
|
48
45
|
```
|
|
49
46
|
|
|
50
|
-
Report
|
|
51
|
-
- Address
|
|
52
|
-
- Known label (if any)
|
|
53
|
-
- 90d realized PnL
|
|
54
|
-
- 7d net flow on this token
|
|
55
|
-
- 30d total volume
|
|
47
|
+
Report address, label (if any), the token's `net_tokens` and `net_usd` over the window, and the wallet's 30d volume.
|
|
56
48
|
|
|
57
49
|
## Verdict template
|
|
58
50
|
|
|
59
|
-
> **Smart-money take on $TOKEN:**
|
|
51
|
+
> **Smart-money take on $TOKEN (7d):** the cohort's `smart_inflow` into $TOKEN is $Y (screener rank #R by `smart_inflow`). Among the top-10 net buyers, N survive the label filter; the largest are `<addr1> (net_tokens X, label?)`. **Read: accumulation / churn / no-signal.** The cohort members themselves are not listed by any tool.
|
|
60
52
|
|
|
61
53
|
## Anti-patterns
|
|
62
54
|
|
|
63
|
-
- Don't
|
|
64
|
-
- Don't
|
|
65
|
-
-
|
|
55
|
+
- Don't rank wallets by `wallet discover --sort pnl` and intersect them with a token's buyers: `realized_pnl` is stored wrongly for many wallets and is only an ordering key, and the overlap with a 10-row buyer list is almost always empty.
|
|
56
|
+
- Don't accept any wallet labeled as a CEX (binance/coinbase/bybit/etc.) as "smart money": they are aggregators.
|
|
57
|
+
- Don't use `--window 24h` for the screen: smart money usually positions before the 24h window.
|
|
58
|
+
- Single-token wallets (`tokens_traded < 3` in `wallet summary`) are usually airdrop-flippers, not strategic.
|
|
66
59
|
|
|
67
60
|
## Cost note
|
|
68
61
|
|
|
69
|
-
3
|
|
62
|
+
Screener (3 credits) + `token transfers` (2) + `wallet batch` (2) + up to 5 × `wallet summary` (2).
|
|
70
63
|
|
|
71
64
|
## Pairs well with
|
|
72
65
|
|
|
66
|
+
- `vike-token-screener` for the filters and the column meanings
|
|
73
67
|
- `vike-token-research` for the price/flow context
|
|
74
|
-
- `vike-perp-funding
|
|
68
|
+
- `vike-perp-funding` if the token has a perp listing (positioning bias)
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vike-stream
|
|
3
|
+
description: Live events over WebSocket with `vike-data stream` - Hyperliquid fills, liquidations, positions, liquidation risk, order walls, closed candles, TWAPs, ledger, leverage changes and funding; HL cohort flow, indices and cohort bias; on-chain transfers on eth, bsc, base and hyperevm; Polymarket trades, resolutions, price moves and new markets - printed as NDJSON, resumed by cursor after any drop. Use when the user wants to "watch", "tail", "follow live", "stream" or "be notified as it happens" rather than query history.
|
|
4
|
+
allowed-tools: Bash(vike-data:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# vike-stream
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
vike-data stream <hl|hl-cohorts|onchain|polymarket> --channel <channel...> [--filter key=value ...] [--cursor <cursor>]
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Connects to `wss://stream.vike.io/v1/stream/<path>` with the API key in the `X-API-KEY` header, subscribes once per
|
|
14
|
+
`--channel`, and prints one JSON object per line on stdout: every `event` frame and every `gap` frame, exactly as the
|
|
15
|
+
server sent them. Status lines (subscribed, reconnecting, errors) go to stderr. It runs until Ctrl-C.
|
|
16
|
+
|
|
17
|
+
| Path | Channels |
|
|
18
|
+
|---|---|
|
|
19
|
+
| `hl` | `hl.fills`, `hl.liquidations`, `hl.positions`, `hl.liq_risk`, `hl.order_walls`, `hl.candles`, `hl.twaps`, `hl.ledger`, `hl.leverage`, `hl.funding` |
|
|
20
|
+
| `hl-cohorts` | `hl.cohort_flow`, `hl.indices`, `hl.cohort_bias` |
|
|
21
|
+
| `onchain` | `chain.transfers` |
|
|
22
|
+
| `polymarket` | `pm.trades`, `pm.resolutions`, `pm.price_moves`, `pm.new_markets` |
|
|
23
|
+
|
|
24
|
+
The server decides what each path serves: `vike-data stream info` prints the current channels and filter keys, and a
|
|
25
|
+
channel the path does not serve is refused with `unknown_channel` and the list. The CLI has no channel list of its own.
|
|
26
|
+
|
|
27
|
+
`hl.candles` is the Hyperliquid candle stream: closed bars, filtered by `coin`, `interval` (`1m 5m 15m 30m 1h 4h 1d`),
|
|
28
|
+
`market` (`perp` or `spot`) and `dex` (`HL` or a HIP-3 dex). The old `wss://data.vike.io/v1/stream` is closed (410).
|
|
29
|
+
|
|
30
|
+
## Examples
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# Hyperliquid BTC and ETH fills of $100k or more, by smart wallets
|
|
34
|
+
vike-data stream hl --channel hl.fills --filter coin=BTC,ETH --filter min_usd=100000 --filter "pnl_cohort=3x smart,2x smart"
|
|
35
|
+
|
|
36
|
+
# Live 1-minute and 1-hour BTC and ETH perp candles (closed bars)
|
|
37
|
+
vike-data stream hl --channel hl.candles --filter coin=BTC,ETH --filter interval=1m,1h --filter market=perp
|
|
38
|
+
|
|
39
|
+
# Every liquidation and every fill of one wallet, on one connection
|
|
40
|
+
vike-data stream hl --channel hl.liquidations hl.fills --filter wallet=0x1111111111111111111111111111111111111111
|
|
41
|
+
|
|
42
|
+
# USDC transfers on base worth $1M+
|
|
43
|
+
vike-data stream onchain --channel chain.transfers --filter chain=base --filter token=0x833589fcd6edb6e08f4c7c32d4f71b54bda02913 --filter min_usd=1000000
|
|
44
|
+
|
|
45
|
+
# Keep only the events, with jq
|
|
46
|
+
vike-data stream polymarket --channel pm.trades --filter min_usd=10000 | jq -c 'select(.type == "event") | .event'
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
`--filter` applies to every `--channel` of the command; a key the channel does not take is refused by the server
|
|
50
|
+
with the key's name. List keys (`wallet`, `coin`, `token`, `market`, `chain`, cohorts, ...) take comma-separated
|
|
51
|
+
values and repeat; `side`, `direction`, `event`, `axis`, `move`, `role` take one value; `true` / `false` is sent as a yes/no (`contract=false`); `min_usd`, `min_amount`, `min_move`
|
|
52
|
+
take a number. Channel fields and filter keys: https://vike.io/docs/data/reference/stream-channels
|
|
53
|
+
|
|
54
|
+
## Without a socket
|
|
55
|
+
|
|
56
|
+
These are MCP calls: they open no connection, so they never replace one.
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
vike-data stream info --json # every path, channel, filter key, limit and close code
|
|
60
|
+
vike-data stream check hl.fills --filter coin=BTC --filter min_usd=50000 # the server's own validator; exit 1 if refused
|
|
61
|
+
vike-data stream events hl.liquidations --filter coin=BTC --since-ms 1793178870000 --json # stored events (3 days), paged by --cursor
|
|
62
|
+
vike-data stream connections --hours 24 --json # your recent connections: who closed whom (4410), events sent
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Run `stream check` before a long-running `stream`: it shows the filter exactly as the server will apply it (with
|
|
66
|
+
the `hl.fills` default `min_usd` of 1000 added) or the server's error naming the bad key.
|
|
67
|
+
|
|
68
|
+
## Reading the output
|
|
69
|
+
|
|
70
|
+
- Keep the **frame's** `cursor` (the top-level one, not `event.cursor`) of the last line you handled. `--cursor <it>`
|
|
71
|
+
on the next run resumes from there, up to 3 days back; older is `cursor_expired` and the stream continues from now.
|
|
72
|
+
- The CLI resumes by itself after any drop (restart, network, slow reader) from the last cursor of each subscription.
|
|
73
|
+
Delivery is at least once: drop a repeated `event.event_id`.
|
|
74
|
+
- A `gap` frame (`reason: channel_idle`) means the channel was not running between `from` and `to` (nobody was
|
|
75
|
+
subscribed). It does not mean nothing happened; read that window from the REST endpoints or the `hl` / `polymarket`
|
|
76
|
+
commands. For what a socket missed while the channel was running, `vike-data stream events <channel> --cursor <c>`.
|
|
77
|
+
- `hl.fills` without `min_usd` gets a $1,000 floor; `min_usd=0` is every fill (hundreds per second).
|
|
78
|
+
`chain.transfers` unfiltered is a firehose; `min_usd` on it drops unpriced transfers.
|
|
79
|
+
|
|
80
|
+
## One connection per key
|
|
81
|
+
|
|
82
|
+
On each path, one API key holds one connection; an account holds at most 3. A second program on the same key and
|
|
83
|
+
path takes over, and the first exits with `replaced (4410)` and does not reconnect (two programs reconnecting would
|
|
84
|
+
take the connection from each other forever). Give each program its own key (`VIKE_API_KEY=... vike-data stream ...`).
|
|
85
|
+
`vike-data stream connections` shows which of your connections closed which.
|
|
86
|
+
Exit 1 also on `HTTP 401` / `4401` (the key) and on a refused subscription (`bad_subscription`, `unknown_channel`).
|
|
87
|
+
|
|
88
|
+
## Anti-patterns
|
|
89
|
+
|
|
90
|
+
- Don't run two `vike-data stream` processes on the same key and path: they replace each other.
|
|
91
|
+
- Don't treat silence as "nothing happened" in the first minutes: an idle channel starts on demand (up to ~12 minutes
|
|
92
|
+
for `hl.indices` and `hl.liq_risk`).
|
|
93
|
+
- Don't use the stream for history: it keeps 3 days. Use the query commands.
|
|
94
|
+
|
|
95
|
+
## Pairs well with
|
|
96
|
+
|
|
97
|
+
- `vike-alerts-setup`: a stored rule that notifies by webhook without a running process.
|
|
98
|
+
- `vike-hl-top-traders`: pick the wallets to put in a `wallet` filter.
|
|
@@ -34,7 +34,8 @@ vike-data token holders 0x6982508145454ce325ddbe47a25d4ec3d2311933 --limit 20
|
|
|
34
34
|
|
|
35
35
|
## Anti-patterns
|
|
36
36
|
|
|
37
|
-
- "Top holders" here means cumulative net inflow over
|
|
37
|
+
- "Top holders" here means cumulative net inflow over our recorded transfer history — NOT current on-chain balance. A wallet that bought $10M and sold $9M shows `net_flow_usd = $1M`, even if current balance is zero. The top rows are very often intermediaries (exchange wallets, lending protocols, MEV bots) with huge `volume_usd` against a small net: read this as "who moves the most of this token". **Always call this out** when reporting top holders. For what one specific wallet holds right now use `vike-data wallet balances <addr>` (Ethereum and BSC).
|
|
38
|
+
- There is no concentration metric (top-N share of supply) in the output; don't compute one from `net_flow_usd`.
|
|
38
39
|
- Don't list `tx_count = 1` whales as "smart money" without context — could be an airdrop receiver who never sold.
|
|
39
40
|
- For BSC tokens, pass `--chain bsc` explicitly; default is ethereum.
|
|
40
41
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vike-token-research
|
|
3
|
-
description:
|
|
3
|
+
description: Token research playbook — search → transfers (both sides) → net-flow read → buyer/seller verdict. Use when the user asks "research <token>" or "what's happening with <token>".
|
|
4
4
|
allowed-tools: Bash(vike-data:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# vike-token-research
|
|
8
8
|
|
|
9
|
-
Multi-call token research workflow.
|
|
9
|
+
Multi-call token research workflow. It characterises WHO is moving the token (the top wallets on each side), not the token's total flow, and it has no price chart.
|
|
10
10
|
|
|
11
11
|
## Steps
|
|
12
12
|
|
|
@@ -14,37 +14,45 @@ Multi-call token research workflow.
|
|
|
14
14
|
```bash
|
|
15
15
|
vike-data token search <symbol> --chain <chain> --limit 3 --json
|
|
16
16
|
```
|
|
17
|
-
Pick the
|
|
17
|
+
Pick the canonical match; capture the address.
|
|
18
18
|
|
|
19
19
|
2. **Recent buyers + sellers** (parallel calls)
|
|
20
20
|
```bash
|
|
21
21
|
vike-data token transfers <addr> --tab bought --period 24h --chain <chain> --json
|
|
22
22
|
vike-data token transfers <addr> --tab sold --period 24h --chain <chain> --json
|
|
23
23
|
```
|
|
24
|
+
Each call returns the top 10 wallets for one side.
|
|
24
25
|
|
|
25
|
-
|
|
26
|
+
3. **Read `net_tokens`, not `bought`.** `bought` counts every inbound transfer (flash-loan and router round trips included). Merge the two lists by `address`, then:
|
|
27
|
+
- drop rows where `|net_tokens|` is below 1% of `max(bought, sold)`: they are round trips, not a position;
|
|
28
|
+
- label the rest with `vike-data wallet batch <addrs...> --chain <chain>` and drop CEX / router / contract rows if the user wants "real" flow;
|
|
29
|
+
- split what is left into net accumulators (`net_tokens > 0`) and net distributors (`net_tokens < 0`) and add up each side's `|net_usd|`.
|
|
30
|
+
|
|
31
|
+
4. **Optional context** (Ethereum only): `vike-data token screener --window 7d --sort smart_inflow --smart-money-only --limit 100 --json` and look for the token's address in the rows to see whether the smart-money cohort is flowing into it.
|
|
26
32
|
|
|
27
|
-
|
|
33
|
+
## Verdict heuristics
|
|
28
34
|
|
|
29
|
-
|
|
|
35
|
+
| Net accumulators' USD vs net distributors' USD (24h) | Verdict |
|
|
30
36
|
|---|---|
|
|
31
|
-
|
|
|
32
|
-
|
|
|
33
|
-
|
|
|
34
|
-
|
|
|
37
|
+
| Accumulators > 2× distributors and > $1M | **Accumulation among the biggest movers** |
|
|
38
|
+
| Distributors > 2× accumulators and > $1M | **Distribution among the biggest movers** |
|
|
39
|
+
| Within 1.5× of each other | **Churn / range-bound** |
|
|
40
|
+
| Fewer than 3 rows left after dropping round trips, or all CEX / router | **No readable signal** — say the top wallets are intermediaries |
|
|
35
41
|
|
|
36
|
-
|
|
42
|
+
State the limit with the verdict: "top 10 per side", not "the market".
|
|
37
43
|
|
|
38
44
|
## Anti-patterns
|
|
39
45
|
|
|
46
|
+
- Don't compare the number of buyers to the number of sellers: both lists are always 10 rows.
|
|
40
47
|
- Don't run `transfers --period 30d` first — use 24h to see what's happening *now*; 30d for context only if needed.
|
|
41
48
|
- Don't quote the first row of `token search` blindly — if the symbol has cross-chain collisions (`FUN`, `BEAM`, `LDO`), inspect `chain` + `address` for each result before picking.
|
|
49
|
+
- Don't promise a price chart: there is no candle source for an ERC-20 contract address (`vike-candles` covers Hyperliquid and Polymarket only).
|
|
42
50
|
|
|
43
51
|
## Cost note
|
|
44
52
|
|
|
45
|
-
Step 1:
|
|
53
|
+
Step 1: free. Step 2: 2 calls × 2 credits. Step 3 labels: 2 credits. Total ≈ 4 calls.
|
|
46
54
|
|
|
47
55
|
## Pairs well with
|
|
48
56
|
|
|
49
|
-
- `vike-smart-money-discovery` to
|
|
50
|
-
- `vike-perp-funding
|
|
57
|
+
- `vike-smart-money-discovery` to see whether the smart-money cohort is flowing into the token
|
|
58
|
+
- `vike-perp-funding` if the token has a perp listing (BTC/ETH/SOL/major alts)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vike-token-screener
|
|
3
|
-
description: Token discovery filter — rank tokens by volume / net inflow /
|
|
3
|
+
description: Token discovery filter — rank tokens by volume / net inflow / active-wallet count / smart-money inflow within a window, with min-volume and min-holder filters. Use when the user asks "what tokens are trending today" / "find tokens with smart money accumulating" / "rising tokens this week" / token discovery from scratch.
|
|
4
4
|
allowed-tools: Bash(vike-data:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -13,70 +13,77 @@ vike-data token screener
|
|
|
13
13
|
[--chain ethereum|bsc|base]
|
|
14
14
|
[--window 24h|7d|30d|90d]
|
|
15
15
|
[--sort volume|net_inflow|holders|smart_inflow]
|
|
16
|
-
[--limit N]
|
|
17
|
-
[--min-volume USD]
|
|
18
|
-
[--min-holders N]
|
|
19
|
-
[--smart-money-only]
|
|
16
|
+
[--limit N] (default 20, max 100)
|
|
17
|
+
[--min-volume USD] (drop thin tokens)
|
|
18
|
+
[--min-holders N] (require N+ distinct wallets active in the window)
|
|
19
|
+
[--smart-money-only] (restrict to smart-money cohort flows)
|
|
20
20
|
[--json]
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
+
`--smart-money-only` and `--sort smart_inflow` exist for `--chain ethereum` only; on `bsc` and `base` they are a 400.
|
|
24
|
+
|
|
23
25
|
## Examples
|
|
24
26
|
|
|
25
27
|
```bash
|
|
26
28
|
# Trending today by volume
|
|
27
29
|
vike-data token screener --window 24h --sort volume --limit 20
|
|
28
30
|
|
|
29
|
-
#
|
|
31
|
+
# Tokens the smart-money cohort is flowing into (Ethereum only)
|
|
30
32
|
vike-data token screener --window 7d --sort smart_inflow --smart-money-only
|
|
31
33
|
|
|
32
|
-
#
|
|
34
|
+
# Broad participation: most distinct wallets active in the window
|
|
33
35
|
vike-data token screener --window 30d --sort holders --min-volume 100000
|
|
34
36
|
|
|
35
|
-
#
|
|
37
|
+
# Biggest net inflow among tokens with real activity
|
|
36
38
|
vike-data token screener --min-volume 1000000 --min-holders 100 --sort net_inflow
|
|
37
39
|
```
|
|
38
40
|
|
|
39
41
|
## Output columns
|
|
40
42
|
|
|
41
|
-
`token_address`, `symbol
|
|
43
|
+
`token_address`, `symbol`, `name`, `volume_usd`, `net_flow_usd`, `in_usd`, `out_usd`, `unique_holders`, `tx_count`.
|
|
44
|
+
|
|
45
|
+
- `symbol` is often blank and `name` null: the screener identifies tokens **by address**. Report the address. Don't invent a symbol, and don't call a blank-symbol row "unknown token" without checking the next point.
|
|
46
|
+
- **`0x0000000000000000000000000000000000000000` is the chain's native coin** (ETH on ethereum, BNB on bsc), not a contract. It ranks high on volume and `smart_inflow`. `vike-data token transfers` returns no buyers for it, so skip it before drilling into a screened token.
|
|
47
|
+
- `unique_holders` counts wallets **active in the window** (that sent or received the token), not wallets that hold it and not growth.
|
|
48
|
+
- `24h` spans yesterday and today (UTC calendar days), not a rolling 24 hours.
|
|
42
49
|
|
|
43
50
|
## Sort modes
|
|
44
51
|
|
|
45
52
|
| Sort | What it surfaces |
|
|
46
53
|
|---|---|
|
|
47
|
-
| `volume` | Most-traded tokens (default)
|
|
48
|
-
| `net_inflow` |
|
|
49
|
-
| `holders` |
|
|
50
|
-
| `smart_inflow` | Tokens
|
|
54
|
+
| `volume` | Most-traded tokens (default): attention, not direction |
|
|
55
|
+
| `net_inflow` | Largest `net_flow_usd` first (in > out). There is **no ascending sort**, so the bottom rows are the smallest inflows, not the biggest outflows |
|
|
56
|
+
| `holders` | Most distinct wallets active in the window |
|
|
57
|
+
| `smart_inflow` | Tokens the smart-money cohort is flowing into (Ethereum only) |
|
|
51
58
|
|
|
52
59
|
## Reading
|
|
53
60
|
|
|
54
|
-
- **High volume +
|
|
55
|
-
- **High volume + strong
|
|
56
|
-
- **
|
|
57
|
-
- **`smart_inflow`
|
|
61
|
+
- **High volume + `in_usd` ≈ `out_usd`** = churn (DEX MM, arb bots). Low signal. If `in_usd` equals `out_usd` to the cent and `net_flow_usd` is exactly `0.0`, the figure is almost certainly transfer volume counted on both sides, not a quiet token.
|
|
62
|
+
- **High volume + strong `net_flow_usd`** = real demand. Worth investigating with `vike-data token transfers`.
|
|
63
|
+
- **Many active wallets + flat volume** = small transactions spread widely (airdrop claims also look like this).
|
|
64
|
+
- **`smart_inflow` + high values + low overall volume** = cohort positioned before retail. A screen to start from, not a verdict: confirm with `token transfers`.
|
|
58
65
|
|
|
59
66
|
## Filter tips
|
|
60
67
|
|
|
61
68
|
| Goal | Filters |
|
|
62
69
|
|---|---|
|
|
63
|
-
| "
|
|
64
|
-
| "Mid-cap
|
|
65
|
-
| "What's getting dumped" |
|
|
70
|
+
| "Busy memecoins" | `--window 24h --sort holders --min-holders 50 --min-volume 50000` |
|
|
71
|
+
| "Mid-cap smart-money inflow" | `--sort smart_inflow --min-volume 500000 --smart-money-only` |
|
|
72
|
+
| "What's getting dumped" | **Not answerable from the screener** (no ascending sort, no outflow rank). For one known token use `vike-data token transfers <addr> --tab sold` |
|
|
66
73
|
|
|
67
74
|
## Anti-patterns
|
|
68
75
|
|
|
69
|
-
- Don't
|
|
70
|
-
- Don't
|
|
71
|
-
- Don't omit `--min-
|
|
72
|
-
- Don't
|
|
76
|
+
- Don't use `--window 24h --sort smart_inflow` for hot-new-token discovery: smart money usually positions before the 24h window; try `--window 7d`.
|
|
77
|
+
- Don't omit `--min-holders` when sorting by `holders`: junk airdrops with 50,000 one-transaction addresses dominate the top otherwise.
|
|
78
|
+
- Don't omit `--min-volume` when sorting by `net_inflow`: tiny tokens with $100 net flow can rank high in % terms.
|
|
79
|
+
- Don't use `--smart-money-only` on `bsc` or `base`: it is a 400, not an empty result.
|
|
73
80
|
|
|
74
81
|
## Cost note
|
|
75
82
|
|
|
76
|
-
3 credits per call. Cheaper than `wallet trace` (
|
|
83
|
+
3 credits per call. Cheaper than `wallet trace` (4) but heavier than per-tool lookups. Use deliberately for discovery, not as a default.
|
|
77
84
|
|
|
78
85
|
## Pairs well with
|
|
79
86
|
|
|
80
|
-
- `vike-data token holders <addr
|
|
81
|
-
- `vike-data token transfers <addr
|
|
82
|
-
- `vike-smart-money-discovery
|
|
87
|
+
- `vike-data token holders <addr>`: who moves the most of a flagged token
|
|
88
|
+
- `vike-data token transfers <addr>`: WHO is buying/selling once a token is interesting (read `net_tokens`)
|
|
89
|
+
- `vike-smart-money-discovery`: composite playbook starting from this screen
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vike-token-transfers
|
|
3
|
-
description: Top buyers or top sellers of a specific token over a window. Use when the user asks "who bought X" / "who sold X" / "is whale Y buying Z".
|
|
3
|
+
description: Top buyers or top sellers of a specific token over a window, with net token and USD flow per wallet. Use when the user asks "who bought X" / "who sold X" / "is whale Y buying Z".
|
|
4
4
|
allowed-tools: Bash(vike-data:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -10,33 +10,43 @@ allowed-tools: Bash(vike-data:*)
|
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
vike-data token transfers <token_address>
|
|
13
|
-
[--tab bought|sold]
|
|
14
|
-
[--period 1h|24h|7d|30d]
|
|
13
|
+
[--tab bought|sold] # default sold; ONE side per call
|
|
14
|
+
[--period 1h|24h|7d|30d] # default 24h
|
|
15
15
|
[--chain ethereum|bsc|base|all]
|
|
16
16
|
[--json]
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
+
There is no `--limit`: every call returns the top 10 wallets for that side. For both sides, call twice.
|
|
20
|
+
|
|
19
21
|
## When to use
|
|
20
22
|
|
|
21
|
-
- "Who's accumulating X?" → `--tab bought --period 24h`
|
|
22
|
-
- "Who's dumping X?" → `--tab sold --period 24h`
|
|
23
|
-
- "Smart money on X this week" → `--tab bought --period 7d`,
|
|
23
|
+
- "Who's accumulating X?" → `--tab bought --period 24h`, then read `net_tokens`
|
|
24
|
+
- "Who's dumping X?" → `--tab sold --period 24h`, then read `net_tokens`
|
|
25
|
+
- "Smart money on X this week" → `--tab bought --period 7d`, label the addresses with `vike-data wallet batch`
|
|
24
26
|
|
|
25
27
|
## Output columns
|
|
26
28
|
|
|
27
|
-
Each row is one wallet: `address`, `
|
|
29
|
+
Each row is one wallet: `address`, `bought`, `sold`, `net_tokens`, `usd_spent`, `usd_received`, `net_usd`, `chains`. Amounts are whole tokens and plain USD. The remaining fields (`addr_short`, the `*_fmt` strings, `net_usd_raw`, `net_bar_pct`) are pre-rendered for a UI: ignore them.
|
|
30
|
+
|
|
31
|
+
There is no `qty`, `usd_value`, `label` or `tx_count` column. To label an address use `vike-data wallet batch`.
|
|
28
32
|
|
|
29
33
|
## Reading tips
|
|
30
34
|
|
|
31
|
-
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
35
|
+
- **`bought` is every inbound transfer, not purchases.** It includes flash-loan and router round trips. A wallet at the top of `--tab bought` with `bought ≈ sold` and `net_tokens ≈ 0` is a bot or venue passing tokens through, not a buyer. **Rank and judge by `net_tokens`** (bought − sold): positive = net accumulator, negative = net distributor.
|
|
36
|
+
- **Signs differ by convention.** `net_usd = usd_received − usd_spent`, so a net buyer has `net_tokens > 0` and `net_usd < 0`, and a net seller has `net_usd > 0`. Do not read a positive `net_usd` as "bought".
|
|
37
|
+
- The two sides of the same period are separate top-10 lists. The same wallet in both = market maker / churn, not a signal.
|
|
38
|
+
- The window ends at the token's newest PRICED row, not at the current time. For an illiquid token it can be hours behind "now".
|
|
39
|
+
- Many small transfers from labeled exchanges = retail flow via that CEX.
|
|
40
|
+
- The native coin appears as `0x0000000000000000000000000000000000000000` in the screener and has no buyers here. Pass a contract address.
|
|
34
41
|
|
|
35
42
|
## Anti-patterns
|
|
36
43
|
|
|
37
|
-
- Don't
|
|
44
|
+
- Don't call a wallet a buyer or seller from `bought` / `sold` alone. Check `net_tokens`.
|
|
45
|
+
- Don't request `--chain all` unless you really need cross-chain: it maps the address to the token's address on each chain and is slower.
|
|
38
46
|
- 1h period is sparse for low-liquidity tokens. Use 24h as the default starting window.
|
|
47
|
+
- Don't treat the 10 rows as the token's whole market: they are the top 10 by volume on one side.
|
|
39
48
|
|
|
40
49
|
## Pairs well with
|
|
41
50
|
|
|
51
|
+
- `vike-data wallet batch <addr...>` to label the rows and drop CEX / router rows
|
|
42
52
|
- `vike-data wallet summary <addr>` to profile any interesting buyer/seller
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vike-wallet-balances
|
|
3
|
-
description: Current
|
|
3
|
+
description: Current token balances for a wallet on the chains the server scans (Ethereum and BSC today), read from the chain at request time, with a USD value where the token is priced. Use when the user asks "what does this wallet hold" / "current portfolio of X" / "show top holdings".
|
|
4
4
|
allowed-tools: Bash(vike-data:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -10,15 +10,17 @@ allowed-tools: Bash(vike-data:*)
|
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
vike-data wallet balances <address>
|
|
13
|
-
[--chains
|
|
14
|
-
[--min-usd 1]
|
|
13
|
+
[--chains ethereum,bsc] (default: every chain the server scans)
|
|
14
|
+
[--min-usd 1] (hide holdings worth less; default 1)
|
|
15
15
|
[--json]
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
+
`vike-data schema --pretty` shows the current chain list. A chain the tool does not scan is not silently skipped: it is named in `chain_errors`.
|
|
19
|
+
|
|
18
20
|
## Example
|
|
19
21
|
|
|
20
22
|
```bash
|
|
21
|
-
vike-data wallet balances 0xd8da6bf26964af9d7eed9e03e53415d37aa96045 --chains
|
|
23
|
+
vike-data wallet balances 0xd8da6bf26964af9d7eed9e03e53415d37aa96045 --chains ethereum
|
|
22
24
|
```
|
|
23
25
|
|
|
24
26
|
## Output
|
|
@@ -26,30 +28,34 @@ vike-data wallet balances 0xd8da6bf26964af9d7eed9e03e53415d37aa96045 --chains et
|
|
|
26
28
|
```json
|
|
27
29
|
{
|
|
28
30
|
"address": "0x...",
|
|
29
|
-
"total_usd":
|
|
30
|
-
"chains_scanned": ["
|
|
31
|
+
"total_usd": 10532.82,
|
|
32
|
+
"chains_scanned": ["ethereum"],
|
|
31
33
|
"holdings": [
|
|
32
|
-
{ "chain": "
|
|
33
|
-
{ "chain": "
|
|
34
|
-
|
|
34
|
+
{ "chain": "ethereum", "symbol": "ENS", "name": "Ethereum Name Service", "address": "0xc183...", "balance": 1144.04, "balance_raw": "1144036076063671431479", "usd_value": 6843.62, "usd_price": 5.982 },
|
|
35
|
+
{ "chain": "ethereum", "symbol": "WEI", "address": "0x0000...", "balance": 1.0, "balance_raw": "1", "usd_value": null, "usd_price": null },
|
|
36
|
+
{ "chain": "ethereum", "symbol": "ETH", "name": "ETH", "address": null, "balance": 2.5, "balance_raw": "2500000000000000000", "usd_value": null, "usd_price": null }
|
|
35
37
|
]
|
|
36
38
|
}
|
|
37
39
|
```
|
|
38
40
|
|
|
39
|
-
Holdings sorted by `usd_value` descending.
|
|
41
|
+
Holdings are sorted by `usd_value` descending with unpriced rows (the native coin among them) last. `chain_errors` appears only when a requested chain was refused or failed.
|
|
40
42
|
|
|
41
43
|
## Reading
|
|
42
44
|
|
|
43
|
-
- `
|
|
45
|
+
- **`usd_value: null` is a holding, not an error**: the token has no price feed. `total_usd` sums only priced holdings, so read it as a floor, never as net worth, and never infer "worthless" from a null.
|
|
46
|
+
- **The chain's native coin (ETH, BNB) is a row** with `usd_value: null`, and it is **left out of `total_usd`**. Report the native balance from its own `balance` field. It is always listed, whatever `--min-usd` says.
|
|
47
|
+
- **Any `--min-usd` above 0 also drops unpriced holdings** (an unpriced holding cannot show it clears the floor). `--min-usd 0` lists everything, including airdrop spam.
|
|
48
|
+
- `total_usd` covers `chains_scanned` only. The wallet may hold value on chains the tool does not scan: say so when relevant.
|
|
44
49
|
- Stablecoin-heavy wallet → likely waiting for a buy / parked dry powder
|
|
45
50
|
- WETH/WBTC + LSTs (stETH, wstETH, rETH) → "saver" wallet, low-risk
|
|
46
51
|
- 50+ random tokens → airdrop farmer
|
|
47
|
-
- Empty `holdings` array →
|
|
52
|
+
- Empty `holdings` array → no priced balance above the floor, or a very new wallet we have not seen yet.
|
|
48
53
|
|
|
49
54
|
## Anti-patterns
|
|
50
55
|
|
|
51
|
-
-
|
|
56
|
+
- Don't report `total_usd` as the wallet's value without "of priced tokens" and the native balance next to it.
|
|
52
57
|
- For wallets with 100+ tokens, the response is large — use `--min-usd 100` or higher to focus on meaningful holdings.
|
|
58
|
+
- This is a point-in-time read, not history. For how the wallet got here use `wallet pnl-history`.
|
|
53
59
|
|
|
54
60
|
## Pairs well with
|
|
55
61
|
|