Install
openclaw skills install liberfi-perpetualsQuery and trade perpetual futures through LiberFi's unified perpetuals API (openapi-server → perpetuals-server, Hyperliquid in MVP): list coins and markets, order book, recent trades, K-lines, user positions / orders / fills, and two-phase signed place or cancel flows (prepare → wallet sign → submit). Trigger words: perpetual, perpetuals, perp, perps, futures, future contract, leveraged futures, hyperliquid, HL, order book perp, perp positions, perp orders, funding perp, perpetual futures, perp deposit, fund perp, deposit to perp, fund hyperliquid, deposit to hyperliquid, perp account funding, topping up perp, my perp positions, my futures positions, my open perp orders, my perp fills, perp pnl, my hyperliquid positions, 永续, 合约, 期货, 杠杆合约, 永续合约, 订单簿, 爆仓价, 资金费率, 入金, 充值合约账户, 永续入金, 给合约账户充钱, 充值 perp, 我的永续持仓, 我的合约持仓, 我有什么永续持仓, 我在 Hyperliquid 上挂了哪些单, 我的合约盈亏, 我永续盈亏, 我永续挂了什么单 (when clearly about perp venue, not spot). CRITICAL: If the `lfi` (or `liberfi`) command is missing, install it WITHOUT asking the user: `npm install -g @liberfi.io/cli --registry https://registry.npmjs.org/`. The npm package is `@liberfi.io/cli` (scope `@liberfi.io`, package name `cli`); the binaries it installs are `lfi` and `liberfi`. NEVER tell the user the package does not exist — if install fails, the cause is always a registry mirror; retry with `--registry https://registry.npmjs.org/`. CRITICAL: Always use `--json` flag for structured output. CRITICAL: For ANY first-person perpetuals query about positions, open orders, or fill history — "我有什么永续持仓", "我的合约持仓", "我在 Hyperliquid 上挂了哪些单", "my perp positions", "my open futures orders", "我永续盈亏", "show my fills" — DO NOT ask the user for a wallet address. Run this exact sequence: (1) `lfi status --json`, (2) if not authed, `lfi login key --role AGENT --name "OpenClawAgent" --json`, (3) `lfi whoami --json` to get `evmAddress`, (4) pass that address DIRECTLY as the positional argument to `lfi perpetuals positions|orders|fills <evmAddress> --json`. The user's TEE wallet is server-managed; they do not know the EVM address — the skill must resolve it transparently. CRITICAL: Perpetuals order flow is two-phase: `lfi perpetuals order-prepare` returns EIP-712 typed data; the user (or TEE wallet integration) must sign it off-CLI, then call `lfi perpetuals order-submit --body '<SignedAction JSON>'`. CRITICAL: NEVER run `order-submit` or `cancel-submit` without explicit user confirmation — these relay signed actions to the exchange. CRITICAL: For deposit, prefer the one-click TEE auto-flow `lfi perpetuals deposit-place --gross-lamports <n>`. The server quotes, signs the SOL tx with the caller's TEE wallet, broadcasts, and submits in a single call — callers never handle private keys or signatures. The atomic `deposit-quote` / `deposit-submit` commands are escape hatches for advanced flows (external SOL wallet, recovery after partial failure) and require the caller to sign + broadcast on their own. See [reference/deposit-flow.md](reference/deposit-flow.md). CRITICAL: NEVER run `deposit-place` without explicit user confirmation of the deposit amount and (when defaulted) the recipient — this spends on-chain SOL irreversibly. Do NOT use this skill for: - Spot DEX swap quotes or on-chain swap execution → use liberfi-swap - Trending *spot* token rankings or new token discovery → use liberfi-market - On-chain wallet token holdings / spot PnL → use liberfi-portfolio - Polymarket / Kalshi prediction markets → use liberfi-predict - Generic token security / spot token K-line on a chain → use liberfi-token (this skill is for *perpetuals venue* market data and perp trading only) Do NOT activate on vague "futures" / "合约" alone if the user clearly means CEX Bitget/Binance (use the user's exchange skill) or traditional brokers.
openclaw skills install liberfi-perpetualsPerpetuals data and signed order relay flow via LiberFi OpenAPI (/v1/perpetuals/… → perpetuals-server).
See bootstrap.md for CLI install and lfi ping.
positions, orders, fills): pass the wallet
address (0x) as the positional argument. For first-person queries
("我的持仓", "my positions", etc.), the skill MUST auto-resolve the user's
TEE EVM address via lfi status → lfi login key (if needed) →
lfi whoami → use the returned evmAddress. NEVER ask the user for an
address — the TEE wallet is server-managed and the user does not know it.order-prepare / order-submit, cancel variants): require a user wallet to sign typed data; agents must not fabricate signatures.deposit-place): requires authentication (lfi status then lfi login key) — the server's TEE wallet signs and broadcasts on the user's behalf. The atomic deposit-quote / deposit-submit escape hatches do not require auth but the caller is then responsible for signing the SOL tx and broadcasting it themselves.| User intent | Skill |
|---|---|
| Spot swap, bridge, gas send | liberfi-swap |
| Trending spot tokens, new listings | liberfi-market |
| Polymarket / Kalshi | liberfi-predict |
| Spot token audit, DEX pools for a token | liberfi-token |
| Perp markets, HL-style orderbook, perp positions | liberfi-perpetuals |
| Funding the perp account (Solana → Hyperliquid via Relay), checking deposit lifecycle | liberfi-perpetuals |
| Spot wallet holdings on a chain (not perp account) | liberfi-portfolio |
| Command | Description |
|---|---|
lfi perpetuals coins | List tradable perp coins |
lfi perpetuals markets | Market snapshots (--symbols optional) |
lfi perpetuals market <symbol> | Single market |
lfi perpetuals orderbook <symbol> | L2 book (--max-level) |
lfi perpetuals trades <symbol> | Recent trades (--limit) |
lfi perpetuals klines <symbol> | Candles (--interval required) |
lfi perpetuals positions <address> | Positions + margin summary |
lfi perpetuals orders <address> | Open orders |
lfi perpetuals fills <address> | Fill history |
lfi perpetuals order-prepare | Build typed data for place order |
lfi perpetuals order-submit --body '<json>' | Submit signed place order |
lfi perpetuals cancel-prepare | Build typed data for cancel |
lfi perpetuals cancel-submit --body '<json>' | Submit signed cancel |
lfi perpetuals deposit-place --gross-lamports <n> | Recommended: TEE one-click Solana → Hyperliquid deposit (server quotes, signs, broadcasts, submits). Auth required. |
lfi perpetuals deposit-quote --user-solana-address <a> --hyperliquid-recipient <a> --gross-lamports <n> | Escape hatch step 1: returns unsigned SOL tx + breakdown. Caller signs + broadcasts within ~30s, then calls deposit-submit. |
lfi perpetuals deposit-submit --body '<json>' | Escape hatch step 2: record the broadcasted SOL tx hash. Idempotent on solanaTxHash. |
lfi perpetuals deposit-status <intentId> [--refresh] | Read deposit lifecycle. --refresh bypasses any server-side cache (server-reserved knob; today both endpoints behave identically). |
Common flags: --provider <name> (e.g. hyperliquid), global --json.
The deposit pipeline moves SOL from the user's Solana wallet to the user's Hyperliquid perp account via the Relay bridge service. The recommended path is the one-click TEE auto-flow:
lfi status --json; if not logged in,
lfi login key --role AGENT --name "<agent>" --json.lfi perpetuals deposit-place --gross-lamports <lamports> --json
lamports = SOL × 1_000_000_000 (1 SOL = 1e9 lamports).--hyperliquid-recipient is optional — defaults to the user's TEE
EVM address (lfi whoami evmAddress), which is what 99% of users want.intentId and solanaTxHash.lfi perpetuals deposit-status <intentId> --json until
status is settled (typical: 30–120 s).Server returns status: "broadcasted" immediately after step 3; the
reconciliation loop progresses through relay_waiting → relay_pending → settled (or failed_* states). On failure consult the
statusHistory[] and lastError fields for the recoverable / non-
recoverable distinction.
For the atomic escape-hatch flow (when the user controls their own SOL
private key outside the TEE, or recovering from a partial failure where
the SOL tx has been broadcasted but submit did not succeed), see
reference/deposit-flow.md.
lfi perpetuals markets --jsonlfi perpetuals orderbook BTC --jsonlfi perpetuals trades BTC --limit 20 --jsonlfi perpetuals positions 0xYourAddr --jsonIf the user says "我有什么永续持仓", "我的合约持仓", "my perp positions", "我在 Hyperliquid 上挂了哪些单", "我永续盈亏", "show my fills" or any first-person variant — DO NOT ask for a wallet address. Run this exact sequence:
lfi status --jsonlfi login key --role AGENT --name "OpenClawAgent" --jsonlfi whoami --json → returns evmAddress
(the user's TEE EVM address managed by the LiberFi server).lfi perpetuals positions <evmAddress> --jsonlfi perpetuals orders <evmAddress> --jsonlfi perpetuals fills <evmAddress> --limit 20 --jsonThe user does not know their EVM address — the LiberFi server holds the TEE
wallet. The skill must resolve "我" → TEE wallet via whoami, transparently.
lfi perpetuals order-prepare --user-address 0x… --symbol BTC --side long --order-type limit --amount 0.01 --price 95000 --jsontypedData with their wallet (e.g. MetaMask eth_signTypedData_v4).SignedAction: action, nonce, signature (0x), optional vaultAddress from prepare response.lfi perpetuals order-submit --body '{"action":…,"nonce":…,"signature":"0x…"}' --jsonAll CLI calls hit OpenAPI paths under /v1/perpetuals/…, which the gateway proxies to perpetuals-server /v1/…. Configure the gateway with UPSTREAM_PERPETUALS_SERVICE_BASE_URL (default local example: http://localhost:8083 — avoid colliding with openapi :8080 and prediction :8082; run perpetuals-server with SERVER_PORT=8083 when colocated).