# Changelog

All notable changes to Open Broker will be documented in this file.

## [Unreleased]

### Added
- Added an allowlisted `openbroker install <package>` command for optional companion packages, initially supporting `monitoring` (`openbroker-monitoring`) and `extended` (`openbroker-extended`). Re-running installs the latest release; `--tag`, `--dry`, and `--list` are supported.
- **Fast cancels (`f: true`)** (minor bump): `client.cancel(coin, oid, { fast: true })` and `client.bulkCancel(cancels, { fast: true })` set the action-level fast flag so the mempool prioritizes the cancel — after the announced network upgrade, ONLY fast cancels get mempool prioritization. The API rejects fast cancels for trigger orders (TP/SL), so it is opt-in; `chase` and the `grid`/`mm-spread`/`mm-maker` example automations now fast-cancel their own resting quotes, and `openbroker cancel` accepts `--fast`.

### Changed
- Upgrade the Hyperliquid SDK to 0.33.3 and accept optional liquidation user metadata.
- Decode HIP-4 market templates, custom sides, and parent questions while retaining raw metadata in JSON.
- Include parent questions in outcome search and settled outcome tokens in balance output.
- Reject malformed outcome references and invalid orders; constrain IOC prices to the outcome price range.
- Add HIP-4 discovery and mocked order regression tests to prepublish checks.

- **`l2Book` WS subscription now uses `fast: true`** (5 levels every 0.5s). Per the 2026-07 API announcement, non-fast l2Book subscriptions degrade to 20 levels every 5 seconds after the next network upgrade; every WS book consumer in the CLI (chase repricing, MM quoting, mid fallback) reads top-of-book only, so the fast feed strictly wins. Depth consumers are unaffected — the REST `l2Book` stays full-depth and is still what `getL2Book()` falls back to when the socket is down.
- Upgraded `@nktkas/hyperliquid` 0.30.3 → 0.33.1 (adds `fast` l2Book + fast-cancel support; `webData2` — which this CLI never used — is deprecated server-side in favor of `webData3` + component subscriptions).

## [1.11.0] - 2026-07-10

CLI/library port of the hosted guardian (`/markets/guardian`): the same read-only risk monitoring, delivered through your own Telegram bot instead of the hosted service.

### Added
- **`openbroker guardian` command family.** `guardian run` watches one or more addresses (default: the configured account) and alerts on the same six rules as the hosted guardian — liquidation proximity (10%/5%/2% tiers with hysteresis + cooldowns), high margin usage (80%), missing TP/SL protection (15 min unprotected), stale limit orders (12h+ resting and 3%+ from mid), funding bleed (15%+ APR paid for 60+ min), and position lifecycle (open/close/resize). Read-only: it never places orders. Thresholds, per-rule opt-outs (`--disable`/`--only`), and `--min-severity` are flags; `--json` emits JSON-lines for agents.
- **Telegram delivery via your own bot.** `guardian connect` links a chat with a BotFather token + `/start <code>` deep link (persists `TELEGRAM_CHAT_ID` to the active config), `guardian test` sends a test message, `guardian status`/`guardian rules` show configuration. Alerts also POST to an OpenClaw agent gateway when `OPENCLAW_HOOKS_TOKEN` is set, so agents get woken on risk events.
- **WebSocket liquidation fast lane.** Single-address runs subscribe to `userEvents` for instant LIQUIDATED alerts and fill-triggered re-polls; multi-address runs stay REST-only. Alerts are suppressed while the price feed is stale.
- **Library surface** (minor bump): `startGuardian`, `Guardian`, `GuardianRiskEngine`, `DEFAULT_GUARDIAN_THRESHOLDS`, Telegram helpers (`sendTelegramMessage`, `formatTelegramAlert`, `waitForTelegramLink`, …), and the `Guardian*` types are exported from `scripts/lib.ts` so `openbroker-plugin` and other in-process consumers can embed the watcher.
- `client.getFrontendOpenOrders(user?, dex?)` — open orders with frontend display fields (`isTrigger`, `reduceOnly`, `isPositionTpsl`, …), plus the `FrontendOpenOrder` type.

## [1.10.0] - 2026-07-03

Ported the advanced-execution fixes validated in the trading panel review (`openbroker-landing/ADVANCED_EXECUTIONS_REVIEW.md`) to the CLI.

