@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 +23 -0
- package/README.md +13 -14
- package/package.json +7 -6
- package/skills/vike/SKILL.md +12 -58
- package/skills/vike-candles/SKILL.md +61 -0
- package/skills/vike-perp-screener/SKILL.md +0 -1
- package/skills/vike-router/SKILL.md +4 -6
- package/skills/vike-token-research/SKILL.md +0 -5
- package/skills/vike-token-search/SKILL.md +0 -1
- package/skills/vike-token-transfers/SKILL.md +0 -1
- package/skills/vike-wallet-balances/SKILL.md +0 -2
- package/skills/vike-wallet-batch/SKILL.md +0 -1
- package/skills/vike-wallet-ens/SKILL.md +0 -1
- package/skills/vike-wallet-label-provenance/SKILL.md +0 -2
- package/skills/vike-wallet-pnl-history/SKILL.md +0 -1
- package/skills/vike-wallet-portfolio/SKILL.md +1 -3
- package/skills.sh.json +6 -18
- package/src/commands/candles.js +57 -0
- package/src/commands/labels.js +0 -32
- package/src/commands/token.js +1 -16
- package/src/index.js +4 -9
- package/skills/vike-defi-positions/SKILL.md +0 -59
- package/skills/vike-fund-holdings/SKILL.md +0 -53
- package/skills/vike-ohlcv/SKILL.md +0 -65
- package/skills/vike-options-flow/SKILL.md +0 -49
- package/skills/vike-web-fetch/SKILL.md +0 -55
- package/skills/vike-web-research/SKILL.md +0 -58
- package/skills/vike-web-search/SKILL.md +0 -60
- package/src/commands/ohlcv.js +0 -33
- package/src/commands/options.js +0 -24
- package/src/commands/web.js +0 -41
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
|
[](https://www.npmjs.com/package/@vike-io/cli)
|
|
6
6
|
[](https://opensource.org/licenses/MIT)
|
|
7
7
|
[](https://nodejs.org)
|
|
8
|
-
[](https://skills.sh/vike-io/vike-cli)
|
|
8
|
+
[](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,
|
|
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 |
|
|
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
|
|
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,
|
|
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
|
-
| **
|
|
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 **
|
|
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.
|
|
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": "^
|
|
73
|
+
"@changesets/cli": "^3.0.3",
|
|
73
74
|
"eslint": "^10.4.0",
|
|
74
|
-
"vitest": "^
|
|
75
|
+
"vitest": "^5.0.4"
|
|
75
76
|
}
|
|
76
77
|
}
|
package/skills/vike/SKILL.md
CHANGED
|
@@ -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,
|
|
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,
|
|
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
|
-
|
|
|
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 +
|
|
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,
|
|
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
|
|
189
|
-
|
|
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
|
-
###
|
|
223
|
-
|
|
213
|
+
### Candles
|
|
214
|
+
Historical OHLCV from venues whose data is on-chain.
|
|
224
215
|
|
|
225
216
|
| Tool | Description | Skill |
|
|
226
217
|
|---|---|---|
|
|
227
|
-
| `
|
|
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
|
|
@@ -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,
|
|
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
|
-
|
|
|
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 |
|
|
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
|
|
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:
|
|
@@ -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
|
-
~
|
|
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
|
|
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,
|
|
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": "
|
|
68
|
-
"description": "
|
|
64
|
+
"title": "Candles",
|
|
65
|
+
"description": "Historical OHLCV for Hyperliquid perp/spot markets and Polymarket outcome tokens.",
|
|
69
66
|
"skills": [
|
|
70
|
-
"vike-
|
|
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
|
+
}
|
package/src/commands/labels.js
CHANGED
|
@@ -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
|
}
|
package/src/commands/token.js
CHANGED
|
@@ -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
|
|
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 {
|
|
11
|
-
|
|
12
|
-
//
|
|
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
|
-
|
|
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
|
package/src/commands/ohlcv.js
DELETED
|
@@ -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
|
-
}
|
package/src/commands/options.js
DELETED
|
@@ -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
|
-
}
|
package/src/commands/web.js
DELETED
|
@@ -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
|
-
}
|