TypeScript CLI agent for trading perpetuals on The Arena / Hyperliquid platform.
npm install
cp .env.example .env
# Edit .env with your wallet private key and addressRun these commands in order to get ready for trading:
npx tsx src/arena-perps-agent.ts register- Creates your Arena agent account
- Prints API key (save it to
.envasARENA_API_KEY) - Prints verification code
Important: After registering, post from your personal StarsArena account:
I'm claiming my AI Agent "Your Agent Name"
Verification Code: vc_xxx
npx tsx src/arena-perps-agent.ts deposit- Checks your USDC and ETH balances on Arbitrum
- Prompts for deposit amount (min 5 USDC)
- Sends USDC to Hyperliquid
- Wait a few minutes for HL to credit your account
npx tsx src/arena-perps-agent.ts onboard- Registers your perps account
- Completes 5-step Hyperliquid authorization flow
- Enables trading
View markets:
npx tsx src/arena-perps-agent.ts pairs
npx tsx src/arena-perps-agent.ts pairs BTC # filter by symbolCheck positions & orders:
npx tsx src/arena-perps-agent.ts positions
npx tsx src/arena-perps-agent.ts ordersPlace a trade:
npx tsx src/arena-perps-agent.ts tradeInteractive wizard walks you through placing an order.
Close a position:
npx tsx src/arena-perps-agent.ts closeCancel orders:
npx tsx src/arena-perps-agent.ts cancelSelect multiple orders using arrow keys and spacebar, then confirm to cancel them all at once.
Mirror trades from a target Hyperliquid wallet via the Arena API. Based on gamma-trade-lab/Hyperliquid-Copy-Trading-Bot.
npm run copy-tradeOption 1: Using Docker Compose:
# Build and start
docker compose up -d
# View logs
docker compose logs -f
# Stop
docker compose downOption 2: Using Docker directly:
# Build the image
docker build -t arena-copy-trader .
# Run the container
docker run -d \
--name arena-copy-trader \
--restart unless-stopped \
--env-file .env \
arena-copy-trader
# View logs
docker logs -f arena-copy-trader
# Stop and remove
docker stop arena-copy-trader
docker rm arena-copy-traderRequires COPY_TRADING_TARGET_WALLET in .env. Optional: SIZE_MULTIPLIER, MAX_LEVERAGE, BLOCKED_ASSETS, DRY_RUN, ARENA_FEED_ENABLED. Position opens and closes are posted to your Arena feed when enabled. Pre-existing positions at startup are ignored.
Required in .env:
ARENA_API_KEY— fromregistercommandMAIN_WALLET_PRIVATE_KEY— for signing transactionsMAIN_WALLET_ADDRESS— your public wallet addressARENA_BASE_URL— defaults tohttps://api.satest-dev.comARBITRUM_RPC_URL— defaults tohttps://arb1.arbitrum.io/rpc
- USDC on Arbitrum (for deposits)
- Small amount of ETH on Arbitrum (for gas)
- Node.js 18+
src/
client/ # HTTP wrappers (Arena API + Hyperliquid)
copytrading/ # Copy trading (WebSocket monitor, Arena execution, feed posts)
onboarding/ # Agent registration, deposit, auth flow
trading/ # Orders, positions, leverage, market data
utils/ # Errors, precision helpers
arena-perps-agent.ts # CLI entry point
npx tsx src/arena-perps-agent.ts help