@vike-io/cli 0.15.0 → 0.16.1
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 +22 -0
- package/README.md +11 -7
- package/package.json +1 -1
- package/skills/vike/SKILL.md +45 -31
- package/skills/vike-alerts-setup/SKILL.md +7 -5
- package/skills/vike-alerts-webhook/SKILL.md +4 -3
- package/skills/vike-candles/SKILL.md +3 -2
- package/skills/vike-core/SKILL.md +3 -3
- package/skills/vike-daily-brief/SKILL.md +68 -0
- package/skills/vike-follow-the-money/SKILL.md +60 -0
- package/skills/vike-hl-asset-briefing/SKILL.md +48 -0
- package/skills/vike-hl-builder-intel/SKILL.md +39 -0
- package/skills/vike-hl-cohort-backtest/SKILL.md +61 -0
- package/skills/vike-hl-cohort-positioning/SKILL.md +69 -0
- package/skills/vike-hl-liquidation-radar/SKILL.md +55 -0
- package/skills/vike-hl-position-match/SKILL.md +3 -2
- package/skills/vike-hl-top-traders/SKILL.md +21 -8
- package/skills/vike-hl-trader-profile/SKILL.md +65 -0
- package/skills/vike-perp-crowding/SKILL.md +49 -0
- package/skills/vike-perp-funding/SKILL.md +4 -1
- package/skills/vike-perp-overview/SKILL.md +23 -3
- package/skills/vike-pm-l2-archive/SKILL.md +50 -0
- package/skills/vike-pm-market-diligence/SKILL.md +60 -0
- package/skills/vike-polymarket-market-detail/SKILL.md +20 -15
- package/skills/vike-polymarket-markets/SKILL.md +2 -1
- package/skills/vike-polymarket-smart-money/SKILL.md +9 -0
- package/skills/vike-polymarket-trader/SKILL.md +10 -1
- package/skills/vike-smart-money-discovery/SKILL.md +4 -3
- package/skills/vike-stream/SKILL.md +34 -10
- package/skills/vike-token-holder-diligence/SKILL.md +58 -0
- package/skills/vike-token-holders/SKILL.md +6 -4
- package/skills/vike-token-research/SKILL.md +6 -6
- package/skills/vike-token-screener/SKILL.md +3 -3
- package/skills/vike-token-search/SKILL.md +2 -1
- package/skills/vike-token-smart-money-trend/SKILL.md +57 -0
- package/skills/vike-token-transfers/SKILL.md +8 -6
- package/skills/vike-wallet-balances/SKILL.md +9 -7
- package/skills/vike-wallet-batch/SKILL.md +3 -3
- package/skills/vike-wallet-compare/SKILL.md +2 -2
- package/skills/vike-wallet-counterparties/SKILL.md +2 -2
- package/skills/vike-wallet-discover/SKILL.md +3 -1
- package/skills/vike-wallet-ens/SKILL.md +2 -2
- package/skills/vike-wallet-label-provenance/SKILL.md +5 -4
- package/skills/vike-wallet-pnl-history/SKILL.md +2 -2
- package/skills/vike-wallet-portfolio/SKILL.md +10 -8
- package/skills/vike-wallet-summary/SKILL.md +6 -6
- package/skills/vike-wallet-trace/SKILL.md +4 -3
- package/skills/vike-wallet-transactions/SKILL.md +2 -2
- package/skills/vike-wallet-who-is/SKILL.md +50 -0
- package/skills/vike-wallets-related/SKILL.md +52 -0
- package/skills.sh.json +26 -11
- package/src/commands/stream.js +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vike-wallet-balances
|
|
3
|
-
description: Current token balances for a wallet on
|
|
3
|
+
description: Current token balances for a wallet on Ethereum, BSC, Base and HyperEVM, 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,12 +10,12 @@ allowed-tools: Bash(vike-data:*)
|
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
vike-data wallet balances <address>
|
|
13
|
-
[--chains ethereum,bsc] (default:
|
|
13
|
+
[--chains ethereum,bsc,base,hyperevm] (default: all four)
|
|
14
14
|
[--min-usd 1] (hide holdings worth less; default 1)
|
|
15
15
|
[--json]
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
Scanning all four chains is slow (tens of seconds for a busy wallet): pass `--chains` with the chain you need. Any other chain (arbitrum, polygon...) is not skipped silently: it is named in `chain_errors`. Each holding carries its own `chain`, so this is also the quickest way to see WHERE a wallet's value is before choosing `--chain` for the per-chain wallet commands.
|
|
19
19
|
|
|
20
20
|
## Example
|
|
21
21
|
|
|
@@ -33,17 +33,19 @@ vike-data wallet balances 0xd8da6bf26964af9d7eed9e03e53415d37aa96045 --chains et
|
|
|
33
33
|
"holdings": [
|
|
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
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":
|
|
36
|
+
{ "chain": "ethereum", "symbol": "ETH", "name": "ETH", "address": null, "balance": 2.5, "balance_raw": "2500000000000000000", "usd_value": 9500.0, "usd_price": 3800.0 }
|
|
37
37
|
]
|
|
38
38
|
}
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
Holdings are sorted by `usd_value` descending with unpriced rows
|
|
41
|
+
Holdings are sorted by `usd_value` descending with unpriced rows last. `chain_errors` appears only when a requested chain was refused or failed.
|
|
42
42
|
|
|
43
43
|
## Reading
|
|
44
44
|
|
|
45
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**
|
|
46
|
+
- **The chain's native coin (ETH, BNB, HYPE) is a row** whenever its balance is not zero, whatever `--min-usd` says, with a USD value (counted in `total_usd`) where a price exists.
|
|
47
|
+
- **On `base` and `hyperevm` a row has `symbol`, `name`, `balance` and `usd_value` only for tokens we map and price** (about 170 on base, about 50 on hyperevm). `--min-usd 0` adds every other token the wallet holds, with its contract `address` and `balance_raw` and the rest `null`: often thousands of airdrop-spam rows, so use it deliberately.
|
|
48
|
+
- `hyperevm` is the HyperEVM chain only: HyperCore (Hyperliquid spot or perp accounts) is not included; Hyperliquid perp equity is `vike-data hl wallet <address>`.
|
|
47
49
|
- **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
50
|
- `total_usd` covers `chains_scanned` only. The wallet may hold value on chains the tool does not scan: say so when relevant.
|
|
49
51
|
- Stablecoin-heavy wallet → likely waiting for a buy / parked dry powder
|
|
@@ -53,7 +55,7 @@ Holdings are sorted by `usd_value` descending with unpriced rows (the native coi
|
|
|
53
55
|
|
|
54
56
|
## Anti-patterns
|
|
55
57
|
|
|
56
|
-
- Don't report `total_usd` as the wallet's value without "of priced tokens"
|
|
58
|
+
- Don't report `total_usd` as the wallet's value without "of priced tokens".
|
|
57
59
|
- For wallets with 100+ tokens, the response is large — use `--min-usd 100` or higher to focus on meaningful holdings.
|
|
58
60
|
- This is a point-in-time read, not history. For how the wallet got here use `wallet pnl-history`.
|
|
59
61
|
|
|
@@ -10,7 +10,7 @@ allowed-tools: Bash(vike-data:*)
|
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
vike-data wallet batch <addr1> <addr2> <addr3> ...
|
|
13
|
-
[--chain ethereum|bsc|base] # default ethereum; labels and flows are read from THAT chain's tables
|
|
13
|
+
[--chain ethereum|bsc|base|hyperevm] # default ethereum; labels and flows are read from THAT chain's tables
|
|
14
14
|
[--json]
|
|
15
15
|
```
|
|
16
16
|
|
|
@@ -37,8 +37,8 @@ One row per INPUT address (preserves input order — useful when joining back to
|
|
|
37
37
|
## Chain behaviour
|
|
38
38
|
|
|
39
39
|
- `--chain` picks the label table and the 30-day flow table. Before 2026-10-19 it was accepted and ignored (`bsc` and `base` returned Ethereum labels), so earlier results for those chains are Ethereum's.
|
|
40
|
-
- **The four 30-day fields (`net_30d_usd`, `volume_30d_usd`, `tx_30d`, `tokens_30d_count`) are `null`, not 0,**
|
|
41
|
-
- `found: false` = the address is not in that chain's label table. It is not proof the wallet is new or clean.
|
|
40
|
+
- **The four 30-day fields (`net_30d_usd`, `volume_30d_usd`, `tx_30d`, `tokens_30d_count`) are `null`, not 0,** for an address we have no label for (`found: false`). Don't report null as zero activity.
|
|
41
|
+
- `found: false` = the address is not in that chain's label table. It is not proof the wallet is new or clean. Labels are sparse on `hyperevm`, so most rows there will be `found: false`.
|
|
42
42
|
|
|
43
43
|
## Reading
|
|
44
44
|
|
|
@@ -10,13 +10,13 @@ allowed-tools: Bash(vike-data:*)
|
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
vike-data wallet compare <address_a> <address_b>
|
|
13
|
-
[--chain ethereum|bsc|base]
|
|
13
|
+
[--chain ethereum|bsc|base|hyperevm]
|
|
14
14
|
[--window 24h|7d|30d|90d|180d|all]
|
|
15
15
|
[--limit N] (max 50)
|
|
16
16
|
[--json]
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
Compares exactly two wallets
|
|
19
|
+
Compares exactly two wallets on one chain (`ethereum`, `bsc`, `base` or `hyperevm`; shared-counterparty labels come from that chain's own label table). Busy wallets are slow (about 20 s for a pair of market makers). For the full verdict with exchanges and routers removed, use `vike-wallets-related`.
|
|
20
20
|
|
|
21
21
|
## Output
|
|
22
22
|
|
|
@@ -10,13 +10,13 @@ allowed-tools: Bash(vike-data:*)
|
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
vike-data wallet counterparties <address>
|
|
13
|
-
[--chain ethereum|bsc|base]
|
|
13
|
+
[--chain ethereum|bsc|base|hyperevm]
|
|
14
14
|
[--window 24h|7d|30d|90d|180d|all]
|
|
15
15
|
[--limit N] (max 50)
|
|
16
16
|
[--json]
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
Chains: `ethereum`, `bsc`, `base`, `hyperevm`. `entity` / `wallet_type` come from THAT chain's label table (empty string when unlabelled). `wallet summary` names the chain it answered for; run this per chain for the others.
|
|
20
20
|
|
|
21
21
|
## Example
|
|
22
22
|
|
|
@@ -13,11 +13,13 @@ vike-data wallet discover
|
|
|
13
13
|
[--window 24h|7d|30d|90d|all]
|
|
14
14
|
[--sort volume|inflow|outflow|net_flow|tx_count|pnl]
|
|
15
15
|
[--order asc|desc]
|
|
16
|
-
[--chain ethereum|bsc]
|
|
16
|
+
[--chain ethereum|bsc|base|hyperevm]
|
|
17
17
|
[--size N] # default 10, max 20
|
|
18
18
|
[--json]
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
+
**On `base` and `hyperevm` pass `--window all`**: the command sends `30d` by default, and the shorter windows there answer only while they were rebuilt in the last 2 days (otherwise a 400). `ethereum` and `bsc` take every window.
|
|
22
|
+
|
|
21
23
|
## When to use
|
|
22
24
|
|
|
23
25
|
| Question | Flags |
|
|
@@ -25,12 +25,12 @@ vike-data wallet ens 0x28c6c06298d514db089934071355e5743bf21d60
|
|
|
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 "what is its ENS name" (for "who is this",
|
|
28
|
+
- When the user pastes an address and asks "what is its ENS name" (for "who is this", use `vike-wallet-who-is`; 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
31
|
## Direction
|
|
32
32
|
|
|
33
|
-
**Reverse only: address → name.**
|
|
33
|
+
**Reverse only: address → name.** This command has no name → address lookup; for `vitalik.eth` run `vike-data search vitalik.eth`, which searches the address the name points to. The only parameter is `address`.
|
|
34
34
|
|
|
35
35
|
## Anti-patterns
|
|
36
36
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vike-wallet-label-provenance
|
|
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 "
|
|
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 "what do the label sources say about 0x..." / "is this address labeled" / "why is this wallet labeled X" / "do the sources agree on this label".
|
|
4
4
|
allowed-tools: Bash(vike-data:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -14,7 +14,7 @@ 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.
|
|
17
|
+
Ethereum wallets only. For another chain, or many addresses, use `vike-data wallet batch --chain ethereum|bsc|base|hyperevm`, which reads each chain's own label table. For "who is this wallet" as a whole (labels, ENS, chain, exchanges, counterparties) use `vike-wallet-who-is`.
|
|
18
18
|
|
|
19
19
|
## Example
|
|
20
20
|
|
|
@@ -56,7 +56,7 @@ Sources are anonymised on the wire (`provider_a`, `provider_b`, ...). There are
|
|
|
56
56
|
- **Only 1 source (± heuristic)** → moderate; mention "labeled by one source"
|
|
57
57
|
- **Only the heuristic** → low; mention "predicted by heuristic"
|
|
58
58
|
- **`found: true` with no sources** → the wallet is in our label table but no raw source labels it
|
|
59
|
-
- **`found: false`** → the
|
|
59
|
+
- **`found: false`** → every source was read and none knows the address, and it is not in our label table (`found` is true when ANY source knows it). It does NOT prove the wallet is clean or new: our sources do not cover every wallet. Say "no label source knows it", not "clean".
|
|
60
60
|
|
|
61
61
|
Early answers (before 2026-10-19) carried only the Arkham-derived source and the heuristic, so older transcripts undercount sources.
|
|
62
62
|
|
|
@@ -64,7 +64,8 @@ Early answers (before 2026-10-19) carried only the Arkham-derived source and the
|
|
|
64
64
|
|
|
65
65
|
- Don't quote any single provider's category field as "the category" — provider taxonomies vary; the `consensus.wallet_type` is the unified field.
|
|
66
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
|
|
67
|
+
- Don't use this for a BSC, Base or HyperEVM address: the consensus reads Ethereum tables only (only source `provider_e`, Polymarket wallets and their funders, answers on any EVM chain).
|
|
68
|
+
- `consensus.wallet_type` can be wrong when sources disagree (the entity "vitalik buterin" read `dex` because one source says sushiswap): read the `sources` before trusting the type.
|
|
68
69
|
|
|
69
70
|
## Pairs well with
|
|
70
71
|
|
|
@@ -10,12 +10,12 @@ allowed-tools: Bash(vike-data:*)
|
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
vike-data wallet pnl-history <address>
|
|
13
|
-
[--chain ethereum|bsc|base]
|
|
13
|
+
[--chain ethereum|bsc|base|hyperevm]
|
|
14
14
|
[--days N] (max 365, default 30)
|
|
15
15
|
[--json]
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
Chains: `ethereum`, `bsc`, `base`, `hyperevm`, one chain per call.
|
|
19
19
|
|
|
20
20
|
## Output
|
|
21
21
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vike-wallet-portfolio
|
|
3
|
-
description:
|
|
3
|
+
description: Holdings-and-activity snapshot of one wallet — ENS, labels, token balances across Ethereum, BSC, Base and HyperEVM, recent flow and 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" / "what does this wallet hold and do").
|
|
4
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. 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.
|
|
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. For identity alone ("who is this", "is it an exchange") use `vike-wallet-who-is`.
|
|
10
10
|
|
|
11
11
|
## Workflow (run in parallel where possible)
|
|
12
12
|
|
|
@@ -15,20 +15,20 @@ ADDR=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
|
|
|
15
15
|
|
|
16
16
|
vike-data wallet ens $ADDR --json & # 1 credit
|
|
17
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
|
|
20
|
-
vike-data wallet counterparties $ADDR --window 30d --limit 10 --json & # 2 credits
|
|
18
|
+
vike-data wallet summary $ADDR --json & # 2 credits - names its `chain`
|
|
19
|
+
vike-data wallet balances $ADDR --json & # 3 credits - all four chains; add --chains to narrow (faster)
|
|
21
20
|
wait
|
|
21
|
+
vike-data wallet counterparties $ADDR --chain <summary.chain> --window 30d --limit 10 --json # 2 credits
|
|
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`.
|
|
24
|
+
Then label the counterparties with an empty `entity` in one call: `vike-data wallet batch <cp1> <cp2> ... --chain <summary.chain> --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
25
|
|
|
26
26
|
## Report template
|
|
27
27
|
|
|
28
28
|
> **`<ENS or 0x...>` — wallet snapshot**
|
|
29
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
|
|
31
|
-
> - **30d flow
|
|
30
|
+
> - **Priced token holdings:** `$X` (floor: unpriced tokens are excluded; on Base and HyperEVM only mapped and priced tokens show) across `<chains_scanned>`. Top 3 by USD: `<symbol1 $X on chain>`, ... Native balance: `<n ETH/BNB/HYPE>`.
|
|
31
|
+
> - **30d flow on `<chain>`:** `+/-$Z` net (`summary["30d"].net_flow`), one chain.
|
|
32
32
|
> - **Activity:** `<tx_count>` transfers in 30d, `<tokens_traded>` tokens traded all-time.
|
|
33
33
|
> - **Top counterparties:** `<entity or address>` · `$volume`, ...
|
|
34
34
|
> - **Vibe check:** `<saver / trader / farmer / institutional / inactive / fresh>`
|
|
@@ -51,9 +51,11 @@ Then label the counterparties in one call: `vike-data wallet batch <cp1> <cp2> .
|
|
|
51
51
|
|
|
52
52
|
## When to use a focused skill instead
|
|
53
53
|
|
|
54
|
+
- "Who is X" / "is it an exchange" → `vike-wallet-who-is`
|
|
54
55
|
- "Just labels for X" → `vike-wallet-label-provenance`
|
|
55
56
|
- "What does X hold" → `vike-wallet-balances`
|
|
56
57
|
- "Top counterparties of X" → `vike-wallet-counterparties`
|
|
58
|
+
- "X's Hyperliquid account" → `vike-hl-trader-profile`
|
|
57
59
|
|
|
58
60
|
## Pairs well with
|
|
59
61
|
|
|
@@ -12,19 +12,19 @@ allowed-tools: Bash(vike-data:*)
|
|
|
12
12
|
vike-data wallet summary <address> [--json]
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
No chain flag: one call returns every window, for one chain.
|
|
15
|
+
No chain flag: one call returns every window, for one chain. To ask a given chain use the tool directly: `vike-data call wallet_summary --args '{"address":"0x...","chain":"base"}'` (`ethereum`, `bsc`, `base` or `hyperevm`).
|
|
16
16
|
|
|
17
17
|
## Output
|
|
18
18
|
|
|
19
|
-
A JSON object
|
|
19
|
+
A JSON object with a `chain` field and one block per window: `all`, `90d`, `30d`, `7d`, `24h`. Each window holds:
|
|
20
20
|
|
|
21
21
|
`total_volume`, `total_inflow`, `total_outflow`, `net_flow` (USD), `tx_count`, `tokens_traded`, `first_seen`, `last_active`.
|
|
22
22
|
|
|
23
|
-
- **One chain only
|
|
24
|
-
- **`tokens_traded
|
|
23
|
+
- **One chain only, named in `chain`.** Without a chain the figures are for the more recently active of Ethereum and BSC, never summed; Base or HyperEVM answer only for a wallet with no priced Ethereum or BSC volume. Always say which chain the numbers are for; `wallet balances` shows which chain holds the value.
|
|
24
|
+
- **`tokens_traded` is per window** (distinct tokens moved in it). **`first_seen` and `last_active` are all-time** and repeat in every window: read them from `all`.
|
|
25
25
|
- A window with no activity is present and zeroed (`24h` often is), not omitted.
|
|
26
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 `
|
|
27
|
+
- It carries no PnL, no holdings, no labels and no Hyperliquid data. For those: `wallet balances`, `labels` / `wallet batch`, and `hl wallet`.
|
|
28
28
|
|
|
29
29
|
## Reading tips
|
|
30
30
|
|
|
@@ -39,7 +39,7 @@ A JSON object keyed by window: `all`, `90d`, `30d`, `7d`, `24h`. Each window hol
|
|
|
39
39
|
|
|
40
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
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.
|
|
42
|
+
- Don't describe the result as "across ETH/BSC/Base/HyperEVM": it is one chain.
|
|
43
43
|
|
|
44
44
|
## Pairs well with
|
|
45
45
|
|
|
@@ -1,6 +1,6 @@
|
|
|
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; edges carry the direction of the flow. Use when the user asks "
|
|
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 for "the counterparty graph of X" / "trace 3 hops around this wallet" / "show the network around X" / "who is connected to this wallet within N hops".
|
|
4
4
|
allowed-tools: Bash(vike-data:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -10,7 +10,7 @@ allowed-tools: Bash(vike-data:*)
|
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
vike-data wallet trace <address>
|
|
13
|
-
[--chain ethereum|bsc|base]
|
|
13
|
+
[--chain ethereum|bsc|base|hyperevm]
|
|
14
14
|
[--depth N] (1-5, default 2)
|
|
15
15
|
[--width N] (1-10, default 5)
|
|
16
16
|
[--window 24h|7d|30d|90d|all]
|
|
@@ -18,7 +18,7 @@ vike-data wallet trace <address>
|
|
|
18
18
|
[--json]
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
Chains: `ethereum`, `bsc`, `base`, `hyperevm`; node labels come from that chain's own label table. The command expands each hop by combined volume in both directions; the tool also takes `direction` `out` (where funds went) or `in` (where they came from), reached with `vike-data call wallet_trace --args '{"address":"0x...","direction":"out","depth":2}'`.
|
|
22
22
|
|
|
23
23
|
## Output
|
|
24
24
|
|
|
@@ -87,3 +87,4 @@ Tell them to click the **Graph** tab. It renders the same trace data as a force-
|
|
|
87
87
|
- `vike-data labels <addr>` / `vike-data wallet batch <addr...>` — identify the nodes
|
|
88
88
|
- `vike-data wallet compare <addr_a> <addr_b>` — confirm relatedness once trace surfaces candidates
|
|
89
89
|
- `vike-data wallet transactions <addr>` — drill into specific transfers between two nodes
|
|
90
|
+
- `vike-follow-the-money` — the incident playbook (order of calls, stop rules, a live watch); `vike-wallets-related` — evidence of a shared owner
|
|
@@ -10,7 +10,7 @@ allowed-tools: Bash(vike-data:*)
|
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
vike-data wallet transactions <address> # alias: vike-data wallet txs
|
|
13
|
-
[--chain ethereum|bsc|base]
|
|
13
|
+
[--chain ethereum|bsc|base|hyperevm]
|
|
14
14
|
[--direction in|out|all]
|
|
15
15
|
[--days N] (max 365)
|
|
16
16
|
[--limit N] (max 500)
|
|
@@ -19,7 +19,7 @@ vike-data wallet transactions <address> # alias: vike-data wallet txs
|
|
|
19
19
|
[--json]
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
Chains: `ethereum`, `bsc`, `base`, `hyperevm`. The same address has a separate history per chain: pass `--chain` for each.
|
|
23
23
|
|
|
24
24
|
## Examples
|
|
25
25
|
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vike-wallet-who-is
|
|
3
|
+
description: Say who is behind one EVM address from vike's search, its label sources, ENS name, the chain it is active on, the exchanges it uses and its biggest counterparties. Tells an exchange, fund, market maker or contract from an ordinary user. Use when the user asks "who is 0x..." / "whose wallet is this" / "is this an exchange or a fund" / "which exchange does this wallet use" / "what kind of wallet is this".
|
|
4
|
+
allowed-tools: Bash(vike-data:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# vike-wallet-who-is
|
|
8
|
+
|
|
9
|
+
Identity playbook for ONE address: what vike already calls it, labels, ENS, the chain that matters, which exchanges and wallets it moves money with. About 12 credits. For holdings and a flow snapshot use `vike-wallet-portfolio`.
|
|
10
|
+
|
|
11
|
+
## Chain
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
ADDR=0x28C6c06298d514Db089934071355E5743bf21d60
|
|
15
|
+
vike-data search $ADDR --json # 1 entity, HL trader, vault, builder, Polymarket wallet: whatever vike knows it as
|
|
16
|
+
vike-data labels $ADDR --json # 1 label sources + consensus (Ethereum label table)
|
|
17
|
+
vike-data wallet ens $ADDR --json # 1 reverse ENS; "ens" can be null
|
|
18
|
+
vike-data wallet summary $ADDR --json # 2 READ its `chain` field before anything else
|
|
19
|
+
vike-data wallet exchange-usage $ADDR --chain <summary.chain> --window 365d --json # 3 which exchanges, with USD and shares
|
|
20
|
+
vike-data wallet counterparties $ADDR --chain <summary.chain> --window 90d --limit 20 --json # 2
|
|
21
|
+
vike-data wallet batch <counterparties with an empty entity> --chain <summary.chain> --json # 2, max 100 addresses
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Chains: `ethereum`, `bsc`, `base`, `hyperevm` on every wallet command here. The user gave a name, not an address? `vike-data search vitalik.eth` searches the address an ENS name points to.
|
|
25
|
+
|
|
26
|
+
## Reading each step
|
|
27
|
+
|
|
28
|
+
- **`search`**: its `wallets`, `traders`, `vaults`, `builders` and `polymarket` sections say where vike already knows the address (a labelled entity, a Hyperliquid trader, a Polymarket proxy and its owner). Empty sections are not evidence of anything.
|
|
29
|
+
- **`labels`**: `found: false` = not in our label table; it is not proof the wallet is an ordinary user. Otherwise read `consensus` (`entity`, `wallet_type`, `confidence`, `risk_flag`) AND `sources[]`. When sources disagree the consensus type can be wrong: for `0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045` the entity is "vitalik buterin" but `wallet_type` read `dex` because one source says "sushiswap". Report the entity the sources agree on, not the type.
|
|
30
|
+
- **`summary.chain`** is the more recently active of ethereum and bsc, never a sum; base or hyperevm only for a wallet with no priced ethereum/bsc volume. If the figures look tiny, run `vike-data wallet balances $ADDR` (each holding carries its `chain`) and ask that chain directly: `vike-data call wallet_summary --args '{"address":"0x...","chain":"base"}'`.
|
|
31
|
+
- **`exchange-usage`**: `exchanges[]` with `sent_usd`, `recv_usd`, `sent_share`, first and last seen; `pattern: "sweeps_to_single_cex"` means 90%+ of its outgoing USD went to one exchange: an OBSERVED pattern, not proof it is a deposit address. Figures are a lower bound (an unlabelled exchange address is invisible; labels are sparse on hyperevm). A very active wallet is refused over a long window: narrow `--window`.
|
|
32
|
+
- **`counterparties`** rows already carry `entity` and `wallet_type` (empty string when unlabelled); only the empty ones need `wallet batch`, which adds `confidence`, `risk_flag` and 30-day flow from that chain's own tables.
|
|
33
|
+
- **The wallet itself is `cex`**: it is the exchange's own wallet, not a person. `wallet_type: dex` on a counterparty is a router or pool: many of them = an active trader, not a relationship.
|
|
34
|
+
- Optional, "who funded it": `vike-data wallet first-funder $ADDR --chain <chain>` gives the earliest inbound coin and token transfers with the senders' labels. It is not proof of the funder: contract calls and bridges are absent and history starts on a different date per chain (`coverage.history_from`).
|
|
35
|
+
|
|
36
|
+
## Answer template
|
|
37
|
+
|
|
38
|
+
> `<ENS or 0x...>` is `<entity>` (`<wallet_type>`, confidence `<c>`, `<n>` sources agree). Active on `<chain>`; 90d volume `$X`, last active `<date>`. Exchanges: `<entity>` `$sent` / `$received`. It mostly deals with `<top labelled counterparties>`; the largest unlabelled counterparty is `<0x...>` ($V). `<Not labelled: say so.>`
|
|
39
|
+
|
|
40
|
+
## Anti-patterns
|
|
41
|
+
|
|
42
|
+
- Don't name a real-world person from a label, and don't claim two wallets share an owner: that is `vike-wallets-related`, and it is evidence, not proof.
|
|
43
|
+
- Don't read `summary` as the wallet's whole activity: it is one chain.
|
|
44
|
+
- Don't call a wallet "clean" because `risk_flag` is empty or `found` is false.
|
|
45
|
+
|
|
46
|
+
## Pairs well with
|
|
47
|
+
|
|
48
|
+
- `vike-wallet-label-provenance` for the raw per-source labels, `vike-wallet-portfolio` for holdings
|
|
49
|
+
- `vike-follow-the-money` to see where its money went, `vike-wallets-related` to test a link between two addresses
|
|
50
|
+
- `vike-hl-trader-profile` when `search` lists it as a Hyperliquid trader, `vike-polymarket-trader` for a Polymarket wallet
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vike-wallets-related
|
|
3
|
+
description: Gather evidence on whether two wallets, or a wallet and its possible siblings, belong to the same entity - labels, first funders, shared counterparties and tokens with exchanges and routers removed, direct links, a depth-2 trace - with confidence tiers. Use when the user asks "are these wallets the same person" / "find wallets related to 0x..." / "is this a sybil cluster" / "does B belong to A".
|
|
4
|
+
allowed-tools: Bash(vike-data:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# vike-wallets-related
|
|
8
|
+
|
|
9
|
+
Evidence, never proof: no tool exposes a deposit-address owner or a cluster id. Cap the cluster at 10 wallets and ask before widening. About 20-30 credits.
|
|
10
|
+
|
|
11
|
+
## Chain
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
vike-data labels $A --json # 1 A and B: same entity already?
|
|
15
|
+
vike-data labels $B --json
|
|
16
|
+
vike-data wallet first-funder $A --json # 2 earliest inbound coin and token, sender labelled
|
|
17
|
+
vike-data wallet first-funder $B --json
|
|
18
|
+
vike-data wallet compare $A $B --window 90d --limit 50 --json # 3, up to ~20 s on busy wallets
|
|
19
|
+
vike-data wallet batch <shared counterparties> --json # 2 label them, drop exchanges and routers
|
|
20
|
+
vike-data wallet trace $A --depth 2 --width 10 --window 90d --min-usd 1000 --json # 4 is B in A's neighbourhood?
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Add `--chain bsc|base|hyperevm` to every wallet command when the wallets live there (default ethereum); `labels` reads the Ethereum label table, so on other chains use `wallet batch --chain`.
|
|
24
|
+
|
|
25
|
+
## Siblings mode (only A is known)
|
|
26
|
+
|
|
27
|
+
`wallet counterparties $A --window 90d --limit 50`, label them with `wallet batch`, drop `cex`, `dex`, `market_maker` and contract rows, keep the highest-volume unlabelled or `user` wallets, then `wallet compare $A <candidate>` for the top 3-5, `wallet first-funder` on each, and `wallet trace` once. Stop at 10 wallets.
|
|
28
|
+
|
|
29
|
+
## Reading
|
|
30
|
+
|
|
31
|
+
- `compare` returns `shared_counterparties` (`wallet`, `a_volume_usd`, `b_volume_usd`, `entity`, `wallet_type`) and `shared_tokens`. The big shared rows are almost always an exchange, a router or USDT/USDC/the native coin: in a live market-maker pair the top shared counterparties were Binance, another wallet of the same firm and Coinbase, the shared tokens ETH, USDT and USDC. **Remove CEX, router and stablecoin overlap before counting anything.**
|
|
32
|
+
- **Direct links**: B appearing as a node of A's trace (an edge with `out_usd` or `in_usd` > 0 between them) is stronger than any overlap.
|
|
33
|
+
- **First funders**: the same non-exchange sender in `first_native_in` or `first_token_in` of both is a link; the same exchange hot wallet is not (everyone withdrawing from it shares it). Native rows hold top-level sends only and history starts per chain (`coverage.history_from`): no match is not evidence against.
|
|
34
|
+
|
|
35
|
+
| Tier | Evidence |
|
|
36
|
+
|---|---|
|
|
37
|
+
| High | the same entity in `labels` / `batch` for both; or a direct transfer between them AND a shared non-CEX counterparty |
|
|
38
|
+
| Medium | several shared non-exchange counterparties AND shared niche tokens (not stablecoins/ETH); one direct link of size; or the same non-exchange first funder |
|
|
39
|
+
| Low / none | overlap only through exchanges, routers, stablecoins; matching ENS style; funding from the same CEX |
|
|
40
|
+
|
|
41
|
+
State the tier and the list of what was removed.
|
|
42
|
+
|
|
43
|
+
## Anti-patterns
|
|
44
|
+
|
|
45
|
+
- Don't claim "same person" from a shared CEX hot wallet: everyone who uses that exchange shares it.
|
|
46
|
+
- Don't trace through exchanges or past 10 wallets; don't trace at `--min-usd 0`.
|
|
47
|
+
- Don't call two wallets unrelated from one chain: run the commands on the chain where both are active (`wallet balances` shows where the value is).
|
|
48
|
+
|
|
49
|
+
## Pairs well with
|
|
50
|
+
|
|
51
|
+
- `vike-wallet-who-is`, `vike-wallet-compare`, `vike-wallet-counterparties`, `vike-wallet-trace`, `vike-wallet-batch`
|
|
52
|
+
- `vike-polymarket-trader`: for Polymarket wallets, `polymarket wallet` returns `correlated`, the wallets trading the same markets
|
package/skills.sh.json
CHANGED
|
@@ -4,35 +4,41 @@
|
|
|
4
4
|
"groupings": [
|
|
5
5
|
{
|
|
6
6
|
"title": "Quick start",
|
|
7
|
-
"description": "Start here. The umbrella skill routes user questions to the right specialized skill below; vike-core covers install and auth.",
|
|
7
|
+
"description": "Start here. The umbrella skill routes user questions to the right specialized skill below; vike-core covers install and auth; vike-daily-brief is a cheap cross-market rundown.",
|
|
8
8
|
"skills": [
|
|
9
9
|
"vike",
|
|
10
|
-
"vike-core"
|
|
10
|
+
"vike-core",
|
|
11
|
+
"vike-daily-brief"
|
|
11
12
|
]
|
|
12
13
|
},
|
|
13
14
|
{
|
|
14
15
|
"title": "Tokens",
|
|
15
|
-
"description": "Resolve, screen, and research tokens on Ethereum, BSC and
|
|
16
|
+
"description": "Resolve, screen, and research tokens on Ethereum, BSC, Base and HyperEVM. Smart-money inflow and its trend over time (Ethereum), holders and holder due diligence, top buyers and sellers.",
|
|
16
17
|
"skills": [
|
|
17
18
|
"vike-token-search",
|
|
18
19
|
"vike-token-research",
|
|
19
20
|
"vike-token-transfers",
|
|
20
21
|
"vike-token-holders",
|
|
22
|
+
"vike-token-holder-diligence",
|
|
21
23
|
"vike-token-screener",
|
|
22
|
-
"vike-smart-money-discovery"
|
|
24
|
+
"vike-smart-money-discovery",
|
|
25
|
+
"vike-token-smart-money-trend"
|
|
23
26
|
]
|
|
24
27
|
},
|
|
25
28
|
{
|
|
26
29
|
"title": "Wallets",
|
|
27
|
-
"description": "
|
|
30
|
+
"description": "Who a wallet is, per-wallet profile, flows, counterparty graphs, incident tracing, relatedness evidence, ENS, batch labelling, label provenance, on Ethereum, BSC, Base and HyperEVM.",
|
|
28
31
|
"skills": [
|
|
32
|
+
"vike-wallet-who-is",
|
|
29
33
|
"vike-wallet-summary",
|
|
30
34
|
"vike-wallet-portfolio",
|
|
31
35
|
"vike-wallet-discover",
|
|
32
36
|
"vike-wallet-transactions",
|
|
33
37
|
"vike-wallet-counterparties",
|
|
34
38
|
"vike-wallet-trace",
|
|
39
|
+
"vike-follow-the-money",
|
|
35
40
|
"vike-wallet-compare",
|
|
41
|
+
"vike-wallets-related",
|
|
36
42
|
"vike-wallet-batch",
|
|
37
43
|
"vike-wallet-pnl-history",
|
|
38
44
|
"vike-wallet-balances",
|
|
@@ -42,18 +48,25 @@
|
|
|
42
48
|
},
|
|
43
49
|
{
|
|
44
50
|
"title": "CEX perps",
|
|
45
|
-
"description": "Funding-rate arb and per-symbol venue comparison,
|
|
51
|
+
"description": "Funding-rate arb and per-symbol venue comparison, cross-venue perp price gaps, open interest and long/short lean per venue, and a crowding read that nets open interest against price.",
|
|
46
52
|
"skills": [
|
|
47
53
|
"vike-perp-funding",
|
|
48
|
-
"vike-perp-overview"
|
|
54
|
+
"vike-perp-overview",
|
|
55
|
+
"vike-perp-crowding"
|
|
49
56
|
]
|
|
50
57
|
},
|
|
51
58
|
{
|
|
52
59
|
"title": "Hyperliquid perps",
|
|
53
|
-
"description": "Top traders, one
|
|
60
|
+
"description": "Top traders and leaderboards, one-wallet profiles, wallet-cohort positioning and its backtest method, single-symbol briefings, liquidation risk, builder codes, and share-card reverse-lookup.",
|
|
54
61
|
"skills": [
|
|
55
62
|
"vike-hl-top-traders",
|
|
56
|
-
"vike-hl-
|
|
63
|
+
"vike-hl-trader-profile",
|
|
64
|
+
"vike-hl-position-match",
|
|
65
|
+
"vike-hl-cohort-positioning",
|
|
66
|
+
"vike-hl-cohort-backtest",
|
|
67
|
+
"vike-hl-asset-briefing",
|
|
68
|
+
"vike-hl-liquidation-radar",
|
|
69
|
+
"vike-hl-builder-intel"
|
|
57
70
|
]
|
|
58
71
|
},
|
|
59
72
|
{
|
|
@@ -65,12 +78,14 @@
|
|
|
65
78
|
},
|
|
66
79
|
{
|
|
67
80
|
"title": "Polymarket",
|
|
68
|
-
"description": "Prediction-market discovery, single-market deep-dives, trader profiles,
|
|
81
|
+
"description": "Prediction-market discovery, single-market deep-dives and due diligence (order book, tape, trades with wallets, holders, on-chain settlement), trader profiles, smart-money signals, and the free L2 Parquet archive.",
|
|
69
82
|
"skills": [
|
|
70
83
|
"vike-polymarket-markets",
|
|
71
84
|
"vike-polymarket-market-detail",
|
|
85
|
+
"vike-pm-market-diligence",
|
|
72
86
|
"vike-polymarket-trader",
|
|
73
|
-
"vike-polymarket-smart-money"
|
|
87
|
+
"vike-polymarket-smart-money",
|
|
88
|
+
"vike-pm-l2-archive"
|
|
74
89
|
]
|
|
75
90
|
},
|
|
76
91
|
{
|
package/src/commands/stream.js
CHANGED
|
@@ -9,7 +9,7 @@ import { addTool } from './tool-command.js';
|
|
|
9
9
|
export const STREAM_PATHS = ['hl', 'hl-cohorts', 'onchain', 'polymarket'];
|
|
10
10
|
const MAX_SUBSCRIPTIONS = 100; // per connection, the server's cap
|
|
11
11
|
const IDLE_MS = 60_000; // the server pings every 15 s: a minute of silence is a dead connection
|
|
12
|
-
const NUMBER_KEYS = new Set(['min_usd', 'min_amount', 'min_move']);
|
|
12
|
+
const NUMBER_KEYS = new Set(['min_usd', 'min_amount', 'min_move', 'min_leverage']);
|
|
13
13
|
const ONE_VALUE_KEYS = new Set(['side', 'direction', 'event', 'axis', 'move', 'role']); // every other key is a list
|
|
14
14
|
// No channel list here: the server decides which channels a path serves (`stream info` lists them) and refuses
|
|
15
15
|
// an unknown one with `unknown_channel`.
|