@vike-io/cli 0.5.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 +23 -0
- package/LICENSE +21 -0
- package/README.md +98 -0
- package/package.json +73 -0
- package/scripts/postinstall.js +20 -0
- package/skills/vike-alerts-setup/SKILL.md +75 -0
- package/skills/vike-alerts-webhook/SKILL.md +84 -0
- package/skills/vike-core/SKILL.md +67 -0
- package/skills/vike-cross-venue-perps/SKILL.md +52 -0
- package/skills/vike-defi-positions/SKILL.md +59 -0
- package/skills/vike-fund-holdings/SKILL.md +53 -0
- package/skills/vike-hl-top-traders/SKILL.md +52 -0
- package/skills/vike-hl-trader-profile/SKILL.md +65 -0
- package/skills/vike-options-flow/SKILL.md +49 -0
- package/skills/vike-perp-funding-arb/SKILL.md +53 -0
- package/skills/vike-perp-screener/SKILL.md +49 -0
- package/skills/vike-perp-spread-arb/SKILL.md +38 -0
- package/skills/vike-polymarket-market-detail/SKILL.md +42 -0
- package/skills/vike-polymarket-markets/SKILL.md +44 -0
- package/skills/vike-polymarket-screener/SKILL.md +59 -0
- package/skills/vike-polymarket-smart-money/SKILL.md +58 -0
- package/skills/vike-polymarket-trader/SKILL.md +55 -0
- package/skills/vike-router/SKILL.md +53 -0
- package/skills/vike-smart-money-discovery/SKILL.md +74 -0
- package/skills/vike-token-holders/SKILL.md +45 -0
- package/skills/vike-token-research/SKILL.md +55 -0
- package/skills/vike-token-search/SKILL.md +40 -0
- package/skills/vike-token-transfers/SKILL.md +43 -0
- package/skills/vike-wallet-balances/SKILL.md +60 -0
- package/skills/vike-wallet-counterparties/SKILL.md +48 -0
- package/skills/vike-wallet-discover/SKILL.md +49 -0
- package/skills/vike-wallet-ens/SKILL.md +41 -0
- package/skills/vike-wallet-label-provenance/SKILL.md +65 -0
- package/skills/vike-wallet-pnl-history/SKILL.md +58 -0
- package/skills/vike-wallet-portfolio/SKILL.md +61 -0
- package/skills/vike-wallet-summary/SKILL.md +35 -0
- package/skills/vike-web-fetch/SKILL.md +55 -0
- package/skills/vike-web-research/SKILL.md +58 -0
- package/skills/vike-web-search/SKILL.md +60 -0
- package/src/auth.js +55 -0
- package/src/commands/alerts.js +118 -0
- package/src/commands/auth.js +43 -0
- package/src/commands/doctor.js +87 -0
- package/src/commands/init.js +50 -0
- package/src/commands/labels.js +48 -0
- package/src/commands/options.js +24 -0
- package/src/commands/perp.js +59 -0
- package/src/commands/polymarket.js +74 -0
- package/src/commands/schema.js +31 -0
- package/src/commands/token.js +77 -0
- package/src/commands/wallet.js +106 -0
- package/src/commands/web.js +41 -0
- package/src/format.js +83 -0
- package/src/index.js +44 -0
- package/src/mcp-client.js +94 -0
- package/src/util.js +25 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vike-smart-money-discovery
|
|
3
|
+
description: Multi-signal smart money discovery — find wallets currently accumulating a token, ranked by realized PnL track record. Use when the user asks "is smart money buying X" / "find smart money on Y chain" / "any alpha wallets in Z".
|
|
4
|
+
allowed-tools: Bash(vike:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# vike-smart-money-discovery
|
|
8
|
+
|
|
9
|
+
Composite playbook — combines wallet leaderboards + token-side buyer list + label inspection.
|
|
10
|
+
|
|
11
|
+
## Workflow
|
|
12
|
+
|
|
13
|
+
### A. Top realized-PnL wallets on a chain
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
vike wallet discover --sort pnl --window 90d --chain ethereum --size 20 --json
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Keep only rows where:
|
|
20
|
+
- `realized_pnl_usd > 100_000` (real conviction, not noise)
|
|
21
|
+
- `tx_count > 20` (not a single lucky trade)
|
|
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
|
|
27
|
+
|
|
28
|
+
If the user asks about a specific token, resolve it first:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
vike token search <symbol> --chain <chain> --limit 3 --json
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Then list its recent buyers:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
vike token transfers <addr> --tab bought --period 7d --chain <chain> --json
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Intersect** the buyer addresses with your smart-money universe from step A. Any overlap = a smart-money wallet currently accumulating this token.
|
|
41
|
+
|
|
42
|
+
### C. Profile each match
|
|
43
|
+
|
|
44
|
+
For every overlap address, run:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
vike wallet summary <addr> --json
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Report:
|
|
51
|
+
- Address
|
|
52
|
+
- Known label (if any)
|
|
53
|
+
- 90d realized PnL
|
|
54
|
+
- 7d net flow on this token
|
|
55
|
+
- 30d total volume
|
|
56
|
+
|
|
57
|
+
## Verdict template
|
|
58
|
+
|
|
59
|
+
> **Smart-money take on $TOKEN:** N of top-20 90d-PnL wallets (>$100k realized) bought $TOKEN in the last 7 days. Strongest names: `<addr1> (+$X PnL, label?)`, `<addr2> ...`. Aggregate net flow into $TOKEN from this cohort: $Y. **Read: accumulation / churn / no-signal.**
|
|
60
|
+
|
|
61
|
+
## Anti-patterns
|
|
62
|
+
|
|
63
|
+
- Don't accept any wallet labeled as a CEX (binance/coinbase/bybit/etc.) as "smart money" — they're aggregators.
|
|
64
|
+
- Don't lower the PnL threshold to <$50k just to find more matches; below that, signal-to-noise is poor.
|
|
65
|
+
- Single-token wallets (`unique_tokens < 3`) are usually airdrop-flippers, not strategic.
|
|
66
|
+
|
|
67
|
+
## Cost note
|
|
68
|
+
|
|
69
|
+
3 calls per discovery: 1× `wallet discover`, 1× `token transfers`, then 1× `wallet summary` per match (cap at 5).
|
|
70
|
+
|
|
71
|
+
## Pairs well with
|
|
72
|
+
|
|
73
|
+
- `vike-token-research` for the price/flow context
|
|
74
|
+
- `vike-perp-funding-arb` if the token has a perp listing (positioning bias)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vike-token-holders
|
|
3
|
+
description: Top holders of an ERC-20 token by cumulative net inflow USD, with known labels. Use when the user asks "top holders of X" / "who holds the most of token Y" / "is whale Z holding token A".
|
|
4
|
+
allowed-tools: Bash(vike:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# vike-token-holders
|
|
8
|
+
|
|
9
|
+
## Command
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
vike token holders <token_address> [--chain ethereum|bsc|base] [--limit N] [--json]
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Examples
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# Resolve symbol first if needed:
|
|
19
|
+
vike token search PEPE --chain ethereum --limit 1 --json
|
|
20
|
+
# Then holders:
|
|
21
|
+
vike token holders 0x6982508145454ce325ddbe47a25d4ec3d2311933 --limit 20
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Output columns
|
|
25
|
+
|
|
26
|
+
`wallet`, `net_flow_usd` (lifetime), `volume_usd` (lifetime), `tx_count`, `first_seen`, `last_active`, `entity`, `wallet_type`
|
|
27
|
+
|
|
28
|
+
## Reading
|
|
29
|
+
|
|
30
|
+
- **Sorted descending by `net_flow_usd`** — the biggest accumulators are at the top
|
|
31
|
+
- A row with `entity = "Binance"` is a CEX hot/cold wallet — these aggregate millions of retail holders, not single discretionary positions
|
|
32
|
+
- `first_seen` earlier than the token's launch month = wallet was active before this token existed; probably an aggregator
|
|
33
|
+
- Two wallets with similar `net_flow_usd` but very different `tx_count`: low-tx = single buy-and-hold; high-tx = active trader
|
|
34
|
+
|
|
35
|
+
## Anti-patterns
|
|
36
|
+
|
|
37
|
+
- "Top holders" here means cumulative net inflow over all time — NOT current on-chain balance (which would require querying the contract directly). A wallet that bought $10M and sold $9M shows `net_flow_usd = $1M`, even if current balance is zero. **Always call this out** when reporting top holders.
|
|
38
|
+
- Don't list `tx_count = 1` whales as "smart money" without context — could be an airdrop receiver who never sold.
|
|
39
|
+
- For BSC tokens, pass `--chain bsc` explicitly; default is ethereum.
|
|
40
|
+
|
|
41
|
+
## Pairs well with
|
|
42
|
+
|
|
43
|
+
- `vike labels <addr>` — drill into any holder's full label cascade
|
|
44
|
+
- `vike token transfers <addr>` — see who's currently buying/selling in last 24h
|
|
45
|
+
- `vike wallet summary <addr>` — full activity profile of any holder
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vike-token-research
|
|
3
|
+
description: Full token research playbook — search → transfers → chart → flow direction → buyer/seller verdict. Use when the user asks "research <token>" or "what's happening with <token>".
|
|
4
|
+
allowed-tools: Bash(vike:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# vike-token-research
|
|
8
|
+
|
|
9
|
+
Multi-call token research workflow.
|
|
10
|
+
|
|
11
|
+
## Steps
|
|
12
|
+
|
|
13
|
+
1. **Resolve address** (skip if user already gave one)
|
|
14
|
+
```bash
|
|
15
|
+
vike token search <symbol> --chain <chain> --limit 3 --json
|
|
16
|
+
```
|
|
17
|
+
Pick the highest-volume match; capture the address.
|
|
18
|
+
|
|
19
|
+
2. **Recent buyers + sellers** (parallel calls)
|
|
20
|
+
```bash
|
|
21
|
+
vike token transfers <addr> --tab bought --period 24h --chain <chain> --json
|
|
22
|
+
vike token transfers <addr> --tab sold --period 24h --chain <chain> --json
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
3. **Price action**
|
|
26
|
+
```bash
|
|
27
|
+
vike token chart <addr> --interval 30 --json
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Verdict heuristics
|
|
31
|
+
|
|
32
|
+
After step 2, classify direction-of-pressure:
|
|
33
|
+
|
|
34
|
+
| Buyer count vs seller count (24h) | Verdict |
|
|
35
|
+
|---|---|
|
|
36
|
+
| Buyers > 2× sellers and net inflow > $1M | **Accumulation** |
|
|
37
|
+
| Sellers > 2× buyers and net outflow > $1M | **Distribution** |
|
|
38
|
+
| Roughly even (within 1.5×) | **Churn / range-bound** |
|
|
39
|
+
| Both very low | **Illiquid — skip the read** |
|
|
40
|
+
|
|
41
|
+
Cross-check against the chart: distribution + falling price = bearish; accumulation + flat price = stealth bid (interesting).
|
|
42
|
+
|
|
43
|
+
## Anti-patterns
|
|
44
|
+
|
|
45
|
+
- Don't run `transfers --period 30d` first — use 24h to see what's happening *now*; 30d for context only if needed.
|
|
46
|
+
- 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.
|
|
47
|
+
|
|
48
|
+
## Cost note
|
|
49
|
+
|
|
50
|
+
Step 1: cheap. Step 2: 2× cheap. Step 3: cheap. Total ≈ 4 calls.
|
|
51
|
+
|
|
52
|
+
## Pairs well with
|
|
53
|
+
|
|
54
|
+
- `vike-smart-money-discovery` to find which smart wallets are involved
|
|
55
|
+
- `vike-perp-funding-arb` if the token has a perp listing (BTC/ETH/SOL/major alts)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vike-token-search
|
|
3
|
+
description: Resolve a token symbol or name into the canonical contract address + chain + metadata. Use this BEFORE any other token command — most tools need the address, not the symbol.
|
|
4
|
+
allowed-tools: Bash(vike:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# vike-token-search
|
|
8
|
+
|
|
9
|
+
Symbol/name → address resolver.
|
|
10
|
+
|
|
11
|
+
## Command
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
vike token search <query> [--chain ethereum|bsc|base] [--limit N] [--json]
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Example
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
vike token search PEPE --chain ethereum --limit 5
|
|
21
|
+
# → symbol name address chain
|
|
22
|
+
# PEPE Pepe 0x6982508145454ce325ddbe47a25d4ec3d2311933 ethereum
|
|
23
|
+
# PEPE2 ... 0x... ethereum
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## When to use
|
|
27
|
+
|
|
28
|
+
- Any time the user mentions a token by symbol — always confirm the address before downstream calls.
|
|
29
|
+
- The default chain is **ethereum**; if the user asks "what's the address of CAKE", default to **bsc** if the symbol is bsc-native.
|
|
30
|
+
|
|
31
|
+
## Anti-patterns
|
|
32
|
+
|
|
33
|
+
- Do not hardcode addresses you "remember" — symbols collide across chains and tokens. Always resolve.
|
|
34
|
+
- If `--limit 1` returns the wrong token, increase to 5-10 and pick the highest-volume / canonical match. The first row is not always the canonical one.
|
|
35
|
+
|
|
36
|
+
## Pairs well with
|
|
37
|
+
|
|
38
|
+
- `vike token transfers <address>` after resolution
|
|
39
|
+
- `vike token chart <address>`
|
|
40
|
+
- `vike-token-research` for a full multi-call report
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
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".
|
|
4
|
+
allowed-tools: Bash(vike:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# vike-token-transfers
|
|
8
|
+
|
|
9
|
+
## Command
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
vike token transfers <token_address>
|
|
13
|
+
[--tab bought|sold]
|
|
14
|
+
[--period 1h|24h|7d|30d]
|
|
15
|
+
[--chain ethereum|bsc|base|all]
|
|
16
|
+
[--json]
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## When to use
|
|
20
|
+
|
|
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`, then cross-reference labels
|
|
24
|
+
|
|
25
|
+
## Output columns
|
|
26
|
+
|
|
27
|
+
Each row is one wallet: `address`, `qty`, `usd_value`, `label` (if known), `tx_count`.
|
|
28
|
+
|
|
29
|
+
## Reading tips
|
|
30
|
+
|
|
31
|
+
- The same wallet appearing in both `bought` and `sold` lists for the same period = market maker / churn (not a signal).
|
|
32
|
+
- High `usd_value` with low `tx_count` = a single large discretionary trade. Worth investigating with `vike wallet summary <address>`.
|
|
33
|
+
- Many small transfers from labeled exchanges = retail flow via that CEX (Binance, Coinbase, etc.).
|
|
34
|
+
|
|
35
|
+
## Anti-patterns
|
|
36
|
+
|
|
37
|
+
- Don't request `--chain all` unless you really need cross-chain — it's slower and returns more rows.
|
|
38
|
+
- 1h period is sparse for low-liquidity tokens. Use 24h as the default starting window.
|
|
39
|
+
|
|
40
|
+
## Pairs well with
|
|
41
|
+
|
|
42
|
+
- `vike wallet summary <addr>` to profile any interesting buyer/seller
|
|
43
|
+
- `vike token chart <addr>` to correlate flows with price action
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vike-wallet-balances
|
|
3
|
+
description: Current ERC-20 token balances for a wallet across major EVM chains (eth, bsc, base, arbitrum, polygon, optimism). Dust filtered. Use when the user asks "what does this wallet hold" / "current portfolio of X" / "show top holdings".
|
|
4
|
+
allowed-tools: Bash(vike:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# vike-wallet-balances
|
|
8
|
+
|
|
9
|
+
## Command
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
vike wallet balances <address>
|
|
13
|
+
[--chains eth,bsc,base,arbitrum,polygon,optimism] (default = all 6)
|
|
14
|
+
[--min-usd 1] (filter dust below this)
|
|
15
|
+
[--json]
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Example
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
vike wallet balances 0xd8da6bf26964af9d7eed9e03e53415d37aa96045 --chains eth,arbitrum
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Output
|
|
25
|
+
|
|
26
|
+
```json
|
|
27
|
+
{
|
|
28
|
+
"address": "0x...",
|
|
29
|
+
"total_usd": 123456.78,
|
|
30
|
+
"chains_scanned": ["eth", "bsc", "base", "arbitrum", "polygon", "optimism"],
|
|
31
|
+
"holdings": [
|
|
32
|
+
{ "chain": "eth", "symbol": "WETH", "name": "Wrapped Ether", "address": "0xc02a...", "balance": "12.34", "usd_value": 26345.67, "usd_price": 2134.94 },
|
|
33
|
+
{ "chain": "arbitrum", "symbol": "USDC", "address": "0xaf88...", "balance": "5000.00", "usd_value": 5000.00, "usd_price": 1.0 },
|
|
34
|
+
...
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Holdings sorted by `usd_value` descending.
|
|
40
|
+
|
|
41
|
+
## Reading
|
|
42
|
+
|
|
43
|
+
- `total_usd` = sum across all chains scanned. Wallet might still hold value on chains not scanned (e.g. zkSync, Linea) — say so when relevant.
|
|
44
|
+
- Stablecoin-heavy wallet → likely waiting for a buy / parked dry powder
|
|
45
|
+
- WETH/WBTC + LSTs (stETH, wstETH, rETH) → "saver" wallet, low-risk
|
|
46
|
+
- 50+ random tokens → airdrop farmer
|
|
47
|
+
- Empty `holdings` array → either no balance OR the address hasn't been indexed yet (very new wallets)
|
|
48
|
+
|
|
49
|
+
## Anti-patterns
|
|
50
|
+
|
|
51
|
+
- This is ERC-20 only — does NOT include native ETH/BNB/MATIC (would need separate calls; not in our current tool surface). Mention this when reporting "total holdings".
|
|
52
|
+
- Don't combine with `defi_positions` totals naively — there's overlap (e.g. aUSDC shows in `balances`, the Aave deposit shows in `defi_positions`; you'd double-count).
|
|
53
|
+
- For wallets with 100+ tokens, the response is large — use `--min-usd 100` or higher to focus on meaningful holdings.
|
|
54
|
+
|
|
55
|
+
## Pairs well with
|
|
56
|
+
|
|
57
|
+
- `vike defi <addr>` — protocol positions (Aave/Uniswap LP/Lido) alongside spot balances
|
|
58
|
+
- `vike wallet pnl-history <addr>` — how the wallet got to its current state
|
|
59
|
+
- `vike labels <addr>` — institutional context
|
|
60
|
+
- `vike wallet ens <addr>` — friendly identifier
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vike-wallet-counterparties
|
|
3
|
+
description: Find the top trading partners of a wallet — who it sent to and received from, ranked by combined USD volume. Use when the user asks "who does this wallet trade with" / "main counterparties of X" / "find connections between wallets".
|
|
4
|
+
allowed-tools: Bash(vike:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# vike-wallet-counterparties
|
|
8
|
+
|
|
9
|
+
## Command
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
vike wallet counterparties <address>
|
|
13
|
+
[--chain ethereum|bsc|base]
|
|
14
|
+
[--window 24h|7d|30d|90d|180d|all]
|
|
15
|
+
[--limit N] (max 50)
|
|
16
|
+
[--json]
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Example
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
vike wallet counterparties 0xd8da6bf26964af9d7eed9e03e53415d37aa96045 --window 30d
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Output columns
|
|
26
|
+
|
|
27
|
+
`wallet`, `total_volume_usd`, `sent_usd`, `received_usd`, `tx_count`, `first_seen`, `last_seen`, `entity`, `wallet_type`
|
|
28
|
+
|
|
29
|
+
## Reading
|
|
30
|
+
|
|
31
|
+
- **Sent + Received roughly equal** = active trading partner (DEX router, MM, regular counterparty)
|
|
32
|
+
- **Sent >> Received** = wallet pays this counterparty (deposit address, contract call)
|
|
33
|
+
- **Received >> Sent** = wallet receives from this counterparty (funding source, employer, airdrop)
|
|
34
|
+
- `entity = "Binance"` (CEX) on the top row = the wallet deposits to / withdraws from that exchange
|
|
35
|
+
- `wallet_type = "dex"` = router contracts (Uniswap, 1inch, Curve routers) — typical for active traders
|
|
36
|
+
- Unlabeled top counterparty with high volume = potentially related wallet worth investigating with `vike labels`
|
|
37
|
+
|
|
38
|
+
## Anti-patterns
|
|
39
|
+
|
|
40
|
+
- Don't claim two wallets are "controlled by the same person" from counterparties alone — many people deposit to the same Binance address. Pair with `vike-wallet-clustering` (deferred) or manual investigation.
|
|
41
|
+
- Window matters: a 24h view captures recent activity but misses long-standing relationships. Default to 30d, expand to `all` for full history.
|
|
42
|
+
- For tokens with high churn (memecoins), top counterparties will be dominated by Uniswap routers; filter mentally for non-DEX rows for human counterparties.
|
|
43
|
+
|
|
44
|
+
## Pairs well with
|
|
45
|
+
|
|
46
|
+
- `vike labels <addr>` — drill into any interesting counterparty's full label cascade
|
|
47
|
+
- `vike wallet summary <addr>` — total activity of any counterparty
|
|
48
|
+
- `vike wallet balances <addr>` — see what tokens that counterparty currently holds
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vike-wallet-discover
|
|
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:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# vike-wallet-discover
|
|
8
|
+
|
|
9
|
+
## Command
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
vike wallet discover
|
|
13
|
+
[--window 24h|7d|30d|90d|all]
|
|
14
|
+
[--sort volume|inflow|outflow|net_flow|tx_count|pnl]
|
|
15
|
+
[--order asc|desc]
|
|
16
|
+
[--chain ethereum|bsc]
|
|
17
|
+
[--size N] # max 20
|
|
18
|
+
[--json]
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## When to use
|
|
22
|
+
|
|
23
|
+
| Question | Flags |
|
|
24
|
+
|---|---|
|
|
25
|
+
| "Top whales by volume this week" | `--sort volume --window 7d` |
|
|
26
|
+
| "Biggest accumulators last 30d" | `--sort net_flow --window 30d --order desc` |
|
|
27
|
+
| "Top realized-PnL traders all-time" | `--sort pnl --window all` |
|
|
28
|
+
| "Wallets dumping the most this 24h" | `--sort outflow --window 24h` |
|
|
29
|
+
| "Most active traders last 7d" | `--sort tx_count --window 7d` |
|
|
30
|
+
|
|
31
|
+
## Output columns
|
|
32
|
+
|
|
33
|
+
`address`, `label` (when known), `volume_usd`, `inflow_usd`, `outflow_usd`, `net_flow_usd`, `tx_count`, `realized_pnl_usd`.
|
|
34
|
+
|
|
35
|
+
## Reading tips
|
|
36
|
+
|
|
37
|
+
- Labeled wallets first — `label = "binance_cold_t1"` means it's a CEX hot/cold wallet, not a discretionary trader.
|
|
38
|
+
- Always filter mentally for unlabeled wallets first if the user wants "real traders" (not exchanges).
|
|
39
|
+
- For PnL sort, realized PnL only — open positions are NOT counted. Use `vike perp top-traders` for HL perps PnL (which includes unrealized).
|
|
40
|
+
|
|
41
|
+
## Anti-patterns
|
|
42
|
+
|
|
43
|
+
- `--size > 20` is silently clamped to 20. Run a second call with offset (not currently supported — limit applies hard) if you need more.
|
|
44
|
+
- `--sort pnl` is only meaningful on `--window 30d` or longer; 24h PnL is noise.
|
|
45
|
+
|
|
46
|
+
## Pairs well with
|
|
47
|
+
|
|
48
|
+
- `vike wallet summary <address>` to drill into any interesting row
|
|
49
|
+
- `vike-smart-money-discovery` for a composite multi-signal read
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vike-wallet-ens
|
|
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:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# vike-wallet-ens
|
|
8
|
+
|
|
9
|
+
## Command
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
vike wallet ens <address> [--json]
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Example
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
vike wallet ens 0xd8da6bf26964af9d7eed9e03e53415d37aa96045
|
|
19
|
+
# → { "address": "0xd8da...", "ens": "vitalik.eth" }
|
|
20
|
+
|
|
21
|
+
vike wallet ens 0x28c6c06298d514db089934071355e5743bf21d60
|
|
22
|
+
# → { "address": "0x28c6...", "ens": null } (most exchange wallets have no ENS)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## When to use
|
|
26
|
+
|
|
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"
|
|
29
|
+
- When you're about to display a leaderboard with addresses — enrich each row with ENS if available
|
|
30
|
+
|
|
31
|
+
## Anti-patterns
|
|
32
|
+
|
|
33
|
+
- 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
|
+
- 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.
|
|
36
|
+
|
|
37
|
+
## Pairs well with
|
|
38
|
+
|
|
39
|
+
- `vike labels <addr>` — combine ENS + labels for the fullest identity view
|
|
40
|
+
- `vike wallet summary <addr>` — ENS + activity profile
|
|
41
|
+
- `vike funds` — pair with ENS lookups on the top entries for richer display
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vike-wallet-label-provenance
|
|
3
|
+
description: Multi-source label cascade for any ETH wallet — shows what every upstream label provider 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".
|
|
4
|
+
allowed-tools: Bash(vike:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# vike-wallet-label-provenance
|
|
8
|
+
|
|
9
|
+
The headline differentiator: we don't just show a label, we show **which sources agree** and how confident the consensus is.
|
|
10
|
+
|
|
11
|
+
## Command
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
vike labels <address> [--json]
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Example
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
vike labels 0x28C6c06298d514Db089934071355E5743bf21d60 # Binance Hot Wallet 14
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Output shape
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"address": "0x...",
|
|
28
|
+
"found": true,
|
|
29
|
+
"consensus": {
|
|
30
|
+
"entity": "Binance",
|
|
31
|
+
"wallet_type": "cex",
|
|
32
|
+
"cex_product": "spot",
|
|
33
|
+
"user_subtype": "",
|
|
34
|
+
"risk_flag": "",
|
|
35
|
+
"confidence": "High"
|
|
36
|
+
},
|
|
37
|
+
"sources": [
|
|
38
|
+
{ "source": "provider_a", "label": "Binance 14", "entity": "Binance", "category": "CEX" },
|
|
39
|
+
{ "source": "provider_b", "label": "Binance Hot Wallet" },
|
|
40
|
+
{ "source": "provider_c", "label": "Binance: Hot Wallet 14" },
|
|
41
|
+
{ "source": "provider_d", "label": "Binance" },
|
|
42
|
+
{ "source": "heuristic:cold_t1", "confidence": 0.94 }
|
|
43
|
+
],
|
|
44
|
+
"source_count": 5
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Reading
|
|
49
|
+
|
|
50
|
+
- **5+ sources agree** → very high confidence; ship the label without caveats
|
|
51
|
+
- **2-3 sources agree on same entity** → high confidence
|
|
52
|
+
- **Only 1 source + heuristic** → moderate; mention "labeled by X"
|
|
53
|
+
- **0 sources, only heuristic** → low; mention "predicted by heuristic"
|
|
54
|
+
- **0 sources, no heuristic** → genuinely unknown wallet (most retail addresses)
|
|
55
|
+
|
|
56
|
+
## Anti-patterns
|
|
57
|
+
|
|
58
|
+
- Don't quote any single provider's category field as "the category" — provider taxonomies vary; the `consensus.wallet_type` is the unified field.
|
|
59
|
+
- A `risk_flag` of `scam` / `sanctioned` / `phishing` is high-stakes — always mention it explicitly, never bury it.
|
|
60
|
+
|
|
61
|
+
## Pairs well with
|
|
62
|
+
|
|
63
|
+
- `vike wallet summary <addr>` — for the flow metrics of the labeled wallet
|
|
64
|
+
- `vike funds` — find all known fund wallets and their recent flows
|
|
65
|
+
- `vike defi <addr>` — see what protocols this entity is using
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vike-wallet-pnl-history
|
|
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:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# vike-wallet-pnl-history
|
|
8
|
+
|
|
9
|
+
## Command
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
vike wallet pnl-history <address>
|
|
13
|
+
[--chain ethereum|bsc|base]
|
|
14
|
+
[--days N] (max 365, default 30)
|
|
15
|
+
[--json]
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Output
|
|
19
|
+
|
|
20
|
+
```json
|
|
21
|
+
{
|
|
22
|
+
"address": "0x...",
|
|
23
|
+
"chain": "ethereum",
|
|
24
|
+
"days": 30,
|
|
25
|
+
"total_net_flow_usd": 12345.67,
|
|
26
|
+
"series": [
|
|
27
|
+
{ "date": "2026-04-25", "net_flow_usd": +120.50, "gross_volume_usd": 1500, "tx_count": 4, "unique_tokens": 2, "cumulative_net_flow_usd": 120.50 },
|
|
28
|
+
{ "date": "2026-04-26", "net_flow_usd": -50.30, "gross_volume_usd": 800, "tx_count": 2, "unique_tokens": 1, "cumulative_net_flow_usd": 70.20 },
|
|
29
|
+
...
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Important caveat
|
|
35
|
+
|
|
36
|
+
**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
|
+
|
|
38
|
+
For lifetime realized PnL: `vike wallet discover --sort pnl --window all`.
|
|
39
|
+
|
|
40
|
+
## Reading
|
|
41
|
+
|
|
42
|
+
- `cumulative_net_flow_usd` ramping up = wallet has been accumulating $
|
|
43
|
+
- Big positive day with high `tx_count` = single large buy (deposit / acquisition / token purchase)
|
|
44
|
+
- Big negative day with high `tx_count` = sell-down or large transfer out
|
|
45
|
+
- `unique_tokens > 5` on a single day = farmer / spray-and-pray / airdrop claim
|
|
46
|
+
- All `net_flow_usd` near zero with high `gross_volume_usd` = market-maker / churn
|
|
47
|
+
|
|
48
|
+
## Anti-patterns
|
|
49
|
+
|
|
50
|
+
- Don't report this as "realized PnL" — it isn't.
|
|
51
|
+
- Big single-day spikes can be legitimate (token unlock, ICO buy, airdrop claim) — don't auto-flag without context
|
|
52
|
+
- A `null` or empty series means the wallet has no activity on the requested chain in the window — surface that honestly
|
|
53
|
+
|
|
54
|
+
## Pairs well with
|
|
55
|
+
|
|
56
|
+
- `vike wallet summary <addr>` for the aggregate context
|
|
57
|
+
- `vike wallet counterparties <addr>` to see WHO they traded with
|
|
58
|
+
- `vike token chart <addr>` to correlate flow spikes with price action
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vike-wallet-portfolio
|
|
3
|
+
description: Composite wallet portfolio view — combines ENS + labels + ERC-20 balances + DeFi positions + recent net flow 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").
|
|
4
|
+
allowed-tools: Bash(vike:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# vike-wallet-portfolio
|
|
8
|
+
|
|
9
|
+
Multi-call playbook for a complete wallet snapshot.
|
|
10
|
+
|
|
11
|
+
## Workflow (run in parallel where possible)
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
ADDR=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
|
|
15
|
+
|
|
16
|
+
vike wallet ens $ADDR --json & # cheap, ~1 credit
|
|
17
|
+
vike labels $ADDR --json & # cheap, ~1 credit
|
|
18
|
+
vike wallet summary $ADDR --json & # cheap, ~2 credits
|
|
19
|
+
vike wallet balances $ADDR --json & # multi-chain, ~3 credits
|
|
20
|
+
vike defi $ADDR --json & # multi-chain, ~3 credits
|
|
21
|
+
vike wallet pnl-history $ADDR --days 30 --json &
|
|
22
|
+
wait
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Report template
|
|
26
|
+
|
|
27
|
+
> **`<ENS or 0x...>` — wallet snapshot**
|
|
28
|
+
> - **Identity:** `<ens.eth>` · `<entity (from labels)>` · `<wallet_type>` (confidence: `<H/M/L>`)
|
|
29
|
+
> - **Total ERC-20:** `$X` across `<chains>`. Top 3 by USD: `<symbol1 $X>`, `<symbol2 $Y>`, ...
|
|
30
|
+
> - **DeFi positions:** `$Y` across `<protocols count>` protocols. Top: `<Aave V3 $X>`, ...
|
|
31
|
+
> - **30d net flow:** `+/-$Z` (cumulative)
|
|
32
|
+
> - **Activity:** `<tx_count>` txns last 30d, `<unique_tokens>` unique tokens traded
|
|
33
|
+
> - **Vibe check:** `<saver / trader / farmer / institutional / inactive / fresh>`
|
|
34
|
+
|
|
35
|
+
## Vibe-check rubric
|
|
36
|
+
|
|
37
|
+
| Pattern | Label |
|
|
38
|
+
|---|---|
|
|
39
|
+
| `wallet_type = "cex"` or `"market_maker"` | **Institutional** |
|
|
40
|
+
| 80%+ in stablecoins, low tx count | **Saver / dry powder** |
|
|
41
|
+
| 50+ unique tokens 30d, low avg holding USD | **Airdrop farmer** |
|
|
42
|
+
| High tx count, balanced sent/received | **Active trader** |
|
|
43
|
+
| Big DeFi positions, low ERC-20 balance | **DeFi native** |
|
|
44
|
+
| Big ERC-20 holdings, no DeFi | **HODLer** |
|
|
45
|
+
| Zero activity 30d | **Inactive** |
|
|
46
|
+
| First-seen < 30d ago | **Fresh wallet** |
|
|
47
|
+
|
|
48
|
+
## Cost
|
|
49
|
+
|
|
50
|
+
~6 parallel calls, ~12 credits total. Use sparingly — only when the user wants the FULL picture, not a single dimension.
|
|
51
|
+
|
|
52
|
+
## When to use a focused skill instead
|
|
53
|
+
|
|
54
|
+
- "Just labels for X" → `vike-wallet-label-provenance`
|
|
55
|
+
- "What does X hold" → `vike-wallet-balances`
|
|
56
|
+
- "Top counterparties of X" → `vike-wallet-counterparties`
|
|
57
|
+
- "DeFi positions of X" → `vike-defi-positions`
|
|
58
|
+
|
|
59
|
+
## Pairs well with
|
|
60
|
+
|
|
61
|
+
- `vike-smart-money-discovery` to put the wallet in context vs the broader top-PnL cohort
|