### Changed
- **Stop losses default to market triggers.** `client.stopLoss`, `bracket`, `set-tpsl`, and `trigger-order --type sl` now place the SL with `isMarket: true` — the limit price only caps the fill `--sl-slippage` bps past the trigger. A stop-limit SL can be gapped over and leave the position unprotected; the old behavior is available via `--sl-limit` / `trigger-order --exec limit` (CLI) or `isMarket: false` (library). `client.triggerOrder` gained the trailing `isMarket` parameter (default `false`, unchanged).
- **`set-tpsl` places one `positionTpsl` batch** instead of two independent triggers: the venue ties TP/SL to the open position and OCO-cancels the survivor when one fires. Wrong-side triggers (e.g. a long TP below the live price) are now hard errors instead of warnings — the exchange fires those immediately on placement.
- **`bracket` post-fill exits use `positionTpsl`** (triggers track the position) instead of a standalone `normalTpsl` pair, are re-validated against the actual fill price, and a fill that drifts past a fixed target is reported instead of silently arming a broken bracket. `client.tpslPair` now delegates to `tpslOrders` with these defaults.
- **`chase` survives fast markets and never strands orders:** a post-only rejection ("would have immediately matched") reprices on the next tick instead of aborting; transient `allMids` failures retry instead of throwing; the cleanup cancel moved into a `finally` so any error still pulls the resting quote; hard order rejections now throw instead of looping silently.
- **`twap` validates slice notional:** native TWAP fires a sub-order every 30s, and each slice must clear the $10 exchange minimum (waived for reduce-only) — checked in both the script and `client.twapOrder`, which also enforces the 5–1440 minute bounds.

### Added
- `client.tpslOrders(coin, exitIsBuy, size, opts)` — TP and/or SL triggers in one batch with `positionTpsl` (default) or `normalTpsl` grouping, market or stop-limit SL, one-sided support.
- `client.bracketOrder(coin, isBuy, size, entryPrice, opts)` — atomic limit entry + TP/SL children in one `normalTpsl` batch; the exchange arms the exits on fill (children return `"waitingForFill"`), so the bracket survives the process exiting.
- `bracket` limit entries use the atomic batch by default (`--no-atomic` restores the fill-watch path), support one-sided TP-only/SL-only brackets, absolute targets via `--tp-price`/`--sl-price`, and validate targets (direction vs entry, SL% < 100) before any order goes out.
- $10 min-notional pre-checks: thinnest `scale` level, `twap` slices, `chase` start size and dust remainder (chase stops with status `min_notional` instead of erroring on every tick). All are waived for reduce-only and downgraded to warnings under `--dry`.
- `parseOrderStatus` / `MIN_ORDER_NOTIONAL_USD` exported from the library; the parser understands the plain-string `"waitingForFill"` / `"waitingForTrigger"` success statuses `normalTpsl` children return behind an unfilled parent.
- `BracketClient` now requires `tpslOrders`, `bracketOrder`, and `cancel` (replacing `tpslPair`); `BracketResult` gains the `armed` status for atomically placed, not-yet-filled brackets.

## [1.9.3] - 2026-06-23

### Changed
- Made automation reads WebSocket-first for mids, asset contexts, account state, spot balances, per-dex open orders, and lazily subscribed L2 books, with transparent REST fallback.
- Activated the existing all-dex context, all-dex clearinghouse, and spot-state subscriptions before strategy `onStart` hooks.
- Decoupled `api.every()` from REST snapshot polling. Short `--poll` values now control the disconnected fallback cadence; connected runtimes reconcile over REST at most once per minute.
- Cached and request-de-duplicated the REST-only predicted-funding feed for 60 seconds, retaining the last good value through transient rate limits.
- Limited automation startup metadata to the native universe and deferred HIP-3 metadata until a prefixed market is actually referenced.

### Added
- Added realtime-cache tests covering live market/account reads, lazy order-book seeding, and disconnected REST fallback.

## [1.9.2] - 2026-06-22

### Breaking
- Every automation must now export a validated `guardrails` policy. Monitoring scripts use `{ mode: 'read-only' }`; trading scripts must declare explicit market, notional, exposure, leverage, margin, open-order, rate, slippage, market-order, and account-wide-cancel limits.

### Added
- Added runtime guardrail enforcement around every supported `api.client` write method, including bulk and HIP-4 outcome methods that were previously missing from dry-run and audit interception.
- Added fail-closed account preflight checks, explicit leverage enforcement for risk-increasing perp orders, rolling order-rate limits, audit records for blocked writes, and unit coverage for schema and runtime behavior.

## [1.9.1] - 2026-06-22

