On-chain market making, from a single command line to your OpenClaw agent.
No programming required.
⛓️ Supported Platforms
Overview · Quick Start · Configure · Command Reference · Examples
Most on-chain workflows on Solana are painful:
- Too many manual steps. Copy-pasting addresses, switching tabs, signing transaction after transaction — every extra step is a chance to make a costly mistake.
- Repetitive confirmations waste hours. Manually confirming the same operations over and over drains time that should go toward strategy, not execution.
- Complex tools lock out non-developers. If you're not writing custom scripts, most market making tooling is simply inaccessible.
ForgeX packages the full workflow into a clean CLI. One command at a time.
npm install -g forgex-cliRequires Node.js >= 22.14.0.
Verify installation:
forgex --versionforgex config init --rpc-url "https://your-rpc-endpoint.com" --network mainnetforgex wallet create-group --name "my-group"
# Returns groupId — note it for subsequent commandsforgex --password "your-password" wallet generate --group 1 --count 10Distribute SOL from a source wallet to the group:
forgex --password "your-password" transfer out \
--from "YourSourceWalletAddress" \
--to-group 1 \
--value 0.1forgex --password "your-password" token create \
--dex pump \
--name "MyToken" \
--symbol "MYT" \
--image ./logo.png \
--dev-wallet 1 \
--dev-buy 0.5 \
--dry-run # remove --dry-run when ready to go liveforgex --password "your-password" tools volume \
--group 1 \
--token "TOKEN_MINT_ADDRESS" \
--mode 1b1s \
--amount 0.01 \
--count 10 \
--rounds 20 \
--interval 10000Tip: Always run with
--dry-runfirst to simulate the operation before executing on-chain.
All commands accept --format json|table|minimal (default: json).
Commands involving private keys require --password before the subcommand name:
forgex --password "your-password" <command> [subcommand] [options]| Command | Description |
|---|---|
| forgex config init | Initialize config file |
| forgex config set <key> <value> | Set a config value |
| forgex config get [key] | View config values |
# Initialize with RPC endpoint
forgex config init --rpc-url "https://my-rpc.com" --network mainnet
# Set Codex API key for market data
forgex config set codexApiKey "your-api-key"
# Set default slippage (BPS)
forgex config set defaultSlippage 300
# View all config
forgex config getCreate & manage groups
# Create a local wallet group
forgex wallet create-group --name "market-making-group"
# Create with optional remark
forgex wallet create-group --name "sniper-group" --remark "launch snipers"
# List all wallet groups
forgex wallet list-groups
# View group details (wallet addresses)
forgex wallet group-info --id 1
# Delete a group
forgex wallet delete-group --id 1 --forceGenerate & import wallets
# Generate new wallets (max 100 per group)
forgex --password "pwd" wallet generate --group 1 --count 10
# Add an existing wallet by private key
forgex --password "pwd" wallet add --group 1 --private-key "Base58Key..." --note "main wallet"
# Remove a wallet from group
forgex --password "pwd" wallet remove --group 1 --address "WalletAddress..."
# Import from CSV (format: privateKey,note)
forgex --password "pwd" wallet import --group 1 --file ./wallets.csvBackup & restore
# Export group as CSV
forgex --password "pwd" wallet export --group 1 --file ./backup.csv
# Export all groups as encrypted JSON
forgex --password "pwd" wallet export-group \
--file ./all-groups.json \
--encrypt \
--password "file-encryption-password"
# Import all groups from JSON backup
forgex --password "pwd" wallet import-group \
--file ./all-groups.json \
--password "file-encryption-password"Vanity addresses
# Generate address ending in "pump"
forgex wallet grind --suffix pump
# Generate 3 addresses with custom suffix, using 8 threads
forgex wallet grind --suffix pump --count 3 --threads 8All trade commands support
--dry-runfor simulation.
Buy
# Simulate buy (recommended before first run)
forgex --password "pwd" trade buy \
--group 1 --token "TOKEN_CA" --amount 0.1 --dry-run
# Batch buy — all wallets in group buy the same amount
forgex --password "pwd" trade buy \
--group 1 --token "TOKEN_CA" --amount 0.1 --slippage 300Sell
# Sell all tokens
forgex --password "pwd" trade sell \
--group 1 --token "TOKEN_CA" --amount all
# Sell 50%
forgex --password "pwd" trade sell \
--group 1 --token "TOKEN_CA" --amount 50%
# Sell fixed token quantity
forgex --password "pwd" trade sell \
--group 1 --token "TOKEN_CA" --amount 1000000Batch (buy + sell in one bundle)
# Execute buy and sell in same Jito Bundle
forgex --password "pwd" trade batch \
--group 1 --token "TOKEN_CA" \
--type buyWithSell --mode 1b1s --amount 0.01Modes: 1b1s (1 buy + 1 sell), 1b2s, 1b3s, 2b1s, 3b1s
Sniper
# Snipe with different amounts per wallet (amounts count must match wallet count)
forgex --password "pwd" trade sniper \
--group 1 --token "TOKEN_CA" \
--amounts "0.5,0.3,0.2" --slippage 500All tools support
--dry-run. Use--roundsto limit execution.
Turnover (wallet cycling)
Cycles tokens between two wallet groups via Jito Bundle — zero price impact.
# Simulate
forgex --password "pwd" tools turnover \
--from-group 1 --to-group 2 --token "TOKEN_CA" --dry-run
# Run 5 turnover cycles
forgex --password "pwd" tools turnover \
--from-group 1 --to-group 2 --token "TOKEN_CA" \
--daemon --rounds 5 --interval 2000
# Turnover 50% of holdings
forgex --password "pwd" tools turnover \
--from-group 1 --to-group 2 --token "TOKEN_CA" \
--amount 50%Volume bot
Generates on-chain trading volume with zero net loss (buy + sell in same transaction).
# Simulate
forgex --password "pwd" tools volume \
--group 1 --token "TOKEN_CA" --dry-run
# Run 20 rounds, every 10 seconds, using 10 wallets
forgex --password "pwd" tools volume \
--group 1 --token "TOKEN_CA" \
--mode 1b1s --amount 0.01 --count 10 \
--daemon --rounds 20 --interval 10000Options: --group <id>, --token <ca>, --mode 1b1s|1b2s|1b3s|2b1s|3b1s, --amount <sol>, --count <n> (limit wallets, default: all), --interval <ms> (delay between wallets), --rounds <n>, --daemon, --dry-run
Price robot
Automatically moves price toward a target by buying (up) or selling (down).
# Simulate price push
forgex --password "pwd" tools robot-price \
--group 1 --token "TOKEN_CA" \
--direction up --target-price 0.001 --dry-run
# Push price up, max spend 5 SOL
forgex --password "pwd" tools robot-price \
--group 1 --token "TOKEN_CA" \
--direction up --target-price 0.001 \
--amount 0.05 --max-cost 5 --interval 3000Options: --direction up|down, --target-price <sol>, --amount <sol>, --max-cost <sol>, --interval <ms>
All transfer commands support
--dry-run.
Collect (many → one)
# Collect all SOL from group into one wallet
forgex --password "pwd" transfer in \
--to "MainWalletAddress" --from-group 1 --amount all
# Collect from only the first 5 wallets
forgex --password "pwd" transfer in \
--to "MainWalletAddress" --from-group 1 --amount all --count 5
# Keep 0.01 SOL in each wallet, collect the rest
forgex --password "pwd" transfer in \
--to "MainWalletAddress" --from-group 1 \
--amount reserve --value 0.01
# Collect tokens instead of SOL
forgex --password "pwd" transfer in \
--to "MainWalletAddress" --from-group 1 \
--token "TOKEN_CA" --amount allDistribute (one → many)
--fromaddress must belong to a wallet group (private key required for signing).
# Send 0.1 SOL to each wallet in group
forgex --password "pwd" transfer out \
--from "SourceAddress" --to-group 1 --value 0.1
# Distribute to only the first 10 wallets
forgex --password "pwd" transfer out \
--from "SourceAddress" --to-group 1 --value 0.1 --count 10
# Random distribution between 0.05 and 0.15 SOL
forgex --password "pwd" transfer out \
--from "SourceAddress" --to-group 1 \
--amount random --value 0.05 --max 0.15Many-to-many (wallet[i] → wallet[i])
# Transfer all from group 1 wallets to matching group 2 wallets
forgex --password "pwd" transfer many-to-many \
--from-group 1 --to-group 2 --amount all
# Fixed amount per pair
forgex --password "pwd" transfer many-to-many \
--from-group 1 --to-group 2 --amount fixed --value 0.1Supports
--dry-runfor simulation.
Create & launch token
# Simulate token creation
forgex --password "pwd" token create \
--dex pump \
--name "MyToken" --symbol "MTK" \
--image ./logo.png \
--description "My token" \
--dry-run
# Launch with dev buy + snipers in same block (T0 bundle)
forgex --password "pwd" token create \
--dex pump \
--name "MyToken" --symbol "MTK" \
--image ./logo.png \
--twitter "https://twitter.com/mytoken" \
--website "https://mytoken.io" \
--dev-wallet 1 --dev-buy 2.0 \
--snipers 2 --sniper-amounts "0.5,0.3,0.2" \
--bundle-time T0Platforms: pump (Pump.fun), launchlab
Bundle time: T0 (dev buy + snipers same block), T1_T5 (snipers 1-5 blocks after dev)
Query token
# Token info (price, name, dex)
forgex token info --ca "TOKEN_CA"
# Liquidity pool info
forgex token pool --ca "TOKEN_CA"# SOL balance
forgex query balance --address "WalletAddress"
# Token balance
forgex query balance --address "WalletAddress" --token "TOKEN_CA"
# Token price
forgex query price --token "TOKEN_CA"
# Candlestick data (intervals: 1m, 5m, 15m, 1h, 4h, 1d)
forgex query kline --token "TOKEN_CA" --interval 5m --count 50
# Transaction history for a group
forgex query transactions --group 1 --token "TOKEN_CA"
# Holdings and PnL across a group
forgex query monitor --group 1 --token "TOKEN_CA"| BPS | Percentage | Recommended for |
|---|---|---|
| 100 | 1% | Turnover trades |
| 300 | 3% | Normal buy/sell |
| 500 | 5% | Sniping / fast entries |
| 1000 | 10% | High volatility tokens |
| 2000 | 20% | Extreme conditions |
# 1. Create wallets
forgex --password "pwd" wallet generate --group 1 --count 5
# 2. Fund them
forgex --password "pwd" transfer out --from "MainWallet" --to-group 1 --value 0.5
# 3. Launch token with dev buy + snipers
forgex --password "pwd" token create \
--dex pump --name "MyToken" --symbol "MTK" \
--image ./logo.png \
--dev-wallet 1 --dev-buy 1.0 \
--snipers 1 --sniper-amounts "0.3,0.2,0.1,0.1,0.1" \
--bundle-time T0forgex --password "pwd" tools volume \
--group 1 --token "TOKEN_CA" \
--mode 1b1s --amount 0.01 --count 10 \
--rounds 30 --interval 10000forgex --password "pwd" trade sell --group 1 --token "TOKEN_CA" --amount all
forgex --password "pwd" transfer in --to "MainWallet" --from-group 1 --amount all- Twitter: @SonicSVM
- npm: forgex-cli
- Sonic SVM: sonic.game