@vike-io/cli 0.13.0 → 0.14.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 +16 -0
- package/README.md +10 -10
- package/package.json +1 -1
- package/skills/vike/SKILL.md +119 -191
- package/skills/vike-alerts-setup/SKILL.md +2 -1
- package/skills/vike-alerts-webhook/SKILL.md +1 -1
- package/skills/vike-candles/SKILL.md +3 -3
- package/skills/vike-core/SKILL.md +16 -15
- package/skills/vike-hl-position-match/SKILL.md +8 -8
- package/skills/vike-hl-top-traders/SKILL.md +47 -12
- 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 +3 -2
- package/skills/vike-polymarket-markets/SKILL.md +13 -8
- package/skills/vike-polymarket-smart-money/SKILL.md +39 -14
- package/skills/vike-polymarket-trader/SKILL.md +24 -21
- package/skills/vike-smart-money-discovery/SKILL.md +27 -33
- package/skills/vike-token-holders/SKILL.md +3 -2
- package/skills/vike-token-research/SKILL.md +23 -15
- package/skills/vike-token-screener/SKILL.md +36 -29
- package/skills/vike-token-search/SKILL.md +1 -1
- package/skills/vike-token-transfers/SKILL.md +22 -12
- package/skills/vike-wallet-balances/SKILL.md +20 -14
- package/skills/vike-wallet-batch/SKILL.md +19 -15
- package/skills/vike-wallet-compare/SKILL.md +3 -1
- package/skills/vike-wallet-counterparties/SKILL.md +6 -2
- package/skills/vike-wallet-discover/SKILL.md +18 -11
- package/skills/vike-wallet-ens/SKILL.md +9 -5
- package/skills/vike-wallet-label-provenance/SKILL.md +26 -17
- package/skills/vike-wallet-pnl-history/SKILL.md +5 -2
- package/skills/vike-wallet-portfolio/SKILL.md +24 -22
- package/skills/vike-wallet-summary/SKILL.md +23 -10
- package/skills/vike-wallet-trace/SKILL.md +16 -12
- package/skills/vike-wallet-transactions/SKILL.md +4 -2
- package/skills.sh.json +10 -15
- package/src/auth.js +1 -1
- package/src/commands/init.js +1 -1
- package/src/commands/labels.js +1 -1
- package/src/commands/perp.js +5 -4
- package/src/commands/wallet.js +3 -3
- 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,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vike-wallet-discover
|
|
3
3
|
description: Rank wallets by volume / inflow / outflow / pnl / net_flow / tx_count across a time window. Use when the user asks "top wallets on X" / "best traders by PnL" / "biggest buyers last 7d".
|
|
4
|
-
allowed-tools: Bash(vike:*)
|
|
4
|
+
allowed-tools: Bash(vike-data:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# vike-wallet-discover
|
|
@@ -14,7 +14,7 @@ vike-data wallet discover
|
|
|
14
14
|
[--sort volume|inflow|outflow|net_flow|tx_count|pnl]
|
|
15
15
|
[--order asc|desc]
|
|
16
16
|
[--chain ethereum|bsc]
|
|
17
|
-
[--size N] # max 20
|
|
17
|
+
[--size N] # default 10, max 20
|
|
18
18
|
[--json]
|
|
19
19
|
```
|
|
20
20
|
|
|
@@ -24,26 +24,33 @@ vike-data wallet discover
|
|
|
24
24
|
|---|---|
|
|
25
25
|
| "Top whales by volume this week" | `--sort volume --window 7d` |
|
|
26
26
|
| "Biggest accumulators last 30d" | `--sort net_flow --window 30d --order desc` |
|
|
27
|
-
| "Top realized-PnL traders all-time" | `--sort pnl --window all` |
|
|
28
27
|
| "Wallets dumping the most this 24h" | `--sort outflow --window 24h` |
|
|
29
28
|
| "Most active traders last 7d" | `--sort tx_count --window 7d` |
|
|
29
|
+
| "Best PnL" | `--sort pnl --window all`: an ordering only, see below |
|
|
30
30
|
|
|
31
|
-
## Output
|
|
31
|
+
## Output
|
|
32
32
|
|
|
33
|
-
`
|
|
33
|
+
An object `{ "wallets": [...], "total": N }`. `total` is the size of the matching population, not the number of rows.
|
|
34
|
+
|
|
35
|
+
Each wallet: `address`, `volume`, `inflow`, `outflow`, `net_flow`, `tx_count`, `tokens_traded`, `first_seen`, `last_active`, `realized_pnl`, `tokens_profitable`, `pnl_available`. USD columns are already plain dollars.
|
|
36
|
+
|
|
37
|
+
There is **no label column** and no `*_usd` suffix. To name the wallets, pass the addresses to `vike-data wallet batch`.
|
|
34
38
|
|
|
35
39
|
## Reading tips
|
|
36
40
|
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
-
|
|
41
|
+
- **`realized_pnl` is a ranking key, not a dollar figure.** Stored values are wrong for many wallets (a measurement found 233 of 500 sampled Ethereum leaderboard wallets at 10× or more above the rebuilt value, and the top rows can show a profit thousands of times the wallet's own volume). Use `--sort pnl` only to order wallets against each other, never quote `realized_pnl`, and never call `pnl_available: 1` a guarantee. It is computed from on-chain transfers; Hyperliquid PnL is a different dataset (`vike-data perp top-traders`, realized PnL only: open positions are not included).
|
|
42
|
+
- `first_seen` here is not a lifetime first-seen (it disagrees with `wallet summary`); read it as "first seen in this dataset".
|
|
43
|
+
- Labeled wallets first: after `wallet batch`, `entity = "binance"` / `wallet_type = "cex"` means a CEX hot or cold wallet, not a discretionary trader. Filter those out if the user wants "real traders".
|
|
44
|
+
- Top volume wallets are almost always bots, routers and venues. `net_flow` is the more informative sort for "who is accumulating", and even then check the wallet type.
|
|
40
45
|
|
|
41
46
|
## Anti-patterns
|
|
42
47
|
|
|
43
|
-
- `--size > 20` is silently clamped to 20
|
|
44
|
-
-
|
|
48
|
+
- `--size > 20` is silently clamped to 20, and there is no offset: the tool is a top-of-leaderboard view. Don't promise a deeper list.
|
|
49
|
+
- Don't build "smart money" lists on `--sort pnl` (see `vike-smart-money-discovery` for the supported route).
|
|
50
|
+
- Don't use this for a single wallet: `wallet summary` is the right call.
|
|
45
51
|
|
|
46
52
|
## Pairs well with
|
|
47
53
|
|
|
54
|
+
- `vike-data wallet batch <addr...>` to label the rows
|
|
48
55
|
- `vike-data wallet summary <address>` to drill into any interesting row
|
|
49
|
-
- `vike-smart-money-discovery` for
|
|
56
|
+
- `vike-smart-money-discovery` for the smart-money read
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vike-wallet-ens
|
|
3
3
|
description: Reverse ENS lookup — turn a 0x address into a human-readable name like `vitalik.eth`. Cheap, single API call. Use whenever you have an address and want to display a friendlier identifier alongside it.
|
|
4
|
-
allowed-tools: Bash(vike:*)
|
|
4
|
+
allowed-tools: Bash(vike-data:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# vike-wallet-ens
|
|
@@ -16,23 +16,27 @@ vike-data wallet ens <address> [--json]
|
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
18
|
vike-data wallet ens 0xd8da6bf26964af9d7eed9e03e53415d37aa96045
|
|
19
|
-
# → { "address": "0xd8da...", "ens": "vitalik.eth" }
|
|
19
|
+
# → { "address": "0xd8da...", "ens": "vitalik.eth", "source": "local" }
|
|
20
20
|
|
|
21
21
|
vike-data wallet ens 0x28c6c06298d514db089934071355e5743bf21d60
|
|
22
|
-
# → { "address": "0x28c6...", "ens": null } (most exchange wallets have no ENS)
|
|
22
|
+
# → { "address": "0x28c6...", "ens": null, "source": "local" } (most exchange wallets have no ENS)
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
## When to use
|
|
26
26
|
|
|
27
27
|
- Right after any tool returns a wallet address — show ENS as a secondary label
|
|
28
|
-
- When the user pastes an address and asks "who is this"
|
|
28
|
+
- When the user pastes an address and asks "what is its ENS name" (for "who is this", start with `vike-data labels <addr>`; ENS is a display name, not an identity)
|
|
29
29
|
- When you're about to display a leaderboard with addresses — enrich each row with ENS if available
|
|
30
30
|
|
|
31
|
+
## Direction
|
|
32
|
+
|
|
33
|
+
**Reverse only: address → name.** There is no name → address lookup: if the user gives `vitalik.eth`, say the tool cannot resolve it and ask for the address. The only parameter is `address`.
|
|
34
|
+
|
|
31
35
|
## Anti-patterns
|
|
32
36
|
|
|
33
37
|
- Don't replace the address with the ENS name in tool output — show BOTH. The address is canonical; ENS is a display layer that can change ownership.
|
|
34
38
|
- Don't ENS-lookup hundreds of addresses in a leaderboard at once — credits add up. Usually ENS-lookup only the top 5-10 rows the user is likely to act on.
|
|
35
|
-
- A `null` response is normal, not an error. Most wallets don't have ENS.
|
|
39
|
+
- A `null` response is normal, not an error. Most wallets don't have ENS. The exception: `ens: null` with `source: "rpc"` may only mean the resolvers were unreachable, so retry once before saying the wallet has no name.
|
|
36
40
|
|
|
37
41
|
## Pairs well with
|
|
38
42
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vike-wallet-label-provenance
|
|
3
|
-
description: Multi-source label cascade for
|
|
4
|
-
allowed-tools: Bash(vike:*)
|
|
3
|
+
description: Multi-source label cascade for an Ethereum wallet — shows what each upstream label source AND our in-house heuristic classifier says about an address, with consensus entity/type and per-source attribution. Use when the user asks "who is this address" / "what do you know about this wallet" / "is this address labeled" / "why is this wallet labeled X".
|
|
4
|
+
allowed-tools: Bash(vike-data:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# vike-wallet-label-provenance
|
|
@@ -14,6 +14,8 @@ The headline differentiator: we don't just show a label, we show **which sources
|
|
|
14
14
|
vike-data labels <address> [--json]
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
+
Ethereum wallets only. For another chain, or many addresses, use `vike-data wallet batch --chain ethereum|bsc|base`, which reads each chain's own label table.
|
|
18
|
+
|
|
17
19
|
## Example
|
|
18
20
|
|
|
19
21
|
```bash
|
|
@@ -27,37 +29,44 @@ vike-data labels 0x28C6c06298d514Db089934071355E5743bf21d60 # Binance Hot Wa
|
|
|
27
29
|
"address": "0x...",
|
|
28
30
|
"found": true,
|
|
29
31
|
"consensus": {
|
|
30
|
-
"entity": "
|
|
32
|
+
"entity": "binance",
|
|
31
33
|
"wallet_type": "cex",
|
|
32
|
-
"cex_product": "
|
|
33
|
-
"user_subtype": "",
|
|
34
|
-
"risk_flag":
|
|
35
|
-
"confidence": "
|
|
34
|
+
"cex_product": "retail",
|
|
35
|
+
"user_subtype": "active",
|
|
36
|
+
"risk_flag": null,
|
|
37
|
+
"confidence": "medium"
|
|
36
38
|
},
|
|
37
39
|
"sources": [
|
|
38
|
-
{ "source": "provider_a", "label": "Binance
|
|
39
|
-
{ "source": "provider_b", "label": "Binance
|
|
40
|
-
{ "source": "provider_c", "label": "Binance: Hot Wallet
|
|
41
|
-
{ "source": "provider_d", "label": "
|
|
42
|
-
{ "source": "heuristic:cold_t1", "confidence": 0.94 }
|
|
40
|
+
{ "source": "provider_a", "label": "Binance: Hot Wallet (0x28C)", "entity": "Binance", "category": "Hot Wallet" },
|
|
41
|
+
{ "source": "provider_b", "label": "Binance 14", "entity": "binance", "category": null },
|
|
42
|
+
{ "source": "provider_c", "label": "Binance: Hot Wallet", "entity": "binance", "category": "exchange" },
|
|
43
|
+
{ "source": "provider_d", "label": "binance", "entity": "binance", "category": null },
|
|
44
|
+
{ "source": "heuristic:cold_t1", "label": "binance", "confidence": 0.94 }
|
|
43
45
|
],
|
|
44
46
|
"source_count": 5
|
|
45
47
|
}
|
|
46
48
|
```
|
|
47
49
|
|
|
50
|
+
Sources are anonymised on the wire (`provider_a`, `provider_b`, ...). There are at most 6 raw sources (Arkham, OLI, Blockscout, Dune, the MEW darklist, Etherscan tags), plus the heuristic classifier as a `heuristic:*` source. `source_count` includes the heuristic.
|
|
51
|
+
|
|
48
52
|
## Reading
|
|
49
53
|
|
|
50
|
-
- **
|
|
51
|
-
- **2-3 sources agree on same entity** → high confidence
|
|
52
|
-
- **Only 1 source
|
|
53
|
-
- **
|
|
54
|
-
-
|
|
54
|
+
- **4+ raw sources agree on the entity** → very high confidence; ship the label without caveats. Six is the ceiling, and most labelled wallets have 1-3.
|
|
55
|
+
- **2-3 sources agree on the same entity** → high confidence
|
|
56
|
+
- **Only 1 source (± heuristic)** → moderate; mention "labeled by one source"
|
|
57
|
+
- **Only the heuristic** → low; mention "predicted by heuristic"
|
|
58
|
+
- **`found: true` with no sources** → the wallet is in our label table but no raw source labels it
|
|
59
|
+
- **`found: false`** → the wallet is missing from our labelled-wallet table, and no source is consulted at all. It does NOT prove that no provider labels it. Say "not in our label table", not "unlabeled" or "clean".
|
|
60
|
+
|
|
61
|
+
Early answers (before 2026-10-19) carried only the Arkham-derived source and the heuristic, so older transcripts undercount sources.
|
|
55
62
|
|
|
56
63
|
## Anti-patterns
|
|
57
64
|
|
|
58
65
|
- Don't quote any single provider's category field as "the category" — provider taxonomies vary; the `consensus.wallet_type` is the unified field.
|
|
59
66
|
- A `risk_flag` of `scam` / `sanctioned` / `phishing` is high-stakes — always mention it explicitly, never bury it.
|
|
67
|
+
- Don't use this for a BSC or Base address: it reads Ethereum tables only.
|
|
60
68
|
|
|
61
69
|
## Pairs well with
|
|
62
70
|
|
|
63
71
|
- `vike-data wallet summary <addr>` — for the flow metrics of the labeled wallet
|
|
72
|
+
- `vike-data wallet batch <addr...>` — label many addresses, or another chain
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vike-wallet-pnl-history
|
|
3
3
|
description: Daily net-flow series for a wallet over the last N days — a directional proxy for daily PnL. Use when the user asks "how has wallet X done over time" / "show me daily flows for Y" / "is this wallet trending up or down".
|
|
4
|
-
allowed-tools: Bash(vike:*)
|
|
4
|
+
allowed-tools: Bash(vike-data:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# vike-wallet-pnl-history
|
|
@@ -15,6 +15,8 @@ vike-data wallet pnl-history <address>
|
|
|
15
15
|
[--json]
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
+
`--chain base` is accepted, but per-wallet transfer data is documented for Ethereum and BSC: treat an empty Base result as "not covered", not "no activity".
|
|
19
|
+
|
|
18
20
|
## Output
|
|
19
21
|
|
|
20
22
|
```json
|
|
@@ -35,10 +37,11 @@ vike-data wallet pnl-history <address>
|
|
|
35
37
|
|
|
36
38
|
**This is NET INFLOW USD, not realized PnL.** True realized PnL requires WAC (weighted-average cost) accounting per token, which we don't do in this fast tool. A wallet that bought $10K and sold $10K of the same token at the SAME price would show $0 here — but if they sold higher, true PnL would be positive (and this tool wouldn't reflect that). Use this for direction + trend, not for tax-grade PnL.
|
|
37
39
|
|
|
38
|
-
|
|
40
|
+
There is no reliable realized-PnL figure for a wallet in the CLI: `wallet discover` carries a `realized_pnl` column, but it is only an ordering key (many stored values are wrong), so never quote it as dollars.
|
|
39
41
|
|
|
40
42
|
## Reading
|
|
41
43
|
|
|
44
|
+
- The series is **sparse**: one point per day that had activity, not one per day of the range. Zero-fill the calendar before charting or diffing.
|
|
42
45
|
- `cumulative_net_flow_usd` ramping up = wallet has been accumulating $
|
|
43
46
|
- Big positive day with high `tx_count` = single large buy (deposit / acquisition / token purchase)
|
|
44
47
|
- Big negative day with high `tx_count` = sell-down or large transfer out
|
|
@@ -1,34 +1,36 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vike-wallet-portfolio
|
|
3
|
-
description: Composite wallet
|
|
4
|
-
allowed-tools: Bash(vike:*)
|
|
3
|
+
description: Composite wallet view — combines ENS + labels + token balances + recent flow + top counterparties in one report. Use when the user gives a wallet address and asks for a complete picture ("full report on X" / "everything about this wallet" / "wallet snapshot" / "who is this wallet").
|
|
4
|
+
allowed-tools: Bash(vike-data:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# vike-wallet-portfolio
|
|
8
8
|
|
|
9
|
-
Multi-call playbook for a complete wallet snapshot.
|
|
9
|
+
Multi-call playbook for a complete wallet snapshot. It reports what the tools return: identity, token balances, flows and counterparties. There is **no DeFi-position data** in any tool, so never report protocol positions.
|
|
10
10
|
|
|
11
11
|
## Workflow (run in parallel where possible)
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
14
|
ADDR=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
|
|
15
15
|
|
|
16
|
-
vike-data wallet ens $ADDR --json & #
|
|
17
|
-
vike-data labels $ADDR --json & #
|
|
18
|
-
vike-data wallet summary $ADDR --json & #
|
|
19
|
-
vike-data wallet balances $ADDR --json & #
|
|
20
|
-
vike-data wallet
|
|
16
|
+
vike-data wallet ens $ADDR --json & # 1 credit
|
|
17
|
+
vike-data labels $ADDR --json & # 1 credit
|
|
18
|
+
vike-data wallet summary $ADDR --json & # 2 credits
|
|
19
|
+
vike-data wallet balances $ADDR --json & # 3 credits (Ethereum and BSC)
|
|
20
|
+
vike-data wallet counterparties $ADDR --window 30d --limit 10 --json & # 2 credits
|
|
21
21
|
wait
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
+
Then label the counterparties in one call: `vike-data wallet batch <cp1> <cp2> ... --json` (2 credits). A top counterparty that is a CEX tells you which exchange the wallet uses; an unlabelled high-volume counterparty is worth a `wallet compare` or `wallet trace`.
|
|
25
|
+
|
|
24
26
|
## Report template
|
|
25
27
|
|
|
26
28
|
> **`<ENS or 0x...>` — wallet snapshot**
|
|
27
|
-
> - **Identity:** `<ens.eth>` · `<entity (from labels)>` · `<wallet_type>` (confidence: `<H/M/L>`)
|
|
28
|
-
> - **
|
|
29
|
-
> - **
|
|
30
|
-
> - **30d
|
|
31
|
-
> - **
|
|
29
|
+
> - **Identity:** `<ens.eth>` · `<entity (from labels)>` · `<wallet_type>` (confidence: `<H/M/L>`). If `labels` says `found: false`, say "not in our label table".
|
|
30
|
+
> - **Priced token holdings:** `$X` (floor: unpriced tokens and the native coin are excluded from the total) across `<chains_scanned>`. Top 3 by USD: `<symbol1 $X>`, ... Native balance: `<n ETH/BNB>`.
|
|
31
|
+
> - **30d flow:** `+/-$Z` net (`summary["30d"].net_flow`), one chain.
|
|
32
|
+
> - **Activity:** `<tx_count>` transfers in 30d, `<tokens_traded>` tokens traded all-time.
|
|
33
|
+
> - **Top counterparties:** `<entity or address>` · `$volume`, ...
|
|
32
34
|
> - **Vibe check:** `<saver / trader / farmer / institutional / inactive / fresh>`
|
|
33
35
|
|
|
34
36
|
## Vibe-check rubric
|
|
@@ -36,17 +38,16 @@ wait
|
|
|
36
38
|
| Pattern | Label |
|
|
37
39
|
|---|---|
|
|
38
40
|
| `wallet_type = "cex"` or `"market_maker"` | **Institutional** |
|
|
39
|
-
| 80%+ in stablecoins, low tx count | **Saver / dry powder** |
|
|
40
|
-
| 50
|
|
41
|
-
| High tx count, balanced
|
|
42
|
-
| Big
|
|
43
|
-
|
|
|
44
|
-
|
|
|
45
|
-
| First-seen < 30d ago | **Fresh wallet** |
|
|
41
|
+
| 80%+ of priced holdings in stablecoins, low tx count | **Saver / dry powder** |
|
|
42
|
+
| `tokens_traded` 50+, low average holding USD | **Airdrop farmer** |
|
|
43
|
+
| High tx count, balanced inflow / outflow | **Active trader** |
|
|
44
|
+
| Big priced holdings, low tx count | **HODLer** |
|
|
45
|
+
| Zero `tx_count` in `30d` | **Inactive** |
|
|
46
|
+
| `first_seen` (from `all`) < 30d ago | **Fresh wallet** |
|
|
46
47
|
|
|
47
48
|
## Cost
|
|
48
49
|
|
|
49
|
-
|
|
50
|
+
6 calls, about 11 credits. Use sparingly — only when the user wants the FULL picture, not a single dimension.
|
|
50
51
|
|
|
51
52
|
## When to use a focused skill instead
|
|
52
53
|
|
|
@@ -56,4 +57,5 @@ wait
|
|
|
56
57
|
|
|
57
58
|
## Pairs well with
|
|
58
59
|
|
|
59
|
-
- `vike-
|
|
60
|
+
- `vike-wallet-trace` to follow the money out of the wallet
|
|
61
|
+
- `vike-smart-money-discovery` to put a token the wallet trades in context
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vike-wallet-summary
|
|
3
3
|
description: Aggregate metrics for a single wallet — volume, inflow, outflow, net flow, tx count, tokens traded across 24h / 7d / 30d / 90d / all windows. Use when the user gives an address and asks "what's this wallet doing".
|
|
4
|
-
allowed-tools: Bash(vike:*)
|
|
4
|
+
allowed-tools: Bash(vike-data:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# vike-wallet-summary
|
|
@@ -12,24 +12,37 @@ allowed-tools: Bash(vike:*)
|
|
|
12
12
|
vike-data wallet summary <address> [--json]
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
+
No chain flag: one call returns every window, for one chain.
|
|
16
|
+
|
|
15
17
|
## Output
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
A JSON object keyed by window: `all`, `90d`, `30d`, `7d`, `24h`. Each window holds:
|
|
20
|
+
|
|
21
|
+
`total_volume`, `total_inflow`, `total_outflow`, `net_flow` (USD), `tx_count`, `tokens_traded`, `first_seen`, `last_active`.
|
|
22
|
+
|
|
23
|
+
- **One chain only.** The figures are for the chain where the wallet was most recently active, never summed across chains, and the response does not say which. For a specific chain use `wallet transactions --chain` or `wallet pnl-history --chain`.
|
|
24
|
+
- **`tokens_traded`, `first_seen` and `last_active` are all-time** and repeat in every window: read them from `all` and ignore the copies. There is no per-window token count.
|
|
25
|
+
- A window with no activity is present and zeroed (`24h` often is), not omitted.
|
|
26
|
+
- Refreshed nightly: a wallet active in the last hours may not show yet.
|
|
27
|
+
- It carries no PnL, no holdings, no labels and no Hyperliquid data. For those: `wallet balances`, `labels` / `wallet batch`, and `perp top-traders`.
|
|
18
28
|
|
|
19
29
|
## Reading tips
|
|
20
30
|
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
- **Volume high,
|
|
24
|
-
-
|
|
25
|
-
-
|
|
31
|
+
- **`net_flow` >> 0** = accumulator. Inflow heavy → still buying.
|
|
32
|
+
- **`net_flow` << 0** = distributor. Outflow heavy → still selling.
|
|
33
|
+
- **Volume high, `net_flow` ≈ 0** = trader/MM (churn). Look at counterparty patterns separately.
|
|
34
|
+
- **`tokens_traded` high (>50)** = farmer / spray-and-pray. Lower signal per token.
|
|
35
|
+
- **`tokens_traded` low (<5), high volume** = concentrated conviction.
|
|
36
|
+
- Lifetime `all` against a quiet `30d` (e.g. 900k lifetime transactions, 18 in 30d) = a long-lived wallet that is quiet now. Don't size a wallet up on `all` alone.
|
|
26
37
|
|
|
27
38
|
## Anti-patterns
|
|
28
39
|
|
|
29
|
-
- Don't claim a wallet is "smart money" based on summary alone
|
|
30
|
-
- A single big inflow can dominate `
|
|
40
|
+
- Don't claim a wallet is "smart money" based on summary alone: it has no PnL. Check labels with `vike-data labels <addr>` or `vike-data wallet batch`.
|
|
41
|
+
- A single big inflow can dominate `net_flow` for a window — eyeball `tx_count` to gauge whether it's one trade or many.
|
|
42
|
+
- Don't describe the result as "across ETH/BSC/Base": it is one chain.
|
|
31
43
|
|
|
32
44
|
## Pairs well with
|
|
33
45
|
|
|
34
|
-
- `vike-data wallet
|
|
46
|
+
- `vike-data labels <addr>` / `vike-data wallet batch` to say who the wallet is
|
|
47
|
+
- `vike-data wallet balances <addr>` for current holdings
|
|
35
48
|
- `vike-data token transfers` after identifying which tokens the wallet trades
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vike-wallet-trace
|
|
3
|
-
description: Counterparty graph traversal from a root wallet outward. At each hop, expand to the top N counterparties by USD volume. Use when the user asks "where did funds from X go" / "follow the money 3 hops out" / "trace the network around this wallet" / wallet investigation.
|
|
4
|
-
allowed-tools: Bash(vike:*)
|
|
3
|
+
description: Counterparty graph traversal from a root wallet outward. At each hop, expand to the top N counterparties by USD volume; edges carry the direction of the flow. Use when the user asks "where did funds from X go" / "follow the money 3 hops out" / "trace the network around this wallet" / wallet investigation.
|
|
4
|
+
allowed-tools: Bash(vike-data:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# vike-wallet-trace
|
|
@@ -14,10 +14,12 @@ vike-data wallet trace <address>
|
|
|
14
14
|
[--depth N] (1-5, default 2)
|
|
15
15
|
[--width N] (1-10, default 5)
|
|
16
16
|
[--window 24h|7d|30d|90d|all]
|
|
17
|
-
[--min-usd N] (default 10000
|
|
17
|
+
[--min-usd N] (default 10000; 0 selects the default, pass 0.01 to include small transfers)
|
|
18
18
|
[--json]
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
+
`--chain base` is accepted, but per-wallet transfer data is documented for Ethereum and BSC: treat an empty Base result as "not covered", not "no activity".
|
|
22
|
+
|
|
21
23
|
## Output
|
|
22
24
|
|
|
23
25
|
```json
|
|
@@ -25,13 +27,12 @@ vike-data wallet trace <address>
|
|
|
25
27
|
"root": "0xabc...",
|
|
26
28
|
"depth": 2, "width": 5, "window": "30d", "min_usd": 10000,
|
|
27
29
|
"nodes": [
|
|
28
|
-
{ "address": "0xabc...", "depth": 0, "total_volume_usd":
|
|
29
|
-
{ "address": "0xdef...", "depth": 1, "total_volume_usd": 250000, "label": "
|
|
30
|
-
{ "address": "0x123...", "depth": 2, "total_volume_usd": 45000, "label": null, "wallet_type": null },
|
|
30
|
+
{ "address": "0xabc...", "depth": 0, "total_volume_usd": 450000, "label": null, "wallet_type": null },
|
|
31
|
+
{ "address": "0xdef...", "depth": 1, "total_volume_usd": 250000, "label": "binance", "wallet_type": "cex" },
|
|
31
32
|
...
|
|
32
33
|
],
|
|
33
34
|
"edges": [
|
|
34
|
-
{ "from": "0xabc...", "to": "0xdef...", "volume_usd": 200000, "tx_count": 4 },
|
|
35
|
+
{ "from": "0xabc...", "to": "0xdef...", "volume_usd": 200000, "out_usd": 150000, "in_usd": 50000, "tx_count": 4 },
|
|
35
36
|
...
|
|
36
37
|
],
|
|
37
38
|
"stats": { "node_count": 23, "edge_count": 31, "max_depth_reached": 2 }
|
|
@@ -40,18 +41,20 @@ vike-data wallet trace <address>
|
|
|
40
41
|
|
|
41
42
|
## Reading the graph
|
|
42
43
|
|
|
43
|
-
- **
|
|
44
|
+
- **Direction lives in `out_usd` / `in_usd`, not in `from` / `to`.** `from` is the side that was expanded first, not the sender. For an edge, `out_usd` flowed `from → to`, `in_usd` flowed `to → from`, and `volume_usd` is their sum. To answer "where did X's money go", rank the root's edges by the outflow side, not by `volume_usd`.
|
|
45
|
+
- **Root (depth 0)** = the wallet you traced from. Its `total_volume_usd` is the sum of its own edges in this graph (not zero, and not its whole activity). The same holds for every node.
|
|
44
46
|
- **Depth 1** = direct counterparties. Most useful layer.
|
|
45
47
|
- **Depth 2-3** = "friend-of-friend" — useful for finding where funds end up.
|
|
46
|
-
- **Edge volume_usd
|
|
48
|
+
- **Edge `volume_usd`** = the volume between those two specific addresses, NOT cumulative. One edge per wallet pair.
|
|
47
49
|
- **`wallet_type = "cex"`** at depth 1 = funds went to / came from an exchange. Often the END of the trail (anonymous from there).
|
|
48
50
|
- **Unlabeled wallet with high volume at depth 1-2** = potentially related wallet, investigate with `vike-data labels`.
|
|
51
|
+
- Only transfers of at least `--min-usd` count, so an empty or small graph can mean "nothing above the floor".
|
|
49
52
|
|
|
50
53
|
## Parameter tuning
|
|
51
54
|
|
|
52
55
|
| Parameter | Effect | Use when |
|
|
53
56
|
|---|---|---|
|
|
54
|
-
| `--depth 1` | Direct counterparties only |
|
|
57
|
+
| `--depth 1` | Direct counterparties only | Same data as `wallet counterparties`, plus the direction split |
|
|
55
58
|
| `--depth 2` | One degree of separation | Default. Reveals immediate networks. |
|
|
56
59
|
| `--depth 3+` | Wider net | Investigation / OSINT. Returns much more data; graph gets noisy. |
|
|
57
60
|
| `--width 3` | Top 3 per hop | Cleaner, focused on biggest flows |
|
|
@@ -60,13 +63,14 @@ vike-data wallet trace <address>
|
|
|
60
63
|
|
|
61
64
|
## Cost note
|
|
62
65
|
|
|
63
|
-
|
|
66
|
+
4 credits per call (the heaviest tool). Cost grows with depth × width, but the server silently stops after 300 wallet expansions, so a wide, deep trace (for example depth 3 × width 10) is cut rather than unbounded. If `max_depth_reached` is below `--depth`, either the branches ran out under `--min-usd` or the cap cut the graph: say which you cannot tell. Use `--depth 2 --width 5` as the default.
|
|
64
67
|
|
|
65
68
|
## Anti-patterns
|
|
66
69
|
|
|
67
70
|
- Don't trace through CEX deposits. Once funds enter Binance/Coinbase, the trail goes opaque (CEX internal accounting, not on-chain). Note CEX nodes and stop following.
|
|
68
71
|
- Don't depth-5 by default. Graph blows up; results become noise.
|
|
69
72
|
- Don't ignore `min_usd` — without it, dust transfers create false-positive edges.
|
|
73
|
+
- Don't read `from` as the sender.
|
|
70
74
|
|
|
71
75
|
## Visual graph (web UI)
|
|
72
76
|
|
|
@@ -80,6 +84,6 @@ Tell them to click the **Graph** tab. It renders the same trace data as a force-
|
|
|
80
84
|
|
|
81
85
|
## Pairs well with
|
|
82
86
|
|
|
83
|
-
- `vike-data labels <addr>` — identify
|
|
87
|
+
- `vike-data labels <addr>` / `vike-data wallet batch <addr...>` — identify the nodes
|
|
84
88
|
- `vike-data wallet compare <addr_a> <addr_b>` — confirm relatedness once trace surfaces candidates
|
|
85
89
|
- `vike-data wallet transactions <addr>` — drill into specific transfers between two nodes
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vike-wallet-transactions
|
|
3
3
|
description: Raw per-wallet transfer list (individual transactions, not aggregates) with direction, day, USD, and token filters. Use when the user asks "show me recent transfers for X" / "last 100 transactions of Y" / "all USDC moves from this wallet" / any forensic audit query.
|
|
4
|
-
allowed-tools: Bash(vike:*)
|
|
4
|
+
allowed-tools: Bash(vike-data:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# vike-wallet-transactions
|
|
@@ -19,6 +19,8 @@ vike-data wallet transactions <address> # alias: vike-data wallet txs
|
|
|
19
19
|
[--json]
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
+
`--chain base` is accepted, but per-wallet transfer data is documented for Ethereum and BSC: treat an empty Base result as "not covered", not "no activity".
|
|
23
|
+
|
|
22
24
|
## Examples
|
|
23
25
|
|
|
24
26
|
```bash
|
|
@@ -34,7 +36,7 @@ vike-data wallet txs 0xabc... --token 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
|
|
|
34
36
|
|
|
35
37
|
## Output columns
|
|
36
38
|
|
|
37
|
-
`time`, `tx_hash`, `from_address`, `to_address`, `token_address`, `
|
|
39
|
+
`time`, `tx_hash`, `from_address`, `to_address`, `token_address`, `usd`, `direction` (in/out), `block`. The USD key is `usd`, and `usd: 0.0` means the transfer is **unpriced**, not worthless: `--min-usd` therefore also hides unpriced transfers. The native coin shows as `token_address` `0x0000000000000000000000000000000000000000`.
|
|
38
40
|
|
|
39
41
|
Sorted descending by time (most recent first).
|
|
40
42
|
|
package/skills.sh.json
CHANGED
|
@@ -4,16 +4,15 @@
|
|
|
4
4
|
"groupings": [
|
|
5
5
|
{
|
|
6
6
|
"title": "Quick start",
|
|
7
|
-
"description": "Start here. The umbrella skill
|
|
7
|
+
"description": "Start here. The umbrella skill routes user questions to the right specialized skill below; vike-core covers install and auth.",
|
|
8
8
|
"skills": [
|
|
9
9
|
"vike",
|
|
10
|
-
"vike-router",
|
|
11
10
|
"vike-core"
|
|
12
11
|
]
|
|
13
12
|
},
|
|
14
13
|
{
|
|
15
14
|
"title": "Tokens",
|
|
16
|
-
"description": "Resolve, screen, and research tokens
|
|
15
|
+
"description": "Resolve, screen, and research tokens on Ethereum, BSC and Base. Smart-money inflow (Ethereum), holders, top buyers and sellers.",
|
|
17
16
|
"skills": [
|
|
18
17
|
"vike-token-search",
|
|
19
18
|
"vike-token-research",
|
|
@@ -25,7 +24,7 @@
|
|
|
25
24
|
},
|
|
26
25
|
{
|
|
27
26
|
"title": "Wallets",
|
|
28
|
-
"description": "Per-wallet profile,
|
|
27
|
+
"description": "Per-wallet profile, flows, counterparty graphs, ENS, batch labelling, label provenance.",
|
|
29
28
|
"skills": [
|
|
30
29
|
"vike-wallet-summary",
|
|
31
30
|
"vike-wallet-portfolio",
|
|
@@ -43,20 +42,17 @@
|
|
|
43
42
|
},
|
|
44
43
|
{
|
|
45
44
|
"title": "CEX perps",
|
|
46
|
-
"description": "Funding-rate arb
|
|
45
|
+
"description": "Funding-rate arb and per-symbol venue comparison, plus cross-venue perp price gaps and a market snapshot.",
|
|
47
46
|
"skills": [
|
|
48
|
-
"vike-perp-funding
|
|
49
|
-
"vike-perp-
|
|
50
|
-
"vike-perp-screener",
|
|
51
|
-
"vike-cross-venue-perps"
|
|
47
|
+
"vike-perp-funding",
|
|
48
|
+
"vike-perp-overview"
|
|
52
49
|
]
|
|
53
50
|
},
|
|
54
51
|
{
|
|
55
52
|
"title": "Hyperliquid perps",
|
|
56
|
-
"description": "
|
|
53
|
+
"description": "Top traders (and checking one address against the leaderboard) and share-card reverse-lookup.",
|
|
57
54
|
"skills": [
|
|
58
55
|
"vike-hl-top-traders",
|
|
59
|
-
"vike-hl-trader-profile",
|
|
60
56
|
"vike-hl-position-match"
|
|
61
57
|
]
|
|
62
58
|
},
|
|
@@ -69,18 +65,17 @@
|
|
|
69
65
|
},
|
|
70
66
|
{
|
|
71
67
|
"title": "Polymarket",
|
|
72
|
-
"description": "Prediction-market discovery, single-market deep-dives, trader profiles, and smart-money
|
|
68
|
+
"description": "Prediction-market discovery, single-market deep-dives, trader profiles, and smart-money signals with a market overview.",
|
|
73
69
|
"skills": [
|
|
74
70
|
"vike-polymarket-markets",
|
|
75
71
|
"vike-polymarket-market-detail",
|
|
76
72
|
"vike-polymarket-trader",
|
|
77
|
-
"vike-polymarket-smart-money"
|
|
78
|
-
"vike-polymarket-screener"
|
|
73
|
+
"vike-polymarket-smart-money"
|
|
79
74
|
]
|
|
80
75
|
},
|
|
81
76
|
{
|
|
82
77
|
"title": "Alerts",
|
|
83
|
-
"description": "Create, list, edit, delete
|
|
78
|
+
"description": "Create, list, edit, delete on-chain transfer alerts (USD thresholds per token); register HTTPS webhooks with HMAC delivery.",
|
|
84
79
|
"skills": [
|
|
85
80
|
"vike-alerts-setup",
|
|
86
81
|
"vike-alerts-webhook"
|
package/src/auth.js
CHANGED
package/src/commands/init.js
CHANGED
|
@@ -31,7 +31,7 @@ export function registerInit(program) {
|
|
|
31
31
|
const path = saveApiKey(key);
|
|
32
32
|
console.log(`Saved to ${path}`);
|
|
33
33
|
|
|
34
|
-
console.log('Verifying connection to vike.io/mcp ...');
|
|
34
|
+
console.log('Verifying connection to data.vike.io/mcp ...');
|
|
35
35
|
const { status, body } = await ping({ apiKey: key });
|
|
36
36
|
if (status !== 200 || body?.error) {
|
|
37
37
|
console.error(`Endpoint returned HTTP ${status}: ${JSON.stringify(body)}`);
|
package/src/commands/labels.js
CHANGED
|
@@ -5,7 +5,7 @@ export function registerLabels(program) {
|
|
|
5
5
|
// `vike-data labels <address>` — multi-source label provenance for one wallet
|
|
6
6
|
program
|
|
7
7
|
.command('labels <address>')
|
|
8
|
-
.description('Multi-source label cascade for
|
|
8
|
+
.description('Multi-source label cascade for an Ethereum wallet (up to 6 label sources + in-house heuristic + consensus view)')
|
|
9
9
|
.option('--json', 'Emit JSON')
|
|
10
10
|
.action(async (address, opts) => {
|
|
11
11
|
try {
|
package/src/commands/perp.js
CHANGED
|
@@ -9,7 +9,7 @@ export function registerPerp(program) {
|
|
|
9
9
|
|
|
10
10
|
cmd
|
|
11
11
|
.command('funding')
|
|
12
|
-
.description('Funding rates per venue, or cross-venue funding-arb
|
|
12
|
+
.description('Funding rates per venue (raw per-interval rate + interval_h), or the top 5 cross-venue funding-arb rows')
|
|
13
13
|
.option('--symbol <s>', 'Specific symbol (e.g. BTC). Omit for top arb opportunities.')
|
|
14
14
|
.option('--json', 'Emit JSON')
|
|
15
15
|
.action(async (opts) => {
|
|
@@ -21,8 +21,8 @@ export function registerPerp(program) {
|
|
|
21
21
|
|
|
22
22
|
cmd
|
|
23
23
|
.command('spreads')
|
|
24
|
-
.description('Cross-venue
|
|
25
|
-
.option('--symbol <s>', '
|
|
24
|
+
.description('Cross-venue perp price gaps: the 10 widest (buy on one venue, sell on another)')
|
|
25
|
+
.option('--symbol <s>', 'Filter those 10 to one symbol (often empty). Omit for all.')
|
|
26
26
|
.option('--json', 'Emit JSON')
|
|
27
27
|
.action(async (opts) => {
|
|
28
28
|
try {
|
|
@@ -43,8 +43,9 @@ export function registerPerp(program) {
|
|
|
43
43
|
.option('--json', 'Emit JSON')
|
|
44
44
|
.action(async (opts) => {
|
|
45
45
|
try {
|
|
46
|
+
// The tool renamed `coin` to `symbol` on 2026-10-19; `--coin` stays the flag users know.
|
|
46
47
|
const r = await callTool('hl_position_match', {
|
|
47
|
-
|
|
48
|
+
symbol: opts.coin,
|
|
48
49
|
side: opts.side,
|
|
49
50
|
leverage: Number(opts.leverage),
|
|
50
51
|
entry_price: Number(opts.entry),
|