### Changed
- Added `openbroker install --codex` and `npx openbroker@latest install --codex` for one-command Codex skill installation, persistent CLI installation, and restricted API-wallet onboarding.
- Made restricted API-wallet onboarding the recommended interactive default.
- Added `openbroker setup --api-wallet` for deterministic agent setup without the wallet-selection prompt.
- Updated the Codex skill to install the CLI, hand the browser approval URL to the user, wait for authorization, and verify the connected master account without exposing private keys.

## [1.5.0] - 2026-06-01

### Added
- **`getUserStateAll` stamps each position with its canonical asset index**
  (`Position.assetId`) and normalizes HIP-3 coins to the prefixed `{dex}:{coin}`
  form. The per-dex `clearinghouseState` may report HIP-3 coins bare; since we know
  the dex at fetch time, we canonicalize and resolve the global index
  (`100000 + perp_dex_index*10000 + index_in_meta`). Lets consumers key positions by
  a unique integer instead of the coin string, which can otherwise mismatch between
  endpoints (e.g. reconciling intended vs on-chain HIP-3 positions).

## [1.4.0] - 2026-05-31

### Fixed
- **Library is now runtime-importable by external consumers.** The package entry
  previously pointed at raw TypeScript source (`main: ./scripts/lib.ts`), so any
  in-process consumer running outside a TS loader (or under a runner that doesn't
  transpile `node_modules`, e.g. tsx) imported an **empty module**. Added a build
  (`npm run build` → `tsc`) that emits compiled JS + type declarations to `dist/`,
  and pointed `main`/`types`/`exports` at `dist/lib.js` / `dist/lib.d.ts`. The CLI
  still runs from source via tsx; only the library entry changed. `prepublishOnly`
  now builds before publishing. No public API changes.

## [1.3.0] - 2026-05-07

### Added
- **`openbroker auto prune`**: New subcommand for trimming the local audit DB
  - `--older-than <duration>` accepts `7d`, `24h`, `30m`, etc.
  - `--status <list>` filters by run status (default: `stopped,error,stale`)
  - `--keep-last <N>` retains the N most-recent runs per `automation_id`
  - `--all` deletes everything except runs whose process is still alive
  - `--vacuum` reclaims disk after deletion
  - `--dry` previews matches without writing — also reconcile is dry-safe

### Changed
- **`openbroker auto clean`**: Now also reconciles the audit DB. Runs whose pid is dead but whose row still says `status='running'` get marked `stopped` with `stop_reason='reconciled (process exited)'`, fixing dashboards that previously kept rendering them as live/stale long after `auto stop`.

## [1.0.59] - 2026-03-11

### Fixed
- **Plugin Tools Parity with CLI**: Reviewed all plugin tools against CLI commands and aligned behavior
  - **`ob_account`**: Now uses `crossMarginSummary` (matches CLI), includes `signingWallet`, `walletType`, `marginRatio`, translates order sides (`B`→`buy`, `A`→`sell`), adds `side` field to positions
  - **`ob_positions`**: Now fetches mark prices (`getAllMids`) and cumulative funding (`getUserFunding`) in parallel — includes `markPrice`, `notional`, `cumulativeFunding`, `liquidationDistance`, `maxLeverage`, `leverageType` fields matching CLI output
  - **`ob_markets`**: Now includes HIP-3 markets (was main dex only), adds `change24h` field, sorts by volume, includes `type` field (`perp`/`hip3`)
  - **`ob_buy`/`ob_sell`**: Fixed default slippage — was using `builderInfo.f` (1 bps) instead of config default (50 bps), causing market orders to fail with price-too-far errors

### Added
- **SKILL.md CLI Fallback Guide**: Added troubleshooting section with plugin tool → CLI command mapping table, so agents can fall back to CLI when plugin tools return errors

## [1.0.58] - 2026-03-11

### Fixed
- **`ob_funding` HIP-3 Support**: Rewrote plugin tool to use `getMetaAndAssetCtxs()` + `getAllPerpMetas()` instead of `getPredictedFundings()` which only returned main dex data. Now correctly returns funding rates for HIP-3 assets like `xyz:GOLD`. Fixes "Cannot read properties of null" crash.
- **`ob_search` HIP-3 Filter**: Fixed inverted type filter condition — HIP-3 search was gated behind `typeFilter === 'perp'` instead of `typeFilter === 'hip3'`, causing empty results in some filter combinations. Added `funding` and `openInterest` fields to search results.

## [1.0.57] - 2026-03-10

