@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.
Files changed (52) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +11 -7
  3. package/package.json +1 -1
  4. package/skills/vike/SKILL.md +45 -31
  5. package/skills/vike-alerts-setup/SKILL.md +7 -5
  6. package/skills/vike-alerts-webhook/SKILL.md +4 -3
  7. package/skills/vike-candles/SKILL.md +3 -2
  8. package/skills/vike-core/SKILL.md +3 -3
  9. package/skills/vike-daily-brief/SKILL.md +68 -0
  10. package/skills/vike-follow-the-money/SKILL.md +60 -0
  11. package/skills/vike-hl-asset-briefing/SKILL.md +48 -0
  12. package/skills/vike-hl-builder-intel/SKILL.md +39 -0
  13. package/skills/vike-hl-cohort-backtest/SKILL.md +61 -0
  14. package/skills/vike-hl-cohort-positioning/SKILL.md +69 -0
  15. package/skills/vike-hl-liquidation-radar/SKILL.md +55 -0
  16. package/skills/vike-hl-position-match/SKILL.md +3 -2
  17. package/skills/vike-hl-top-traders/SKILL.md +21 -8
  18. package/skills/vike-hl-trader-profile/SKILL.md +65 -0
  19. package/skills/vike-perp-crowding/SKILL.md +49 -0
  20. package/skills/vike-perp-funding/SKILL.md +4 -1
  21. package/skills/vike-perp-overview/SKILL.md +23 -3
  22. package/skills/vike-pm-l2-archive/SKILL.md +50 -0
  23. package/skills/vike-pm-market-diligence/SKILL.md +60 -0
  24. package/skills/vike-polymarket-market-detail/SKILL.md +20 -15
  25. package/skills/vike-polymarket-markets/SKILL.md +2 -1
  26. package/skills/vike-polymarket-smart-money/SKILL.md +9 -0
  27. package/skills/vike-polymarket-trader/SKILL.md +10 -1
  28. package/skills/vike-smart-money-discovery/SKILL.md +4 -3
  29. package/skills/vike-stream/SKILL.md +34 -10
  30. package/skills/vike-token-holder-diligence/SKILL.md +58 -0
  31. package/skills/vike-token-holders/SKILL.md +6 -4
  32. package/skills/vike-token-research/SKILL.md +6 -6
  33. package/skills/vike-token-screener/SKILL.md +3 -3
  34. package/skills/vike-token-search/SKILL.md +2 -1
  35. package/skills/vike-token-smart-money-trend/SKILL.md +57 -0
  36. package/skills/vike-token-transfers/SKILL.md +8 -6
  37. package/skills/vike-wallet-balances/SKILL.md +9 -7
  38. package/skills/vike-wallet-batch/SKILL.md +3 -3
  39. package/skills/vike-wallet-compare/SKILL.md +2 -2
  40. package/skills/vike-wallet-counterparties/SKILL.md +2 -2
  41. package/skills/vike-wallet-discover/SKILL.md +3 -1
  42. package/skills/vike-wallet-ens/SKILL.md +2 -2
  43. package/skills/vike-wallet-label-provenance/SKILL.md +5 -4
  44. package/skills/vike-wallet-pnl-history/SKILL.md +2 -2
  45. package/skills/vike-wallet-portfolio/SKILL.md +10 -8
  46. package/skills/vike-wallet-summary/SKILL.md +6 -6
  47. package/skills/vike-wallet-trace/SKILL.md +4 -3
  48. package/skills/vike-wallet-transactions/SKILL.md +2 -2
  49. package/skills/vike-wallet-who-is/SKILL.md +50 -0
  50. package/skills/vike-wallets-related/SKILL.md +52 -0
  51. package/skills.sh.json +26 -11
  52. package/src/commands/stream.js +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.16.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 537b522: Skills for four new live stream channels (the server serves them from stream.vike.io; the CLI keeps no channel list, so `stream`, `stream check` and `stream events` take them as they are): `hl.top_positions` and `hl.closed_trades` (path `hl`), `hl.cohort_leverage` (path `hl-cohorts`) and `pm.positions` (path `polymarket`), and the new `leverage`, `liquidation_px` and `labels.tags` of `hl.positions` with its `min_leverage` and `tag` filters.
8
+
9
+ - `vike-stream`: the channel table, what each new channel sends, its filters and volume, examples, and when each starts sending.
10
+ - `vike-hl-trader-profile` (`hl.closed_trades` by wallet), `vike-hl-cohort-positioning` (`hl.cohort_leverage`, `hl.top_positions`), `vike-hl-liquidation-radar` (`hl.positions` with `min_leverage`), `vike-pm-market-diligence`, `vike-polymarket-trader` and `vike-polymarket-smart-money` (`pm.positions` by market or wallet), the umbrella routing and the README.
11
+ - Fix: `vike-data stream ... --filter min_leverage=20` sent a list (`["20"]`), which the server refuses; it is a number now, like `min_usd`.
12
+
13
+ ## 0.16.0
14
+
15
+ ### Minor Changes
16
+
17
+ - 0a84307: Fifteen workflow skills (47 in all): playbooks that chain several commands for one question, each naming only commands and flags that exist in this release.
18
+
19
+ - Wallets: `vike-wallet-who-is` (search, labels, ENS, the chain it is active on, `wallet exchange-usage`, counterparties), `vike-follow-the-money` (`call wallet_trace` with `direction: out`, the transfers, labels, stop rules, a live `chain.transfers` watch with `contract=false`), `vike-wallets-related` (labels, `wallet first-funder`, shared counterparties with exchanges and routers removed, a trace, confidence tiers).
20
+ - Tokens: `vike-token-holder-diligence` (`call token_holders` with `sort: balance` for `supply_pct`, then labels and `token transfers --hide-contracts`), `vike-token-smart-money-trend` (the Ethereum smart-money screener at 24h / 7d / 30d / 90d, differenced into disjoint slices).
21
+ - Hyperliquid: `vike-hl-cohort-positioning` (cohort metrics, the indices, the biggest positions with `--sort size`, live `hl.cohort_bias`), `vike-hl-cohort-backtest` (point-in-time labels, alignment, seams, controls), `vike-hl-trader-profile` (`hl wallet`, `wallet-trades`, `wallet-activity`, orders, TWAPs, liquidations, a live feed of its fills), `vike-hl-asset-briefing`, `vike-hl-liquidation-radar` (`--min-value-usd`, heatmap, live `hl.liq_risk` and `hl.liquidations`), `vike-hl-builder-intel`.
22
+ - Perps, Polymarket, cross-market: `vike-perp-crowding` (funding, `call perp_open_interest` net of price, `call perp_long_short` per venue), `vike-pm-market-diligence` (search, order book, tape, trades with wallets, settlement, holders, a live feed), `vike-pm-l2-archive` (archive files, link, settlements to join), `vike-daily-brief`.
23
+ - Existing skills: Base and HyperEVM on the token and wallet skills (the "Base not covered" hedges are gone; `wallet discover` on base and hyperevm needs `--window all`; `wallet summary` names its `chain` and `call wallet_summary` asks one); `token transfers` lists net buyers or sellers and takes `--hide-contracts`; `wallet balances` covers four chains and prices the native coin; `vike-polymarket-market-detail` describes what the tool returns (holders, trades with wallets, no quote or cohort block); `vike-perp-overview` reaches open interest and long/short with `call`; `search` resolves an ENS name; the umbrella routes every new playbook; eval questions for each.
24
+
3
25
  ## 0.15.0
4
26
 
5
27
  ### Minor Changes
package/README.md CHANGED
@@ -12,8 +12,8 @@
12
12
  positions, fills, funding, liquidations, candles, and hourly long/short positioning by wallet
13
13
  cohort), **Polymarket** (markets, the trade and event tape, order-book snapshots, candles and
14
14
  on-chain settlements, plus a daily Parquet archive of the full L2 order book since 2026-07-25,
15
- licensed CC BY 4.0), and **labelled EVM wallets** on Ethereum and BNB Chain, with Base for token
16
- transfers. The same data is served three ways: an **MCP server** at `https://data.vike.io/mcp` (the one
15
+ licensed CC BY 4.0), and **labelled EVM wallets** on Ethereum and BNB Chain, with Base and HyperEVM
16
+ for the wallet and token tools. The same data is served three ways: an **MCP server** at `https://data.vike.io/mcp` (the one
17
17
  this CLI calls), a **REST API** at `https://data.vike.io/v1/`, and the **Parquet archive** at
