--- name: 1m-trade description: | Integrated on-chain operations hub: integrates BlockBeats market intelligence, Hyperliquid DEX trading via `hl1m`, wallet creation and management at https://www.1m-trade.com, and supports local initialization using `hl1m init-wallet` (wallet address + proxy private key, never use the main wallet private key). Supports fully autonomous AI trading. metadata: openclaw: emoji: "🚀" always: false requires: bins: - curl - node - hl1m - openclaw configPaths: - ~/.openclaw/.1m-trade/.env - $OPENCLAW_STATE_DIR/.1m-trade/.env env: - BLOCKBEATS_API_KEY - HYPERLIQUID_PRIVATE_KEY_ENC - HYPERLIQUID_PK_ENC_PASSWORD - HYPERLIQUID_WALLET_ADDRESS os: - darwin - linux - win32 tags: - crypto - news - trading - hyperliquid - wallet - dex - automation --- # 1m-trade Aggregator - On-chain Operations Hub **Official website (wallet & account)**: [https://www.1m-trade.com](https://www.1m-trade.com) ## After first install Scan and verify all required dependencies for sub-skills and install what is needed. From this skill bundle root, run `node auto_check.js` to verify required binaries and `.env` entries (it does not print secrets). ### `1m-trade-news` (required) This aggregator **must** have the **`1m-trade-news`** sub-skill available: market intelligence, news, and BlockBeats API calls all go through it. Do **not** skip this step when installing the bundle. 1. **Skill files**: Ensure the bundle includes **`skills/1m-trade-news/`** (`SKILL.md`, etc.) and that your OpenClaw / host loads that folder as the **`1m-trade-news`** skill. 2. **`curl`**: Required on `PATH` for the documented API flows (see metadata `requires.bins`). 3. **BlockBeats API key (`BLOCKBEATS_API_KEY`)**: Market and news workflows use the **BlockBeats Pro API**. Install-time, ensure **`BLOCKBEATS_API_KEY`** is set in the local `1m-trade` state file (paths under **Optional runtime override** below). **Apply for / obtain a key (free tier)**: 1. Request a free API key: ```bash curl --request GET --url "https://api-pro.theblockbeats.info/v1/api-key/free" ``` 2. From the JSON body, read `data.api_key` and use it as `BLOCKBEATS_API_KEY`. 3. Write it to `~/.openclaw/.1m-trade/.env` (or `$OPENCLAW_STATE_DIR/.1m-trade/.env` if you use that override), on its own line: `BLOCKBEATS_API_KEY=` Do not remove unrelated lines; only add or update this variable. **Reference**: `skills/1m-trade-news/SKILL.md` → **Get an API key** (includes agent-safe steps to populate `.env` without printing the key). **Security**: Do not paste API keys into chat; the model must not echo stored keys. ### `1m-trade-dex` (required) This aggregator **must** have the **`1m-trade-dex`** sub-skill available: trading, wallet queries, and `hl1m` all go through it. Do **not** skip this step when installing the bundle. 1. **Skill files**: Ensure the bundle includes **`skills/1m-trade-dex/`** (`SKILL.md`, `reference.md`, etc.) and that your OpenClaw / host loads that folder as the **`1m-trade-dex`** skill. 2. **CLI (`hl1m`)**: Install the `1m-trade` package so `hl1m` is on `PATH` (Python 3.11+ recommended): ```bash pipx install 1m-trade hl1m --help ``` If `pipx` is missing, install it per your OS (see `skills/1m-trade-dex/SKILL.md` → **Setup**). 3. **Wallet / Hyperliquid state**: After install, users still run **`hl1m init-wallet`** (and related steps) so `.env` contains the Hyperliquid fields `auto_check.js` expects — see **`skills/1m-trade-dex/SKILL.md`** → **Wallet initialization**. Optional runtime override: - `OPENCLAW_STATE_DIR` can be set to change where local `.1m-trade` state files are read/written. - If not set, tools default to `~/.openclaw/.1m-trade/`. Secret source-of-truth policy: - API key and wallet credentials are expected in the local state `.env` file under the paths above (typically after the user runs `hl1m init-wallet` and related CLIs locally). - Process environment variables may be used only as explicit runtime overrides by underlying tools. - **LLM boundary**: The model must **not** read `.env` into context or quote stored secrets. For **wallet bind**, if the user **voluntarily** sends wallet address + **proxy** private key in one message (e.g. clearly labeled fields such as `wallet address` and `proxy private key`), follow `1m-trade-dex` → parse and **invoke** `hl1m init-wallet --address … --pri_key …` in a trusted shell; **do not** repeat full keys in assistant replies. Otherwise prefer the user running `init-wallet` locally without pasting keys in chat. - Never print secret values in assistant-visible chat or user-facing logs from the model. ## Overview This skill (`1m-trade`) is an orchestration hub that integrates multiple sub-skills into a single coherent workflow. You describe your goal (e.g., "check today's sentiment", "analyze BTC fund flows and open a long with half my balance", "help me configure my Hyperliquid wallet with init-wallet", "auto-trade BTC"), and this skill decomposes the request and calls `1m-trade-news` and `1m-trade-dex` to complete the operation. ## Core workflows Based on **intent keywords**, this skill routes into one of the workflows below (or composes them). ### Workflow 1: Market intelligence (Data & News) **Triggers**: `market`, `price`, `news`, `macro`, `fund flows`, `perps`, `search [keyword]` **Skill**: `1m-trade-news` **Logic**: 1. Parse the user query and map it to a scenario / intent mapping. 2. Call the relevant BlockBeats API endpoints in parallel. 3. Format and aggregate results into a market report with brief interpretation. **Example output**: ``` 📰 Market Report · 202X-XX-XX === 1. 📊 Snapshot Sentiment: 35 → Neutral BTC ETF: +$120M net inflow today On-chain tx volume: +15% vs yesterday 2. 💰 Hot flows (Solana) 1. JTO net inflow $4.2M 2. ... 3. 🌐 Macro Global M2: +4.5% YoY → Liquidity easing DXY: 104.2 → Relatively strong Overall: Macro backdrop is neutral-to-bullish for crypto. ``` ### Workflow 2: Wallet setup (initialization) **Triggers**: `init wallet`, `configure wallet`, `configure trading account`, `bind wallet`, `connect Hyperliquid`, `set up trading`, `wallet settings`, `proxy key`, `API key` (wallet); same message with both `wallet address` and `proxy private key` (or non-English equivalents per `1m-trade-dex` **Natural-language binding**). **Skill**: `1m-trade-dex` (see `skills/1m-trade-dex/SKILL.md` → **Natural-language binding** and `skills/1m-trade-dex/reference.md`) **Wallet operations (synced with sub-skill docs)**: | Step | Where | What | |------|--------|------| | Create / manage wallet | Browser | **[https://www.1m-trade.com](https://www.1m-trade.com)** — official UI for account and wallet; do not recreate this flow in chat. | | Bind CLI to the account | Local shell | **`hl1m init-wallet`** only — **wallet public address** + **proxy (API) private key**. **Never** use the **main / master** wallet private key. | | Verify | After init | `hl1m query-user-state` (and other `hl1m` query commands as needed). | **Logic**: 1. Send users to **[https://www.1m-trade.com](https://www.1m-trade.com)** for **wallet creation and ongoing management** in the browser. Do not simulate full wallet creation inside the assistant. 2. For **CLI binding**: - If the user provides **both** address and proxy key in one message (with labels such as `wallet address` and `proxy private key`, or other languages as mapped in `1m-trade-dex`), follow `1m-trade-dex` **Natural-language binding**: parse `0x` + 40 hex (address) and `0x` + 64 hex (proxy key), then run `hl1m init-wallet --address --pri_key ` in a trusted shell; do not echo full keys in chat. - Otherwise, show the placeholder command only and ask the user to run locally: ```bash hl1m init-wallet --address 0xYourWalletAddress --pri_key 0xYourProxyPrivateKey ``` 3. After a successful init, use `hl1m query-user-state` to confirm the account is visible. ### Workflow 3: Trading execution & management (Trading & Management) **Triggers**: `trade`, `order`, `open`, `close`, `positions`, `price`, `kline`, `HIP3`, `AAPL`, `GOLD` **Skill**: `1m-trade-dex` **Logic**: 1. **Market data**: query kline/mids/meta as requested and format results. 2. **Pre-trade checks**: ensure `1m-trade-dex` is installed and run `node auto_check.js` to verify prerequisites. If it fails, do not execute any trades. 3. **Execution**: follow the `1m-trade-dex` documentation for the specific command. ### Workflow 4: Hybrid orchestration (Hybrid Workflow) **Trigger examples**: "check the market then decide whether to buy BTC", "after I init my wallet, show ETH kline" **Logic**: 1. Call Workflow 1 to fetch the market report. 2. Present the report and ask whether to continue (e.g., "proceed to wallet setup or trading?"). 3. After confirmation, call Workflow 2 (wallet init guidance) or Workflow 3. ## Examples **User**: "How is the crypto market today? I also need to connect my Hyperliquid wallet." **`1m-trade`**: 1. Generate a market snapshot report (Workflow 1). 2. Point to **[1M-Trade](https://www.1m-trade.com)** for wallet creation/management as needed, then Workflow 2: if the user already sent labeled `wallet address` + `proxy private key` (or equivalent), parse and run `hl1m init-wallet`; otherwise give the placeholder command for local use (proxy key only; never the main wallet private key). Do not guide `send-private-key`. **User**: "Search for the latest news about 'Bitcoin halving', then show BTC kline." **`1m-trade`**: 1. Call search (Workflow 1, Scenario 5) and return relevant items. 2. Call kline query (Workflow 3) and return recent candles. ### Workflow 5: Fully autonomous mode (AI Auto-Trader) **Triggers**: `enable auto trading`, `autonomous trading`, `managed`, `AI trade for me`, `run every N minutes`, `auto trade BTC` **Logic**: 1. Run the checker once before enabling cron: - Repo root: `node auto_check.js` - If installed under the OpenClaw workspace: run `node /auto_check.js` If it fails, do not enable auto trading. 2. Check whether the `1m-trade-auto-trader` cron job exists: - Run `openclaw cron list` to verify whether it still exists. - If it exists, ask the user to stop/remove it before creating a new one. - If the user confirms it should be removed and it is still present, attempt to remove it with `openclaw cron rm `, then re-run `openclaw cron list` to confirm it is gone. 3. Create a periodic workflow using the command below. `--session isolated` is fixed and must not be changed. The default interval is every 20 minutes (`*/20`); replace with `*/N` if needed. Send the trading report to the user. Security constraints for the cron message: - Include ONLY the "#### Workflow content" block as the job prompt template. - Never include any secrets (API keys, private keys, passwords, `.env` contents, tokens). - Never include unrelated user/system text, terminal logs, or file contents. - Keep shell commands/placeholders unchanged, but you may translate natural-language instructions for locale. 4. Run: ```bash openclaw cron add \ --name "1m-trade-auto-trader" \ --cron "*/20 * * * *" \ --session isolated \ --message "> structure unchanged. No secrets. Each run outputs ONLY the final trading report; that report must be monolingual (all Chinese OR all English per user—no mixed prose). Replace this placeholder with that translated block.>" \ --timeoutSeconds 600 \ --announce \ --channel \ --to "" \ ``` #### Workflow content Pre-start: dependency memory check All skills are installed locally. 1. Try reading: `$OPENCLAW_STATE_DIR/.1m-trade/dependencies-status.md` - If missing → first run, treat as "not confirmed installed" - If present, look for any marker: - Installed: true - DependencyStatus: Installed - SkillsReady: true - Record status as "installed" or "not installed/unknown" 2. Decide based on the status: - If clearly "installed" → skip checks/install and go to step 4 - Otherwise → run step 3 3. Only when initialization is needed: Ensure these skills are available in order: - 1m-trade-news - 1m-trade-dex If a skill is unavailable, attempt to install/enable it via the system's mechanism. Then record success in the memory file. 4. Must execute: update/create the dependency memory file by overwriting: ``` # Dependency install marker - do not edit manually Installed: true Skills: 1m-trade-news (or others) Skills Path: LastChecked: 2026-03-15 14:30:00 UTC ``` Start execution Start execution. ### Workflow: Fully autonomous trading mode (AI Auto-Trader) ## Execution Guidelines - Evaluate the full market universe (scan multiple assets). Trades are determined by risk controls; 0 to multiple trades are allowed. - Output must be a trading report only (no executable code). Markdown tables/quotes are allowed. - Do not create or modify any files. - Only call existing skills. - Use real trading (not simulation). ## Response format - Your final assistant response must contain only the final trading report section in the required Markdown structure. - **Language**: The report must be **fully** in one language matching the user (see **Locale** / **Monolingual output** in **#### 4. Trading brief**) — no mixed Chinese/English prose. --- # Market universe (fixed; do not modify) - `BTC` - `ETH` - `SOL` - `xyz:GOLD` (alias: Gold) - `xyz:CL` (alias: Crude Oil) - `xyz:SILVER` (alias: Silver) - `xyz:NVDA` (alias: NVIDIA) - `xyz:GOOGLE` (alias: Google) - `xyz:NATGAS` (alias: Natural Gas) - `xyz:BRENTOIL` (alias: Brent Oil) - `xyz:HOOD` (alias: Robinhood) Quote currency: USDC --- **Execution loop**: When triggered, execute the following steps in order. Avoid requesting intermediate confirmations; proceed with execution. #### 1. Intelligence & data collection (sense) - **News**: use `1m-trade-news` to fetch the latest 20 newsflashes/news and determine whether they mention assets in the market universe to infer sentiment. - **Kline**: call `1m-trade-dex` → `query-kline` (default 1h). - **Wallet**: call `1m-trade-dex` → `query-user-state`. - **Prices**: call `1m-trade-dex` → `query-mids`. #### 2. Decision Decide based on news sentiment and kline trend: - Long - Short - Close - Hold **Mandatory risk controls & calculations**: 1. Each new position's **notional value (after leverage) must be > 15 USDC** (not balance). 2. Calculate quantity rigorously using latest prices: `qty (--qty) = target notional (USDC) / latest price`, using appropriate precision. #### 3. Execution (act) Based on the decision, use `1m-trade-dex` commands to trade. - Example (market long/short): call `market-order` - Example (close): compute exact position size and place the appropriate market order - Example (limit): call `place-order` - If decision is Hold, do not execute any trade commands. #### 4. Trading brief (report) Generate a brief report (not too long) describing the decision rationale and execution results. Follow this Markdown format strictly. **Locale**: Infer the user’s **primary language** from the session (e.g. Chinese vs English). The report must be **monolingual** — **no zh/en mix** in narrative text. Language rule (strict): - **Monolingual output (mandatory)**: - If the user’s language is **Chinese** (or they explicitly use Chinese): write the **entire** report in **Chinese only** — headings, bullets, table cells, and trading-status wording (e.g. use fully localized terms for hold / long / short / close, not English “Hold/Long/Short/Close” mixed into Chinese sentences). - If the user’s language is **English**: write the **entire** report in **English only** — no Chinese or other-language fragments in prose. - **Allowed exceptions** (do not “translate” these): canonical symbols and tickers (`BTC`, `ETH`, `xyz:GOLD`, …), the literal `1m-trade`, pair suffixes like `-USDC`, numbers, and `%` where standard. - **`<<...>>` are schema hints in this template only — strip them in the final answer.** Do **not** print literal `<<` or `>>` in the user-visible report. For each slot, output normal Markdown: localized headings and body text (e.g. `- **Fundamentals**: weak market sentiment…`), not `- **<>**: …` or `• <>: …`. The reader must see finished prose, not bracket markers. - Translate/replace the **meaning** of each former `<<...>>` slot into the user’s language (including example values that stood in for real content). - Do NOT translate placeholders inside <...>. - Do NOT translate crypto symbols, tickers, or trading pairs (e.g. BTC, ETH, SOL, xyz:GOLD). Keep them exactly as-is. - Do NOT translate the literal string `1m-trade` anywhere. - Asset display name rule: - If the asset has an alias in the Market universe list, use the alias as the display name (alias text should follow the translation rule). Do NOT display the canonical symbol. - If the asset has no alias, use the canonical symbol as-is. 🤖 **1m-trade <>**: <>: <> <>: **Table coverage (same idea as per-asset section)**: If the **market universe is large**, do **not** fill one row per symbol by default. Prefer: **(a)** a **narrow table** — only rows for assets with **material** activity this run (traded, opened/closed, non-Hold, or materially different), plus **one summary line** for “everything else” (e.g. all others: Hold / no action); or **(b)** a **short bullet summary** instead of a wide table. When the set is **small**, you may use the full table pattern below. | <> | <> | <> | <> | <> | |----------|--------------|-------------------|----------|-----------------------| | BTC | xxx | <> | <> | <> | | ETH | xxx | <> | <> | <> | | <> | xxx | <> | <> | <> | | ... | ... | ... | ... | ... | 🧠 **<>** **Coverage rule**: If the **market universe is large** or a full per-asset write-up would make the report too long, **prefer a summary** instead of repeating the block below for every symbol. In **summary mode**: give **one** cross-asset fundamentals/sentiment paragraph, portfolio-level **account state**, then **short bullets only** for assets that mattered (e.g. traded this run, non-Hold decision, material risk, or materially different from the rest). End with a **brief execution recap**. Strip `<<...>>` in final output; stay **monolingual**. **When the set is small** (or the user asked for full detail), repeat per asset: **[ASSET]-USDC** - **<>**: <> - **<>**: <> - **<>**: <> → <> - **<>**: <<✅ executed (or ⏸️ hold, no action)>>