@vike-io/cli 0.10.0 → 0.12.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 CHANGED
@@ -1,5 +1,28 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.12.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 6a41844: Remove the commands and skills whose MCP tool the server no longer offers: `vike funds` (`fund_holdings`), `vike defi` (`defi_positions`), `vike ohlcv` (`ohlcv`), `vike token chart` (`token_chart`), `vike options flow` (`options_flow`) and `vike web search|fetch` (`web_search`, `web_fetch`), plus the `vike-fund-holdings`, `vike-defi-positions`, `vike-ohlcv`, `vike-options-flow`, `vike-web-search`, `vike-web-fetch` and `vike-web-research` skills and every cross-reference to them.
8
+
9
+ Add `vike candles hl <symbol>` and `vike candles polymarket <token_id>` (the `hl_ohlcv` and `polymarket_ohlcv` tools) and the `vike-candles` skill.
10
+
11
+ ## 0.11.0
12
+
13
+ ### Minor Changes
14
+
15
+ - 1082cc5: Add `vike-data` as a second command name, alongside `vike`.
16
+
17
+ `vike` collides with the Vike Trader multicall binary, which is also called
18
+ `vike` — two different programs, both ours, one name on PATH. Anyone running the
19
+ trading platform and this CLI on the same machine gets whichever the shell finds
20
+ first.
21
+
22
+ This is ADDITIVE: `vike` keeps working exactly as before, so nothing installed
23
+ today breaks. `vike-data` is the unambiguous name to move to, and the one the
24
+ docs should teach from here.
25
+
3
26
  All notable changes are documented here. Entries follow [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
4
27
 
5
28
  ## 0.10.0 — commander 15 + Node 22.12 floor (drops Node 20)
package/README.md CHANGED
@@ -1,13 +1,13 @@
1
1
  # @vike-io/cli
2
2
 
3
- > Repo + package: `@vike-io/cli` (npm) · `vike-io/vike-cli` (GitHub) · binary: `vike`
3
+ > Repo + package: `@vike-io/cli` (npm) · `vike-io/vike-data-cli` (GitHub) · binary: `vike`
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/@vike-io/cli.svg)](https://www.npmjs.com/package/@vike-io/cli)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
7
  [![Node](https://img.shields.io/badge/node-%3E%3D20-brightgreen.svg)](https://nodejs.org)
8
- [![skills.sh](https://skills.sh/b/vike-io/vike-cli)](https://skills.sh/vike-io/vike-cli)
8
+ [![skills.sh](https://skills.sh/b/vike-io/vike-data-cli)](https://skills.sh/vike-io/vike-data-cli)
9
9
 
10
- > **Command-line interface for the [vike.io](https://vike.io) API.** On-chain analytics, perpetuals, options flow, and prediction-market data across 11 chains — designed to be driven by AI agents (Claude Code, OpenClaw) as well as humans.
10
+ > **Command-line interface for the [vike.io](https://vike.io) API.** On-chain analytics, perpetuals, and prediction-market data across 11 chains — designed to be driven by AI agents (Claude Code, OpenClaw) as well as humans.
11
11
 
12
12
  ## Install
13
13
 
@@ -17,7 +17,7 @@ npm install -g @vike-io/cli
17
17
 
18
18
  # OR install just the skill playbooks into your AI agent (Claude Code, Cursor,
19
19
  # Codex, Copilot, OpenCode and 50+ more — auto-detected):
20
- npx skills add vike-io/vike-cli
20
+ npx skills add vike-io/vike-data-cli
21
21
  ```
22
22
 
23
23
  After `npm install`, you can also drop the skill into AI agents from the CLI itself:
@@ -40,11 +40,10 @@ Get an API key at [vike.io/account?tab=api-keys](https://vike.io/account?tab=api
40
40
  ## Commands at a glance
41
41
 
42
42
  ```
43
- vike token search | transfers | chart
44
- vike ohlcv <symbol> # CEX candles, any timeframe (BTC, BTCUSDT)
43
+ vike token search | transfers | screener | holders
45
44
  vike wallet summary | discover
46
45
  vike perp funding | spreads | top-traders
47
- vike options flow
46
+ vike candles hl <symbol> | polymarket <token_id>
48
47
  vike alerts list | channels | create | edit | delete
49
48
  vike init | doctor | schema | whoami | login | logout
50
49
  ```
@@ -55,24 +54,24 @@ Run `vike schema --pretty` for the full command + flag reference.
55
54
 
56
55
  | Domain | What you can ask |
57
56
  |---|---|
58
- | **Tokens** | Resolve symbols → addresses, see top buyers/sellers, pull OHLCV |
57
+ | **Tokens** | Resolve symbols → addresses, see top buyers/sellers, screen by smart-money flow |
59
58
  | **Wallets** | Aggregate metrics per wallet, leaderboards by volume / PnL / netflow |
60
59
  | **Perps** | Funding rates + cross-venue spreads across Binance / Bybit / OKX / Aster / Hyperliquid |
61
60
  | **Hyperliquid** | Top-trader leaderboard with PnL / ROI / win-rate filters |
62
- | **Options** | Deribit flow for BTC / ETH / SOL with put-call ratios |
61
+ | **Candles** | Historical OHLCV for Hyperliquid perp/spot markets and Polymarket outcome tokens |
63
62
  | **Alerts** | Create transfer alerts; deliver to email or Discord |
64
63
 
65
64
  ## For AI agents
66
65
 
67
- This package ships **41 skill playbooks** under [`skills/`](skills/) — markdown files designed to be loaded by AI coding agents (Claude Code, Cursor, Codex, Copilot, OpenCode, …) so they know when and how to invoke each command. They are grouped in [`skills.sh.json`](skills.sh.json) by domain (Tokens / Wallets / CEX perps / Hyperliquid / Options / Polymarket / Alerts / Web research).
66
+ This package ships **36 skill playbooks** under [`skills/`](skills/) — markdown files designed to be loaded by AI coding agents (Claude Code, Cursor, Codex, Copilot, OpenCode, …) so they know when and how to invoke each command. They are grouped in [`skills.sh.json`](skills.sh.json) by domain (Tokens / Wallets / CEX perps / Hyperliquid / Candles / Polymarket / Alerts).
68
67
 
69
68
  Three install paths, pick whichever fits your stack:
70
69
 
71
70
  ```bash
72
71
  # 1. Install just the skill files for your agent (no Node binary needed):
73
- npx skills add vike-io/vike-cli # auto-detects the agent
74
- npx skills add vike-io/vike-cli -a claude-code # explicit target
75
- npx skills add vike-io/vike-cli --list # list all 41 first
72
+ npx skills add vike-io/vike-data-cli # auto-detects the agent
73
+ npx skills add vike-io/vike-data-cli -a claude-code # explicit target
74
+ npx skills add vike-io/vike-data-cli --list # list all 41 first
76
75
 
77
76
  # 2. Use the CLI itself to install the umbrella skill into multiple agents:
78
77
  vike install --claude --cursor --copilot --agents
@@ -117,5 +116,5 @@ MIT — see [LICENSE](LICENSE).
117
116
  ## Links
118
117
 
119
118
  - Homepage: [vike.io](https://vike.io)
120
- - Issues: [github.com/vike-io/vike-cli/issues](https://github.com/vike-io/vike-cli/issues)
119
+ - Issues: [github.com/vike-io/vike-data-cli/issues](https://github.com/vike-io/vike-data-cli/issues)
121
120
  - API docs: [vike.io/api](https://vike.io/api)
package/package.json CHANGED
@@ -3,12 +3,13 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.10.0",
6
+ "version": "0.12.0",
7
7
  "description": "AI-agent CLI for vike.io on-chain analytics, perps, options, and prediction markets across 11 chains",
8
8
  "type": "module",
9
9
  "main": "src/index.js",
10
10
  "bin": {
11
- "vike": "./src/index.js"
11
+ "vike": "./src/index.js",
12
+ "vike-data": "./src/index.js"
12
13
  },
13
14
  "files": [
14
15
  "src/**/*.js",
@@ -56,10 +57,10 @@
56
57
  "license": "MIT",
57
58
  "repository": {
58
59
  "type": "git",
59
- "url": "git+https://github.com/vike-io/vike-cli.git"
60
+ "url": "git+https://github.com/vike-io/vike-data-cli.git"
60
61
  },
61
62
  "bugs": {
62
- "url": "https://github.com/vike-io/vike-cli/issues"
63
+ "url": "https://github.com/vike-io/vike-data-cli/issues"
63
64
  },
64
65
  "homepage": "https://vike.io",
65
66
  "engines": {
@@ -69,8 +70,8 @@
69
70
  "commander": "^15.0.0"
70
71
  },
71
72
  "devDependencies": {
72
- "@changesets/cli": "^2.27.9",
73
+ "@changesets/cli": "^3.0.3",
73
74
  "eslint": "^10.4.0",
74
- "vitest": "^4.1.7"
75
+ "vitest": "^5.0.4"
75
76
  }
76
77
  }
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: vike
3
- description: "Use this skill whenever the user asks any question about on-chain crypto data, wallet behavior, token transfers, smart money, CEX perpetual futures, Hyperliquid perps, Deribit options, prediction markets (Polymarket), DeFi positions, ENS, or institutional fund holdings — and live data from vike.io would improve the answer. This includes questions like \"who is buying X token\", \"what is wallet 0x... doing\", \"top wallets by PnL\", \"funding rate spread across Binance/Bybit/OKX\", \"largest HL perp traders this week\", \"Deribit BTC put-call ratio\", \"who is winning on Polymarket\", \"which funds hold X token\", \"resolve this ENS\", \"label this wallet\", \"trace this transfer\", \"top tokens by smart-money inflow\". Always use this skill proactively when the user's query could benefit from real-time or historical on-chain data — don't wait for the user to explicitly ask to \"use vike\". If the user asks a general on-chain question that requires synthesis across wallets/tokens/venues, route to vike first."
3
+ description: "Use this skill whenever the user asks any question about on-chain crypto data, wallet behavior, token transfers, smart money, CEX perpetual futures, Hyperliquid perps, prediction markets (Polymarket), ENS, or on-chain flows — and live data from vike.io would improve the answer. This includes questions like \"who is buying X token\", \"what is wallet 0x... doing\", \"top wallets by PnL\", \"funding rate spread across Binance/Bybit/OKX\", \"largest HL perp traders this week\", \"who is winning on Polymarket\", \"resolve this ENS\", \"label this wallet\", \"trace this transfer\", \"top tokens by smart-money inflow\". Always use this skill proactively when the user's query could benefit from real-time or historical on-chain data — don't wait for the user to explicitly ask to \"use vike\". If the user asks a general on-chain question that requires synthesis across wallets/tokens/venues, route to vike first."
4
4
  ---
5
5
 
6
6
  # vike — Multi-chain On-chain Analytics
7
7
 
8
- Answer on-chain questions using the vike.io platform: 11 chains (ETH, BSC, Base, Arbitrum, HyperEVM, BTC, Solana, Tron, XMR, ZEC, Dash), full Hyperliquid perps coverage, CEX perps across 5 venues, Deribit options, Polymarket prediction markets, multi-source wallet labels, and a 34-tool MCP server.
8
+ Answer on-chain questions using the vike.io platform: 11 chains (ETH, BSC, Base, Arbitrum, HyperEVM, BTC, Solana, Tron, XMR, ZEC, Dash), full Hyperliquid perps coverage, CEX perps across 5 venues, Polymarket prediction markets, multi-source wallet labels, and a 34-tool MCP server.
9
9
 
10
10
  **MCP endpoint for all calls:** `https://vike.io/mcp` (JSON-RPC 2.0)
11
11
  **Or use the CLI:** `npm install -g @vike-io/cli` → `vike <command>`
@@ -66,8 +66,6 @@ X-API-KEY: vk_...
66
66
  |---|---|---|
67
67
  | Token by symbol/name → address, market cap, holders | **Tokens** | `vike token search` / `token_search` |
68
68
  | Token holders, who bought/sold, top inflows | **Tokens** | `vike token transfers` / `token_transfers` |
69
- | Token chart / DEX OHLCV by contract address | **Tokens** | `vike token chart` / `token_chart` |
70
- | CEX candles by ticker/pair, any timeframe (1m–1w), spot or perp | **Tokens** | `vike ohlcv <symbol>` / `ohlcv` |
71
69
  | Filter/screen tokens by smart-money flow, liquidity, age | **Tokens** | `vike token screener` / `token_screener` |
72
70
  | Single wallet's PnL, holdings, recent activity | **Wallets** | `vike wallet summary` / `wallet_summary` |
73
71
  | Top wallets by PnL on a token / leaderboard | **Wallets** | `vike wallet discover` / `wallet_discover` |
@@ -80,32 +78,28 @@ X-API-KEY: vk_...
80
78
  | ENS name → address or address → ENS | **Wallets** | `vike wallet ens` / `wallet_ens` |
81
79
  | Bulk-label many wallets at once | **Wallets** | `vike wallet batch` / `wallet_batch_labels` |
82
80
  | Why is this wallet labeled X? (provenance) | **Labels** | `vike labels provenance` / `wallet_label_provenance` |
83
- | Which funds hold this token / what funds hold | **Funds** | `vike funds holdings` / `fund_holdings` |
84
81
  | Funding rates across CEX perps (Binance/Bybit/OKX/Aster/HL) | **CEX Perps** | `vike perp funding` / `perp_funding` |
85
82
  | Price spreads of same symbol across CEX perp venues | **CEX Perps** | `vike perp spreads` / `perp_spreads` |
86
83
  | Top Hyperliquid perp traders by PnL / volume | **HL Perps** | `vike perp top-traders` / `hl_perp_top_traders` |
87
84
  | Reverse-lookup an HL share card → which wallet holds it | **HL Perps** | `vike perp find-position` / `hl_position_match` |
88
- | Deribit options flow, put/call ratios, IV | **Options** | `vike options flow` / `options_flow` |
85
+ | Historical candles for a Hyperliquid perp or spot market (1m–1d) | **Candles** | `vike candles hl <symbol>` / `hl_ohlcv` |
86
+ | Historical probability candles for a Polymarket outcome token | **Candles** | `vike candles polymarket <token_id>` / `polymarket_ohlcv` |
89
87
  | Active Polymarket markets, volume, odds | **Polymarket** | `vike polymarket markets` / `polymarket_markets` |
90
88
  | Single Polymarket market detail | **Polymarket** | `vike polymarket detail` / `polymarket_market_detail` |
91
89
  | Polymarket trader profile / positions | **Polymarket** | `vike polymarket wallet` / `polymarket_wallet` |
92
90
  | Best-performing Polymarket traders | **Polymarket** | `vike polymarket smart-money` / `polymarket_smart_money` |
93
- | DeFi positions for a wallet (Aave/Uniswap/Lido/…) | **DeFi** | `vike defi positions` / `defi_positions` |
94
91
  | Create / list / edit price-or-flow alerts | **Alerts** | `vike alerts ...` / `alerts_*` |
95
- | General web search or fetch + AI summarize a URL | **Web** | `vike web search` / `web_search`, `vike web fetch` / `web_fetch` |
96
92
 
97
93
  **When in doubt, start with `vike token search` or `vike wallet summary`** — both are cheap, return instantly, and disambiguate what the user actually meant.
98
94
 
99
95
  ### Example query routing
100
96
  ```
101
97
  "Top 20 wallets buying PEPE in the last 24h" → wallet_discover (token=PEPE, sort=net_inflow_usd)
102
- "What is 0xd8dA6BF...AbA96 holding?" → wallet_summary + defi_positions
98
+ "What is 0xd8dA6BF...AbA96 holding?" → wallet_summary + wallet_token_balances
103
99
  "Funding rate for BTC across all perp venues" → perp_funding (symbol=BTC)
104
100
  "Cheapest venue to short ETH right now?" → perp_spreads (symbol=ETH)
105
101
  "Biggest HL perp PnL last week" → hl_perp_top_traders (window=7d, sort=pnl_usd)
106
- "Largest BTC put writes on Deribit today" → options_flow (asset=BTC, side=put)
107
102
  "Show me the largest Polymarket bets on US election" → polymarket_market_detail + polymarket_smart_money
108
- "Which funds bought Lido tokens this quarter?" → fund_holdings (token=LDO, window=90d)
109
103
  "Why is 0x28C6... labeled 'Binance hot wallet'?" → wallet_label_provenance (addr=0x28C6...)
110
104
  "Resolve vitalik.eth" → wallet_ens (name=vitalik.eth)
111
105
  "Alert me when whale 0xABCD sells over $1M of WBTC" → alerts_create
@@ -150,14 +144,12 @@ Run `vike schema --pretty` (or call MCP `tools/list`) to see the live arg shape
150
144
  For deeper per-tool workflows (multi-step recipes, common pitfalls, output schemas), see the `skills/` directory in this repo. The router lives at [`skills/vike-router/SKILL.md`](skills/vike-router/SKILL.md).
151
145
 
152
146
  ### Tokens
153
- Address resolution, transfers, OHLCV, holder cohorts, screening.
147
+ Address resolution, transfers, holder cohorts, screening.
154
148
 
155
149
  | Tool | Description | Skill |
156
150
  |---|---|---|
157
151
  | `token_search` | Symbol/name → contract address + chain + market cap | [vike-token-search](skills/vike-token-search/SKILL.md) |
158
152
  | `token_transfers` | Recent transfers with USD values; supports `--min-usd`, time windows | [vike-token-transfers](skills/vike-token-transfers/SKILL.md) |
159
- | `token_chart` | DEX OHLCV by contract address (5/30/120-min, data_history aggregate) | [vike-token-research](skills/vike-token-research/SKILL.md) |
160
- | `ohlcv` | CEX candles by ticker (BTC) or pair (BTCUSDT), 1m–1w, spot/perp, paged | [vike-ohlcv](skills/vike-ohlcv/SKILL.md) |
161
153
  | `token_holders` | Top holders + concentration metrics | [vike-token-holders](skills/vike-token-holders/SKILL.md) |
162
154
  | `token_screener` | Filter tokens by smart-money inflow, age, liquidity, sector | [vike-token-screener](skills/vike-token-screener/SKILL.md) |
163
155
 
@@ -185,13 +177,12 @@ Profile, PnL, transactions, comparison, tracing, counterparty graph.
185
177
 
186
178
  ---
187
179
 
188
- ### Labels & Funds
189
- Institutional wallet identification + label provenance.
180
+ ### Labels
181
+ Wallet label provenance.
190
182
 
191
183
  | Tool | Description | Skill |
192
184
  |---|---|---|
193
185
  | `wallet_label_provenance` | Why a wallet got a given label (sources + confidence) | [vike-wallet-label-provenance](skills/vike-wallet-label-provenance/SKILL.md) |
194
- | `fund_holdings` | Which funds/institutions hold a given token + recent flows | [vike-fund-holdings](skills/vike-fund-holdings/SKILL.md) |
195
186
 
196
187
  Vike's label cascade is multi-source — when an answer hinges on "is this really a CEX hot wallet?", call `wallet_label_provenance` rather than trusting a single source.
197
188
 
@@ -219,14 +210,13 @@ For per-symbol HL screening / individual trader deep-dive, use [vike-perp-screen
219
210
 
220
211
  ---
221
212
 
222
- ### Options
223
- Deribit options chain + flow.
213
+ ### Candles
214
+ Historical OHLCV from venues whose data is on-chain.
224
215
 
225
216
  | Tool | Description | Skill |
226
217
  |---|---|---|
227
- | `options_flow` | Recent large trades, put/call ratios, IV by strike/expiry | [vike-options-flow](skills/vike-options-flow/SKILL.md) |
228
-
229
- Coverage: BTC + ETH on Deribit. Other venues not currently supported.
218
+ | `hl_ohlcv` | Hyperliquid perp or spot candles, 1m–1d, built from HL's own executed fills (also HIP-3 builder DEXs) | [vike-candles](skills/vike-candles/SKILL.md) |
219
+ | `polymarket_ohlcv` | Candles for ONE Polymarket outcome token (price = probability, 0–1); needs `token_id`, not a condition_id | [vike-candles](skills/vike-candles/SKILL.md) |
230
220
 
231
221
  ---
232
222
 
@@ -242,17 +232,6 @@ Prediction markets — markets, traders, smart-money.
242
232
 
243
233
  ---
244
234
 
245
- ### DeFi
246
- Cross-protocol positions for a wallet.
247
-
248
- | Tool | Description | Skill |
249
- |---|---|---|
250
- | `defi_positions` | Aave/Uniswap V2+V3/Lido/Compound/etc. open positions per wallet | [vike-defi-positions](skills/vike-defi-positions/SKILL.md) |
251
-
252
- Covers ~30+ protocols across ETH/BSC/Base/Arbitrum.
253
-
254
- ---
255
-
256
235
  ### Alerts
257
236
  Create + manage alerts; deliver to email, Telegram, Discord, Webhook.
258
237
 
@@ -267,18 +246,6 @@ Create + manage alerts; deliver to email, Telegram, Discord, Webhook.
267
246
 
268
247
  Alerts fire on a 2-minute cron cycle (not streaming). Don't recommend WebSocket / push streaming — it's not how the platform works.
269
248
 
270
- ---
271
-
272
- ### Web
273
- General web search + AI-summarized fetch for off-chain context (news, docs, social).
274
-
275
- | Tool | Description | Skill |
276
- |---|---|---|
277
- | `web_search` | Tavily-primary + Serper fallback web search | [vike-web-search](skills/vike-web-search/SKILL.md) |
278
- | `web_fetch` | Fetch a URL + AI Q&A over its contents (Cerebras-backed) | [vike-web-fetch](skills/vike-web-fetch/SKILL.md), [vike-web-research](skills/vike-web-research/SKILL.md) |
279
-
280
- ---
281
-
282
249
  ## Historical data availability
283
250
 
284
251
  Coverage windows per dataset. Don't ask for data older than the window — the tool will return empty or 503.
@@ -296,19 +263,6 @@ Coverage windows per dataset. Don't ask for data older than the window — the t
296
263
  | Solana | 2026-Q1 onward | Recent only — see `vike-cli` chain-coverage notes |
297
264
  | Tron/XMR/ZEC/Dash | 2024 onward | Recent only |
298
265
 
299
- ### Prices (data_history, spot)
300
-
301
- | Venue | Earliest | Notes |
302
- |---|---|---|
303
- | Binance | 2017-08 | Full minute-level OHLCV |
304
- | Bybit | 2020-03 | Full minute-level OHLCV |
305
- | OKX | 2019-04 | Full minute-level OHLCV |
306
- | Gate | 2017 (CSV) → 2024-05 (CSV ends) | After 2024-05 use API; capped 10k minutes/request |
307
- | Coinbase | 2015 | Full history (recently added) |
308
- | KuCoin | 2018 | Full history (recently added) |
309
- | Pyth | 2023 | On-chain price feed; sparse pre-2023 |
310
- | Deribit options | 2020 onward | BTC + ETH only |
311
-
312
266
  ### Hyperliquid perps (hl_perps DB)
313
267
 
314
268
  | Dataset | Window | Notes |
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: vike-candles
3
+ description: Historical OHLCV candles for a Hyperliquid perp or spot market, or for one Polymarket outcome token. Use when the user asks for a price chart, candles, OHLCV, or price history of a Hyperliquid asset or a Polymarket outcome (its probability over time).
4
+ allowed-tools: Bash(vike:*)
5
+ ---
6
+
7
+ # vike-candles
8
+
9
+ Two candle sources, both from venues whose data is on-chain. There is **no** candle source for
10
+ CEX tickers (BTCUSDT on Binance and the like) or for an arbitrary ERC-20 contract address; say so
11
+ rather than guessing a venue.
12
+
13
+ ## Command
14
+
15
+ Hyperliquid (perp or spot), built from HL's own executed fills:
16
+
17
+ ```bash
18
+ vike candles hl <symbol>
19
+ [--interval 1m|5m|15m|30m|1h|4h|1d] # default 1h
20
+ [--market perp|spot] # default perp
21
+ [--dex <name>] # HIP-3 builder DEX; default HL (the core venue)
22
+ [--start <iso|epoch-ms>] [--end <iso|epoch-ms>] # half-open [start, end)
23
+ [--limit N] # default 500, max 5000
24
+ [--json]
25
+ ```
26
+
27
+ Polymarket, ONE outcome token (a probability, 0-1):
28
+
29
+ ```bash
30
+ vike candles polymarket <token_id>
31
+ [--interval 1m|5m|1h|1d] # default 1h
32
+ [--from <epoch-ms>] [--to <epoch-ms>] # both inclusive
33
+ [--limit N] # default 500, max 1000
34
+ [--json]
35
+ ```
36
+
37
+ ## Common queries
38
+
39
+ | Question | Command |
40
+ |---|---|
41
+ | "Hourly BTC perp candles, last week" | `vike candles hl BTC --interval 1h --limit 168` |
42
+ | "HYPE spot daily candles" | `vike candles hl HYPE --market spot --interval 1d` |
43
+ | "4h ETH, 200 bars" | `vike candles hl ETH --interval 4h --limit 200` |
44
+ | "Price history of the YES outcome of market X" | get `clob_token_ids` from `vike polymarket market <condition_id>`, then `vike candles polymarket <token_id> --interval 1h` |
45
+
46
+ ## Output
47
+
48
+ HL: `ts` (epoch ms, UTC), `open`, `high`, `low`, `close`, `volume`, `volume_usd`, `n_trades`, ascending by `ts`, plus `source`.
49
+ Polymarket: `ts`, `open`, `high`, `low`, `close`, `volume`, `trades`, oldest first.
50
+
51
+ ## Pitfalls
52
+
53
+ - Polymarket takes an **outcome token id**, not a `condition_id`. A condition id returns nothing useful; read the token ids off `clob_token_ids` in `vike polymarket market`.
54
+ - Polymarket has no cursor: a window wider than `--limit` is truncated at the **old** end. Raise `--from` to reach the recent end.
55
+ - Polymarket `--from` / `--to` are epoch **milliseconds**; HL `--start` / `--end` also accept ISO-8601.
56
+ - HL buckets are left-aligned UTC and the window is half-open.
57
+
58
+ ## Pairs well with
59
+
60
+ - `vike polymarket market <condition_id>` — to find the token ids
61
+ - `vike perp top-traders` — who is trading the asset behind the candles
@@ -45,5 +45,4 @@ wait
45
45
 
46
46
  ## Pairs well with
47
47
 
48
- - `vike-options-flow` for the corresponding options positioning on BTC/ETH/SOL
49
48
  - `vike-perp-funding-arb` for the funding-only deep dive
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: vike-router
3
- description: Entry point — decide which vike skill to use. Read this first when the user asks anything about on-chain analytics, perps, options, prediction markets, wallets, or tokens.
3
+ description: Entry point — decide which vike skill to use. Read this first when the user asks anything about on-chain analytics, perps, prediction markets, wallets, or tokens.
4
4
  allowed-tools: Bash(vike:*)
5
5
  ---
6
6
 
@@ -15,7 +15,6 @@ Route the user's question to the right `vike-*` skill.
15
15
  | Token by symbol/name → address | `vike-token-search` |
16
16
  | Token holders / who bought / sold | `vike-token-transfers` |
17
17
  | Token price chart / DEX OHLCV by contract address | `vike-token-research` |
18
- | CEX candles by ticker/pair, any timeframe (BTC, BTCUSDT) | `vike-ohlcv` |
19
18
  | Generic token research (everything) | `vike-token-research` |
20
19
  | Single wallet's metrics | `vike-wallet-summary` |
21
20
  | Top wallets / leaderboard | `vike-wallet-discover` |
@@ -27,18 +26,17 @@ Route the user's question to the right `vike-*` skill.
27
26
  | Profile a single HL perp trader | `vike-hl-trader-profile` |
28
27
  | HL market overview (vol/OI/funding) | `vike-perp-screener` |
29
28
  | Compare a symbol across all perp venues | `vike-cross-venue-perps` |
30
- | Deribit options flow / put-call ratios | `vike-options-flow` |
29
+ | Historical candles (Hyperliquid perp/spot, Polymarket outcome token) | `vike-candles` |
31
30
  | Create / list / edit alerts | `vike-alerts-setup` |
32
31
  | Auth / setup / "I just installed it" | `vike-core` |
33
32
 
34
33
  ## Quick command map
35
34
 
36
35
  ```
37
- vike token search | transfers | chart
38
- vike ohlcv <symbol> # CEX candles, any timeframe (BTC, BTCUSDT)
36
+ vike token search | transfers | screener | holders
39
37
  vike wallet summary | discover
40
38
  vike perp funding | spreads | top-traders
41
- vike options flow
39
+ vike candles hl <symbol> | polymarket <token_id>
42
40
  vike alerts list | channels | create | edit | delete
43
41
  vike init | doctor | schema | whoami | login | logout
44
42
  ```
@@ -22,11 +22,6 @@ Multi-call token research workflow.
22
22
  vike token transfers <addr> --tab sold --period 24h --chain <chain> --json
23
23
  ```
24
24
 
25
- 3. **Price action**
26
- ```bash
27
- vike token chart <addr> --interval 30 --json
28
- ```
29
-
30
25
  ## Verdict heuristics
31
26
 
32
27
  After step 2, classify direction-of-pressure:
@@ -36,5 +36,4 @@ vike token search PEPE --chain ethereum --limit 5
36
36
  ## Pairs well with
37
37
 
38
38
  - `vike token transfers <address>` after resolution
39
- - `vike token chart <address>`
40
39
  - `vike-token-research` for a full multi-call report
@@ -40,4 +40,3 @@ Each row is one wallet: `address`, `qty`, `usd_value`, `label` (if known), `tx_c
40
40
  ## Pairs well with
41
41
 
42
42
  - `vike wallet summary <addr>` to profile any interesting buyer/seller
43
- - `vike token chart <addr>` to correlate flows with price action
@@ -49,12 +49,10 @@ Holdings sorted by `usd_value` descending.
49
49
  ## Anti-patterns
50
50
 
51
51
  - This is ERC-20 only — does NOT include native ETH/BNB/MATIC (would need separate calls; not in our current tool surface). Mention this when reporting "total holdings".
52
- - Don't combine with `defi_positions` totals naively — there's overlap (e.g. aUSDC shows in `balances`, the Aave deposit shows in `defi_positions`; you'd double-count).
53
52
  - For wallets with 100+ tokens, the response is large — use `--min-usd 100` or higher to focus on meaningful holdings.
54
53
 
55
54
  ## Pairs well with
56
55
 
57
- - `vike defi <addr>` — protocol positions (Aave/Uniswap LP/Lido) alongside spot balances
58
56
  - `vike wallet pnl-history <addr>` — how the wallet got to its current state
59
57
  - `vike labels <addr>` — institutional context
60
58
  - `vike wallet ens <addr>` — friendly identifier
@@ -53,4 +53,3 @@ One row per INPUT address (preserves input order — useful when joining back to
53
53
 
54
54
  - `vike labels <addr>` — drill into any address showing high-confidence labels
55
55
  - `vike wallet compare <a> <b>` — pick two interesting batch results and diff them
56
- - `vike funds` — when batch reveals fund/MM/treasury wallets, get their flows
@@ -38,4 +38,3 @@ vike wallet ens 0x28c6c06298d514db089934071355e5743bf21d60
38
38
 
39
39
  - `vike labels <addr>` — combine ENS + labels for the fullest identity view
40
40
  - `vike wallet summary <addr>` — ENS + activity profile
41
- - `vike funds` — pair with ENS lookups on the top entries for richer display
@@ -61,5 +61,3 @@ vike labels 0x28C6c06298d514Db089934071355E5743bf21d60 # Binance Hot Wallet
61
61
  ## Pairs well with
62
62
 
63
63
  - `vike wallet summary <addr>` — for the flow metrics of the labeled wallet
64
- - `vike funds` — find all known fund wallets and their recent flows
65
- - `vike defi <addr>` — see what protocols this entity is using
@@ -55,4 +55,3 @@ For lifetime realized PnL: `vike wallet discover --sort pnl --window all`.
55
55
 
56
56
  - `vike wallet summary <addr>` for the aggregate context
57
57
  - `vike wallet counterparties <addr>` to see WHO they traded with
58
- - `vike token chart <addr>` to correlate flow spikes with price action
@@ -17,7 +17,6 @@ vike wallet ens $ADDR --json & # cheap, ~1 credit
17
17
  vike labels $ADDR --json & # cheap, ~1 credit
18
18
  vike wallet summary $ADDR --json & # cheap, ~2 credits
19
19
  vike wallet balances $ADDR --json & # multi-chain, ~3 credits
20
- vike defi $ADDR --json & # multi-chain, ~3 credits
21
20
  vike wallet pnl-history $ADDR --days 30 --json &
22
21
  wait
23
22
  ```
@@ -47,14 +46,13 @@ wait
47
46
 
48
47
  ## Cost
49
48
 
50
- ~6 parallel calls, ~12 credits total. Use sparingly — only when the user wants the FULL picture, not a single dimension.
49
+ ~5 parallel calls, ~9 credits total. Use sparingly — only when the user wants the FULL picture, not a single dimension.
51
50
 
52
51
  ## When to use a focused skill instead
53
52
 
54
53
  - "Just labels for X" → `vike-wallet-label-provenance`
55
54
  - "What does X hold" → `vike-wallet-balances`
56
55
  - "Top counterparties of X" → `vike-wallet-counterparties`
57
- - "DeFi positions of X" → `vike-defi-positions`
58
56
 
59
57
  ## Pairs well with
60
58
 
package/skills.sh.json CHANGED
@@ -13,11 +13,10 @@
13
13
  },
14
14
  {
15
15
  "title": "Tokens",
16
- "description": "Resolve, screen, and research tokens across 11 chains. Smart-money inflow, holders, recent transfers, OHLCV.",
16
+ "description": "Resolve, screen, and research tokens across 11 chains. Smart-money inflow, holders, recent transfers.",
17
17
  "skills": [
18
18
  "vike-token-search",
19
19
  "vike-token-research",
20
- "vike-ohlcv",
21
20
  "vike-token-transfers",
22
21
  "vike-token-holders",
23
22
  "vike-token-screener",
@@ -26,7 +25,7 @@
26
25
  },
27
26
  {
28
27
  "title": "Wallets",
29
- "description": "Per-wallet profile, PnL, counterparty graphs, ENS, batch labelling, fund affiliation, DeFi positions.",
28
+ "description": "Per-wallet profile, PnL, counterparty graphs, ENS, batch labelling, label provenance.",
30
29
  "skills": [
31
30
  "vike-wallet-summary",
32
31
  "vike-wallet-portfolio",
@@ -39,9 +38,7 @@
39
38
  "vike-wallet-pnl-history",
40
39
  "vike-wallet-balances",
41
40
  "vike-wallet-ens",
42
- "vike-wallet-label-provenance",
43
- "vike-fund-holdings",
44
- "vike-defi-positions"
41
+ "vike-wallet-label-provenance"
45
42
  ]
46
43
  },
47
44
  {
@@ -64,10 +61,10 @@
64
61
  ]
65
62
  },
66
63
  {
67
- "title": "Options",
68
- "description": "Deribit BTC/ETH options flow + put-call ratios.",
64
+ "title": "Candles",
65
+ "description": "Historical OHLCV for Hyperliquid perp/spot markets and Polymarket outcome tokens.",
69
66
  "skills": [
70
- "vike-options-flow"
67
+ "vike-candles"
71
68
  ]
72
69
  },
73
70
  {
@@ -88,15 +85,6 @@
88
85
  "vike-alerts-setup",
89
86
  "vike-alerts-webhook"
90
87
  ]
91
- },
92
- {
93
- "title": "Web research",
94
- "description": "Off-chain context: general web search and AI-summarized URL fetch for news, docs, and social.",
95
- "skills": [
96
- "vike-web-search",
97
- "vike-web-fetch",
98
- "vike-web-research"
99
- ]
100
88
  }
101
89
  ]
102
90
  }
@@ -0,0 +1,57 @@
1
+ import { callTool } from '../mcp-client.js';
2
+ import { emit, emitError } from '../format.js';
3
+ import { parseInt10 } from '../util.js';
4
+
5
+ export function registerCandles(program) {
6
+ const cmd = program
7
+ .command('candles')
8
+ .description('Historical OHLCV candles — Hyperliquid markets and Polymarket outcome tokens');
9
+
10
+ cmd
11
+ .command('hl <symbol>')
12
+ .description('Hyperliquid candles (perp or spot), aggregated from HL executed fills')
13
+ .option('--interval <i>', '1m | 5m | 15m | 30m | 1h | 4h | 1d', '1h')
14
+ .option('--market <m>', 'perp | spot', 'perp')
15
+ .option('--dex <d>', 'Perp DEX (default HL, the core venue; others are HIP-3 builder DEXs)')
16
+ .option('--start <t>', 'ISO-8601 UTC or epoch ms (inclusive)')
17
+ .option('--end <t>', 'ISO-8601 UTC or epoch ms (exclusive)')
18
+ .option('--limit <n>', 'Max candles (default 500, max 5000)', '500')
19
+ .option('--json', 'Emit JSON')
20
+ .action(async (symbol, opts) => {
21
+ try {
22
+ const args = {
23
+ symbol,
24
+ interval: opts.interval,
25
+ market: opts.market,
26
+ limit: parseInt10(opts.limit, 500),
27
+ };
28
+ if (opts.dex !== undefined) args.dex = opts.dex;
29
+ if (opts.start !== undefined) args.start = opts.start;
30
+ if (opts.end !== undefined) args.end = opts.end;
31
+ const r = await callTool('hl_ohlcv', args);
32
+ emit(r, opts);
33
+ } catch (err) { emitError(err, opts); }
34
+ });
35
+
36
+ cmd
37
+ .command('polymarket <token_id>')
38
+ .description('Candles for ONE Polymarket outcome token (prices are probabilities, 0-1)')
39
+ .option('--interval <i>', '1m | 5m | 1h | 1d', '1h')
40
+ .option('--from <ms>', 'Epoch milliseconds, inclusive lower bound')
41
+ .option('--to <ms>', 'Epoch milliseconds, inclusive upper bound')
42
+ .option('--limit <n>', 'Max candles (default 500, max 1000)', '500')
43
+ .option('--json', 'Emit JSON')
44
+ .action(async (tokenId, opts) => {
45
+ try {
46
+ const args = {
47
+ token_id: tokenId,
48
+ interval: opts.interval,
49
+ limit: parseInt10(opts.limit, 500),
50
+ };
51
+ if (opts.from !== undefined) args.from = opts.from;
52
+ if (opts.to !== undefined) args.to = opts.to;
53
+ const r = await callTool('polymarket_ohlcv', args);
54
+ emit(r, opts);
55
+ } catch (err) { emitError(err, opts); }
56
+ });
57
+ }
@@ -1,6 +1,5 @@
1
1
  import { callTool } from '../mcp-client.js';
2
2
  import { emit, emitError } from '../format.js';
3
- import { parseInt10 } from '../util.js';
4
3
 
5
4
  export function registerLabels(program) {
6
5
  // `vike labels <address>` — multi-source label provenance for one wallet
@@ -14,35 +13,4 @@ export function registerLabels(program) {
14
13
  emit(r, opts);
15
14
  } catch (err) { emitError(err, opts); }
16
15
  });
17
-
18
- // `vike funds` — top labeled funds / MM / treasury / CEX by recent net inflow
19
- program
20
- .command('funds')
21
- .description('Top labeled fund / market-maker / treasury / CEX wallets by net inflow')
22
- .option('--kind <k>', 'funds | cex | mm | treasury', 'funds')
23
- .option('--window <w>', '7d | 30d | 90d | 180d | all', '30d')
24
- .option('--limit <n>', 'Max wallets (max 25)', '10')
25
- .option('--json', 'Emit JSON')
26
- .action(async (opts) => {
27
- try {
28
- const r = await callTool('fund_holdings', {
29
- kind: opts.kind,
30
- window: opts.window,
31
- limit: parseInt10(opts.limit, 10),
32
- });
33
- emit(r, opts);
34
- } catch (err) { emitError(err, opts); }
35
- });
36
-
37
- // `vike defi <address>` — DeBank protocol positions for a wallet
38
- program
39
- .command('defi <address>')
40
- .description('DeFi protocol positions for a wallet across all DeBank-supported chains')
41
- .option('--json', 'Emit JSON')
42
- .action(async (address, opts) => {
43
- try {
44
- const r = await callTool('defi_positions', { address });
45
- emit(r, opts);
46
- } catch (err) { emitError(err, opts); }
47
- });
48
16
  }
@@ -5,7 +5,7 @@ import { parseInt10 } from '../util.js';
5
5
  export function registerToken(program) {
6
6
  const cmd = program
7
7
  .command('token')
8
- .description('Token search, transfers, and price charts');
8
+ .description('Token search, transfers, screener and holders');
9
9
 
10
10
  cmd
11
11
  .command('search <query>')
@@ -43,21 +43,6 @@ export function registerToken(program) {
43
43
  } catch (err) { emitError(err, opts); }
44
44
  });
45
45
 
46
- cmd
47
- .command('chart <token_address>')
48
- .description('OHLCV candle data for a token')
49
- .option('--interval <m>', '5 | 30 | 120 minutes', '30')
50
- .option('--json', 'Emit JSON')
51
- .action(async (tokenAddress, opts) => {
52
- try {
53
- const r = await callTool('token_chart', {
54
- token_address: tokenAddress,
55
- interval: opts.interval,
56
- });
57
- emit(r, opts);
58
- } catch (err) { emitError(err, opts); }
59
- });
60
-
61
46
  cmd
62
47
  .command('screener')
63
48
  .description('Token discovery filter — rank tokens by volume / inflow / holders / smart-money inflow')
package/src/index.js CHANGED
@@ -3,15 +3,12 @@ import { Command } from 'commander';
3
3
  import { registerToken } from './commands/token.js';
4
4
  import { registerWallet } from './commands/wallet.js';
5
5
  import { registerPerp } from './commands/perp.js';
6
- import { registerOptions } from './commands/options.js';
7
6
  import { registerAlerts } from './commands/alerts.js';
8
7
  import { registerPolymarket } from './commands/polymarket.js';
9
8
  import { registerLabels } from './commands/labels.js';
10
- import { registerWeb } from './commands/web.js';
11
- import { registerOhlcv } from './commands/ohlcv.js';
12
- // Note: registerLabels also registers `vike funds` and `vike defi` top-level
13
- // commands. New wallet subcommands (counterparties, pnl-history, balances,
14
- // ens) are added under registerWallet.
9
+ import { registerCandles } from './commands/candles.js';
10
+ // New wallet subcommands (counterparties, pnl-history, balances, ens) are
11
+ // added under registerWallet.
15
12
  import { registerInit } from './commands/init.js';
16
13
  import { registerInstall } from './commands/install.js';
17
14
  import { registerDoctor } from './commands/doctor.js';
@@ -63,12 +60,10 @@ registerSchema(program);
63
60
  registerToken(program);
64
61
  registerWallet(program);
65
62
  registerPerp(program);
66
- registerOptions(program);
67
63
  registerAlerts(program);
68
64
  registerPolymarket(program);
69
65
  registerLabels(program);
70
- registerWeb(program);
71
- registerOhlcv(program);
66
+ registerCandles(program);
72
67
 
73
68
  const _parseT0 = Date.now();
74
69
  program.parseAsync(process.argv)
@@ -1,59 +0,0 @@
1
- ---
2
- name: vike-defi-positions
3
- description: DeFi protocol positions for a wallet across all DeBank-supported chains (Aave, Uniswap LP, Curve, Pendle, EigenLayer, etc.) — net USD, asset USD, debt USD per protocol. Use when the user asks "what DeFi positions does this wallet have" / "is wallet X farming yields" / "show me the protocol breakdown for Y".
4
- allowed-tools: Bash(vike:*)
5
- ---
6
-
7
- # vike-defi-positions
8
-
9
- ## Command
10
-
11
- ```bash
12
- vike defi <address> [--json]
13
- ```
14
-
15
- ## Example
16
-
17
- ```bash
18
- vike defi 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 # vitalik.eth
19
- ```
20
-
21
- ## Output shape
22
-
23
- ```json
24
- {
25
- "address": "0x...",
26
- "total_balance": {
27
- "total_usd": 12345.67,
28
- "chains": [
29
- { "chain": "eth", "usd": 9000.00 },
30
- { "chain": "arb", "usd": 2000.00 },
31
- { "chain": "base", "usd": 1345.67 }
32
- ]
33
- },
34
- "protocols": [
35
- { "protocol": "Aave V3", "chain": "eth", "net_usd": 5000.00, "asset_usd": 8000.00, "debt_usd": 3000.00, "positions": 2 },
36
- { "protocol": "Uniswap V3", "chain": "eth", "net_usd": 2500.00, "asset_usd": 2500.00, "debt_usd": 0.00, "positions": 4 },
37
- ...
38
- ]
39
- }
40
- ```
41
-
42
- ## Reading
43
-
44
- - `net_usd = asset_usd - debt_usd` — what the position is actually worth
45
- - A protocol row with `debt_usd > 0` means the wallet is **borrowing** (Aave / Compound / Morpho). High debt + low asset = leveraged.
46
- - `positions` count tells you how many active positions inside one protocol (e.g. 4 Uniswap LP positions)
47
- - `total_balance.total_usd` includes both DeFi positions AND wallet token balances; the `protocols` array is DeFi-only
48
-
49
- ## Anti-patterns
50
-
51
- - DeBank may not cover every L2/protocol — a missing protocol doesn't mean the wallet has no position there
52
- - The `chain` field uses DeBank's IDs (`eth`, `bsc`, `matic`, `arb`, `op`, `base`, etc.) — translate to user-friendly names when reporting
53
- - Stale data: DeBank refresh varies; freshly-opened positions may not show for 5-15 min
54
- - If you get `balance_error` or `positions_error`, the DeBank API is rate-limited / down — retry once, then surface the error honestly
55
-
56
- ## Pairs well with
57
-
58
- - `vike labels <addr>` — combine label provenance with DeFi positions for a full institutional view
59
- - `vike wallet summary <addr>` — on-chain transfer activity vs DeFi positions for the same wallet
@@ -1,53 +0,0 @@
1
- ---
2
- name: vike-fund-holdings
3
- description: Top labeled fund / market-maker / treasury / CEX wallets ranked by recent net inflow USD. Use when the user asks "what are funds buying" / "which whales are accumulating" / "track institutional flows".
4
- allowed-tools: Bash(vike:*)
5
- ---
6
-
7
- # vike-fund-holdings
8
-
9
- ## Command
10
-
11
- ```bash
12
- vike funds [--kind funds|cex|mm|treasury] [--window 7d|30d|90d|180d|all] [--limit N] [--json]
13
- ```
14
-
15
- ## Examples
16
-
17
- ```bash
18
- vike funds --kind funds --window 30d --limit 10
19
- vike funds --kind cex --window 7d --limit 20
20
- vike funds --kind treasury --window 90d
21
- vike funds --kind mm --window 30d
22
- ```
23
-
24
- ## Kind filters
25
-
26
- | Kind | Includes |
27
- |---|---|
28
- | `funds` (default) | Treasury wallets + market-makers + custody anchors + Fund / Hedge / VC / Foundation / DAO categories |
29
- | `cex` | Exchanges (Binance, Coinbase, Bybit, OKX, etc.) |
30
- | `mm` | Market-makers (Wintermute, GSR, Jump, etc.) |
31
- | `treasury` | DAO + corporate treasury wallets |
32
-
33
- ## Output columns
34
-
35
- `wallet`, `entity`, `label` (raw provider tag, when available), `wallet_type`, `confidence`, `net_flow_usd` (window), `volume_usd` (window), `tx_count` (window)
36
-
37
- ## Reading
38
-
39
- - **Sort is descending by net_flow_usd** — top accumulators come first
40
- - A wallet with `entity = "Binance"` and `wallet_type = "cex"` showing massive net inflow = users depositing TO Binance (bearish for prices on the way in), or Binance moving inventory internally
41
- - `confidence = "High"` rows have multi-source label agreement; `Low` rows are heuristic-only
42
- - Negative `net_flow_usd` in a list sorted descending = no accumulators above this row; everyone is net-selling
43
-
44
- ## Anti-patterns
45
-
46
- - Don't quote "Binance bought $50M of X" from this view — it's wallet-level flow, not per-token attribution. For per-token, use `vike token holders` then filter for CEX labels.
47
- - Treasury wallets often have huge one-time inflows (e.g. ICO unlocks); a single 30d window can be misleading. Check `--window all` for context.
48
-
49
- ## Pairs well with
50
-
51
- - `vike labels <addr>` — drill into any specific wallet's full label cascade
52
- - `vike token holders <addr>` — see which of these wallets hold a specific token
53
- - `vike-smart-money-discovery` — find unlabeled smart wallets vs labeled funds
@@ -1,65 +0,0 @@
1
- ---
2
- name: vike-ohlcv
3
- description: Historical CEX candles for a canonical ticker (BTC) or exchange pair (BTCUSDT) at any timeframe (1m–1w), spot or perp. Use when the user asks "BTC hourly candles" / "ETH 4h chart on Binance" / "give me daily OHLCV for SOL" / needs look-ahead-safe candle data for a backtest.
4
- allowed-tools: Bash(vike:*)
5
- ---
6
-
7
- # vike-ohlcv
8
-
9
- CEX OHLCV candles by ticker or pair. Distinct from `vike token chart`, which serves DEX candles by **contract address** at only 5/30/120-min resolution.
10
-
11
- ## Command
12
-
13
- ```bash
14
- vike ohlcv <symbol> [--interval 1m|3m|5m|15m|30m|1h|2h|4h|6h|8h|12h|1d|1w] \
15
- [--exchange binance|bybit|okx|gate|kucoin|coinbase|mexc|pyth] \
16
- [--market spot|perp] [--start <ts>] [--end <ts>] \
17
- [--limit N] [--cursor <c>] [--json]
18
- ```
19
-
20
- - `<symbol>` — canonical ticker (`BTC`, `ETH`) or an exchange pair (`BTCUSDT`, `BTCUSDT_PERP`).
21
- - `--exchange` — **omit for the merged best-source series** (best venue per minute, gaps backfilled). Pin a venue only for that venue's raw series.
22
- - `--interval` defaults to `1h`. `--market` defaults to `spot`.
23
- - `--start` / `--end` — ISO-8601 UTC (`2026-01-01`) or epoch ms. Buckets are left-aligned UTC.
24
- - `--limit` defaults to 500, hard max 5000.
25
-
26
- ## Examples
27
-
28
- ```bash
29
- # Last 500 hourly candles, merged best-source:
30
- vike ohlcv BTC --json
31
-
32
- # 4h Binance perp candles for ETH:
33
- vike ohlcv ETH --interval 4h --market perp --exchange binance --json
34
-
35
- # Daily candles over an explicit range:
36
- vike ohlcv SOL --interval 1d --start 2026-01-01 --end 2026-03-01 --json
37
-
38
- # Page forward with the cursor from a previous call:
39
- vike ohlcv BTC --interval 1m --limit 5000 --cursor <next_cursor> --json
40
- ```
41
-
42
- ## Output
43
-
44
- `{ symbol, pair, exchange, interval, market, tz, candles[], next_cursor }`
45
-
46
- Each candle: `{ ts (epoch ms, UTC), open, high, low, close, volume }`, ascending by `ts`.
47
-
48
- ## Reading
49
-
50
- - **Look-ahead-safe**: the in-progress (partial) bucket is excluded, so the last candle is always closed — safe to feed into a backtest.
51
- - `exchange: "merged"` means no `--exchange` was pinned; each minute is sourced from the best available venue with gaps backfilled.
52
- - `pair` echoes how the symbol resolved — `BTCUSDT` for spot, `BTCUSDT_PERP` for perp.
53
- - Use `next_cursor` to page; pass it back via `--cursor`. A null/absent cursor means the series is exhausted.
54
-
55
- ## Anti-patterns
56
-
57
- - Don't use this for an on-chain/DEX-only token with no CEX listing — use `vike token chart <contract_address>` instead.
58
- - Don't omit `--market perp` when the user clearly means a perpetual; spot and perp candles differ.
59
- - Don't request 1m candles over a multi-month range in one call — page with `--cursor` (hard max 5000 candles/call).
60
-
61
- ## Pairs well with
62
-
63
- - `vike token chart <addr>` — DEX candles when there's no CEX pair
64
- - `vike perp funding` / `vike perp spreads` — pair candle context with funding/spread arb
65
- - `vike options flow` — overlay options positioning on the underlying's candles
@@ -1,49 +0,0 @@
1
- ---
2
- name: vike-options-flow
3
- description: Deribit options flow — call/put volume, put-call ratios, and direction signals for BTC / ETH / SOL. Use when the user asks "options flow on X" / "put call ratio" / "options positioning".
4
- allowed-tools: Bash(vike:*)
5
- ---
6
-
7
- # vike-options-flow
8
-
9
- ## Command
10
-
11
- ```bash
12
- vike options flow --symbol BTC|ETH|SOL [--window 1d|1w|1m] [--json]
13
- ```
14
-
15
- Default: BTC, 1d.
16
-
17
- ## Output
18
-
19
- Per-window aggregates: call volume, put volume, put-call ratio, net delta, open-interest deltas.
20
-
21
- ## Reading the put-call ratio (PCR)
22
-
23
- | PCR (volume basis) | Read |
24
- |---|---|
25
- | < 0.5 | **Aggressive call buying** — bullish positioning, or call-overwrite unwind |
26
- | 0.5–0.8 | Normal bullish |
27
- | 0.8–1.2 | Balanced |
28
- | 1.2–1.8 | Bearish hedging or directional put buying |
29
- | > 1.8 | Heavy put demand — fear / hedge spike |
30
-
31
- PCR is **not a contrarian signal** on its own. Cross-reference with spot price action and funding:
32
- - High PCR + price falling + negative funding = real bearish capitulation
33
- - High PCR + price flat + positive funding = hedging into a rally (not panic)
34
-
35
- ## Window choice
36
-
37
- - `1d` — intraday sentiment shifts, useful around major events
38
- - `1w` — positioning trend; cleaner read for narrative
39
- - `1m` — structural positioning; useful for IV-rank and term-structure context
40
-
41
- ## Anti-patterns
42
-
43
- - Don't quote raw call/put volume without context — Deribit's BTC notional is in the tens of billions weekly; a $100M day means little in isolation.
44
- - Don't conflate flow (new positions) with open interest (cumulative). Flow is the change; OI is the stock.
45
-
46
- ## Pairs well with
47
-
48
- - `vike-perp-funding-arb` for the corresponding perp positioning
49
- - `vike-perp-screener` for the broader market read
@@ -1,55 +0,0 @@
1
- ---
2
- name: vike-web-fetch
3
- description: Fetch a URL's content (via Tavily extract) and optionally answer a question about it using Cerebras Llama 3.3 70B. Use when the user gives a URL and asks "what does this page say" / "summarise X" / "extract Y from this article".
4
- allowed-tools: Bash(vike:*)
5
- ---
6
-
7
- # vike-web-fetch
8
-
9
- ## Command
10
-
11
- ```bash
12
- vike web fetch <url> [--ask "<question>"] [--json]
13
- ```
14
-
15
- ## Examples
16
-
17
- ```bash
18
- vike web fetch https://example.com/article
19
- vike web fetch https://example.com/article --ask "what's the launch date?"
20
- vike web fetch https://docs.hyperliquid.xyz/funding --ask "how often does funding settle?"
21
- ```
22
-
23
- ## Output
24
-
25
- ```json
26
- {
27
- "url": "https://...",
28
- "content_length": 12345,
29
- "content": "First 8K chars of extracted content...",
30
- "answer": "Answer to your question if --ask was provided"
31
- }
32
- ```
33
-
34
- If `--ask` is omitted, you get raw extracted content only.
35
-
36
- ## How it works
37
-
38
- 1. Tries Tavily's `/extract` endpoint first — returns clean markdown-like text
39
- 2. Falls back to raw HTTP GET if Tavily extract is unavailable
40
- 3. If `--ask` is provided, sends content + question to Cerebras Llama 3.3 70B for a focused answer
41
-
42
- ## Why we use Cerebras (not Gemini / OpenAI)
43
-
44
- Cerebras Llama 3.3 70B is ~10x cheaper than Gemini 2.5 Flash and ~3-5x faster (1000+ tok/sec inference). Same answer quality for short Q&A on supplied content.
45
-
46
- ## Anti-patterns
47
-
48
- - Don't fetch pay-walled URLs and expect text — you'll get a paywall page. Cite the URL and tell the user instead.
49
- - Don't fetch huge files (PDFs > 10MB, videos) — the extract will be truncated and likely garbage.
50
- - Don't ask `--ask` questions the content can't possibly answer — Cerebras will hallucinate. Stay tight to what's on the page.
51
-
52
- ## Pairs well with
53
-
54
- - `vike web search` — find URLs to fetch first
55
- - `vike-web-research` — composite multi-step research workflow
@@ -1,58 +0,0 @@
1
- ---
2
- name: vike-web-research
3
- description: Multi-step web research playbook — search → fetch the most relevant URL → synthesize answer. Use when the user asks an open question that requires fresh web info ("what did Trump say about crypto yesterday", "latest exchange listing announcement", "summarize the latest Pendle update").
4
- allowed-tools: Bash(vike:*)
5
- ---
6
-
7
- # vike-web-research
8
-
9
- Composite playbook combining `vike web search` and `vike web fetch` for cross-source synthesis.
10
-
11
- ## Workflow
12
-
13
- ### 1. Search (gather candidate URLs)
14
-
15
- ```bash
16
- vike web search "<query>" --max 5 --json
17
- ```
18
-
19
- Capture the top results' URLs and titles. If the response includes an `answer` field, that's often enough for simple factual queries — surface it directly and skip step 2.
20
-
21
- ### 2. Fetch (only when search snippets are insufficient)
22
-
23
- ```bash
24
- vike web fetch <top-result-url> --ask "<focused question>" --json
25
- ```
26
-
27
- Fetch only the highest-scoring (Tavily) or most-credible (Serper) URL. Re-fetching all 5 search results burns credits and adds noise.
28
-
29
- ### 3. Synthesize
30
-
31
- > **Question:** `<user query>`
32
- > **Answer (from `<source URL>`):** `<extracted answer>`
33
- > **Other relevant sources:** `<url1>`, `<url2>` (with one-line summaries each)
34
-
35
- Always link the source URL so the user can verify.
36
-
37
- ## When to skip the workflow
38
-
39
- - **One-shot fact lookup** (price, date, contract address) → if `web search` returns it in the `answer` field, just quote that
40
- - **The user already gave you a URL** → skip search, jump to `web fetch`
41
- - **On-chain question** → don't web-research; use vike's on-chain tools (`token holders`, `wallet labels`, `perp funding`, etc.)
42
-
43
- ## Anti-patterns
44
-
45
- - Don't fetch 5 URLs and average them — pick the most authoritative
46
- - Don't quote Reddit / Twitter as primary sources for hard claims (price, dates, addresses); use them for sentiment only
47
- - Don't combine web research with `vike-smart-money-discovery` results without saying so — they're different evidence types
48
-
49
- ## Cost
50
-
51
- - Step 1: 2 credits (Tavily basic)
52
- - Step 2: 3 credits (web_fetch with --ask = Tavily extract + Cerebras Q&A)
53
- - Total: ~5 credits per research round
54
-
55
- ## Pairs well with
56
-
57
- - `vike-token-research` — combine on-chain data with off-chain news
58
- - `vike-polymarket-screener` — narrative-driven prediction markets often need news context
@@ -1,60 +0,0 @@
1
- ---
2
- name: vike-web-search
3
- description: Web search using Tavily (LLM-tuned snippets, primary) with Serper Google fallback. Use when you need current events, project announcements, exchange listing news, or anything not in the vike on-chain databases.
4
- allowed-tools: Bash(vike:*)
5
- ---
6
-
7
- # vike-web-search
8
-
9
- ## Command
10
-
11
- ```bash
12
- vike web search "<query>" [--max N] [--depth basic|advanced] [--json]
13
- ```
14
-
15
- The query can contain multiple words (no quoting required if you don't have shell-special chars).
16
-
17
- ## Examples
18
-
19
- ```bash
20
- vike web search "hyperliquid funding rate explained"
21
- vike web search "polymarket trump 2026 latest" --max 8
22
- vike web search "ETH ETF inflows last week" --depth advanced
23
- ```
24
-
25
- ## Output
26
-
27
- ```json
28
- {
29
- "provider": "tavily",
30
- "query": "...",
31
- "answer": "Optional one-paragraph synthesised answer (Tavily only)",
32
- "results": [
33
- { "title": "...", "url": "...", "snippet": "...", "score": 0.88 },
34
- ...
35
- ]
36
- }
37
- ```
38
-
39
- `score` is a 0-1 relevance from Tavily (higher = more relevant). Serper doesn't include it.
40
-
41
- ## When to use vs on-chain tools
42
-
43
- - **News / sentiment / project context** → `vike web search`
44
- - **On-chain flows / wallet activity / token prices** → use the dedicated `vike token`/`vike wallet`/`vike perp` tools first
45
- - **"What did X tweet" / "did Binance announce Y"** → web search
46
-
47
- ## Cost note
48
-
49
- Web search calls cost 2 credits + an external API fee on our side. Use it when you genuinely need fresh / non-onchain info, not as a first-resort.
50
-
51
- ## Anti-patterns
52
-
53
- - Don't web-search for things our on-chain tools answer faster ("top wallets holding PEPE" → `vike token holders` is faster, cheaper, and more accurate)
54
- - Don't request `--max > 5` unless you genuinely need a wide net — agents waste tokens summarising 10 results when 3 would do
55
- - `--depth advanced` doubles the cost; reserve for hard-to-answer queries
56
-
57
- ## Pairs well with
58
-
59
- - `vike-web-fetch` — once you have a promising URL, fetch its full content
60
- - `vike-web-research` — composite playbook for multi-step research
@@ -1,33 +0,0 @@
1
- import { callTool } from '../mcp-client.js';
2
- import { emit, emitError } from '../format.js';
3
- import { parseInt10 } from '../util.js';
4
-
5
- export function registerOhlcv(program) {
6
- program
7
- .command('ohlcv <symbol>')
8
- .description('Historical CEX candles for a ticker (BTC) or pair (BTCUSDT) across any timeframe')
9
- .option('--interval <i>', '1m | 3m | 5m | 15m | 30m | 1h | 2h | 4h | 6h | 8h | 12h | 1d | 1w', '1h')
10
- .option('--exchange <e>', 'Pin one venue: binance | bybit | okx | gate | kucoin | coinbase | mexc | pyth. Omit for merged best-source.')
11
- .option('--market <m>', 'spot | perp', 'spot')
12
- .option('--start <t>', 'ISO-8601 UTC or epoch ms (inclusive)')
13
- .option('--end <t>', 'ISO-8601 UTC or epoch ms (exclusive)')
14
- .option('--limit <n>', 'Max candles (default 500, max 5000)', '500')
15
- .option('--cursor <c>', 'Opaque paging cursor from a previous call')
16
- .option('--json', 'Emit JSON')
17
- .action(async (symbol, opts) => {
18
- try {
19
- const args = {
20
- symbol,
21
- interval: opts.interval,
22
- market: opts.market,
23
- limit: parseInt10(opts.limit, 500),
24
- };
25
- if (opts.exchange !== undefined) args.exchange = opts.exchange;
26
- if (opts.start !== undefined) args.start = opts.start;
27
- if (opts.end !== undefined) args.end = opts.end;
28
- if (opts.cursor !== undefined) args.cursor = opts.cursor;
29
- const r = await callTool('ohlcv', args);
30
- emit(r, opts);
31
- } catch (err) { emitError(err, opts); }
32
- });
33
- }
@@ -1,24 +0,0 @@
1
- import { callTool } from '../mcp-client.js';
2
- import { emit, emitError } from '../format.js';
3
-
4
- export function registerOptions(program) {
5
- const cmd = program
6
- .command('options')
7
- .description('Deribit options flow');
8
-
9
- cmd
10
- .command('flow')
11
- .description('Call/put flow, volume, and put-call ratios')
12
- .option('--symbol <s>', 'BTC | ETH | SOL', 'BTC')
13
- .option('--window <w>', '1d | 1w | 1m', '1d')
14
- .option('--json', 'Emit JSON')
15
- .action(async (opts) => {
16
- try {
17
- const r = await callTool('options_flow', {
18
- symbol: opts.symbol,
19
- window: opts.window,
20
- });
21
- emit(r, opts);
22
- } catch (err) { emitError(err, opts); }
23
- });
24
- }
@@ -1,41 +0,0 @@
1
- import { callTool } from '../mcp-client.js';
2
- import { emit, emitError } from '../format.js';
3
- import { parseInt10 } from '../util.js';
4
-
5
- export function registerWeb(program) {
6
- const cmd = program
7
- .command('web')
8
- .description('Web search + fetch (Tavily / Serper / Cerebras)');
9
-
10
- cmd
11
- .command('search <query...>')
12
- .description('Web search (Tavily primary, Serper Google fallback)')
13
- .option('--max <n>', 'Max results (default 5, max 10)', '5')
14
- .option('--depth <d>', 'Tavily depth: basic | advanced', 'basic')
15
- .option('--json', 'Emit JSON')
16
- .action(async (queryParts, opts) => {
17
- try {
18
- const r = await callTool('web_search', {
19
- query: queryParts.join(' '),
20
- max_results: parseInt10(opts.max, 5),
21
- search_depth: opts.depth,
22
- });
23
- emit(r, opts);
24
- } catch (err) { emitError(err, opts); }
25
- });
26
-
27
- cmd
28
- .command('fetch <url>')
29
- .description('Fetch URL and optionally answer a question about it')
30
- .option('--ask <question>', 'Question to answer from the content (uses Cerebras)')
31
- .option('--json', 'Emit JSON')
32
- .action(async (url, opts) => {
33
- try {
34
- const r = await callTool('web_fetch', {
35
- url,
36
- question: opts.ask,
37
- });
38
- emit(r, opts);
39
- } catch (err) { emitError(err, opts); }
40
- });
41
- }