@vike-io/cli 0.14.0 → 0.16.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 +30 -0
- package/README.md +32 -14
- package/package.json +4 -4
- package/skills/vike/SKILL.md +75 -37
- package/skills/vike-alerts-setup/SKILL.md +42 -10
- package/skills/vike-alerts-webhook/SKILL.md +18 -10
- package/skills/vike-candles/SKILL.md +10 -2
- package/skills/vike-core/SKILL.md +6 -3
- package/skills/vike-daily-brief/SKILL.md +68 -0
- package/skills/vike-follow-the-money/SKILL.md +60 -0
- package/skills/vike-hl-asset-briefing/SKILL.md +48 -0
- package/skills/vike-hl-builder-intel/SKILL.md +39 -0
- package/skills/vike-hl-cohort-backtest/SKILL.md +61 -0
- package/skills/vike-hl-cohort-positioning/SKILL.md +58 -0
- package/skills/vike-hl-liquidation-radar/SKILL.md +49 -0
- package/skills/vike-hl-position-match/SKILL.md +4 -3
- package/skills/vike-hl-top-traders/SKILL.md +22 -9
- package/skills/vike-hl-trader-profile/SKILL.md +65 -0
- package/skills/vike-perp-crowding/SKILL.md +49 -0
- package/skills/vike-perp-funding/SKILL.md +4 -1
- package/skills/vike-perp-overview/SKILL.md +23 -3
- package/skills/vike-pm-l2-archive/SKILL.md +50 -0
- package/skills/vike-pm-market-diligence/SKILL.md +60 -0
- package/skills/vike-polymarket-market-detail/SKILL.md +20 -15
- package/skills/vike-polymarket-markets/SKILL.md +2 -1
- package/skills/vike-polymarket-smart-money/SKILL.md +1 -0
- package/skills/vike-polymarket-trader/SKILL.md +2 -1
- package/skills/vike-smart-money-discovery/SKILL.md +4 -3
- package/skills/vike-stream/SKILL.md +99 -0
- package/skills/vike-token-holder-diligence/SKILL.md +58 -0
- package/skills/vike-token-holders/SKILL.md +6 -4
- package/skills/vike-token-research/SKILL.md +6 -6
- package/skills/vike-token-screener/SKILL.md +3 -3
- package/skills/vike-token-search/SKILL.md +2 -1
- package/skills/vike-token-smart-money-trend/SKILL.md +57 -0
- package/skills/vike-token-transfers/SKILL.md +8 -6
- package/skills/vike-wallet-balances/SKILL.md +9 -7
- package/skills/vike-wallet-batch/SKILL.md +3 -3
- package/skills/vike-wallet-compare/SKILL.md +2 -2
- package/skills/vike-wallet-counterparties/SKILL.md +2 -2
- package/skills/vike-wallet-discover/SKILL.md +3 -1
- package/skills/vike-wallet-ens/SKILL.md +2 -2
- package/skills/vike-wallet-label-provenance/SKILL.md +5 -4
- package/skills/vike-wallet-pnl-history/SKILL.md +2 -2
- package/skills/vike-wallet-portfolio/SKILL.md +10 -8
- package/skills/vike-wallet-summary/SKILL.md +6 -6
- package/skills/vike-wallet-trace/SKILL.md +4 -3
- package/skills/vike-wallet-transactions/SKILL.md +2 -2
- package/skills/vike-wallet-who-is/SKILL.md +50 -0
- package/skills/vike-wallets-related/SKILL.md +52 -0
- package/skills.sh.json +34 -12
- package/src/commands/alerts.js +85 -15
- package/src/commands/call.js +32 -0
- package/src/commands/candles.js +11 -15
- package/src/commands/doctor.js +4 -4
- package/src/commands/hl.js +274 -0
- package/src/commands/perp.js +5 -5
- package/src/commands/polymarket.js +105 -5
- package/src/commands/search.js +10 -0
- package/src/commands/stream.js +308 -0
- package/src/commands/token.js +2 -0
- package/src/commands/tool-command.js +27 -0
- package/src/commands/wallet.js +21 -0
- package/src/index.js +10 -1
- package/src/mcp-client.js +37 -16
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,35 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.16.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 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.
|
|
8
|
+
|
|
9
|
+
- 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).
|
|
10
|
+
- 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).
|
|
11
|
+
- 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`.
|
|
12
|
+
- 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`.
|
|
13
|
+
- 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.
|
|
14
|
+
|
|
15
|
+
## 0.15.0
|
|
16
|
+
|
|
17
|
+
### Minor Changes
|
|
18
|
+
|
|
19
|
+
- 531c0c8: Every MCP tool is reachable, and the event streams are too.
|
|
20
|
+
|
|
21
|
+
- `vike-data call <tool> --args '{json}'` (or `--args-file`, `--timeout`) calls any MCP tool by name and prints its raw result, so integers above 2^53 stay exact.
|
|
22
|
+
- A tool that refuses its input now exits 1 in every output mode; before, `--json` and piped output exited 0 with `{"error": ...}` on stdout.
|
|
23
|
+
- `vike-data stream <hl|hl-cohorts|onchain|polymarket> --channel ... [--filter key=value] [--cursor c]` reads `wss://stream.vike.io/v1/stream/<path>`: the key goes in the `X-API-KEY` header, every ping is answered, `event` and `gap` frames print as NDJSON, and after any drop it reconnects from the last cursor of each subscription. It exits 1, without reconnecting, on `replaced (4410)` (another program took the key's connection), on `HTTP 401` / `4401`, and on a refused subscription. The CLI keeps no channel list: the server decides what each path serves, including the live candles (`stream hl --channel hl.candles --filter coin=BTC --filter interval=1m`) that replace `wss://data.vike.io/v1/stream`. `--filter` sends `true` / `false` as a yes/no. A replay the server cannot read (`catchup_unavailable`) is retried after 1, 2, 4, 8 and 15 s, then the subscription continues from now and names the skipped window; a reconnect after an open connection waits 1 s; a full stdout pauses the socket (pings are still answered); a closed pipe (`| head`) ends with exit 0. New dependency: `ws`.
|
|
24
|
+
- `vike-data stream info`, `stream check <channel>` (the server's own validator, exit 1 when it refuses), `stream events <channel>` (stored events, 3 days) and `stream connections` (your recent connections) use the stream's MCP tools and open no socket.
|
|
25
|
+
- `vike-data search <q>`: the vike.io search over tokens, wallets and entities, Hyperliquid traders, vaults and builders, Polymarket wallets and markets.
|
|
26
|
+
- `vike-data hl`: `cohort-metrics`, `segments`, `wallet`, `wallet-activity`, `wallet-trades`, `leaderboard`, `liquidations`, `market` (with the `hourly` panel), `orders`, `twaps`, `ledger`, `leverage-changes`, `stats`, `hype-holders`, `builders`, `vaults`, `vault`, `archive`; a tool with several views takes `--view`.
|
|
27
|
+
- `polymarket markets` takes `--view search --query ...` and `--view market --condition-id ...`; `token transfers` takes `--hide-contracts`; `candles hl` takes `--view export` and `--view latest` (the newest bar of every symbol; no symbol, window or limit is sent with it), and sends only the flags given; `perp top-traders --size` now defaults to 20 (max 100) and `perp find-position --limit` to 50 (max 500), as the server tools do, and `--sort` lists `account_value`, `long_pnl`, `short_pnl`. 68 of the server's 70 MCP tools now have a command; `perp_open_interest` and `perp_long_short` are reached with `call`.
|
|
28
|
+
- `vike-data polymarket`: `market-trades`, `tape`, `orderbook`, `market-stats`, `settlement`, `settlements`, `archive`, `leaderboard`. `vike-data wallet`: `first-funder`, `exchange-usage`.
|
|
29
|
+
- `vike-data alerts`: `events`, `resend`, `rotate-secret`, `test-webhook`; `create` and `edit` take `--type` (transfer and the five Hyperliquid types), `--address` / `--address-role`, `--wallet`, `--actions`, `--pnl-cohorts`, `--size-cohorts`, `--index`, `--threshold`, `--band`, `--direction`. `--chain` takes eth, bsc, base or hyperevm and no longer defaults to eth on the client (a Hyperliquid alert refuses a chain; the server still defaults a transfer alert to eth). Discord is gone from `--channel`: the server refuses it.
|
|
30
|
+
- `vike-data whoami` is registered. `doctor` checks Node >= 22.12.0, the `engines` floor. The User-Agent carries the installed version (it said `vike-cli/dev` outside `npm run`) and is sent on `tools/list` and `initialize` too. The `sync-schema` npm script, whose file never existed, is gone.
|
|
31
|
+
- Skills: a new `vike-stream` skill (32 in all); the umbrella routes the new commands, streams and `call`, and no longer tells agents to deny WebSockets, per-address alerts or a per-wallet Hyperliquid tool; the alert skills cover the Hyperliquid types, address alerts, four chains and no Discord; the webhook check accepts either signature during a secret rotation.
|
|
32
|
+
|
|
3
33
|
## 0.14.0
|
|
4
34
|
|
|
5
35
|
### 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
|
|
16
|
-
|
|
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
|
|
@@ -55,7 +55,8 @@ The key is read from `VIKE_API_KEY` first, then from `~/.vike/config.json`
|
|
|
55
55
|
| **Polymarket up/down families** (archive) | The same archive cut per market family, `asset=btc/tenor=5m` and so on, with an `asset=other/tenor=other` catch-all | free key | [polymarket-updown-markets](https://vike.io/data/polymarket-updown-markets) |
|
|
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
|
-
| **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
|
|
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
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) |
|
|
60
61
|
|
|
61
62
|
Direct links that need no key:
|
|
@@ -137,21 +138,34 @@ Every data command is one `tools/call` to the MCP server. `vike-data <group> --h
|
|
|
137
138
|
|
|
138
139
|
| Command | Subcommands | MCP tool |
|
|
139
140
|
|---|---|---|
|
|
140
|
-
| `vike-data token` | `search`, `transfers`, `screener`, `holders` (`--chain ethereum\|bsc\|base`) | `token_search`, `token_transfers`, `token_screener`, `token_holders` |
|
|
141
|
-
| `vike-data wallet` | `summary`, `transactions` (`txs`), `compare`, `trace`, `batch`, `counterparties`, `pnl-history`, `balances`, `ens`, `discover` | `wallet_summary`, `wallet_transactions`, `wallet_compare`, `wallet_trace`, `wallet_batch_labels`, `wallet_counterparties`, `wallet_pnl_history`, `wallet_token_balances`, `wallet_ens`, `wallet_discover` |
|
|
141
|
+
| `vike-data token` | `search`, `transfers`, `screener`, `holders` (`--chain ethereum\|bsc\|base\|hyperevm`) | `token_search`, `token_transfers`, `token_screener`, `token_holders` |
|
|
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` |
|
|
142
143
|
| `vike-data labels <address>` | multi-source label provenance for one wallet | `wallet_label_provenance` |
|
|
143
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` |
|
|
144
|
-
| `vike-data
|
|
145
|
-
| `vike-data
|
|
146
|
-
| `vike-data
|
|
147
|
-
|
|
|
148
|
-
|
|
149
|
-
|
|
145
|
+
| `vike-data hl` | `cohort-metrics <symbol>`, `segments`, `wallet <address>`, `wallet-activity <address>`, `wallet-trades <address>`, `leaderboard`, `liquidations`, `market`, `orders`, `twaps`, `ledger`, `leverage-changes`, `stats`, `hype-holders`, `builders`, `vaults`, `vault <vault>`, `archive`; a tool with several views takes `--view` | `hl_cohort_metrics`, `hl_segments`, `hl_wallet`, `hl_wallet_activity`, `hl_wallet_trades`, `hl_leaderboard`, `hl_liquidations`, `hl_market`, `hl_orders`, `hl_twaps`, `hl_ledger`, `hl_leverage_changes`, `hl_stats`, `hl_hype_holders`, `hl_builders`, `hl_vaults`, `hl_vault`, `hl_archive` |
|
|
146
|
+
| `vike-data candles` | `hl <symbol>` (Hyperliquid perp or spot, from executed fills; `--view export`, or `--view latest` for the newest bar of every symbol), `polymarket <token_id>` (one outcome token); live bars: `stream hl --channel hl.candles` | `hl_ohlcv`, `polymarket_ohlcv` |
|
|
147
|
+
| `vike-data polymarket` (`pm`) | `markets`, `market <condition_id>`, `wallet <address>`, `smart-money`, `leaderboard`, `market-trades <condition_id>`, `tape`, `orderbook <token_id>`, `market-stats <token_id>`, `settlement <condition_id>`, `settlements`, `archive` | `polymarket_markets`, `polymarket_market_detail`, `polymarket_wallet`, `polymarket_smart_money`, `polymarket_leaderboard`, `polymarket_market_trades`, `polymarket_tape`, `polymarket_orderbook`, `polymarket_market_stats`, `polymarket_settlement`, `polymarket_settlements_bulk`, `polymarket_archive` |
|
|
148
|
+
| `vike-data alerts` | `list`, `channels`, `create`, `edit`, `delete`, `events`, `resend`, `register-webhook`, `test-webhook`, `rotate-secret`: transfer alerts (a token or one wallet, on eth, bsc, base, hyperevm) and Hyperliquid alerts (`--type hl_wallet`, `hl_cohort_fill`, `hl_liquidation`, `hl_cohort_bias`, `hl_liq_proximity`), by email or an HTTPS webhook, HMAC-signed | `alerts_*` |
|
|
149
|
+
| `vike-data stream <path>` | live events from `wss://stream.vike.io/v1/stream/<path>` (`hl`, `hl-cohorts`, `onchain`, `polymarket`) as NDJSON: `--channel` (one or more), `--filter key=value`, `--cursor` | WebSocket, not MCP |
|
|
150
|
+
| `vike-data stream` | `info`, `check <channel>` (the server's validator), `events <channel>` (stored events, 3 days), `connections` (yours) | `stream_info`, `stream_check_filter`, `stream_events`, `stream_connections` |
|
|
151
|
+
| `vike-data search <q>` | tokens, wallets and entities, HL traders, vaults, builders, Polymarket wallets and markets by name, symbol, address or ENS name | `search` |
|
|
152
|
+
| `vike-data call <tool>` | any MCP tool by name: `--args '{json}'` or `--args-file`, `--timeout`; prints the raw result | any |
|
|
153
|
+
| setup | `init`, `login`, `logout`, `whoami`, `doctor`, `schema`, `install` | — |
|
|
154
|
+
|
|
155
|
+
Output is a table on a terminal and JSON with `--json` or whenever stdout is piped. A tool that refuses its input
|
|
156
|
+
exits 1 in every mode:
|
|
150
157
|
|
|
151
158
|
```bash
|
|
152
159
|
vike-data token search BTC --json | jq '.'
|
|
160
|
+
vike-data call hl_wallet --args '{"address":"0x...","view":"trades_summary","window":"30d"}'
|
|
161
|
+
vike-data stream hl --channel hl.fills --filter coin=BTC --filter min_usd=100000
|
|
153
162
|
```
|
|
154
163
|
|
|
164
|
+
`vike-data stream` answers the server's pings, prints `event` and `gap` frames as they arrive (status on stderr), and
|
|
165
|
+
after any drop reconnects from the last cursor of each subscription. On each path one key holds one connection: a
|
|
166
|
+
second program on the same key takes over, and the first exits with `replaced (4410)` instead of reconnecting. Give
|
|
167
|
+
each program its own key.
|
|
168
|
+
|
|
155
169
|
## Examples
|
|
156
170
|
|
|
157
171
|
[`examples/`](examples/) holds three Python scripts. Each declares its dependencies inline, so
|
|
@@ -173,10 +187,14 @@ Downloads go to `./vike-archive/`.
|
|
|
173
187
|
|
|
174
188
|
## For AI agents
|
|
175
189
|
|
|
176
|
-
This package ships **
|
|
190
|
+
This package ships **47 skill playbooks** under [`skills/`](skills/): markdown files an AI coding
|
|
177
191
|
agent loads so it knows when and how to call each command. [`skills.sh.json`](skills.sh.json) groups
|
|
178
|
-
them by domain (Tokens, Wallets, CEX perps, Hyperliquid perps, Candles, Polymarket, Alerts). The
|
|
179
|
-
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.
|
|
180
198
|
|
|
181
199
|
```bash
|
|
182
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.
|
|
6
|
+
"version": "0.16.0",
|
|
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",
|
|
@@ -28,8 +28,7 @@
|
|
|
28
28
|
"lint:fix": "eslint . --fix",
|
|
29
29
|
"changeset": "changeset",
|
|
30
30
|
"changeset:version": "changeset version",
|
|
31
|
-
"changeset:publish": "changeset publish"
|
|
32
|
-
"sync-schema": "node scripts/sync-schema.js"
|
|
31
|
+
"changeset:publish": "changeset publish"
|
|
33
32
|
},
|
|
34
33
|
"keywords": [
|
|
35
34
|
"vike",
|
|
@@ -68,7 +67,8 @@
|
|
|
68
67
|
"node": ">=22.12.0"
|
|
69
68
|
},
|
|
70
69
|
"dependencies": {
|
|
71
|
-
"commander": "^15.0.0"
|
|
70
|
+
"commander": "^15.0.0",
|
|
71
|
+
"ws": "^8.22.1"
|
|
72
72
|
},
|
|
73
73
|
"devDependencies": {
|
|
74
74
|
"@changesets/cli": "^3.0.3",
|
package/skills/vike/SKILL.md
CHANGED
|
@@ -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
|
|
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>`
|
|
@@ -25,12 +25,12 @@ Hard rules — agents that violate these produce wrong answers. Read once, apply
|
|
|
25
25
|
1. **Addresses are always full 0x-hex (42 chars).** Never truncate when querying. Never display truncated when the user asks for the address — they'll copy-paste it.
|
|
26
26
|
2. **Perp and Hyperliquid symbols are upper-cased by the server.** Echo back what the user wrote.
|
|
27
27
|
3. **Windows are counted in UTC calendar days, not a rolling 24 hours.** On the token screener `24h` spans yesterday and today; on Hyperliquid `30d` is today plus the previous 30 days.
|
|
28
|
-
4. **Page sizes are small and differ per tool;
|
|
29
|
-
5. **Refresh differs per tool; never promise "minutes".** `wallet_discover` and `wallet_summary` are rebuilt nightly, so a wallet active an hour ago may not show. Transfers are synced block by block. `hl_position_match` only matches positions seen within 15 minutes of the newest snapshot batch.
|
|
28
|
+
4. **Page sizes are small and differ per tool; these have no paging.** Max 20: `wallet_discover` (`size`), `polymarket_smart_money`. Max 30: `polymarket_markets`. Max 50: `token_holders`, `wallet_counterparties`, `wallet_compare`. Max 100: `token_screener`, `hl_perp_top_traders` (`size`), and 100 addresses for `wallet_batch_labels`. Max 500: `wallet_transactions`, `hl_position_match`. `token_transfers` has no limit: it always returns 10 rows. To go deeper, narrow the filter or the window instead of asking for more rows. The `hl` commands, `polymarket market-trades`, `tape`, `settlements` and `alerts events` DO page: pass the answer's next cursor back with `--cursor`.
|
|
29
|
+
5. **Refresh differs per tool; never promise "minutes".** `wallet_discover` and `wallet_summary` are rebuilt nightly, so a wallet active an hour ago may not show. Transfers are synced block by block. `hl_position_match` only matches positions seen within 15 minutes of the newest snapshot batch. For events as they happen use `vike-data stream` (`vike-stream`).
|
|
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. **`
|
|
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
|
-
|
|
|
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,32 +97,50 @@ 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
|
-
|
|
|
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
|
-
|
|
|
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 |
|
|
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 |
|
|
112
|
+
| A name, symbol, address, ENS name or polymarket.com link → what it is | `vike-data search <q>` / `search` | this skill |
|
|
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` |
|
|
99
114
|
| Trending Polymarket markets (by 24h volume) | `vike-data polymarket markets` / `polymarket_markets` | `vike-polymarket-markets` |
|
|
100
115
|
| One Polymarket market | `vike-data polymarket market <condition_id>` / `polymarket_market_detail` | `vike-polymarket-market-detail` |
|
|
101
116
|
| One Polymarket trader | `vike-data polymarket wallet` / `polymarket_wallet` | `vike-polymarket-trader` |
|
|
102
117
|
| Polymarket smart-money flows / mispricings / overview | `vike-data polymarket smart-money` / `polymarket_smart_money` | `vike-polymarket-smart-money` |
|
|
103
|
-
|
|
|
104
|
-
|
|
|
118
|
+
| Polymarket wallet leaderboard | `vike-data polymarket leaderboard` / `polymarket_leaderboard` | 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` |
|
|
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 |
|
|
124
|
+
| Alerts: create / list / edit / delete / events (transfer and Hyperliquid) | `vike-data alerts ...` / `alerts_*` | `vike-alerts-setup` |
|
|
125
|
+
| Alert delivery to an HTTPS webhook | `vike-data alerts register-webhook`, `test-webhook`, `rotate-secret` | `vike-alerts-webhook` |
|
|
126
|
+
| 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` |
|
|
127
|
+
| A tool with no command of its own | `vike-data call <tool> --args '{...}'` | this skill |
|
|
105
128
|
| Install, auth, errors, conventions | — | `vike-core` |
|
|
106
129
|
|
|
107
130
|
**When in doubt, start with `vike-data token search` or `vike-data wallet summary`.** Both are cheap and disambiguate what the user actually meant.
|
|
108
131
|
|
|
109
132
|
### Example query routing
|
|
110
133
|
```
|
|
111
|
-
"Who bought the most PEPE in the last 24h?" → token_search, then token_transfers (tab=bought, period=24h;
|
|
134
|
+
"Who bought the most PEPE in the last 24h?" → token_search, then token_transfers (tab=bought, period=24h; the top 10 net buyers)
|
|
112
135
|
"What is 0xd8dA6BF...AbA96 holding?" → wallet_token_balances (+ wallet_summary for flows)
|
|
113
136
|
"Funding rate for BTC across all perp venues" → perp_funding (symbol=BTC; raw per-interval rates)
|
|
114
137
|
"Which venue pays the most funding on ETH?" → perp_funding (symbol=ETH, normalise to daily yourself)
|
|
115
138
|
"Biggest HL perp PnL last week" → hl_perp_top_traders (window=7d, sort=pnl)
|
|
116
139
|
"What are the hottest crypto prediction markets?" → polymarket_markets (category=Crypto) → polymarket_market_detail
|
|
117
140
|
"Why is 0x28C6... labeled 'Binance hot wallet'?" → wallet_label_provenance (address=0x28C6...)
|
|
118
|
-
"What is the ENS name of 0xd8dA6BF...?" → wallet_ens (address=0xd8dA...; name → address is
|
|
141
|
+
"What is the ENS name of 0xd8dA6BF...?" → wallet_ens (address=0xd8dA...; name → address is `search`)
|
|
119
142
|
"Alert me on WBTC transfers over $1M" → alerts_create (token_symbol=WBTC, min_value_usd=1000000; fires on ANY such transfer)
|
|
120
|
-
"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)
|
|
121
144
|
```
|
|
122
145
|
|
|
123
146
|
---
|
|
@@ -132,7 +155,12 @@ vike-data wallet summary 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 --json
|
|
|
132
155
|
vike-data perp funding --symbol BTC --json
|
|
133
156
|
```
|
|
134
157
|
|
|
135
|
-
|
|
158
|
+
Any MCP tool, including one with no command of its own, is one `call` away; it prints the tool's raw JSON and exits 1 when the tool refuses the input:
|
|
159
|
+
```bash
|
|
160
|
+
vike-data call hl_wallet --args '{"address":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","view":"summary"}'
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**B) Via an MCP connector (recommended when your client has one).** All 70 tools live at `https://data.vike.io/mcp`. Connect the client to that address with the `X-API-KEY` header above, then call a tool by name with its arguments, for example `wallet_summary` with `address` set to a full 0x address.
|
|
136
164
|
|
|
137
165
|
Run `vike-data schema --pretty` (or call MCP `tools/list`) to see the live arg shape for every tool. Always read the schema before constructing arguments — defaults and enum values change.
|
|
138
166
|
|
|
@@ -144,67 +172,79 @@ Run `vike-data schema --pretty` (or call MCP `tools/list`) to see the live arg s
|
|
|
144
172
|
| Tool | Returns | Not |
|
|
145
173
|
|---|---|---|
|
|
146
174
|
| `token_search` | symbol, name, address, logo for a query | no market cap |
|
|
147
|
-
| `token_transfers` | 10
|
|
148
|
-
| `token_holders` | wallets ranked by cumulative net inflow USD, with entity/type | not
|
|
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 |
|
|
149
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 |
|
|
150
178
|
|
|
151
179
|
### Wallets
|
|
152
180
|
| Tool | Returns | Not |
|
|
153
181
|
|---|---|---|
|
|
154
|
-
| `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
|
|
155
|
-
| `wallet_discover` | `{wallets, total}` ranked by volume / inflow / outflow / net_flow / tx_count / pnl (`size` ≤ 20
|
|
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 |
|
|
156
184
|
| `wallet_transactions` | single transfers, newest first | no aggregates |
|
|
157
185
|
| `wallet_compare` | shared counterparties + shared tokens of exactly two wallets | not 3+ wallets |
|
|
158
|
-
| `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 |
|
|
159
187
|
| `wallet_counterparties` | top partners with sent/received USD and labels | |
|
|
160
188
|
| `wallet_pnl_history` | daily net inflow USD (a proxy) | not realized PnL |
|
|
161
|
-
| `wallet_token_balances` | holdings read from the chain at request time
|
|
162
|
-
| `wallet_ens` | name for an address, or `null` | no name → address |
|
|
163
|
-
| `wallet_batch_labels` | entity, type, risk flag + 30-day flow fields per address, in input order
|
|
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 |
|
|
164
193
|
|
|
165
|
-
Chains:
|
|
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.
|
|
166
195
|
|
|
167
196
|
### Labels
|
|
168
|
-
`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.
|
|
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.
|
|
169
198
|
|
|
170
199
|
### CEX perps
|
|
171
200
|
| Tool | Returns |
|
|
172
201
|
|---|---|
|
|
173
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`) |
|
|
174
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 |
|
|
175
206
|
|
|
176
|
-
|
|
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.
|
|
177
208
|
|
|
178
209
|
### Hyperliquid
|
|
179
210
|
| Tool | Returns |
|
|
180
211
|
|---|---|
|
|
181
|
-
| `hl_perp_top_traders` | up to
|
|
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 |
|
|
182
213
|
| `hl_position_match` | wallets whose open position matches a share card (`symbol`, side, leverage, entry) |
|
|
183
214
|
| `hl_ohlcv` | perp or spot candles |
|
|
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
|
+
| `hl_wallet_activity` (`hl wallet-activity`) | one wallet's fills, funding, ledger or builder routing, newest first, paged with `--cursor` |
|
|
217
|
+
| `hl_cohort_metrics` (`hl cohort-metrics <symbol>`) | hourly long/short notional per cohort of one symbol; `bias` is a fraction -1..+1. For a backtest pass `--label-basis point_in_time` |
|
|
218
|
+
| `hl_segments` (`hl segments`) | the cohort labels (`--view cohorts`), one cohort now (`summary`), the symbol x cohort board (`heatmap`), one cohort hour by hour (`history`) |
|
|
219
|
+
| `hl_leaderboard` (`hl leaderboard`) | traders on 20 metrics; `--min-win-rate` is a FRACTION here (0.6), a percent in `perp top-traders` |
|
|
220
|
+
| `hl_liquidations`, `hl_market`, `hl_builders`, `hl_vaults`, `hl_vault` | liquidations / risk / heatmap; open interest, symbol series, positions, indices, large fills, an hourly panel of up to 64 symbols; builder codes; vaults |
|
|
221
|
+
| `hl_orders`, `hl_twaps`, `hl_ledger`, `hl_leverage_changes` | resting orders at one instant, one wallet's orders, order clusters; the cross-wallet feeds (follow one with `--order asc` and each `nextCursor`, stop on an empty page) |
|
|
222
|
+
| `hl_wallet_trades`, `hl_stats`, `hl_hype_holders`, `hl_archive` | one wallet's closed trades; hourly venue equity / open interest / volume; HYPE holders; the daily fills and positions Parquet files (`--view url` = a 7-day link) |
|
|
184
223
|
|
|
185
|
-
|
|
224
|
+
Every `hl` command takes `--view` (the first view is the default) and only the flags that view uses: a flag the view does not take is refused by name, not ignored.
|
|
186
225
|
|
|
187
226
|
### Candles
|
|
188
|
-
`hl_ohlcv` (Hyperliquid perp or spot, 1m–1d, built from HL's own fills, also HIP-3 builder DEXs) and `polymarket_ohlcv` (ONE outcome token, price = probability 0–1, needs a `token_id`, not a condition_id). There is no candle source for CEX tickers or an arbitrary ERC-20.
|
|
227
|
+
`hl_ohlcv` (Hyperliquid perp or spot, 1m–1d, built from HL's own fills, also HIP-3 builder DEXs) and `polymarket_ohlcv` (ONE outcome token, price = probability 0–1, needs a `token_id`, not a condition_id). `candles hl --view latest` is the newest 1-minute bar of every symbol; live closed bars come from `vike-data stream hl --channel hl.candles --filter coin=BTC --filter interval=1m`. There is no candle source for CEX tickers or an arbitrary ERC-20.
|
|
189
228
|
|
|
190
229
|
### Polymarket
|
|
191
230
|
| Tool | Returns |
|
|
192
231
|
|---|---|
|
|
193
232
|
| `polymarket_markets` | markets ranked by 24h volume only (`volume_24h`, `liquidity`, `ended`, `outcomes[]` with `token_id`, `mid`, `bid`, `ask`) |
|
|
194
|
-
| `polymarket_market_detail` | one market:
|
|
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 |
|
|
195
234
|
| `polymarket_wallet` | one trader: realized PnL, volume-weighted `hit_rate`, `resolved_markets`, positions |
|
|
196
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 |
|
|
197
236
|
|
|
198
237
|
### Alerts
|
|
199
|
-
Create + manage on-chain transfer alerts delivered
|
|
238
|
+
Create + manage on-chain transfer alerts and Hyperliquid alerts, delivered by email or an HTTPS webhook.
|
|
200
239
|
|
|
201
240
|
| Tool | Does |
|
|
202
241
|
|---|---|
|
|
203
242
|
| `alerts_list`, `alerts_list_channels` | list rules / enabled channels |
|
|
204
|
-
| `alerts_create`, `alerts_edit`, `alerts_delete` | manage a rule (token
|
|
205
|
-
| `
|
|
243
|
+
| `alerts_create`, `alerts_edit`, `alerts_delete` | manage a rule: transfer (token and/or one `address`, chain `eth`/`bsc`/`base`/`hyperevm`, USD thresholds) or Hyperliquid (`--type hl_wallet`, `hl_cohort_fill`, `hl_liquidation`, `hl_cohort_bias`, `hl_liq_proximity`) |
|
|
244
|
+
| `alerts_events`, `alerts_resend_delivery` | what fired and each delivery's status (15 days); send one again |
|
|
245
|
+
| `alerts_register_webhook`, `alerts_test_webhook`, `alerts_rotate_webhook_secret` | an HTTPS webhook (HMAC-signed deliveries): register, test, rotate its secret |
|
|
206
246
|
|
|
207
|
-
|
|
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`.
|
|
208
248
|
|
|
209
249
|
---
|
|
210
250
|
|
|
@@ -213,7 +253,7 @@ An alert fires on ANY transfer of the token above the USD threshold on that chai
|
|
|
213
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.
|
|
214
254
|
|
|
215
255
|
- **0 credits:** `token_search`, `alerts_list`, `alerts_list_channels`.
|
|
216
|
-
- **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.
|
|
217
257
|
- **2:** most others, `wallet_summary` among them.
|
|
218
258
|
- **3:** `token_screener`, `wallet_compare`, `wallet_token_balances`, `alerts_create`.
|
|
219
259
|
- **4:** `wallet_trace`.
|
|
@@ -222,9 +262,7 @@ Credits are an accounting figure only; they never block a call. The one limit is
|
|
|
222
262
|
|
|
223
263
|
- **No NFT data** — out of scope by design.
|
|
224
264
|
- **No on-chain trading / signing** — read-only platform, no execution.
|
|
225
|
-
- **No
|
|
226
|
-
- **No ENS name → address**, no per-address alerts, no candles for CEX tickers or arbitrary ERC-20 contracts.
|
|
227
|
-
- **No Hyperliquid per-wallet profile, open interest or cohort positioning** through the CLI yet.
|
|
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.
|
|
228
266
|
- **No non-EVM chains** (Bitcoin, Solana, Tron, Monero, Zcash, Dash) and no Arbitrum.
|
|
229
267
|
|
|
230
268
|
If the user asks for any of the above, say so directly rather than proposing a workaround.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vike-alerts-setup
|
|
3
|
-
description: Create, list, edit, and delete on-chain transfer alerts
|
|
3
|
+
description: Create, list, edit, and delete alerts - on-chain transfer alerts (a token, one wallet, USD thresholds; eth, bsc, base, hyperevm) and Hyperliquid alerts (a wallet's fills, cohort fills, liquidations, cohort bias, liquidation proximity) - and read the events they produced. Delivered by email or an HTTPS webhook. Use when the user asks "alert me when X" / "watch for big transfers" / "notify on whale moves" / "tell me when this wallet trades".
|
|
4
4
|
allowed-tools: Bash(vike-data:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -12,7 +12,7 @@ allowed-tools: Bash(vike-data:*)
|
|
|
12
12
|
vike-data alerts channels --json
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
Returns enabled email +
|
|
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
|
|
|
@@ -35,31 +35,63 @@ vike-data alerts create \
|
|
|
35
35
|
--cooldown 60
|
|
36
36
|
```
|
|
37
37
|
|
|
38
|
-
Required: `--label`.
|
|
38
|
+
Required: `--label`. Transfer alerts: `--token`, `--chain eth|bsc|base|hyperevm` (default eth), `--min-usd`, `--max-usd`, `--address 0x...` with `--address-role any|from|to` to watch ONE wallet, `--channel email webhook`.
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# One wallet: every transfer it receives on base (no cooldown, no daily cap)
|
|
42
|
+
vike-data alerts create --label "Treasury in" --chain base \
|
|
43
|
+
--address 0x1111111111111111111111111111111111111111 --address-role to --channel email
|
|
44
|
+
```
|
|
45
|
+
|
|
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
|
+
|
|
48
|
+
| `--type` | Fires on | Flags |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| `hl_wallet` | every fill of one wallet | `--wallet` (required), `--actions open close flip increase reduce`, `--token`, `--min-usd` |
|
|
51
|
+
| `hl_cohort_fill` | fills by wallets in cohorts | `--pnl-cohorts "3x smart" ...` and/or `--size-cohorts "4x whale" ...` (one required), `--min-usd` >= 10000 (required) |
|
|
52
|
+
| `hl_liquidation` | liquidations | optional `--wallet`, cohorts, `--token`, `--min-usd` |
|
|
53
|
+
| `hl_cohort_bias` | a cohort index crossing a level | `--token` and `--index smi\|wsi\|smart_bias\|whale_bias\|smi_wsi_gap` (required), `--threshold`, `--band`, `--direction up\|down\|both` |
|
|
54
|
+
| `hl_liq_proximity` | a wallet getting close to liquidation | `--wallet` (required), `--threshold` (0-1, default 0.8), `--band` |
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
vike-data alerts create --label "BTC smart money flips" --type hl_cohort_bias \
|
|
58
|
+
--token BTC --index smi --threshold 0 --band 0.1 --channel webhook
|
|
59
|
+
```
|
|
39
60
|
|
|
40
61
|
### Edit (partial update — only fields you pass are changed)
|
|
41
62
|
|
|
42
63
|
```bash
|
|
43
64
|
vike-data alerts edit 42 --min-usd 5000000 # raise threshold
|
|
44
65
|
vike-data alerts edit 42 --active false # pause
|
|
45
|
-
vike-data alerts edit 42 --channel email
|
|
66
|
+
vike-data alerts edit 42 --channel email webhook # both channels
|
|
67
|
+
vike-data alerts edit 42 --address '' # drop the wallet condition
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Events (what fired, and each delivery's status, kept 15 days)
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
vike-data alerts events --limit 50 --json # page on with --cursor <next_cursor>
|
|
74
|
+
vike-data alerts events --rule-id 42 --json
|
|
75
|
+
vike-data alerts resend <delivery_id> # send one delivery again
|
|
46
76
|
```
|
|
47
77
|
|
|
48
|
-
### Delete
|
|
78
|
+
### Delete (only when the user explicitly asks)
|
|
49
79
|
|
|
50
80
|
```bash
|
|
51
81
|
vike-data alerts delete 42 # soft-delete (pauses, keeps history)
|
|
52
|
-
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"
|
|
53
83
|
```
|
|
54
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
|
+
|
|
55
87
|
## Notes + gotchas
|
|
56
88
|
|
|
57
|
-
-
|
|
58
|
-
- **
|
|
89
|
+
- Transfer chains: **eth**, **bsc**, **base**, **hyperevm**, one per alert. For several, create several alerts.
|
|
90
|
+
- **A transfer alert watches a token, one wallet, or both.** Without `--address` it fires on ANY transfer of that token on that chain whose USD value crosses the thresholds. With `--address` it fires on every transfer that wallet sent (`from`), received (`to`) or either (`any`); without `--min-usd` that includes dust and unpriced tokens. "Alert me when whale 0xABCD sells" is `--address 0xABCD --address-role from`; on Hyperliquid it is `--type hl_wallet --wallet 0xABCD --actions close reduce`. There are no price or funding alerts, and delivery is email or an HTTPS webhook (Discord is off; no Telegram).
|
|
59
91
|
- Thresholds are in **USD value** of the transfer at fire time, not token quantity.
|
|
60
|
-
- `--cooldown` is
|
|
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.
|
|
61
93
|
- Tokens are matched by symbol (UPPERCASE). For cross-chain symbols like `USDC` that exist on multiple chains, be explicit with `--chain`.
|
|
62
|
-
-
|
|
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.
|
|
63
95
|
|
|
64
96
|
## Confirmation flow with the user
|
|
65
97
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vike-alerts-webhook
|
|
3
|
-
description: Register an HTTPS webhook as an alert delivery channel — get HMAC-signed POST notifications when alerts fire. Use when the user has a server / bot / Slack integration and wants programmatic alert delivery instead of email
|
|
3
|
+
description: Register an HTTPS webhook as an alert delivery channel — get HMAC-signed POST notifications when alerts fire (the only channel for Hyperliquid alerts); test it, rotate its secret, resend a delivery. Use when the user has a server / bot / Slack integration and wants programmatic alert delivery instead of email.
|
|
4
4
|
allowed-tools: Bash(vike-data:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -14,7 +14,7 @@ vike-data alerts register-webhook <https://your-server.com/vike-hook>
|
|
|
14
14
|
[--json]
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
|
|
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
|
|
|
@@ -29,7 +29,14 @@ vike-data alerts register-webhook https://api.mycoolbot.com/vike-alert \
|
|
|
29
29
|
# → { "ok": true, "channel_id": 42, "url_preview": "https://api.myc...", "signed": true }
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
Then create an alert
|
|
32
|
+
Then create an alert with `--channel webhook` (alongside `email` if wanted; a Hyperliquid alert takes the webhook only). Registration sends one signed `test` event at once; the channel id is in `vike-data alerts channels`.
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
vike-data alerts test-webhook <channel_id> # send the signed test event again
|
|
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
|
+
vike-data alerts events --json # what fired, with each delivery's status
|
|
38
|
+
vike-data alerts resend <delivery_id> # send one delivery again (up to 15 days)
|
|
39
|
+
```
|
|
33
40
|
|
|
34
41
|
## What we POST to your URL
|
|
35
42
|
|
|
@@ -49,10 +56,10 @@ X-Vike-Signature: t=1716658923,sig=a3f8b2c...
|
|
|
49
56
|
import hmac, hashlib, time
|
|
50
57
|
|
|
51
58
|
def verify(secret, headers, body):
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
if not ts or not
|
|
59
|
+
ts = headers.get("X-Vike-Timestamp", "")
|
|
60
|
+
# During a secret rotation the header carries TWO sig= values: accept if ANY matches.
|
|
61
|
+
sigs = [p.split("=", 1)[1] for p in headers.get("X-Vike-Signature", "").split(",") if p.startswith("sig=")]
|
|
62
|
+
if not ts or not sigs:
|
|
56
63
|
return False
|
|
57
64
|
# Reject replays older than 5 min
|
|
58
65
|
if abs(time.time() - int(ts)) > 300:
|
|
@@ -60,12 +67,13 @@ def verify(secret, headers, body):
|
|
|
60
67
|
expected = hmac.new(
|
|
61
68
|
secret.encode(), f"{ts}.{body.decode()}".encode(), hashlib.sha256
|
|
62
69
|
).hexdigest()
|
|
63
|
-
return hmac.compare_digest(expected,
|
|
70
|
+
return any(hmac.compare_digest(expected, s) for s in sigs)
|
|
64
71
|
```
|
|
65
72
|
|
|
66
73
|
## Anti-patterns
|
|
67
74
|
|
|
68
|
-
- **Don't**
|
|
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.
|
|
69
77
|
- **Don't** trust the body without verifying the signature. The URL doesn't authenticate the sender; the HMAC does.
|
|
70
78
|
- **Don't** use HTTP (only HTTPS) in production — the body is sensitive.
|
|
71
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).
|
|
@@ -76,7 +84,7 @@ def verify(secret, headers, body):
|
|
|
76
84
|
2. Reject if `X-Vike-Timestamp` is more than ~5 min old (replay protection)
|
|
77
85
|
3. Return `200` quickly; queue work async
|
|
78
86
|
4. Log full body for unsigned-but-suspicious requests
|
|
79
|
-
5. Rotate the secret if you suspect compromise —
|
|
87
|
+
5. Rotate the secret if you suspect compromise — `vike-data alerts rotate-secret <channel_id>`
|
|
80
88
|
|
|
81
89
|
## Pairs well with
|
|
82
90
|
|