- actions/checkout v4 -> v7, actions/setup-node v4 -> v7
- pnpm 11.1.2 -> 11.20.0
- CI node-version 22 -> 24, and engines.node >=22 -> >=24 to match
BREAKING: Node 22 is no longer supported — Node 22 users will get an
engine error on `opencli plugin install`. Node 22 entered maintenance in
Oct 2025; 24 is the current Active LTS.
Docs updated to match, including the tradingview-reader skill (which
installs this repo's plugin, so engines.node — not opencli's own ">= 21"
floor — is the binding constraint) and stale rationales that justified
the old floor ("built-in fetch"/"built-in WebSocket" stabilised in Node
22; Bun 1.0 does not satisfy engines.node >= 24).
The social readers keep ">= 21 (or Bun >= 1.0)" — they install no plugin
from this repo, so opencli's own floor applies.
ccbump@0.2.1 and skill-lint@v3 were already latest; the opencli
">=1.8.0" peer range is a minimum floor, not a pin, and already admits
1.8.6.
opencli-plugin-hyperliquid
Read-only opencli adapter for Hyperliquid, the on-chain perps/spot DEX. Exposes perp + spot market data — markets, mid prices, L2 order book, OHLCV candles, funding history, and a cross-venue funding-arb screen — all from Hyperliquid's public info API. No API key, no wallet, no login.
This plugin lives inside the himself65/finance-skills monorepo. Install it via opencli's monorepo subpath syntax:
opencli plugin install github:himself65/finance-skills/hyperliquid
Install
# Prereqs: Node ≥ 24 (see engines.node)
npm install -g @jackwener/opencli
opencli plugin install github:himself65/finance-skills/hyperliquid
Zero setup. Every command hits https://api.hyperliquid.xyz/info directly — no API key, no auth, no cookies, no running app.
Commands
| Command | Description | Output columns |
|---|---|---|
hyperliquid markets |
Perp markets table | coin, markPx, midPx, oraclePx, change24hPct, fundingHrPct, fundingAprPct, openInterest, oiNotional, dayNtlVlm, premiumPct, maxLeverage |
hyperliquid spot-markets |
Spot pairs table | pair, base, markPx, midPx, change24hPct, dayNtlVlm, circulatingSupply, marketCap, canonical |
hyperliquid mids |
Mid price for every market | coin, mid |
hyperliquid book --coin BTC |
L2 order book snapshot | side, level, px, sz, orders |
hyperliquid candles --coin BTC |
OHLCV candles | time, open, high, low, close, volume, trades |
hyperliquid funding-history --coin BTC |
Historical hourly funding | coin, fundingRatePct, fundingAprPct, premiumPct, time |
hyperliquid funding-compare |
Cross-venue predicted funding (arb) | coin, hlAprPct, binanceAprPct, bybitAprPct, hlVsBinancePct, hlVsBybitPct, nextHlFunding |
markets flags: --coin, --sort {dayNtlVlm|change24hPct|fundingAprPct|fundingHrPct|openInterest|oiNotional|markPx|coin} (default dayNtlVlm), --limit, --include-delisted.
spot-markets flags: --pair (pair or base token), --sort {dayNtlVlm|change24hPct|marketCap|markPx|pair}, --limit, --canonical-only.
book flags: --coin (required), --depth (1-20, default 10), --n-sig-figs (2-5 price aggregation).
candles flags: --coin (required), --interval {1m|3m|5m|15m|30m|1h|2h|4h|8h|12h|1d|3d|1w|1M} (default 1h), --limit (default 100, max 5000).
funding-history flags: --coin (required), --hours (default 24), --limit.
funding-compare flags: --coin, --sort {hlVsBinancePct|hlVsBybitPct|hlAprPct|binanceAprPct|bybitAprPct|coin} (default hlVsBinancePct, ranked by absolute spread), --limit.
All commands accept -f json|yaml|md|csv|table.
Data path
Every command issues a single POST https://api.hyperliquid.xyz/info with a { "type": "..." } body and normalizes the response:
| Command | info type |
|---|---|
markets |
metaAndAssetCtxs |
spot-markets |
spotMetaAndAssetCtxs |
mids |
allMids (+ spotMeta to resolve @index → pair name) |
book |
l2Book |
candles |
candleSnapshot |
funding-history |
fundingHistory |
funding-compare |
predictedFundings |
Numbers arrive as strings and are coerced to finite numbers (or null). Funding is reported per interval — Hyperliquid perps fund hourly, so APR = rate × 24 × 365; funding-compare annualizes each venue with its own interval (Binance/Bybit commonly 4h).
Auth model
None. The info endpoint is fully public and read-only. There is no trading path in this plugin — placing/cancelling orders on Hyperliquid requires wallet-signed actions on the separate /exchange endpoint, which this adapter never calls.
Status
v0.1 — wire shapes verified live against api.hyperliquid.xyz (June 2026). Pure-helper normalizers are unit-tested (npm test); the HTTP path is a single documented POST /info per command.
Known notes:
midsresolves non-canonical spot keys (@<index>) toBASE/QUOTEvia the token table; perp coin names and canonical pair names pass through unchanged, and builder-deployed perp-dex keys (#<n>) are surfaced as-is.markets/spot-markets/funding-*numeric sorts placenulllast.
Layout
opencli-plugins/hyperliquid/
├── opencli-plugin.json # plugin manifest
├── package.json # Node package (type: module)
├── lib/
│ ├── api.js # infoFetch POST helper, num/pctChange/funding/isoTime helpers
│ ├── markets.js # perp + spot market normalizers, allMids resolver
│ ├── funding.js # funding history + cross-venue predicted-funding pivot
│ ├── book.js # l2 book flattener + spread summary
│ └── candles.js # interval table + OHLCV normalizer
├── markets.js # metaAndAssetCtxs → perp markets
├── spot-markets.js # spotMetaAndAssetCtxs → spot pairs
├── mids.js # allMids → mid prices
├── book.js # l2Book → order book
├── candles.js # candleSnapshot → OHLCV
├── funding-history.js # fundingHistory → historical funding
├── funding-compare.js # predictedFundings → cross-venue arb screen
└── tests/
├── api.test.js # num, pctChange, fundingToApr, isoTime
├── markets.test.js # perp/spot normalizers, allMids resolver
├── funding.test.js # funding history + cross-venue pivot/APR
├── book.test.js # l2 flatten + spread
└── candles.test.js # OHLCV normalizer
License
MIT