Setup
1. Install CLI
which hl1m
If hl1m is missing, install the 1m-trade package (requires Python 3.11+ and pipx):
- If
pipx exists: pipx install 1m-trade
- If
pipx is missing:
- Linux: install
pipx via apt / yum / dnf
- macOS:
brew install pipx
- Windows:
python -m pip install --user pipx then python -m pipx ensurepath
pipx install 1m-trade
2. Verify
hl1m --help
3. Upgrade
pipx upgrade 1m-trade
Basic syntax
hl1m [--testnet] <command> [command_args]
Core flags
--testnet: use Hyperliquid testnet (default: mainnet)
Wallet initialization
Official wallet UI (create & manage):
- For creating a wallet and managing it (addresses, keys, proxy/API settings as offered by the product), direct users to 1M-Trade in the browser. Do not recreate that flow inside chat.
- After the user has what they need from the site, they can bind the CLI locally with
init-wallet below.
When to trigger: user wants to use their own wallet with this skill (e.g. “init wallet”, “connect my wallet”, “configure Hyperliquid”, first-time setup before trading).
Natural-language binding (one-shot address + proxy key)
Use this when the user asks to configure/bind the trading account and supplies both a wallet address and a proxy (API) private key in the same message (often with explicit field labels).
Recognized intents (examples, non-exhaustive):
configure trading account, bind wallet, init wallet, set up the CLI, connect Hyperliquid, with fields labeled like wallet address and proxy private key / API private key / proxy key.
- If the user writes in another language, map phrases that clearly denote public wallet address vs proxy/API signing key to
--address and --pri_key respectively (same semantics as the English labels above).
Label → flag mapping:
| User wording (meaning) |
hl1m flag |
wallet address, address, or any label clearly referring to the public trading / master address shown in the UI |
--address |
proxy private key, API private key, proxy key, or any label clearly referring to the bot/API signing key — not the main EOA key |
--pri_key |
Parsing (apply before running init-wallet):
- Extract address: first
0x + 40 hexadecimal characters (case-insensitive), typically the value next to a label for the public wallet / address when labels exist.
- Extract proxy key: first
0x + 64 hexadecimal characters (typical for this flow). If the user wrote 64 hex digits without 0x, prefix 0x when the CLI requires it (see hl1m --help).
- Require both values; if only one is present, do not guess — ask for the missing piece or point to 1M-Trade + show the placeholder command only.
- If multiple
0x… strings appear, use labels to pair: the hex labeled as address → --address; the hex labeled as proxy/API key → --pri_key. Do not swap.
Exact command (values come from the user message; run in a trusted local shell):
hl1m init-wallet --address <parsed_address> --pri_key <parsed_proxy_private_key>
Assistant output: confirm bind success or CLI error; run hl1m query-user-state after success. Do not repeat the full private key in chat (mask or omit).
What to use (recommended):
--address: your wallet public address on Hyperliquid (the address you trade / view balances with — often the same as the “master” address shown in the UI, even when using a proxy key for signing).
--pri_key: the proxy private key (API / agent / delegated signing key) that Hyperliquid or your setup provides for automated trading — not the key that controls the full wallet.
Critical security warning:
- Never initialize with your wallet’s main / master private key (the EOA root key that fully controls funds). If that key is ever leaked from this CLI, local disk, or chat, you can lose the entire wallet.
- Use only the proxy private key intended for bots/APIs, plus the correct public address pairing. If you are unsure which key is which, stop and confirm in your wallet or Hyperliquid docs before running
init-wallet.
Rules:
- Do not ask users to paste secrets unless they are already initiating bind; prefer they run
init-wallet locally with no keys in chat. If they already sent address + proxy key in one message for binding, parse per Natural-language binding above, invoke hl1m init-wallet, and do not echo full keys in replies.
- You only execute
hl1m commands; do not edit skill files or read .env contents into the model context.
Command (placeholders — user substitutes on their machine; never paste real keys in chat):
hl1m init-wallet --address 0xYourWalletAddress --pri_key 0xYourProxyPrivateKey
--address: wallet public address (see above).
--pri_key: proxy private key for signing — not the main wallet private key.
If your CLI supports key-only init, you may use --pri_key alone when the address is derived from the key; follow hl1m --help / reference.md for your version.
After success:
- Run
hl1m query-user-state to confirm the account is visible and balances look correct.
Constraints
- If the user cannot open a position (e.g., insufficient margin), do not close other positions unless the user explicitly requests it.
Command list
Note: for any asset name (e.g. --coin), you can run query-meta to confirm the exact symbol. For example, user input "gold" often maps to xyz:GOLD. Always pass the canonical symbol.
1) Query commands
| Command |
Description |
Example |
query-user-state |
Query user state (positions + balances). Optional address override; structure follows the API/SDK response. |
hl1m query-user-state --address 0x123... |
query-open-orders |
Query open orders |
hl1m --testnet query-open-orders |
query-fills |
Query fills / trade history |
hl1m query-fills |
query-meta |
Query asset metadata (all symbols) |
hl1m query-meta |
query-mids |
Query mid prices (all symbols) |
hl1m query-mids |
query-kline |
Query kline/candles for a symbol |
hl1m query-kline --coin BTC --period 15m --start 1772511125000 --end 1772597525000 |
Retry rule (query commands only):
- If a query command returns an empty result (null/None, empty string, empty list/array, empty object/dict, or no meaningful fields), retry the same command exactly once.
- Do not change any args/flags/symbols/time ranges/formatting between the first attempt and the retry.
- If the second attempt is still empty, stop retrying and report: the command you ran, that it returned empty twice, and a brief possible cause (no data, endpoint delay, wrong symbol, no account activity).
Query command arguments
query-user-state
--address: optional. If omitted, the address is derived from the configured private key.
query-kline
--coin: required. Symbol such as BTC, ETH, or xyz:TSLA. Use query-meta to confirm the canonical symbol first.
--period: required. One of: 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 8h, 12h, 1d, 3d, 1w, 1M.
--start: optional (ms). Default is the start of the last 24 hours.
--end: optional (ms). Default is the current timestamp in ms.
2) Trading commands
| Command |
Description |
Example |
place-order |
Place a limit order (HIP-3 supported) |
hl1m place-order --coin BTC --is-buy True --qty 0.01 --limit-px 50000 --tif Gtc |
market-order |
Place a market order (recommended for HIP-3) |
hl1m --testnet market-order --coin ETH --is-buy True --qty 0.1 --slippage 0.01 |
market-close |
Close a position with a market order (recommended for HIP-3) |
hl1m market-close --coin ETH --qty 0.1 --slippage 0.01 |
cancel-order |
Cancel orders |
hl1m cancel-order --oid 123456 --coin HYPE |
update-leverage |
Update leverage |
hl1m update-leverage --coin BTC --leverage 10 --is-cross True |
update-isolated-margin |
Transfer isolated margin (HIP-3) |
hl1m update-isolated-margin --coin xyz:GOLD --amount 10 |
Trading command arguments
General rules
- For
--coin, always resolve the canonical symbol (use query-meta if needed).
- For
--qty, use query-meta results (e.g. szDecimals) to format the quantity precision correctly.
update-isolated-margin
--coin: required. Canonical symbol.
--amount: required. Transfer amount.
place-order
--coin: required.
--is-buy: required (True/False). True = long, False = short.
--qty: required.
--limit-px: required.
--tif: optional (Gtc/Ioc/Alo, default Gtc).
--reduce-only: optional (default False).
market-order
--coin: required.
--is-buy: required (True/False). True = long, False = short.
--qty: required.
--slippage: optional (default 0.02 = 2%).
market-close
--coin: required.
--qty: required.
--slippage: optional (default 0.02 = 2%).
cancel-order
--coin: optional; cancel all orders for a given symbol
--oid: optional; cancel a specific order id
- If neither is provided, cancel all open orders.
update-leverage
--coin: required.
--leverage: required (integer).
--is-cross: optional (True/False, default True).
Output
All commands print formatted JSON for easy parsing:
- Query commands: full data for the requested dimension
- Trading commands: results for order submit/cancel/leverage updates (success flags, order IDs, etc.)
Error handling
- Network issues: handled by the SDK with error messages
- Invalid trading parameters: returns official Hyperliquid error responses
Notes
- Private keys are sensitive. Do not expose or share them.
- Testnet vs mainnet are strictly separated. Confirm
--testnet before acting.
- Adjust slippage for market orders based on volatility; too small may fail.
- Leverage trading is risky. Choose leverage carefully.
- For proxy-style setups, follow
hl1m help for --address / --pri_key behavior.
Summary
- Use
hl1m for queries, trading, and init-wallet to bind a user-supplied address and key to local encrypted state.
- Install via
pipx install 1m-trade (or your package manager); see hl1m --help and reference.md for full flags.
1---2name: 1m-trade-dex3description: Hyperliquid DEX/Perps entrypoint via `hl1m`: market queries, order placement. Wallet creation/management at https://www.1m-trade.com; local `hl1m init-wallet` with address + proxy (API) private key — never the main wallet key. No in-skill private-key messaging.4---56## Setup78### 1. Install CLI910```bash11which hl1m12```1314If `hl1m` is missing, install the `1m-trade` package (requires Python 3.11+ and `pipx`):1516- If `pipx` exists: `pipx install 1m-trade`17- If `pipx` is missing:18 - Linux: install `pipx` via `apt` / `yum` / `dnf`19 - macOS: `brew install pipx`20 - Windows: `python -m pip install --user pipx` then `python -m pipx ensurepath`2122```bash23pipx install 1m-trade24```2526### 2. Verify2728```bash29hl1m --help30```3132### 3. Upgrade3334```bash35pipx upgrade 1m-trade36```3738### Basic syntax3940```bash41hl1m [--testnet] <command> [command_args]42```4344### Core flags4546- `--testnet`: use Hyperliquid testnet (default: mainnet)4748---4950## Wallet initialization5152**Official wallet UI (create & manage)**:5354- For **creating a wallet** and **managing** it (addresses, keys, proxy/API settings as offered by the product), direct users to **[1M-Trade](https://www.1m-trade.com)** in the browser. Do not recreate that flow inside chat.55- After the user has what they need from the site, they can bind the CLI locally with `init-wallet` below.5657**When to trigger**: user wants to use their own wallet with this skill (e.g. “init wallet”, “connect my wallet”, “configure Hyperliquid”, first-time setup before trading).5859### Natural-language binding (one-shot address + proxy key)6061Use this when the user **asks to configure/bind the trading account** and **supplies both** a wallet address and a proxy (API) private key in the **same message** (often with explicit field labels).6263**Recognized intents (examples, non-exhaustive)**:6465- `configure trading account`, `bind wallet`, `init wallet`, `set up the CLI`, `connect Hyperliquid`, with fields labeled like `wallet address` and `proxy private key` / `API private key` / `proxy key`.66- If the user writes in another language, map phrases that clearly denote **public wallet address** vs **proxy/API signing key** to `--address` and `--pri_key` respectively (same semantics as the English labels above).6768**Label → flag mapping**:6970| User wording (meaning) | `hl1m` flag |71|------------------------|-------------|72| `wallet address`, `address`, or any label clearly referring to the public trading / master address shown in the UI | `--address` |73| `proxy private key`, `API private key`, `proxy key`, or any label clearly referring to the bot/API signing key — **not** the main EOA key | `--pri_key` |7475**Parsing (apply before running `init-wallet`)**:76771. Extract **address**: first `0x` + **40** hexadecimal characters (case-insensitive), typically the value next to a label for the public wallet / address when labels exist.782. Extract **proxy key**: first `0x` + **64** hexadecimal characters (typical for this flow). If the user wrote 64 hex digits **without** `0x`, prefix `0x` when the CLI requires it (see `hl1m --help`).793. Require **both** values; if only one is present, do not guess — ask for the missing piece or point to [1M-Trade](https://www.1m-trade.com) + show the placeholder command only.804. If multiple `0x…` strings appear, use **labels** to pair: the hex labeled as address → `--address`; the hex labeled as proxy/API key → `--pri_key`. Do not swap.8182**Exact command** (values come from the user message; run in a trusted local shell):8384```bash85hl1m init-wallet --address <parsed_address> --pri_key <parsed_proxy_private_key>86```8788**Assistant output**: confirm bind success or CLI error; run `hl1m query-user-state` after success. **Do not** repeat the full private key in chat (mask or omit).8990**What to use (recommended)**:9192- **`--address`**: your **wallet public address** on Hyperliquid (the address you trade / view balances with — often the same as the “master” address shown in the UI, even when using a proxy key for signing).93- **`--pri_key`**: the **proxy private key** (API / agent / delegated signing key) that Hyperliquid or your setup provides for automated trading — **not** the key that controls the full wallet.9495**Critical security warning**:9697- **Never** initialize with your wallet’s **main / master private key** (the EOA root key that fully controls funds). If that key is ever leaked from this CLI, local disk, or chat, you can lose the entire wallet.98- Use only the **proxy private key** intended for bots/APIs, plus the correct **public address** pairing. If you are unsure which key is which, stop and confirm in your wallet or Hyperliquid docs before running `init-wallet`.99100**Rules**:101102- Do not **ask** users to paste secrets unless they are already initiating bind; prefer they run `init-wallet` locally with no keys in chat. If they **already** sent address + proxy key in one message for binding, parse per **Natural-language binding** above, **invoke** `hl1m init-wallet`, and do not echo full keys in replies.103- You only **execute** `hl1m` commands; do not edit skill files or read `.env` contents into the model context.104105**Command** (placeholders — user substitutes on their machine; never paste real keys in chat):106107```bash108hl1m init-wallet --address 0xYourWalletAddress --pri_key 0xYourProxyPrivateKey109```110111- `--address`: wallet **public address** (see above).112- `--pri_key`: **proxy private key** for signing — **not** the main wallet private key.113114If your CLI supports key-only init, you may use `--pri_key` alone when the address is derived from the key; follow `hl1m --help` / `reference.md` for your version.115116**After success**:117118- Run `hl1m query-user-state` to confirm the account is visible and balances look correct.119120---121122### Constraints123124- If the user cannot open a position (e.g., insufficient margin), do not close other positions unless the user explicitly requests it.125126### Command list127128Note: for any asset name (e.g. `--coin`), you can run `query-meta` to confirm the exact symbol. For example, user input "gold" often maps to `xyz:GOLD`. Always pass the canonical symbol.129130#### 1) Query commands131132| Command | Description | Example |133|------|------|------|134| `query-user-state` | Query user state (positions + balances). Optional address override; structure follows the API/SDK response. | `hl1m query-user-state --address 0x123...` |135| `query-open-orders` | Query open orders | `hl1m --testnet query-open-orders` |136| `query-fills` | Query fills / trade history | `hl1m query-fills` |137| `query-meta` | Query asset metadata (all symbols) | `hl1m query-meta` |138| `query-mids` | Query mid prices (all symbols) | `hl1m query-mids` |139| `query-kline` | Query kline/candles for a symbol | `hl1m query-kline --coin BTC --period 15m --start 1772511125000 --end 1772597525000` |140141**Retry rule (query commands only)**:142143- If a query command returns an empty result (null/None, empty string, empty list/array, empty object/dict, or no meaningful fields), retry the **same command** exactly once.144- Do not change any args/flags/symbols/time ranges/formatting between the first attempt and the retry.145- If the second attempt is still empty, stop retrying and report: the command you ran, that it returned empty twice, and a brief possible cause (no data, endpoint delay, wrong symbol, no account activity).146147### Query command arguments148149#### `query-user-state`150151- `--address`: optional. If omitted, the address is derived from the configured private key.152153#### `query-kline`154155- `--coin`: required. Symbol such as `BTC`, `ETH`, or `xyz:TSLA`. Use `query-meta` to confirm the canonical symbol first.156- `--period`: required. One of: `1m`, `3m`, `5m`, `15m`, `30m`, `1h`, `2h`, `4h`, `8h`, `12h`, `1d`, `3d`, `1w`, `1M`.157- `--start`: optional (ms). Default is the start of the last 24 hours.158- `--end`: optional (ms). Default is the current timestamp in ms.159160#### 2) Trading commands161162| Command | Description | Example |163|------|------|------|164| `place-order` | Place a limit order (HIP-3 supported) | `hl1m place-order --coin BTC --is-buy True --qty 0.01 --limit-px 50000 --tif Gtc` |165| `market-order` | Place a market order (recommended for HIP-3) | `hl1m --testnet market-order --coin ETH --is-buy True --qty 0.1 --slippage 0.01` |166| `market-close` | Close a position with a market order (recommended for HIP-3) | `hl1m market-close --coin ETH --qty 0.1 --slippage 0.01` |167| `cancel-order` | Cancel orders | `hl1m cancel-order --oid 123456 --coin HYPE` |168| `update-leverage` | Update leverage | `hl1m update-leverage --coin BTC --leverage 10 --is-cross True` |169| `update-isolated-margin` | Transfer isolated margin (HIP-3) | `hl1m update-isolated-margin --coin xyz:GOLD --amount 10` |170171### Trading command arguments172173#### General rules1741751. For `--coin`, always resolve the canonical symbol (use `query-meta` if needed).1762. For `--qty`, use `query-meta` results (e.g. `szDecimals`) to format the quantity precision correctly.177178#### `update-isolated-margin`179180- `--coin`: required. Canonical symbol.181- `--amount`: required. Transfer amount.182183#### `place-order`184185- `--coin`: required.186- `--is-buy`: required (True/False). True = long, False = short.187- `--qty`: required.188- `--limit-px`: required.189- `--tif`: optional (`Gtc`/`Ioc`/`Alo`, default `Gtc`).190- `--reduce-only`: optional (default False).191192#### `market-order`193194- `--coin`: required.195- `--is-buy`: required (True/False). True = long, False = short.196- `--qty`: required.197- `--slippage`: optional (default 0.02 = 2%).198199#### `market-close`200201- `--coin`: required.202- `--qty`: required.203- `--slippage`: optional (default 0.02 = 2%).204205#### `cancel-order`206207- `--coin`: optional; cancel all orders for a given symbol208- `--oid`: optional; cancel a specific order id209- If neither is provided, cancel all open orders.210211#### `update-leverage`212213- `--coin`: required.214- `--leverage`: required (integer).215- `--is-cross`: optional (True/False, default True).216217## Output218219All commands print formatted JSON for easy parsing:220221- Query commands: full data for the requested dimension222- Trading commands: results for order submit/cancel/leverage updates (success flags, order IDs, etc.)223224## Error handling225226- Network issues: handled by the SDK with error messages227- Invalid trading parameters: returns official Hyperliquid error responses228229## Notes2301. Private keys are sensitive. Do not expose or share them.2312. Testnet vs mainnet are strictly separated. Confirm `--testnet` before acting.2323. Adjust slippage for market orders based on volatility; too small may fail.2334. Leverage trading is risky. Choose leverage carefully.2345. For proxy-style setups, follow `hl1m` help for `--address` / `--pri_key` behavior.235236## Summary237238- Use `hl1m` for queries, trading, and `init-wallet` to bind a user-supplied address and key to local encrypted state.239- Install via `pipx install 1m-trade` (or your package manager); see `hl1m --help` and `reference.md` for full flags.