### Fixed
- **Unified Account $0 Equity**: Made account mode detection more robust — handles wrapped API responses, case-insensitive matching. Added debug logging for spot balance lookup to diagnose edge cases. Plugin `ob_account` now returns `accountMode` field.

### Added
- **`--json` Flag**: Info commands now support `--json` for machine-readable output
  - `account --json` — full account state as JSON
  - `positions --json` — positions array with mark prices and liquidation distances
  - `funding --json` — funding rate data
  - `fills --json` — trade fill history
  - `orders --json` — order history
  - `markets --json` — market data

## [1.0.56] - 2026-03-10

### Added
- **Unified Account Support**: Detects and handles Hyperliquid's account abstraction modes (standard, unified, portfolio margin, dex abstraction)
  - `getAccountMode()` / `isUnifiedAccount()` — queries `userAbstraction` API to detect mode
  - **Unified accounts**: equity comes from `spotClearinghouseState` (single USDC balance shared across all dexes); skips `sendAsset` transfers for HIP-3 trading
  - **Standard accounts**: keeps existing behavior (per-dex margin aggregation + USDC transfers)
  - `account` command now displays the account abstraction mode
- Prepares for deprecation of DEX abstraction mode per Hyperliquid docs

## [1.0.55] - 2026-03-09

### Added
- **Leverage Control**: All trading commands now support `--leverage` flag to set leverage when opening positions
  - Main perps: sets cross margin leverage before ordering
  - HIP-3 perps: sets isolated margin at specified leverage (capped at asset's max)
  - CLI: `--leverage 10` on `market`, `limit`, `trigger`, `bracket`, `chase`, `twap`, `scale`
  - Plugin: `leverage` parameter on `ob_buy`, `ob_sell`, `ob_limit`, `ob_twap`, `ob_bracket`, `ob_chase`

## [1.0.54] - 2026-03-09

### Fixed
- **HIP-3 Aggregate Margin**: `getUserStateAll()` now sums equity, margin used, notional, and withdrawable across all HIP-3 dexes. Previously only reported main dex margin — causing watcher, account, and positions to show ~$5 equity and miss HIP-3 isolated positions.
- **Builder Fee Re-enabled for HIP-3**: Builder fee is now included on HIP-3 orders (was incorrectly skipped).
- **Plugin Tools HIP-3 Positions**: `ob_account`, `ob_positions`, and `ob_tpsl` plugin tools now use `getUserStateAll()` to include HIP-3 positions.

## [1.0.53] - 2026-03-09

### Fixed
- **HIP-3 Isolated Margin: Use Max Leverage**: The 3x leverage cap was too conservative for isolated margin — at 3x a $83 CL position needs $28 margin, which gets rejected even on funded accounts. Now uses the asset's `maxLeverage` (e.g., 20x for CL, 25x for GOLD) to minimize margin requirement. At 20x isolated, the same position only needs ~$4 margin.

## [1.0.52] - 2026-03-09

### Fixed
- **HIP-3 Trading: Isolated Margin**: HIP-3 perps require isolated margin mode (per Hyperliquid docs), but orders were sent without setting it — causing "Insufficient margin to place order" rejections. Now automatically sets isolated margin on first order for each HIP-3 asset. Affects all trading commands: `buy`, `sell`, `market`, `limit`, `trigger`, `tpsl`, `bracket`, `chase`, `twap`, `scale`.

## [1.0.51] - 2026-03-09

### Added
- **Watcher Poll Logging**: Position watcher now logs each poll cycle at debug level — shows position count, equity, and margin usage so you can confirm the watcher is running.

## [1.0.50] - 2026-03-09

### Fixed
- **Plugin `ob_search` HIP-3 Results**: Fixed empty results for HIP-3 assets when using the `ob_search` plugin tool. Added type filter normalization (handles `HIP3`, `HIP-3`, `hip3`, `all`), added `enum` constraint to type parameter schema, surfaced errors instead of silently swallowing them, and aligned HIP-3 iteration with CLI search (index-based with null guards).
- **SKILL.md**: Added "Finding Assets Before Trading" section instructing agents to always search for unfamiliar assets before trading, with examples of `ob_search` and `openbroker search`.

## [1.0.49] - 2026-03-09

### Fixed
- **HIP-3 Asset ID Offset**: Fixed asset ID formula from `dexIdx * 10000 + assetIdx` to `100000 + dexIdx * 10000 + assetIdx`. Orders were routing to spot asset IDs instead of HIP-3 perps, causing "Order price cannot be more than 95% away from the reference price" errors.

## [1.0.48] - 2026-03-09

### Fixed
- **HIP-3 Perp Trading**: All trading commands now work with HIP-3 assets using `dex:COIN` syntax (e.g., `--coin xyz:CL`)
  - `getMetaAndAssetCtxs()` loads HIP-3 dex assets into asset/szDecimals maps (asset index = `100000 + dexIdx * 10000 + assetIdx`)
  - `getAllMids()` fetches and merges mid prices from all HIP-3 dexes
  - Market, limit, trigger, bracket, TWAP, scale, chase orders all work with HIP-3 assets
- **HIP-3 Info Commands**: `funding`, `funding-history`, `candles`, `trades` now return data for HIP-3 assets (previously returned "No data" / null)
- **API Name Format**: Hyperliquid API returns HIP-3 names already prefixed (e.g., `xyz:CL`); fixed double-prefixing bug that caused all HIP-3 lookups to fail
- **Case Normalization**: Added `normalizeCoin()` helper — keeps dex prefix lowercase, uppercases asset (`xyz:cl` → `xyz:CL`). Fixes `toUpperCase()` mangling HIP-3 tickers to `XYZ:CL`
- **Better Error Messages**: When a bare coin name (e.g., `CL`) matches HIP-3 assets, the error now suggests the prefixed ticker (e.g., `xyz:CL`)

### Added
- **Funding Rate Scanner**: New `funding-scan` command for cross-dex funding rate scanning
  - Scans all dexes (main + HIP-3) for high funding opportunities
  - `--pairs` flag identifies opposing funding pairs for delta-neutral strategies
  - `--watch --interval N` for periodic re-scanning
  - `--json` output for piping to alerting systems
  - `--main-only` / `--hip3-only` scope filters
- **HIP-3 Funding Rates**: `funding` and `markets` commands now support `--include-hip3` flag
- **HIP-3 Funding Arb**: `funding-arb` strategy now works with HIP-3 assets (monitoring loop correctly resolves HIP-3 funding data)
- **Plugin**: New `ob_funding_scan` agent tool for cross-dex funding scanning with pairs support
- **Plugin**: `ob_search` now searches HIP-3 perps in addition to main perps and spot
- **Client**: Added `getCoinDex()`, `getCoinLocalName()`, `isHip3()`, `getAllAssetNames()`, `getHip3AssetNames()`, `invalidateMetaCache()` methods
- **Client**: `getPerpDexs()` results are now cached to reduce redundant API calls

## [1.0.44] - 2026-02-25

### Added
- **Trade Fills**: New `fills` command to view trade fill history with prices, fees, and realized PnL
- **Order History**: New `orders` command to view all historical orders (filled, canceled, open, triggered, rejected)
- **Order Status**: New `order-status` command to check the status of a specific order by OID or CLOID
- **Fee Schedule**: New `fees` command to view fee tier, maker/taker rates, referral/staking discounts, and daily volumes
- **Candle Data**: New `candles` command to view OHLCV candlestick data with configurable intervals and bar counts
- **Funding History**: New `funding-history` command to view historical funding rates for any asset
- **Recent Trades**: New `trades` command to view the tape (time & sales) for an asset with buy/sell volume breakdown
- **Rate Limit**: New `rate-limit` command to check API rate limit usage, capacity, and cumulative volume
- **Cumulative Funding on Positions**: The `positions` command now shows cumulative funding received/paid per position
- **Client Extensions**: Added 9 new methods to HyperliquidClient
  - `getUserFunding()` - Funding ledger updates
  - `getUserFills()` - Trade fill history
  - `getHistoricalOrders()` - All orders with statuses
  - `getOrderStatus()` - Single order lookup
  - `getUserFees()` - Fee schedule and volume
  - `getCandleSnapshot()` - OHLCV candle data
  - `getFundingHistory()` - Historical funding rates per asset
  - `getRecentTrades()` - Recent trades for an asset
  - `getUserRateLimit()` - API rate limit status
- **Plugin Tools**: Added 8 new OpenClaw plugin tools
  - `ob_fills`, `ob_orders`, `ob_order_status`, `ob_fees`
  - `ob_candles`, `ob_funding_history`, `ob_trades`, `ob_rate_limit`

## [1.0.37] - 2025-02-08
- **Detailed Docs**: Adding detailed docs for all sub commands

## [1.0.36] - 2025-02-06

### Changed
- **Streamlined Setup**: Builder fee approval is now clearly part of `openbroker setup`
  - Single command does wallet creation, config save, and builder approval
  - Updated docs to clarify approval is automatic
  - `approve-builder` moved to utility section (for retry/troubleshooting)

## [1.0.35] - 2025-02-05

### Fixed
- Suppressed Node.js experimental warnings for cleaner CLI output

## [1.0.34] - 2025-02-05

### Changed
- **Global Config**: Config now stored in `~/.openbroker/.env` for global CLI usage
  - Config loaded from: env vars > local `.env` > `~/.openbroker/.env`
  - `openbroker setup` creates config in home directory
  - Works from any directory without local `.env` file
- **Read-Only Mode**: Info commands work without configuration
  - Market data, funding rates, search all work immediately
  - Shows warning: "Not configured for trading. Run openbroker setup to enable trades."
  - Trading commands fail with clear error until configured
- **Better Error Messages**: Clear instructions when config missing

## [1.0.3] - 2025-02-05

### Added
- **CLI Package**: Now installable as global CLI via `npm install -g openbroker`
  - Single `openbroker` command with subcommands
  - Shortcuts: `openbroker buy`, `openbroker sell` for quick market orders
  - Full help: `openbroker --help`
- **All Markets View**: New `all-markets.ts` script to view markets across all venues
  - Shows main perps, HIP-3 perps, and spot markets in one view
  - Filter by type: `--type perp`, `--type hip3`, `--type spot`
  - Sort by 24h volume
- **Market Search**: New `search-markets.ts` script to find assets across providers
  - Search by coin name: `--query GOLD`, `--query BTC`
  - Shows funding comparison when same asset available on multiple HIP-3 providers
  - Displays price, volume, funding, and open interest
- **Spot Markets**: New `spot.ts` script for spot market info
  - View all spot trading pairs with prices and volumes
  - Check spot token balances with `--balances`
  - Filter by coin: `--coin PURR`
- **Client Extensions**: Added new methods to HyperliquidClient
  - `getPerpDexs()` - Get all perp DEXs including HIP-3
  - `getAllPerpMetas()` - Get all perp markets across venues
  - `getSpotMeta()` - Spot market metadata
  - `getSpotMetaAndAssetCtxs()` - Spot metadata with prices/volumes
  - `getSpotBalances()` - User's spot token balances
  - `getTokenDetails()` - Token info by ID
  - `getPredictedFundings()` - Predicted funding rates across venues

## [1.0.2] - 2025-02-05

### Added
- **Trigger Orders**: New `trigger-order.ts` script for standalone stop loss and take profit orders
- **Set TP/SL**: New `set-tpsl.ts` script to add TP/SL to existing positions
  - Supports absolute prices (`--tp 40`)
  - Supports percentage from entry (`--tp +10%`, `--sl -5%`)
  - Supports breakeven (`--sl entry`)
  - Validates TP/SL make sense for position direction
  - Calculates and displays risk/reward ratio
- **Order Types Documentation**: Clear explanation of limit orders vs trigger orders in SKILL.md

### Fixed
- TIF case sensitivity issue in `limit-order.ts` and `scale.ts` (SDK expects "Gtc" not "GTC")
- Path resolution for `.env` file when packaged as skill
- Suppressed dotenv logging noise with `DOTENV_CONFIG_QUIET`

## [1.0.1] - 2025-02-05

### Added
- **Automated Onboarding**: New `onboard.ts` script for one-command setup
  - Prompts user to use existing key or generate new wallet
  - Creates `.env` file automatically
  - Approves builder fee (free, no funds needed)
  - Displays wallet address for funding
- Interactive wallet setup flow for AI agents

### Changed
- Updated SKILL.md and README.md with simplified onboarding instructions
- Config now gracefully handles missing `.env` file with helpful error messages

## [1.0.0] - 2025-02-04

### Added
- **Core Trading**
  - Market orders with slippage protection
  - Limit orders (GTC, IOC, ALO)
  - Order cancellation
  - Position management

- **Advanced Execution**
  - TWAP (Time-Weighted Average Price)
  - Scale in/out with price distribution
  - Bracket orders (entry + TP + SL)
  - Chase orders (follow price with ALO)

- **Trading Strategies**
  - Funding arbitrage
  - Grid trading
  - DCA (Dollar Cost Averaging)
  - Market making (spread and maker-only)

- **Info Scripts**
  - Account overview
  - Position details
  - Funding rates
  - Market data

- **Builder Fee Support**
  - 1 bps (0.01%) fee on trades
  - One-time approval flow
  - API wallet support
