Aave V3 Lending Protocol CLI
7 commands for lending market data, reserve details, account positions, supply/withdraw, and borrow/repay operations.
Pre-flight Checks
Every time before running any plugin-store command, always follow these steps in order. Do not echo routine command output to the user; only provide a brief status update when installing, updating, or handling a failure.
Confirm installed: Run which plugin-store . If not found, install it:
curl -sSL https://raw.githubusercontent.com/purong-huang-1121/skills-store/main/install.sh | sh
If the install script fails, ask the user to install manually following the instructions at: https://github.com/okx/plugin-store
Check for updates: Read ~/.plugin-store/last_check and compare it with the current timestamp:
cached_ts=$(cat ~/.plugin-store/last_check 2>/dev/null || true) now=$(date +%s)
-
If cached_ts is non-empty and (now - cached_ts) < 43200 (12 hours), skip the update and proceed.
-
Otherwise (file missing or older than 12 hours), run the installer to check for updates: curl -sSL https://raw.githubusercontent.com/purong-huang-1121/skills-store/main/install.sh | sh
If any plugin-store command fails with an unexpected error during this session, try reinstalling before giving up.
Skill Routing
-
For token search / analytics → use okx-dex-token
-
For DEX swap → use okx-dex-swap
-
For token prices / charts → use okx-dex-market
-
For wallet balances → use okx-wallet-portfolio
-
For transaction broadcasting → use okx-onchain-gateway
-
For prediction markets → use okx-dapp-polymarket
Authentication
Data commands (markets, reserve, account): No authentication needed. Work immediately.
Transaction commands (supply, withdraw, borrow, repay): Require an EVM wallet private key:
Add to .env file
EVM_PRIVATE_KEY=0x...
The private key is used to sign supply, withdraw, borrow, and repay transactions on-chain.
Quickstart
Browse and Research
List all Aave V3 markets on Ethereum
plugin-store aave markets --chain ethereum
Get reserve details for USDC
plugin-store aave reserve USDC --chain ethereum
Check account positions
plugin-store aave account 0xYourAddress --chain ethereum
Supply and Withdraw
Supply 100 USDC to Aave on Ethereum
plugin-store aave supply --token USDC --amount 100 --chain ethereum
Withdraw 50 USDC from Aave
plugin-store aave withdraw --token USDC --amount 50 --chain ethereum
Withdraw all USDC (full balance)
plugin-store aave withdraw --token USDC --amount max --chain ethereum
Borrow and Repay
Borrow 500 USDC against your collateral (variable rate)
plugin-store aave borrow --token USDC --amount 500 --chain ethereum
Repay 200 USDC of your debt
plugin-store aave repay --token USDC --amount 200 --chain ethereum
Repay all outstanding USDC debt
plugin-store aave repay --token USDC --amount max --chain ethereum
Command Index
Command Auth Description
1 plugin-store aave markets --chain <chain>
No List all Aave V3 reserve markets on a chain
2 plugin-store aave reserve <symbol> --chain <chain>
No Get detailed reserve data (APY, liquidity, config)
3 plugin-store aave account <address> --chain <chain>
No View account positions, health factor, borrowing power
4 plugin-store aave supply --token <symbol> --amount <n> --chain <chain>
Yes Supply assets to earn yield
5 plugin-store aave withdraw --token <symbol> --amount <n> --chain <chain>
Yes Withdraw supplied assets (use "max" for full withdrawal)
6 plugin-store aave borrow --token <symbol> --amount <n> --chain <chain>
Yes Borrow assets at variable rate against collateral
7 plugin-store aave repay --token <symbol> --amount <n> --chain <chain>
Yes Repay borrowed assets (use "max" for full repayment)
Cross-Skill Workflows
Workflow A: Research and Supply (most common)
User: "What are the best lending rates on Aave right now?"
- aave markets --chain ethereum → show all reserves with APYs ↓ user picks an asset
- aave reserve USDC --chain ethereum → show detailed reserve info ↓ user wants to supply
- Check EVM_PRIVATE_KEY is set ↓ not set → prompt user to add to .env ↓ set → continue
- aave supply --token USDC --amount 100 --chain ethereum ↓
- "Supplied 100 USDC to Aave V3. You will receive aUSDC as a receipt token."
Data handoff:
-
symbol from markets data → <symbol> for reserve/supply/withdraw commands
-
underlyingAsset address is resolved automatically from the symbol
Workflow B: Portfolio Review and Withdrawal
- aave account 0xYourAddress --chain ethereum → show positions, health factor
- aave reserve WETH --chain ethereum → check current rates on a position
- aave withdraw --token WETH --amount max --chain ethereum → withdraw full balance
Workflow C: Multi-Chain Comparison
- aave markets --chain ethereum → Ethereum rates
- aave markets --chain polygon → Polygon rates
- aave markets --chain arbitrum → Arbitrum rates
- aave supply --token USDC --amount 100 --chain arbitrum → supply on best chain
Workflow D: With OKX Skills
- okx-wallet-portfolio balance --chain ethereum → check token balances
- aave markets --chain ethereum → check lending rates
- aave supply --token USDC --amount 100 --chain ethereum → supply to Aave
Operation Flow
Step 1: Identify Intent
-
Browse markets/rates → markets
-
Check specific asset details → reserve
-
Check account status → account
-
Deposit/lend assets → supply
-
Withdraw assets → withdraw
-
Borrow against collateral → borrow
-
Repay debt → repay
Step 2: Collect Parameters
-
Missing chain → ask user which chain (ethereum, polygon, or arbitrum)
-
Missing symbol for reserve → use markets first, then pick from the list
-
Missing address for account → ask user for their wallet address
-
Missing amount for supply/withdraw/borrow/repay → ask user how much
-
Missing private key (for supply/withdraw/borrow/repay) → prompt to set EVM_PRIVATE_KEY in .env
Step 3: Execute
-
Data phase: show market info, rates, positions, let user make informed decision
-
Confirmation phase: before any supply/withdraw, display token, amount, chain, estimated APY, and ask for confirmation
-
Execution phase: submit transaction, show result with tx hash
Step 4: Suggest Next Steps
Just completed Suggest
markets
- Check specific reserve details → reserve
- View account positions → account
reserve
- Supply assets → supply
- Compare with other chains → markets on another chain
account
- Withdraw assets → withdraw
- Supply more → supply
supply
- Check updated position → account
- View reserve APY → reserve
withdraw
- Check updated position → account
- View wallet balance → okx-wallet-portfolio
borrow
- Check health factor → account
- Monitor borrow rate → reserve
repay
- Check updated debt → account
- View wallet balance → okx-wallet-portfolio
Present conversationally — never expose skill names or endpoint paths to the user.
CLI Command Reference
- plugin-store aave markets
plugin-store aave markets --chain <chain>
Param Required Default Description
--chain
Yes
Chain: ethereum, polygon, arbitrum
Key return fields per reserve:
Field Description
symbol
Asset symbol (e.g. USDC, WETH, DAI)
underlyingAsset
Token contract address
supplyAPY
Current annual supply yield (as decimal, multiply by 100 for %)
borrowAPY
Current annual borrow rate
totalSupply
Total amount supplied
totalBorrow
Total amount borrowed
availableLiquidity
Amount available to borrow
utilizationRate
Ratio of borrowed to supplied
ltv
Loan-to-value ratio for collateral
liquidationThreshold
Threshold at which position can be liquidated
- plugin-store aave reserve
plugin-store aave reserve <symbol> --chain <chain>
Param Required Default Description
<symbol>
Yes
Asset symbol (e.g. USDC, WETH, DAI)
--chain
Yes
Chain: ethereum, polygon, arbitrum
Return fields:
Field Description
symbol
Asset symbol
supplyAPY
Current supply APY
variableBorrowAPY
Variable borrow rate
stableBorrowAPY
Stable borrow rate (if available)
totalSupply
Total supplied amount
totalBorrow
Total borrowed amount
availableLiquidity
Available to borrow
utilizationRate
Current utilization
ltv
Max loan-to-value for collateral
liquidationThreshold
Liquidation trigger threshold
liquidationBonus
Bonus for liquidators
reserveFactor
Protocol fee on interest
canBeCollateral
Whether asset can be used as collateral
borrowingEnabled
Whether borrowing is enabled
- plugin-store aave account
plugin-store aave account <address> --chain <chain>
Param Required Default Description
<address>
Yes
Wallet address (0x...)
--chain
Yes
Chain: ethereum, polygon, arbitrum
Return fields:
Field Description
totalSuppliedUSD
Total value of supplied assets in USD
totalBorrowedUSD
Total value of borrowed assets in USD
netWorthUSD
Net position value in USD
healthFactor
Health factor (< 1.0 = liquidatable)
availableBorrowsUSD
Remaining borrowing capacity in USD
currentLTV
Current loan-to-value ratio
supplies
List of supplied positions [{symbol, amount, amountUSD, apy}]
borrows
List of borrow positions [{symbol, amount, amountUSD, apy}]
- plugin-store aave supply
plugin-store aave supply --token <symbol> --amount <amount> --chain <chain>
Param Required Default Description
--token
Yes
Asset symbol (e.g. USDC, WETH)
--amount
Yes
Amount to supply (in token units)
--chain
Yes
Chain: ethereum, polygon, arbitrum
Return fields:
Field Description
txHash
Transaction hash
status
Transaction status (pending, confirmed, failed)
supplied
Amount supplied
token
Token symbol
chain
Chain used
- plugin-store aave withdraw
plugin-store aave withdraw --token <symbol> --amount <amount> --chain <chain>
Param Required Default Description
--token
Yes
Asset symbol (e.g. USDC, WETH)
--amount
Yes
Amount to withdraw (in token units, or "max" for full withdrawal)
--chain
Yes
Chain: ethereum, polygon, arbitrum
Return fields:
Field Description
txHash
Transaction hash
status
Transaction status (pending, confirmed, failed)
withdrawn
Amount withdrawn
token
Token symbol
chain
Chain used
- plugin-store aave borrow
plugin-store aave borrow --token <symbol> --amount <amount> --chain <chain>
Param Required Default Description
--token
Yes
Asset symbol to borrow (e.g. USDC, WETH)
--amount
Yes
Amount to borrow (in token units)
--chain
No ethereum Chain: ethereum, polygon, arbitrum
Return fields:
Field Description
txHash
Transaction hash
status
Transaction status (success, reverted)
borrowed
Amount borrowed
token
Token symbol
chain
Chain used
- plugin-store aave repay
plugin-store aave repay --token <symbol> --amount <amount> --chain <chain>
Param Required Default Description
--token
Yes
Asset symbol to repay (e.g. USDC, WETH)
--amount
Yes
Amount to repay (in token units, or "max" for full repayment)
--chain
No ethereum Chain: ethereum, polygon, arbitrum
Return fields:
Field Description
txHash
Transaction hash
status
Transaction status (success, reverted)
repaid
Amount repaid
token
Token symbol
chain
Chain used
Key Concepts
-
Supply APY: Annual percentage yield earned by supplying assets. Rates are variable and change based on utilization.
-
Health Factor: Ratio indicating position safety. Above 1.0 is safe; below 1.0 means the position can be liquidated. Keep it well above 1.0 (recommended > 1.5).
-
aTokens: Receipt tokens received when supplying (e.g. supply USDC, receive aUSDC). aTokens accrue interest automatically — their balance grows over time.
-
RAY: Aave uses 27-decimal fixed-point numbers (1 RAY = 10^27) for rate calculations internally. The CLI converts these to human-readable percentages.
-
LTV (Loan-to-Value): Maximum percentage of collateral value that can be borrowed. E.g. 80% LTV means you can borrow up to 80% of your collateral value.
-
Liquidation Threshold: The LTV level at which a position becomes eligible for liquidation. Always higher than the max LTV.
-
Utilization Rate: Ratio of total borrowed to total supplied. Higher utilization = higher rates for both suppliers and borrowers.
Edge Cases
-
Insufficient balance: If the user tries to supply more than their wallet balance, the transaction will fail. Check balance first via okx-wallet-portfolio .
-
Health factor risk: When withdrawing collateral or borrowing, warn if the resulting health factor would drop below 1.5. Withdrawing/borrowing too much can trigger liquidation.
-
Borrow capacity: User must have sufficient collateral before borrowing. Check available borrows via account command.
-
Max repay: Use --amount max to repay the full outstanding debt including accrued interest.
-
Max withdrawal: Use --amount max to withdraw the full supplied balance including accrued interest. This uses type(uint256).max internally.
-
Token approval: First-time supply of a token requires an ERC-20 approval transaction. The CLI handles this automatically but it will use additional gas.
-
Private key not set: For supply/withdraw commands, show clear error: "Set EVM_PRIVATE_KEY in your .env file"
-
Unsupported chain: Only ethereum, polygon, and arbitrum are supported. Other chains will return an error.
-
Asset not listed: If a token symbol is not recognized as an Aave V3 reserve, suggest using markets to see available assets.
-
Rate limiting: OKX API has rate limits. Use retry with backoff.