18
18
  `https://data.vike.io/archive/`. A key allows 20,000 requests an hour, and an account can hold up
19
19
  to 5 keys; archive downloads are not counted. The archive manifest and a sample market need no key
@@ -56,7 +56,7 @@ The key is read from `VIKE_API_KEY` first, then from `~/.vike/config.json`
56
56
  | **Polymarket API** `/v1/polymarket` | Markets, the raw event and trade tape (about 30 days back), order-book snapshots, candles, on-chain settlements | free key | [polymarket](https://vike.io/data/polymarket) |
57
57
  | **Hyperliquid cohorts** `/v1/hyperliquid/coins/{coin}/cohort-metrics` | Long vs short per cohort, hourly, up to 8,760 hours in one request. Axes: `size` (account value, shrimp to 4x whale), `tier` (position notional), `pnl` (realized-PnL percentile), `pnl_abs` (PnL in dollars). `labelBasis=point_in_time` grades each hour with the label it had then (from 2026-04-07). | free key | [hl-cohorts](https://vike.io/data/hl-cohorts) |
58
58
  | **Hyperliquid API** `/v1/hyperliquid` | Trader rankings and leaderboards, 5-minute position snapshots kept for a year, wallet fills, funding and ledger, liquidations (inferred from snapshots), builders, candles since the start of 2026; closed bars also stream live as the `hl.candles` channel of `wss://stream.vike.io/v1/stream/hl` | free key | [hyperliquid](https://vike.io/data/hyperliquid) |
59
- | **Event streams** `wss://stream.vike.io/v1/stream/<path>` | Live events with a resume cursor on four paths: `hl` (fills, liquidations, positions, liquidation risk, order walls, candles, TWAPs, ledger, leverage changes, funding), `hl-cohorts` (cohort flow, indices, cohort bias), `onchain` (transfers on eth, bsc, base, hyperevm), `polymarket` (trades, resolutions, price moves, new markets). `vike-data stream` reads them; `vike-data stream info` lists every channel and filter. Connections are not counted against the hourly limit. | free key | [stream channels](https://vike.io/docs/data/reference/stream-channels) |
59
+ | **Event streams** `wss://stream.vike.io/v1/stream/<path>` | Live events with a resume cursor on four paths: `hl` (fills, liquidations, positions, top-10 positions per coin, closed trades, liquidation risk, order walls, candles, TWAPs, ledger, leverage changes, funding), `hl-cohorts` (cohort flow, indices, cohort bias, cohort leverage), `onchain` (transfers on eth, bsc, base, hyperevm), `polymarket` (trades, wallet position changes, resolutions, price moves, new markets). `vike-data stream` reads them; `vike-data stream info` lists every channel and filter. Connections are not counted against the hourly limit. | free key | [stream channels](https://vike.io/docs/data/reference/stream-channels) |
60
60
  | **On-chain API** `/v1/onchain` | Wallet summaries, transactions, counterparties, PnL, address labels with per-source provenance, token holders and transfers. Ethereum on every route, BNB Chain on the wallet and token-flow routes, Base on token transfers. | free key | [onchain](https://vike.io/data/onchain) |
61
61
 
62
62
  Direct links that need no key:
@@ -138,7 +138,7 @@ Every data command is one `tools/call` to the MCP server. `vike-data <group> --h
138
138
 
139
139
  | Command | Subcommands | MCP tool |
140
140
  |---|---|---|
141
- | `vike-data token` | `search`, `transfers`, `screener`, `holders` (`--chain ethereum\|bsc\|base`) | `token_search`, `token_transfers`, `token_screener`, `token_holders` |
141
+ | `vike-data token` | `search`, `transfers`, `screener`, `holders` (`--chain ethereum\|bsc\|base\|hyperevm`) | `token_search`, `token_transfers`, `token_screener`, `token_holders` |
142
142
  | `vike-data wallet` | `summary`, `transactions` (`txs`), `compare`, `trace`, `batch`, `counterparties`, `pnl-history`, `balances`, `ens`, `discover`, `first-funder`, `exchange-usage` | `wallet_summary`, `wallet_transactions`, `wallet_compare`, `wallet_trace`, `wallet_batch_labels`, `wallet_counterparties`, `wallet_pnl_history`, `wallet_token_balances`, `wallet_ens`, `wallet_discover`, `wallet_first_funder`, `wallet_exchange_usage` |
143
143
  | `vike-data labels <address>` | multi-source label provenance for one wallet | `wallet_label_provenance` |
144
144
  | `vike-data perp` | `top-traders`, `find-position` (Hyperliquid); `funding`, `spreads` (cross-venue funding rates and perp-vs-perp price gaps) | `hl_perp_top_traders`, `hl_position_match`, `perp_funding`, `perp_spreads` |
@@ -187,10 +187,14 @@ Downloads go to `./vike-archive/`.
187
187
 
188
188
  ## For AI agents
189
189
 
190
- This package ships **32 skill playbooks** under [`skills/`](skills/): markdown files an AI coding
190
+ This package ships **47 skill playbooks** under [`skills/`](skills/): markdown files an AI coding
191
191
  agent loads so it knows when and how to call each command. [`skills.sh.json`](skills.sh.json) groups
192
- them by domain (Tokens, Wallets, CEX perps, Hyperliquid perps, Candles, Polymarket, Alerts, Live streams). The
193
- entry point is the umbrella skill `vike`, which routes a question to the specialised skill.
192
+ them by domain (Quick start, Tokens, Wallets, CEX perps, Hyperliquid perps, Candles, Polymarket, Alerts, Live streams). The
193
+ entry point is the umbrella skill `vike`, which routes a question to the specialised skill. Per-tool
194
+ skills read one command; the workflow playbooks chain several: who a wallet is, where its money went,
195
+ whether two wallets are related, token holder diligence and the smart-money trend, Hyperliquid cohort
196
+ positioning and how to backtest it, one trader's profile, a symbol briefing, liquidation risk, builder
197
+ codes, perp crowding, a Polymarket market's due diligence, the free L2 archive, a cross-market daily brief.
194
198
 
195
199
  ```bash
196
200
  npx skills add vike-io/vike-data-cli --list # see them first
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.15.0",
6
+ "version": "0.16.1",
7
7
  "description": "CLI, agent skills and MCP client for the free Vike Data API: a Polymarket full-L2 order-book archive in Parquet (CC BY 4.0), Hyperliquid positions, fills and cohorts, and labelled Ethereum/BNB wallets",
8
8
  "type": "module",
9
9
  "main": "src/index.js",
@@ -7,7 +7,7 @@ description: "Use this skill whenever the user asks any question about on-chain
7
7
 
8
8
  This skill is for anyone who asks an AI agent about crypto data: who is buying a token, what a wallet holds, what Hyperliquid or Polymarket traders are doing right now. It tells the agent which vike tool answers which question and how to read the result, so it does not guess or invent numbers. It reads its data from vike.io and needs a free vike API key.
9
9
 
10
- What the platform has: wallet and token analytics on Ethereum and BSC, with Base for token transfers and labels (each tool's chain list is under "What each tool really returns"), multi-source wallet labels, CEX perpetual funding and cross-venue spreads, Hyperliquid wallets, cohorts, leaderboards, liquidations, markets, builders, vaults and candles, Polymarket markets, traders, tape, order books, settlements and the Parquet archive, transfer and Hyperliquid alerts, and live event streams over WebSocket. 70 tools in one MCP server.
10
+ What the platform has: wallet and token analytics on Ethereum, BSC, Base and HyperEVM (each tool's chain list is under "What each tool really returns"), multi-source wallet labels, CEX perpetual funding and cross-venue spreads, Hyperliquid wallets, cohorts, leaderboards, liquidations, markets, builders, vaults and candles, Polymarket markets, traders, tape, order books, settlements and the Parquet archive, transfer and Hyperliquid alerts, and live event streams over WebSocket. 70 tools in one MCP server.
11
11
 
12
12
  **MCP endpoint for all calls:** `https://data.vike.io/mcp` (JSON-RPC 2.0)
13
13
  **Or use the CLI:** `npm install -g @vike-io/cli` → `vike-data <command>`
@@ -30,7 +30,7 @@ Hard rules — agents that violate these produce wrong answers. Read once, apply
30
30
  6. **USD amounts are floats in dollars.** `--min-usd 10000` = ten thousand dollars, not micro-USD.
31
31
  7. **`--json` is always available** on CLI commands and gives stable machine-readable output. The default (human) format may change; `--json` will not.
32
32
  8. **Resolve a token before asking transfer/holder questions.** `token_search` → take the canonical address → pass it to `token_transfers` / `token_holders`. Symbol-only queries lose precision on tickers that collide across chains (e.g. FUN, BEAM, USDC).
33
- 9. **`bought` in `token_transfers` is every inbound transfer**, flash-loan round trips included. Read `net_tokens` (bought − sold) before calling a wallet a buyer.
33
+ 9. **`token_transfers` lists the top 10 NET buyers (`tab=bought`) or net sellers, ranked by net USD**, and a net buyer's `net_usd` is negative. A row can still be a pool, vault or router: `--hide-contracts` leaves out the contracts we know of.
34
34
 
35
35
  ---
36
36
 
@@ -77,10 +77,15 @@ Pick by the question, then read the named skill for the recipe and the traps. If
77
77
  | Who bought / sold a token (top 10, one side per call) | `vike-data token transfers` / `token_transfers` | `vike-token-transfers` |
78
78
  | "Research token X" end to end | search → transfers (both tabs) | `vike-token-research` |
79
79
  | Top holders of a token (ranked by net inflow, not balance) | `vike-data token holders` / `token_holders` | `vike-token-holders` |
80
+ | Holder quality: largest balances, share of supply, exchanges / contracts / fresh / flagged wallets | `call token_holders` (`sort: "balance"`) → `wallet batch` | `vike-token-holder-diligence` |
80
81
  | Tokens trending / with the biggest inflow / smart-money inflow | `vike-data token screener` / `token_screener` | `vike-token-screener` |
81
82
  | "Is smart money buying X?" / alpha wallets | screener `--smart-money-only` → transfers | `vike-smart-money-discovery` |
83
+ | Is smart money entering, holding or exiting X over 24h / 7d / 30d / 90d | screener at four windows, differenced | `vike-token-smart-money-trend` |
82
84
  | One wallet's volume / inflow / outflow / tx count by window | `vike-data wallet summary` / `wallet_summary` | `vike-wallet-summary` |
83
- | Full picture of one wallet ("who is this", "everything about it") | several calls | `vike-wallet-portfolio` |
85
+ | Who is this address, is it an exchange, which exchanges does it use, who funded it | `search` → `labels` → `wallet summary` → `wallet exchange-usage` → `wallet counterparties` | `vike-wallet-who-is` |
86
+ | Full picture of one wallet (holdings, flows, counterparties) | several calls | `vike-wallet-portfolio` |
87
+ | Where did the money go, did it reach an exchange (exploit, scam) | `call wallet_trace` (`direction: "out"`) → `wallet txs` → `wallet batch`; `stream onchain` | `vike-follow-the-money` |
88
+ | Do these wallets share an owner, find a wallet's siblings | `labels` → `wallet first-funder` → `wallet compare` → `wallet trace` | `vike-wallets-related` |
84
89
  | Top wallets by volume / flow / tx count | `vike-data wallet discover` / `wallet_discover` | `vike-wallet-discover` |
85
90
  | Individual transfers of a wallet | `vike-data wallet transactions` / `wallet_transactions` | `vike-wallet-transactions` |
86
91
  | Who a wallet trades with | `vike-data wallet counterparties` / `wallet_counterparties` | `vike-wallet-counterparties` |
@@ -92,12 +97,17 @@ Pick by the question, then read the named skill for the recipe and the traps. If
92
97
  | Label many addresses (up to 100) | `vike-data wallet batch` / `wallet_batch_labels` | `vike-wallet-batch` |
93
98
  | Why is this wallet labelled X (sources) | `vike-data labels <address>` / `wallet_label_provenance` | `vike-wallet-label-provenance` |
94
99
  | Funding rates, funding arb, one symbol across venues | `vike-data perp funding` / `perp_funding` | `vike-perp-funding` |
95
- | Cross-venue price spread, "perp market overview" | `vike-data perp spreads` + `perp funding` + `perp top-traders` | `vike-perp-overview` |
96
- | Top Hyperliquid traders; "is this HL address any good" | `vike-data perp top-traders` / `hl_perp_top_traders` | `vike-hl-top-traders` |
100
+ | Cross-venue price spread, "perp market overview"; CEX open interest or long/short of one symbol | `vike-data perp spreads` + `perp funding` + `perp top-traders`; `call perp_open_interest`, `call perp_long_short` | `vike-perp-overview` |
101
+ | Is X crowded: funding, open interest net of price, long/short per venue | `perp funding` + `call perp_open_interest` + `call perp_long_short` + `candles hl` | `vike-perp-crowding` |
102
+ | Top Hyperliquid traders; the full leaderboard | `vike-data perp top-traders` / `hl_perp_top_traders`; `vike-data hl leaderboard` | `vike-hl-top-traders` |
97
103
  | HL share card → which wallet holds it | `vike-data perp find-position` / `hl_position_match` | `vike-hl-position-match` |
98
- | One HL wallet: equity, positions, cohorts, risk; its fills / funding / ledger | `vike-data hl wallet`, `hl wallet-activity` / `hl_wallet`, `hl_wallet_activity` | this skill |
99
- | Are whales / smart money long or short X (HL cohorts) | `vike-data hl cohort-metrics <symbol>`, `hl segments`, `hl market --view indices` | this skill |
100
- | HL leaderboard with the full risk set, liquidations, open interest, builders, vaults | `vike-data hl leaderboard`, `hl liquidations`, `hl market`, `hl builders`, `hl vaults`, `hl vault` | this skill |
104
+ | One HL wallet: equity, positions, cohorts, risk, closed trades, funding, ledger, orders, liquidations | `vike-data hl wallet`, `hl wallet-trades`, `hl wallet-activity` | `vike-hl-trader-profile` |
105
+ | Are whales / smart money long or short X (HL cohorts) | `vike-data hl cohort-metrics <symbol>`, `hl segments`, `hl market --view indices` | `vike-hl-cohort-positioning` |
106
+ | Did cohort positioning lead price (a backtest without look-ahead) | `hl cohort-metrics --label-basis point_in_time` + `candles hl` | `vike-hl-cohort-backtest` |
107
+ | Brief on one HL symbol: price, funding, OI, cohorts, liquidations | several `hl` calls + `perp funding` | `vike-hl-asset-briefing` |
108
+ | Liquidation risk by symbol, liquidation heatmap, recent or live liquidations | `vike-data hl liquidations`; `stream hl --channel hl.liq_risk hl.liquidations` | `vike-hl-liquidation-radar` |
109
+ | Builder codes: fees, users, routed share | `vike-data hl builders` | `vike-hl-builder-intel` |
110
+ | HL open interest, vaults | `vike-data hl market`, `hl vaults`, `hl vault` | this skill |
101
111
  | HL orders and order clusters, TWAPs, the ledger, leverage changes, closed trades, venue stats, HYPE holders, the Parquet archive | `vike-data hl orders`, `hl twaps`, `hl ledger`, `hl leverage-changes`, `hl wallet-trades`, `hl stats`, `hl hype-holders`, `hl archive` | this skill |
102
112
  | A name, symbol, address, ENS name or polymarket.com link → what it is | `vike-data search <q>` / `search` | this skill |
103
113
  | Candles: Hyperliquid perp/spot (history, or the newest bar of every symbol), Polymarket outcome token; live HL bars | `vike-data candles hl` (`--view latest`), `candles polymarket`; `stream hl --channel hl.candles` | `vike-candles` |
@@ -106,13 +116,14 @@ Pick by the question, then read the named skill for the recipe and the traps. If
106
116
  | One Polymarket trader | `vike-data polymarket wallet` / `polymarket_wallet` | `vike-polymarket-trader` |
107
117
  | Polymarket smart-money flows / mispricings / overview | `vike-data polymarket smart-money` / `polymarket_smart_money` | `vike-polymarket-smart-money` |
108
118
  | Polymarket wallet leaderboard | `vike-data polymarket leaderboard` / `polymarket_leaderboard` | this skill |
109
- | One market's trades with wallets; raw tape; order book; tape stats | `vike-data polymarket market-trades`, `tape`, `orderbook`, `market-stats` | this skill |
110
- | Polymarket resolutions; the Parquet archive | `vike-data polymarket settlement`, `settlements`, `archive` | this skill |
111
- | Who funded a wallet; which exchanges it uses | `vike-data wallet first-funder`, `wallet exchange-usage` | this skill |
119
+ | One market's liquidity, trades with wallets, raw tape, order book, tape stats, on-chain resolution | `vike-data polymarket market-trades`, `tape`, `orderbook`, `market-stats`, `settlement` | `vike-pm-market-diligence` |
120
+ | Many resolutions; the Parquet L2 archive | `vike-data polymarket settlements`, `archive` | `vike-pm-l2-archive` |
121
+ | Who funded a wallet; which exchanges it uses | `vike-data wallet first-funder`, `wallet exchange-usage` | `vike-wallet-who-is` |
122
+ | A daily brief across perps, Hyperliquid, Polymarket and on-chain | several calls, cheap first | `vike-daily-brief` |
112
123
  | Find Polymarket markets by slug, or one by condition_id | `vike-data polymarket markets --view search --query btc-updown` / `--view market --condition-id 0x...` | this skill |
113
124
  | Alerts: create / list / edit / delete / events (transfer and Hyperliquid) | `vike-data alerts ...` / `alerts_*` | `vike-alerts-setup` |
114
125
  | Alert delivery to an HTTPS webhook | `vike-data alerts register-webhook`, `test-webhook`, `rotate-secret` | `vike-alerts-webhook` |
115
- | Live events: HL fills, liquidations, positions, candles, TWAPs, ledger, leverage, funding, cohort flow and bias; on-chain transfers; Polymarket trades and new markets | `vike-data stream <hl\|hl-cohorts\|onchain\|polymarket> --channel ...`; `stream info`, `check`, `events`, `connections` | `vike-stream` |
126
+ | Live events: HL fills, liquidations, positions, top-10 positions, closed trades, candles, TWAPs, ledger, leverage, funding, cohort flow, bias and leverage; on-chain transfers; Polymarket trades, position changes and new markets | `vike-data stream <hl\|hl-cohorts\|onchain\|polymarket> --channel ...`; `stream info`, `check`, `events`, `connections` | `vike-stream` |
116
127
  | A tool with no command of its own | `vike-data call <tool> --args '{...}'` | this skill |
117
128
  | Install, auth, errors, conventions | — | `vike-core` |
118
129
 
@@ -120,16 +131,16 @@ Pick by the question, then read the named skill for the recipe and the traps. If
120
131
 
121
132
  ### Example query routing
122
133
  ```
123
- "Who bought the most PEPE in the last 24h?" → token_search, then token_transfers (tab=bought, period=24h; 10 rows; rank by net_tokens)
134
+ "Who bought the most PEPE in the last 24h?" → token_search, then token_transfers (tab=bought, period=24h; the top 10 net buyers)
124
135
  "What is 0xd8dA6BF...AbA96 holding?" → wallet_token_balances (+ wallet_summary for flows)
125
136
  "Funding rate for BTC across all perp venues" → perp_funding (symbol=BTC; raw per-interval rates)
126
137
  "Which venue pays the most funding on ETH?" → perp_funding (symbol=ETH, normalise to daily yourself)
127
138
  "Biggest HL perp PnL last week" → hl_perp_top_traders (window=7d, sort=pnl)
128
139
  "What are the hottest crypto prediction markets?" → polymarket_markets (category=Crypto) → polymarket_market_detail
129
140
  "Why is 0x28C6... labeled 'Binance hot wallet'?" → wallet_label_provenance (address=0x28C6...)
130
- "What is the ENS name of 0xd8dA6BF...?" → wallet_ens (address=0xd8dA...; name → address is NOT supported)
141
+ "What is the ENS name of 0xd8dA6BF...?" → wallet_ens (address=0xd8dA...; name → address is `search`)
131
142
  "Alert me on WBTC transfers over $1M" → alerts_create (token_symbol=WBTC, min_value_usd=1000000; fires on ANY such transfer)
132
- "Trace funds from 0xHACKER 3 hops out" → wallet_trace (address=0xHACKER, depth=3)
143
+ "Trace funds from 0xHACKER 3 hops out" → wallet_trace (address=0xHACKER, depth=3, direction=out)
133
144
  ```
134
145
 
135
146
  ---
@@ -161,41 +172,44 @@ Run `vike-data schema --pretty` (or call MCP `tools/list`) to see the live arg s
161
172
  | Tool | Returns | Not |
162
173
  |---|---|---|
163
174
  | `token_search` | symbol, name, address, logo for a query | no market cap |
164
- | `token_transfers` | 10 wallets, one side (`tab` = `bought` or `sold`) per call, period 1h/24h/7d/30d: `address, bought, sold, net_tokens, usd_spent, usd_received, net_usd, chains` | no `--min-usd`; window ends at the token's newest priced row; a net seller has `net_usd > 0` |
165
- | `token_holders` | wallets ranked by cumulative net inflow USD, with entity/type | not balances, no concentration metric |
175
+ | `token_transfers` | the top 10 net buyers (`tab=bought`) or net sellers, ranked by net USD, period 1h/24h/7d/30d: `address, bought, sold, net_tokens, usd_spent, usd_received, net_usd, chains`; `hide_contracts` drops known pools and routers | no `--min-usd`; window ends at the token's newest priced row; a net seller has `net_usd > 0` |
176
+ | `token_holders` | wallets ranked by cumulative net inflow USD, with entity/type; `sort: "balance"` (via `call`) ranks by on-chain balance and adds `balance`, `value_usd`, `supply_pct` | the balance ranking covers candidate wallets, not every holder, and not every chain |
166
177
  | `token_screener` | per-token volume, net/in/out USD, `unique_holders` (wallets ACTIVE in the window, not growth), tx count | no age, liquidity or sector filter; no ascending sort; native coin shows as `0x000…000`; `symbol` is often blank |
167
178
 
168
179
  ### Wallets
169
180
  | Tool | Returns | Not |
170
181
  |---|---|---|
171
- | `wallet_summary` | a dict keyed `all, 90d, 30d, 7d, 24h`, each with `total_volume, total_inflow, total_outflow, net_flow, tx_count, tokens_traded, first_seen, last_active`, for ONE chain (the most recently active; never summed) | no PnL, holdings or labels |
172
- | `wallet_discover` | `{wallets, total}` ranked by volume / inflow / outflow / net_flow / tx_count / pnl (`size` ≤ 20; ethereum, bsc) | `realized_pnl` is a ranking key only, not a dollar figure; no labels column |
182
+ | `wallet_summary` | a dict keyed `all, 90d, 30d, 7d, 24h`, each with `total_volume, total_inflow, total_outflow, net_flow, tx_count, tokens_traded, first_seen, last_active`, for ONE chain, named in `chain` (the more recently active of ethereum and bsc; never summed) | no PnL, holdings or labels; the command has no `--chain`: `call wallet_summary` with `chain` asks one chain |
183
+ | `wallet_discover` | `{wallets, total}` ranked by volume / inflow / outflow / net_flow / tx_count / pnl (`size` ≤ 20) | `realized_pnl` is a ranking key only, not a dollar figure; no labels column; base and hyperevm serve `window=all` reliably |
173
184
  | `wallet_transactions` | single transfers, newest first | no aggregates |
174
185
  | `wallet_compare` | shared counterparties + shared tokens of exactly two wallets | not 3+ wallets |
175
- | `wallet_trace` | nodes + edges; direction lives in each edge's `out_usd` / `in_usd` | `from` is the side expanded first, not the sender |
186
+ | `wallet_trace` | nodes + edges; direction lives in each edge's `out_usd` / `in_usd`; `direction` `out` / `in` (via `call`) expands by where money went / came from | `from` is the side expanded first, not the sender |
176
187
  | `wallet_counterparties` | top partners with sent/received USD and labels | |
177
188
  | `wallet_pnl_history` | daily net inflow USD (a proxy) | not realized PnL |
178
- | `wallet_token_balances` | holdings read from the chain at request time (ethereum, bsc); native coin is a row with `usd_value: null` | not a DeFi-position view |
179
- | `wallet_ens` | name for an address, or `null` | no name → address |
180
- | `wallet_batch_labels` | entity, type, risk flag + 30-day flow fields per address, in input order | on `bsc` the 30-day fields are `null` |
189
+ | `wallet_token_balances` | holdings read from the chain at request time; the native coin is always listed | not a DeFi-position view; on base and hyperevm only mapped and priced tokens unless `min_usd=0` |
190
+ | `wallet_ens` | name for an address, or `null` | no name → address here (`vike-data search <name.eth>` searches the address a name points to) |
191
+ | `wallet_batch_labels` | entity, type, risk flag + 30-day flow fields per address, in input order, from that chain's tables | the 30-day fields are `null` for an address with no label |
192
+ | `wallet_first_funder`, `wallet_exchange_usage` | the earliest inbound coin and token transfers with the senders' labels; the exchanges a wallet sent to and received from | not proof of who funded it or owns it |
181
193
 
182
- Chains: most token and wallet tools accept `chain` = `ethereum` | `bsc` | `base`, but Base coverage is narrower: it is documented for token transfers and `wallet_batch_labels`, while the per-wallet transfer tools (`wallet_transactions`, `wallet_counterparties`, `wallet_trace`, `wallet_compare`, `wallet_pnl_history`) are documented for Ethereum and BSC. `wallet_discover` takes `ethereum` | `bsc`, `wallet_token_balances` serves `ethereum` | `bsc` (anything else lands in `chain_errors`) and alerts take `eth` | `bsc`. `token_screener` smart-money mode and `smart_inflow` sort are `ethereum` only (a 400 elsewhere). `wallet_label_provenance` is for Ethereum wallets. Arbitrum, Bitcoin, Solana, Tron and other non-EVM chains are not served. When a chain is not covered, say so; an empty Base result means "not covered", not "no activity".
194
+ Chains: every token and wallet tool takes `chain` = `ethereum` | `bsc` | `base` | `hyperevm` (default ethereum; `token_transfers` also `all`), and `wallet_token_balances` scans all four by default. Exceptions: `token_screener` smart-money mode and `smart_inflow` sort are `ethereum` only (a 400 elsewhere); `wallet_label_provenance` reads the Ethereum label table; labels are sparse on hyperevm; alerts and the stream spell Ethereum `eth`. Arbitrum, Bitcoin, Solana, Tron and other non-EVM chains are not served: say so.
183
195
 
184
196
  ### Labels
185
- `wallet_label_provenance` returns the raw source labels (at most 6 sources plus our heuristic classifier) and a consensus entity/type. When an answer hinges on "is this really a CEX hot wallet?", call it rather than trusting one source. `found: false` means the wallet is missing from our labelled-wallet table and no source is consulted at all, so it is not proof that nobody labels it, and it is not proof the wallet is clean.
197
+ `wallet_label_provenance` returns the raw source labels (at most 6 sources plus our heuristic classifier) and a consensus entity/type. When an answer hinges on "is this really a CEX hot wallet?", call it rather than trusting one source. Every source is read on every call, and `found` is true when ANY source knows the address; `found: false` means none does and the wallet is not in our label table. It is not proof the wallet is clean.
186
198
 
187
199
  ### CEX perps
188
200
  | Tool | Returns |
189
201
  |---|---|
190
202
  | `perp_funding` | with `symbol`: raw per-venue `funding_rate` + `interval_h` (daily % = rate × 24 / interval_h × 100); without: up to 5 pre-ranked arb rows (`long_exchange`, `short_exchange`, `spread_daily_pct`) |
191
203
  | `perp_spreads` | up to 10 cross-venue price-gap rows (≥ 0.5%); `symbol` only filters that global top 10, so it is often empty |
204
+ | `perp_open_interest` (`call`) | `oi_usd` per venue (USD notional, moves with price), newest print or an hourly series (`hours` 1-168); `stale_venues` are never in a total |
205
+ | `perp_long_short` (`call`) | `long_share`, `short_share` (fractions), `long_short_ratio` per venue, each with its `basis` (what the venue counts); about 40 major symbols |
192
206
 
193
- Neither returns mark prices or bid/ask per venue. "Spread" here is perp vs perp across venues, not spot vs perp.
207
+ These two have no command: `vike-data call perp_open_interest --args '{"symbol":"BTC","hours":24}'`. None returns mark prices or bid/ask per venue. "Spread" here is perp vs perp across venues, not spot vs perp.
194
208
 
195
209
  ### Hyperliquid
196
210
  | Tool | Returns |
197
211
  |---|---|
198
- | `hl_perp_top_traders` | up to 20 wallets: `total_realized_pnl`, `roi_pct`, `win_rate_pct`, `max_drawdown_pct` (all percents; 12.5 = 12.5%), `trade_count`, `total_volume`. ROI = window realized PnL / CURRENT account value; drawdown is account-level and all-time |
212
+ | `hl_perp_top_traders` | up to 100 wallets (`size`, default 20): `total_realized_pnl`, `roi_pct`, `win_rate_pct`, `max_drawdown_pct` (all percents; 12.5 = 12.5%), `trade_count`, `total_volume`. ROI = window realized PnL / CURRENT account value; drawdown is account-level and all-time |
199
213
  | `hl_position_match` | wallets whose open position matches a share card (`symbol`, side, leverage, entry) |
200
214
  | `hl_ohlcv` | perp or spot candles |
201
215
  | `hl_wallet` (`vike-data hl wallet`) | one wallet: equity, open positions, cohort labels, risk metrics, lifetime flow; `--view trades_summary` for closed-trade stats |
@@ -216,7 +230,7 @@ Every `hl` command takes `--view` (the first view is the default) and only the f
216
230
  | Tool | Returns |
217
231
  |---|---|
218
232
  | `polymarket_markets` | markets ranked by 24h volume only (`volume_24h`, `liquidity`, `ended`, `outcomes[]` with `token_id`, `mid`, `bid`, `ask`) |
219
- | `polymarket_market_detail` | one market: quotes, smart-money cohort flows, top wallets, resolution status |
233
+ | `polymarket_market_detail` | one market: outcomes with `clob_token_ids`, volume, liquidity, an hourly series per outcome, the top 30 holders per side, the last 100 trades with wallets, tape stats, resolution status; no live quote and no smart-money block |
220
234
  | `polymarket_wallet` | one trader: realized PnL, volume-weighted `hit_rate`, `resolved_markets`, positions |
221
235
  | `polymarket_smart_money` | MARKETS where the profitable-wallet cohort is flowing (`flows`) or bought below the mid (`mispricings`); not a list of top traders |
222
236
 
@@ -230,7 +244,7 @@ Create + manage on-chain transfer alerts and Hyperliquid alerts, delivered by em
230
244
  | `alerts_events`, `alerts_resend_delivery` | what fired and each delivery's status (15 days); send one again |
231
245
  | `alerts_register_webhook`, `alerts_test_webhook`, `alerts_rotate_webhook_secret` | an HTTPS webhook (HMAC-signed deliveries): register, test, rotate its secret |
232
246
 
233
- A token-wide transfer alert fires on ANY transfer of the token above the USD threshold on that chain; an address alert on every transfer of that wallet. Hyperliquid alerts go to a webhook or are read with `alerts events` (no email). There is no price or funding alert, no Discord (off) and no Telegram delivery. For a live feed without a rule, use `vike-data stream`.
247
+ A token-wide transfer alert fires on ANY transfer of the token above the USD threshold on that chain; an address alert on every transfer of that wallet. Every match is recorded in `alerts events` (15 days) whatever the channels; a transfer alert left with no enabled channel e-mails the account address. Hyperliquid alerts go to a webhook or are read with `alerts events`; only `hl_wallet` may also use email. There is no price or funding alert, no Discord (off) and no Telegram delivery. For a live feed without a rule, use `vike-data stream`.
234
248
 
235
249
  ---
236
250
 
@@ -239,7 +253,7 @@ A token-wide transfer alert fires on ANY transfer of the token above the USD thr
239
253
  Credits are an accounting figure only; they never block a call. The one limit is 20,000 requests per rolling hour per key, shared by MCP and REST.
240
254
 
241
255
  - **0 credits:** `token_search`, `alerts_list`, `alerts_list_channels`.
242
- - **1:** `wallet_ens`, `wallet_label_provenance`, `perp_funding`, `perp_spreads`, `hl_ohlcv`, `polymarket_markets`, `polymarket_ohlcv`.
256
+ - **1:** `wallet_ens`, `wallet_label_provenance`, `perp_funding`, `perp_spreads`, `perp_open_interest`, `perp_long_short`, `search`, every `hl` command, `hl_ohlcv`, `polymarket_markets`, `polymarket_ohlcv`, the Polymarket tape, order book, stats, trades, settlement and archive calls.
243
257
  - **2:** most others, `wallet_summary` among them.
244
258
  - **3:** `token_screener`, `wallet_compare`, `wallet_token_balances`, `alerts_create`.
245
259
  - **4:** `wallet_trace`.
@@ -248,7 +262,7 @@ Credits are an accounting figure only; they never block a call. The one limit is
248
262
 
249
263
  - **No NFT data** — out of scope by design.
250
264
  - **No on-chain trading / signing** — read-only platform, no execution.
251
- - **No ENS name → address**, no candles for CEX tickers or arbitrary ERC-20 contracts.
265
+ - **No ENS name → address in `wallet ens`** (`vike-data search <name.eth>` does it), no candles for CEX tickers or arbitrary ERC-20 contracts.
252
266
  - **No non-EVM chains** (Bitcoin, Solana, Tron, Monero, Zcash, Dash) and no Arbitrum.
253
267
 
254
268
  If the user asks for any of the above, say so directly rather than proposing a workaround.
@@ -12,7 +12,7 @@ allowed-tools: Bash(vike-data:*)
12
12
  vike-data alerts channels --json
13
13
  ```
14
14
 
15
- Returns enabled email + webhook channels. **If a user creates an alert with a channel they haven't verified, the alert is saved but won't fire notifications.** Always check first. A Hyperliquid alert is delivered only by a webhook (`vike-alerts-webhook`), or read with `vike-data alerts events`.
15
+ Returns enabled email + webhook channels. **A channel kind the user has no enabled channel of is dropped from a transfer alert, and a transfer alert left with no channel e-mails the account address.** Whatever the channels, every match is recorded and read with `vike-data alerts events` (kept 15 days). A Hyperliquid alert is delivered by a registered webhook (`vike-alerts-webhook`; asking for one the user has not registered is an error) or only read with `alerts events`; `hl_wallet` alone may also use `--channel email`.
16
16
 
17
17
  ## CRUD
18
18
 
@@ -43,7 +43,7 @@ vike-data alerts create --label "Treasury in" --chain base \
43
43
  --address 0x1111111111111111111111111111111111111111 --address-role to --channel email
44
44
  ```
45
45
 
46
- Hyperliquid alerts (`--type`; leave out `--chain`, `--address`, `--max-usd`; delivered by `--channel webhook`, or with no channel read them with `vike-data alerts events`):
46
+ Hyperliquid alerts (`--type`; leave out `--chain`, `--address`, `--max-usd`; delivered by `--channel webhook` (`hl_wallet` also `email`, at most one mail per pass), or with no channel read them with `vike-data alerts events`):
47
47
 
48
48
  | `--type` | Fires on | Flags |
49
49
  |---|---|---|
@@ -75,13 +75,15 @@ vike-data alerts events --rule-id 42 --json
75
75
  vike-data alerts resend <delivery_id> # send one delivery again
76
76
  ```
77
77
 
78
- ### Delete
78
+ ### Delete (only when the user explicitly asks)
79
79
 
80
80
  ```bash
81
81
  vike-data alerts delete 42 # soft-delete (pauses, keeps history)
82
- vike-data alerts delete 42 --hard # permanently remove
82
+ vike-data alerts delete 42 --hard # permanently remove: only on an explicit "delete it for good"
83
83
  ```
84
84
 
85
+ Never delete or hard-delete an alert on your own initiative, to "clean up" or to replace it: pause it with `edit --active false` if the user only wants it quiet.
86
+
85
87
  ## Notes + gotchas
86
88
 
87
89
  - Transfer chains: **eth**, **bsc**, **base**, **hyperevm**, one per alert. For several, create several alerts.
@@ -89,7 +91,7 @@ vike-data alerts delete 42 --hard # permanently remove
89
91
  - Thresholds are in **USD value** of the transfer at fire time, not token quantity.
90
92
  - `--cooldown` is the minimum gap between notifications of a token-wide transfer alert (default 60 min). Address alerts and Hyperliquid alerts notify on every event and ignore it.
91
93
  - Tokens are matched by symbol (UPPERCASE). For cross-chain symbols like `USDC` that exist on multiple chains, be explicit with `--chain`.
92
- - Alerts created without a verified channel will be **silently inactive at fire time** — there is no automatic warning. Use `vike-data alerts channels` first.
94
+ - A transfer alert whose channels are not set up is not silent: it falls back to e-mailing the account address, and every match is in `alerts events`. Run `vike-data alerts channels` first so the user gets the delivery they expect.
93
95
 
94
96
  ## Confirmation flow with the user
95
97
 
@@ -14,7 +14,7 @@ vike-data alerts register-webhook <https://your-server.com/vike-hook>
14
14
  [--json]
15
15
  ```
16
16
 
17
- The secret is **optional but strongly recommended** — without it we still POST, but the recipient has no way to verify it came from us.
17
+ **Every POST is signed** (HMAC-SHA256). `--secret` is optional: without it the server generates one and returns it as `secret` in the answer. Show it to the user right away (it is also under Account → Alerts → channels, Show secret) so the receiver can verify deliveries.
18
18
 
19
19
  ## Example
20
20
 
@@ -33,7 +33,7 @@ Then create an alert with `--channel webhook` (alongside `email` if wanted; a Hy
33
33
 
34
34
  ```bash
35
35
  vike-data alerts test-webhook <channel_id> # send the signed test event again
36
- vike-data alerts rotate-secret <channel_id> # new secret; the old one keeps signing for 24 hours
36
+ vike-data alerts rotate-secret <channel_id> # only when the user explicitly asks: new secret, the old one keeps signing for 24 hours
37
37
  vike-data alerts events --json # what fired, with each delivery's status
38
38
  vike-data alerts resend <delivery_id> # send one delivery again (up to 15 days)
39
39
  ```
@@ -72,7 +72,8 @@ def verify(secret, headers, body):
72
72
 
73
73
  ## Anti-patterns
74
74
 
75
- - **Don't** skip the secret. Anyone who knows your webhook URL can spoof alerts without it.
75
+ - **Don't** lose the secret or skip verifying: every delivery is signed with it (yours, or the one the server generated), and without the check anyone who knows the URL can spoof alerts.
76
+ - **Don't** rotate the secret unless the user asks: the receiver must install the new one within 24 hours.
76
77
  - **Don't** trust the body without verifying the signature. The URL doesn't authenticate the sender; the HMAC does.
77
78
  - **Don't** use HTTP (only HTTPS) in production — the body is sensitive.
78
79
  - **Don't** respond slowly — we time out after 10s. If your handler does heavy work, queue it (push to a job queue, return 200 immediately).
@@ -64,5 +64,6 @@ Polymarket: `ts`, `open`, `high`, `low`, `close`, `volume`, `trades`, oldest fir
64
64
 
65
65
  ## Pairs well with
66
66
 
67
- - `vike-data polymarket market <condition_id>` — to find the token ids
68
- - `vike-data perp top-traders` — who is trading the asset behind the candles
67
+ - `vike-data polymarket market <condition_id>` — to find the token ids; `vike-pm-market-diligence` for the order book and tape of the same token
68
+ - `vike-data perp top-traders` — who is trading the asset behind the candles; `vike-hl-cohort-positioning` for how cohorts are positioned in it
69
+ - `vike-hl-cohort-backtest` — cohort positioning against these candles, without look-ahead
@@ -47,7 +47,7 @@ vike-data --help # command list; add --help to any comman
47
47
  - All commands accept `--json` for pipe-friendly output. Without it, you get a human-readable table.
48
48
  - Addresses: pass full 0x-prefixed hex (42 chars). Never truncate when reporting back to the user.
49
49
  - USD amounts: integers/decimals (e.g. `--min-usd 10000`).
50
- - Chain identifiers: `ethereum`, `bsc`, `base` on the token and wallet commands (`wallet discover` and `wallet balances` serve ethereum and bsc only; `wallet first-funder` and `exchange-usage` also take `hyperevm`; `alerts` takes `eth`, `bsc`, `base` or `hyperevm`). Base coverage is narrower than the flag suggests: documented for token transfers and `wallet batch`, not for the per-wallet transfer commands, so an empty Base result means "not covered". Non-EVM chains and Arbitrum are not served. Check `vike-data <cmd> --help` for the exact list.
50
+ - Chain identifiers: `ethereum`, `bsc`, `base`, `hyperevm` on the token and wallet commands (`alerts` and `stream` spell Ethereum `eth`). Exceptions: `wallet discover` on `base` and `hyperevm` needs `--window all` (the shorter windows there answer only while freshly rebuilt); `token screener --smart-money-only` and `--sort smart_inflow` are Ethereum only; `labels` reads the Ethereum label table. `wallet summary` has no chain flag: it answers for one chain and names it in `chain` (`vike-data call wallet_summary --args '{"address":"0x...","chain":"base"}'` asks one). Non-EVM chains and Arbitrum are not served (`wallet balances` lists them under `chain_errors`).
51
51
  - Time windows: `24h`, `7d`, `30d`, `90d`, `all` (per command; check `vike-data <cmd> --help`). Windows are counted in UTC calendar days.
52
52
 
53
53
  ## Errors
@@ -62,10 +62,10 @@ vike-data --help # command list; add --help to any comman
62
62
 
63
63
  ## Cost awareness
64
64
 
65
- Credits are an accounting figure on each call and never block one. The limit is 20,000 requests per rolling hour per key, shared by the MCP server and the REST API. Free (0 credits): `token search`, `alerts list`, `alerts channels`. Heaviest: `wallet trace` (4), then `token screener`, `wallet compare`, `wallet balances` (3).
65
+ Credits are an accounting figure on each call and never block one. The limit is 20,000 requests per rolling hour per key, shared by the MCP server and the REST API. Free (0 credits): `token search`, `alerts list`, `alerts channels`. Every `hl` command, `search`, and the Polymarket tape, order book, stats, trades, settlement and archive commands are 1 credit. Heaviest: `wallet trace` (4), then `token screener`, `wallet compare`, `wallet balances` (3).
66
66
 
67
67
  ## Which skill to use
68
68
 
69
69
  - The umbrella skill `vike` holds the routing table — use it when the user is exploring or unsure which command they need.
70
- - Task skills (`vike-smart-money-discovery`, `vike-perp-funding`, etc.) — when the user has a specific question that maps to a known workflow.
70
+ - Task skills (`vike-wallet-who-is`, `vike-follow-the-money`, `vike-hl-asset-briefing`, `vike-pm-market-diligence`, `vike-daily-brief`, `vike-smart-money-discovery`, `vike-perp-funding`, etc.) — when the user has a specific question that maps to a known workflow.
71
71
  - If unsure between two, prefer the task skill (a workflow) over the per-tool skill (one command). For raw data, use the per-tool skill with `--json`.
@@ -0,0 +1,68 @@
1
+ ---
2
+ name: vike-daily-brief
3
+ description: One-page cross-market brief of what changed today - perp funding, open interest and long/short lean, Hyperliquid cohort positioning, liquidation risk and venue totals, trending Polymarket markets with smart-money flows, and Ethereum tokens the smart-money cohort is buying. Cheap calls first, every section skippable. Use when the user asks "daily brief" / "morning brief" / "what is happening across crypto today" / "give me a market rundown across perps, Hyperliquid, Polymarket and on-chain".
4
+ allowed-tools: Bash(vike-data:*)
5
+ ---
6
+
7
+ # vike-daily-brief
8
+
9
+ About 15 credits for all four sections; run only the ones the user wants and say which were skipped. Calls inside a section are independent: run them in parallel. If a call fails, omit its bullet and say so.
10
+
11
+ ## 1. Perps (about 5 credits)
12
+
13
+ ```bash
14
+ vike-data perp funding --json & # top cross-venue funding arbs (daily %, spread >= 0.3%)
15
+ vike-data call perp_open_interest --args '{"symbol":"BTC"}' & # repeat for ETH; oi_usd is USD notional
16
+ vike-data call perp_long_short --args '{"symbol":"BTC"}' & # repeat for ETH; read each venue's `basis`
17
+ wait
18
+ ```
19
+
20
+ - Funding rows are `long_exchange` / `short_exchange` / `spread_daily_pct`. The top rows are often thin tokens: check `vol_24h_usd` with `perp funding --symbol <S>` before presenting one as a trade.
21
+ - Report BTC and ETH OI per venue and leave out `stale_venues`; report each venue's long share with its basis, never an average.
22
+
23
+ ## 2. Hyperliquid (about 4 credits)
24
+
25
+ ```bash
26
+ vike-data hl cohort-metrics BTC --axis pnl --hours 1 --json & # repeat for ETH
27
+ vike-data hl liquidations --view risk --min-value-usd 50000000 --limit 10 --json & # symbols with $50M+ open, closest to liquidation
28
+ vike-data hl stats --view ecosystem --limit 25 --json & # venue-wide equity, open interest, positions per hour
29
+ wait
30
+ ```
31
+
32
+ - `bias` is a fraction -1..+1 of notional; report the `3x smart`..`smart` group and the `rekt` group (sum notional; see `vike-hl-cohort-positioning`), and check `freshness.stale`. Today's labels, not a history.
33
+ - Liquidation risk: `percent_risk` is a fraction; name the top 3 symbols.
34
+ - Venue totals: compare the newest hour with the one 24 rows back (rows are newest first).
35
+
36
+ ## 3. Polymarket (about 3 credits)
37
+
38
+ ```bash
39
+ vike-data polymarket markets --category Crypto --limit 5 --json &
40
+ vike-data polymarket smart-money --mode flows --hours 24 --category Crypto --limit 5 --json &
41
+ wait
42
+ ```
43
+
44
+ - Skip rows that are already decided: a mid of 0.98 or more (or 0.02 or less) is a finished game, and in an unfiltered flows list the top rows are often last night's sports results. Quotes are probabilities.
45
+ - Check `ended` on trending markets before presenting one.
46
+
47
+ ## 4. On-chain, Ethereum (3 credits)
48
+
49
+ ```bash
50
+ vike-data token screener --chain ethereum --window 24h --sort smart_inflow --smart-money-only --limit 10 --json
51
+ ```
52
+
53
+ - Rows are the smart-money cohort's flow per token. Skip `0x0000000000000000000000000000000000000000` (the native coin) and stablecoins unless asked; report `symbol` (or the address when blank), `net_flow_usd`, `unique_holders`. `24h` is yesterday plus today (UTC).
54
+ - For one interesting token run `vike-token-smart-money-trend`; do not name buyers from this call.
55
+
56
+ ## Output
57
+
58
+ Five to ten bullets, each with its number and unit, grouped by section, then one line: what the brief does not cover (no news, no price forecasts, no CEX spot, smart money on Ethereum only) and the data time. No advice.
59
+
60
+ ## Anti-patterns
61
+
62
+ - Don't run section 4 first (it is the most expensive) or repeat a section the user did not ask for.
63
+ - Don't mix percents and fractions in one line, and don't call a decided market "smart-money conviction".
64
+
65
+ ## Pairs well with
66
+
67
+ - `vike-perp-overview`, `vike-hl-asset-briefing`, `vike-polymarket-smart-money`, `vike-token-smart-money-trend`
68
+ - `vike-stream` for the same markets as events, e.g. `hl.liquidations` or `pm.trades` with a `min_usd` floor
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: vike-follow-the-money
3
+ description: Trace where the money of one wallet went - the outbound graph hop by hop, the actual transfers, every node labelled, stopping at an exchange - then watch the trail live. Use when the user asks "where did the funds from 0x... go" / "follow the money" / "trace this exploit or scam wallet" / "did it reach an exchange" / "investigate this address".
4
+ allowed-tools: Bash(vike-data:*)
5
+ ---
6
+
7
+ # vike-follow-the-money
8
+
9
+ Incident-style trace from one root wallet. About 12 credits. Per-tool details live in `vike-wallet-trace`; this is the order to run them in and the stop rules.
10
+
11
+ ## Chain
12
+
13
+ ```bash
14
+ ADDR=0xeae7380dd4cef6fbd1144f49e4d1e6964258a4f4
15
+ vike-data labels $ADDR --json # 1 is the root itself an exchange, MM or contract?
16
+ # 4 credits: direction "out" expands each hop by where the money WENT (the `wallet trace` command has no --direction)
17
+ vike-data call wallet_trace --args '{"address":"0xeae7380dd4cef6fbd1144f49e4d1e6964258a4f4","chain":"ethereum","direction":"out","depth":2,"width":5,"window":"30d","min_usd":100000}'
18
+ vike-data wallet txs $ADDR --chain ethereum --direction out --min-usd 100000 --days 30 --limit 50 --json # 2 the real transfers
19
+ vike-data wallet batch <node addresses with an empty label> --chain ethereum --json # 2 label the rest
20
+ vike-data wallet exchange-usage <endpoint> --chain ethereum --window 30d --json # 3 did it reach an exchange
21
+ ```
22
+
23
+ Chains: `ethereum`, `bsc`, `base`, `hyperevm` on every command above; `labels` reads the Ethereum label table, so on other chains label with `wallet batch --chain`. "Where did it come from" is the same chain with `"direction":"in"`, or `vike-data wallet first-funder $ADDR --chain <c>` for the earliest inbound transfers.
24
+
25
+ ## Reading the trace
26
+
27
+ - Each edge carries `out_usd` (flowed `from -> to`) and `in_usd` (flowed `to -> from`); `from` is the side expanded first, not the sender. Rank the root's edges by `out_usd` for "where did it go".
28
+ - Nodes carry `label` and `wallet_type`; `wallet batch` is for the empty ones (adds `risk_flag`, 30-day flow).
29
+ - **Stop** at a node with `wallet_type: cex` (the trail goes off-chain; report exchange and time), at a `dex` router (a swap, not a destination), after depth 3, or after about 10 wallets. Unlabelled, high-volume nodes at depth 1-2 are the leads.
30
+ - Only transfers priced at or above `min_usd` count; a `value_usd` of 0 is UNPRICED, not worthless, and an unpriced token never shows in the graph. Say so if the loss was in an obscure token.
31
+ - `max_depth_reached` below `depth` = nothing above the floor beyond that hop, or the server's expansion cap cut the graph; you cannot tell which.
32
+ - `wallet txs` gives what the graph cannot: `tx_hash`, `time`, `token_address`, `value_usd`, `block` for each transfer. Quote hashes, not just totals.
33
+ - `exchange-usage` on an endpoint lists the exchanges it sent to with USD and shares; `pattern: "sweeps_to_single_cex"` is an observed pattern, not proof of a deposit address.
34
+
35
+ ## Watch the trail live
36
+
37
+ ```bash
38
+ # every transfer touching the root or its first hops (either side), pools and routers left out
39
+ vike-data stream onchain --channel chain.transfers --filter chain=eth --filter wallet=0xeae7380dd4cef6fbd1144f49e4d1e6964258a4f4,<hop1> --filter contract=false
40
+ ```
41
+
42
+ - The stream spells the chain `eth`, not `ethereum`. Events arrive in bursts about 3 minutes after the block.
43
+ - **Never put `min_usd` on `chain.transfers`**: transfers are priced after they are streamed, so it drops almost every event. For one token use `--filter token=0x... --filter min_amount=<whole tokens>`.
44
+ - `contract=false` drops a transfer when either side is a known contract; no mark does not mean "not a contract".
45
+ - For a stored rule instead of a running process: `vike-data alerts create --label "Exploiter out" --chain eth --address $ADDR --address-role from --min-usd 10000 --channel email` (see `vike-alerts-setup`). Keep a `--min-usd`: an address alert notifies on EVERY matching transfer (no cooldown, no daily cap), and without a floor that includes dust and unpriced spam tokens. With it, only transfers that already carry a USD value match, so an unpriced token never fires.
46
+
47
+ ## Answer template
48
+
49
+ > Root `<0x...>` (`<label or unlabelled>`). In the last `<window>` it sent `$X` to `N` counterparties; the largest: `<0x...>` `$A` (`<label>`), `<0x...>` `$B`. Trail: `<root> -> <hop 1> -> <exchange>` (last transfer `<time>`, tx `<hash>`). Unlabelled endpoints: `<list>`. Evidence from on-chain transfers above `$floor`; nothing below it or unpriced is included.
50
+
51
+ ## Anti-patterns
52
+
53
+ - Don't continue past a CEX or call a deposit address a person.
54
+ - Don't trace at `min_usd` 0: dust edges bury the path.
55
+ - Don't present the trace as proof of intent or ownership.
56
+
57
+ ## Pairs well with
58
+
59
+ - `vike-wallet-who-is` on each endpoint, `vike-wallets-related` to test whether two endpoints are one entity
60
+ - `vike-wallet-trace` (parameters), `vike-wallet-transactions` (filters), `vike-stream` (the live feed)
@@ -0,0 +1,48 @@
1
+ ---
2
+ name: vike-hl-asset-briefing
3
+ description: One-page briefing on a single Hyperliquid symbol - price, Hyperliquid funding and open interest by the hour, funding and open interest on the other venues, how the size and PnL cohorts are positioned, where liquidations cluster, large fills and where resting orders stack. Use when the user asks "brief me on ETH on Hyperliquid" / "what is going on with SOL perps" / "positioning, funding and liquidations for BTC" / "is HYPE crowded".
4
+ allowed-tools: Bash(vike-data:*)
5
+ ---
6
+
7
+ # vike-hl-asset-briefing
8
+
9
+ About eight calls for ONE symbol, 1 credit each. Every section is skippable if the user asked something narrower. Symbols are upper case; a HIP-3 market is `dex:TICKER`.
10
+
11
+ ## Chain
12
+
13
+ ```bash
14
+ S=ETH
15
+ vike-data candles hl $S --interval 1h --limit 24 --json # price: 24 hourly bars
16
+ vike-data hl market --view hourly --symbols $S --days 7 --json # Hyperliquid close, open interest, funding rate, premium per hour
17
+ vike-data perp funding --symbol $S --json # funding on every venue now (normalise it yourself)
18
+ vike-data call perp_open_interest --args '{"symbol":"ETH"}' # open interest per venue, USD notional (no command of its own)
19
+ vike-data hl cohort-metrics $S --axis size --hours 1 --json # whales' long/short
20
+ vike-data hl cohort-metrics $S --axis pnl --hours 1 --json # profitable vs losing wallets
21
+ vike-data hl liquidations --view heatmap --symbol $S --bins 20 --json # where liquidations would cluster
22
+ vike-data hl market --view large_fills --symbol $S --json # the newest fills of $50k+ (at most 200)
23
+ ```
24
+
25
+ Optional: `hl orders --view clusters --symbol $S` (standing orders bucketed around the mid, `--range-pct`, `--step-bps`), `hl market --view size_breakdown --symbol $S` (position-size tiers with `value_close_to_liquidation`), `hl liquidations --view fills --symbol $S --limit 20` (the latest liquidations).
26
+
27
+ ## Reading each section
28
+
29
+ - **Price**: candles of `ts` (epoch ms), `open..close`, `volume_usd`. The hourly panel gives the same closes beside funding and open interest, so a funding or OI change can be read against the price move of the same hour.
30
+ - **Funding**: raw `funding_rate` per interval, and `interval_h` differs (Hyperliquid 1h, most CEXs 8h): `daily_pct = funding_rate x (24 / interval_h) x 100`. Positive = longs pay shorts. Halted or silent venues are left out of the per-symbol list.
31
+ - **Open interest**: `oi_usd` is USD notional (contracts x mark price), so it moves with price even when nobody opens or closes. Venues in `stale_venues` are not in `venues` and never in a total.
32
+ - **Cohorts**: `bias` is a fraction -1..+1 of notional; group rungs by summing notional (see `vike-hl-cohort-positioning`); check `position_count` before calling a rung's lean meaningful. Labels are today's.
33
+ - **Liquidation heatmap**: bins are equal-width over +-50% of `mark_price`; `liquidation_value_usd` is open notional whose liquidation price falls in the bin, with `long_value_usd` / `short_value_usd` and `most_impacted_cohort`. `coverage.in_window_fraction_of_open` is the share of open notional the map covers: positions outside the window or without a liquidation price are dropped, so clusters are a floor. Long liquidations sit BELOW the mark, short ones above.
34
+ - **Large fills**: the newest 200 fills of $50k+ the feed holds for the symbol, newest first; on a busy symbol they may reach back only minutes. Quote `covered_from` (how far back the answer reaches) and `truncated` (true = older fills may have been cut), never "today". `--min-usd` raises the floor.
35
+
36
+ ## Answer template
37
+
38
+ > `<S>` on Hyperliquid: price `<p>` (`<24h change>`). Funding `<daily %>` on Hyperliquid (`<7d range>`) vs `<range>` on `<n>` other venues. OI `$X` on Hyperliquid, `$Y` across `<k>` venues. Whales `<bias_g>`, profitable wallets `<bias>`, losing wallets `<bias>` (labels as of today). Nearest liquidation cluster `<side>` `$V` around `<price range>` (`<coverage>` of open notional mapped). Largest fill since `<covered_from>`: `<side> $F` by `<wallet>`.
39
+
40
+ ## Anti-patterns
41
+
42
+ - Don't call a funding spread "free money" and don't average funding across venues with different intervals.
43
+ - Don't read an OI change in USD as new positions without taking out the price move (see `vike-perp-crowding`).
44
+ - Don't run `hl market --view positions` here without `--symbol`.
45
+
46
+ ## Pairs well with
47
+
48
+ - `vike-hl-cohort-positioning`, `vike-hl-liquidation-radar`, `vike-perp-funding`, `vike-perp-crowding`, `vike-candles`