Install
openclaw skills install lista-lendingView and operate Lista Lending vaults/markets. Use when user asks about LENDING-ONLY positions or wants to deposit/withdraw/borrow/repay. For report-style ov...
openclaw skills install lista-lendingStatus: Pre-release (internal only, not in public registry) Agent quick check:
node dist/cli/cli.bundle.mjs versionAgent rebuild:npm install && npm run build
Execute Lista Lending vault and market operations through @lista-dao/moolah-lending-sdk, with transaction sending delegated to lista-wallet-connect.
This skill handles LENDING-SPECIFIC viewing and operations.
✅ Use when user wants to:
1. View LENDING positions only:
2. Execute lending operations:
❌ Do NOT use for:
listalistalistaKey difference:
lista: VIEW report-style lending analytics and summarieslista-lending: VIEW/OPERATE lending only (vaults + markets)lista-wallet-connect: Wallet operations (connect/sign/call)Apply these routing rules before running commands:
pair, auth, sign, topic, session) → lista-wallet-connectdeposit, withdraw, supply, borrow, repay, market-withdraw) → lista-lendingholdings, vaults, markets for selection/filtering/follow-up execution) → lista-lendingposition report, risk check, daily digest, high-level market/vault summary) → listaAmbiguous intent handling:
check my positions: if user asks for operation follow-up or lending-only detail, use lista-lending; otherwise use lista.market list / vault list: if user needs execution target selection, use lista-lending; if user only wants macro overview, use lista.Supported capabilities:
vaults, select --vault, deposit, withdrawmarkets, select --market, supply, borrow, repay, market-withdrawholdingsconfig, versionNot in scope:
Current unsupported market types for trade actions (select/supply/borrow/repay/market-withdraw):
zone === 3)termType === 1)Behavior:
markets command filters them out from list output.select --market rejects them with unsupported_market_type.holdings still returns them (for full portfolio visibility) and marks:
isSmartLendingisFixedTermisActionableskills/lista-lending/
├── SKILL.md
├── package.json
├── tsconfig.json
└── src/
├── cli/ # args/help/meta/run
├── api/ # vault/market/user read-side queries
├── sdk/ # SDK client + market runtime prefetch
├── executor/ # tx execution + receipt polling
├── commands/ # command handlers
│ ├── shared/ # context/errors/output/tx helpers
│ ├── select/
│ ├── borrow/
│ └── repay/
├── presenters/
├── utils/
├── config.ts
├── context.ts
├── api.ts # API facade export
├── sdk.ts # SDK facade export
├── executor.ts # executor facade export
└── cli.ts # CLI entrypoint
Notes:
src/cli/* and keeps src/cli.ts as the single entrypoint.src/api/* (vault, market, user).src/sdk/client.ts; market runtime prefetch is in src/sdk/market-runtime.ts.borrow and repay are split into dedicated simulate and execute modules to keep command files small.lista-wallet-connect skill.wallet-topic and wallet-address.>= 18.0.0 (recommended >= 20).lista-wallet-connect is built (skills/lista-wallet-connect/dist/cli/cli.bundle.mjs exists).lista-lending is built (skills/lista-lending/dist/cli/cli.bundle.mjs exists).Use prebuilt dist/ by default for faster startup.
cd skills/lista-lending
# ensure Node.js >= 18 (recommended >= 20)
node -v
node dist/cli/cli.bundle.mjs version
Only run install/build when dist/ is missing or version check fails:
cd skills/lista-lending
npm install
npm run build
node dist/cli/cli.bundle.mjs version
Fallback for local debugging (non-bundled output):
cd skills/lista-lending
npm run build
node dist/cli.js version
If skills/lista-wallet-connect/dist/cli/cli.bundle.mjs is missing, rebuild wallet-connect as well:
cd skills/lista-wallet-connect
npm install
npm run build
Agent execution path:
cd skills/lista-lending
node dist/cli/cli.bundle.mjs <command> [options]
stdout: machine-readable JSON (result payload)stderr: errors only--debug-log-file <path> to append structured stdout/stderr logs (jsonl).For user-facing answers, keep CLI JSON as internal source of truth, then render human-readable tables/summaries. Return raw JSON only when the user explicitly asks for raw output.
vaults recommended columns:
Vault, Asset, TVL (USD), APY, Curatormarkets recommended columns:
Collateral, Loan, LLTV, Borrow Rate, Liquidity (USD)holdings recommended structure:
Vault, Chain, Deposited, Deposited USD, APY, Wallet BalanceMarket, Chain, Collateral USD, Borrowed USD, LTV, HealthMarket, Chain, Reason, Collateral USD, Borrowed USDDefault rule:
vaults, markets, holdings); do not reuse holdings layout for vault/market list pages.eip155:56, eip155:1) for stable machine parsing and debugging.eip155:1 -> Ethereum, eip155:56 -> BSC).zone/termType in user-facing table unless user explicitly asks for technical details.Reason from flags:
isSmartLending => SmartLendingisFixedTerm => Fixed-termHealth definition (for market positions):
health = LLTV / LTV when LTV > 0; otherwise health = 100.Healthy: health >= 1.2Warning: 1.0 <= health < 1.2Risk: health < 1.0Warning or Risk, suggest repay/reduce borrow.eip155:56 (BSC, default)eip155:1 (Ethereum)version - show skill version and compatibility hintsconfig - read/update RPC settingsvaults - list vaults with filtersmarkets - list markets with filters (SmartLending/fixed-term filtered)holdings - query user positions across vault + marketselect - set active vault or market contextdeposit - deposit to selected/explicit vaultwithdraw - withdraw from selected/explicit vaultsupply - supply collateral to selected/explicit marketborrow - simulate or execute borrowrepay - simulate or execute repaymarket-withdraw - withdraw supplied collateral from selected/explicit market--chain <eip155:56|eip155:1>--wallet-topic <topic>--wallet-address <0x...>All command snippets below are for agent execution; do not instruct the user to type them manually.
versionPurpose: Print skill version and dependency constraints.
node dist/cli/cli.bundle.mjs version
configPurpose: Manage RPC override.
Examples:
# show config
node dist/cli/cli.bundle.mjs config --show
# set rpc override
node dist/cli/cli.bundle.mjs config --set-rpc --chain eip155:56 --url https://bsc-mainnet.nodereal.io/v1/<key>
# clear rpc override
node dist/cli/cli.bundle.mjs config --clear-rpc --chain eip155:56
Notes:
~/.agent-wallet/lending-config.jsonvaultsPurpose: Discover vaults from SDK list API.
Common options:
--page, --page-size, --sort, --order--zone, --keyword--assets <a,b>, --curators <a,b>Examples:
node dist/cli/cli.bundle.mjs vaults
node dist/cli/cli.bundle.mjs vaults --chain eip155:1
node dist/cli/cli.bundle.mjs vaults --sort apy --order desc --page 1 --page-size 10
node dist/cli/cli.bundle.mjs vaults --assets 0x8d0d...,0x55d3... --curators "Lista DAO,Pangolins"
marketsPurpose: Discover markets from SDK list API.
Common options:
--page, --page-size, --sort, --order--zone, --keyword--loans <a,b>, --collaterals <a,b>Examples:
node dist/cli/cli.bundle.mjs markets
node dist/cli/cli.bundle.mjs markets --chain eip155:56 --sort liquidity --order desc --page-size 20
node dist/cli/cli.bundle.mjs markets --loans USD1,USDT --collaterals USD1,BTCB
Notes:
zone=3) and fixed-term (termType=1) markets in output.Smart Lending and fixed-term market operations are currently not supported in this skill. For full functionality, please use the Lista website.holdingsPurpose: Query positions by wallet address.
Options:
--address <0x...> (optional if context already has userAddress)--scope <all|vault|market|selected>Examples:
# all positions (vault + market)
node dist/cli/cli.bundle.mjs holdings --address 0xYOUR_ADDRESS
# only vault positions
node dist/cli/cli.bundle.mjs holdings --address 0xYOUR_ADDRESS --scope vault
# only market positions
node dist/cli/cli.bundle.mjs holdings --address 0xYOUR_ADDRESS --scope market
# only currently selected position
node dist/cli/cli.bundle.mjs holdings --scope selected
Market position fields include:
isSmartLending (zone === 3)isFixedTerm (termType === 1)isActionable (!isSmartLending && !isFixedTerm)zone, termTypeselectPurpose: Persist active target in context for follow-up operations.
Modes:
--vault--market--show--clearExamples:
# select vault
node dist/cli/cli.bundle.mjs select \
--vault 0xfa27f172e0b6ebcef9c51abf817e2cb142fbe627 \
--chain eip155:56 \
--wallet-topic <topic> \
--wallet-address 0xYOUR_ADDRESS
# select market
node dist/cli/cli.bundle.mjs select \
--market 0xd384584abf6504425c9873f34a63372625d46cd1f2e79aeedc77475cacaca922 \
--chain eip155:56 \
--wallet-topic <topic> \
--wallet-address 0xYOUR_ADDRESS
# show/clear
node dist/cli/cli.bundle.mjs select --show
node dist/cli/cli.bundle.mjs select --clear
Notes:
~/.agent-wallet/lending-context.jsondepositPurpose: Deposit vault asset.
Required:
--amount--vault + wallet infoExample:
# using selected vault
node dist/cli/cli.bundle.mjs deposit --amount 1
# explicit target
node dist/cli/cli.bundle.mjs deposit \
--vault 0xVAULT \
--amount 1 \
--chain eip155:56 \
--wallet-topic <topic> \
--wallet-address 0xYOUR_ADDRESS
withdrawPurpose: Withdraw vault asset.
Required:
--amount or --withdraw-allExamples:
node dist/cli/cli.bundle.mjs withdraw --amount 0.5
node dist/cli/cli.bundle.mjs withdraw --withdraw-all
supplyPurpose: Supply market collateral.
Required:
--amountExample:
node dist/cli/cli.bundle.mjs supply --amount 2
borrowPurpose: Borrow loan token, or simulate borrow capacity.
Modes:
--simulate--simulate --simulate-supply <amt>--amount <amt>Examples:
# check max borrowable
node dist/cli/cli.bundle.mjs borrow --simulate
# check max after hypothetical supply
node dist/cli/cli.bundle.mjs borrow --simulate --simulate-supply 2
# execute borrow
node dist/cli/cli.bundle.mjs borrow --amount 0.01
repayPurpose: Repay market debt, or simulate repay impact.
Modes:
--simulate --amount <amt>--simulate --repay-all--amount <amt> or --repay-allExamples:
# simulate partial repay impact
node dist/cli/cli.bundle.mjs repay --simulate --amount 0.01
# simulate full repay impact
node dist/cli/cli.bundle.mjs repay --simulate --repay-all
# execute
node dist/cli/cli.bundle.mjs repay --amount 0.01
node dist/cli/cli.bundle.mjs repay --repay-all
market-withdrawPurpose: Withdraw market collateral.
Required:
--amount or --withdraw-allExamples:
node dist/cli/cli.bundle.mjs market-withdraw --amount 0.5
node dist/cli/cli.bundle.mjs market-withdraw --withdraw-all
lista-wallet-connect call command.call performs simulation by default before requesting wallet signature.status: "rejected", reason: "user_rejected".# 1) discover
node dist/cli/cli.bundle.mjs vaults --chain eip155:56
# 2) select
node dist/cli/cli.bundle.mjs select --vault 0xVAULT --wallet-topic <topic> --wallet-address 0xADDR
# 3) operate
node dist/cli/cli.bundle.mjs deposit --amount 1
node dist/cli/cli.bundle.mjs withdraw --amount 0.5
# 1) discover
node dist/cli/cli.bundle.mjs markets --chain eip155:56
# 2) select
node dist/cli/cli.bundle.mjs select --market 0xMARKET --wallet-topic <topic> --wallet-address 0xADDR
# 3) operate
node dist/cli/cli.bundle.mjs supply --amount 2
node dist/cli/cli.bundle.mjs borrow --simulate
node dist/cli/cli.bundle.mjs borrow --amount 0.01
node dist/cli/cli.bundle.mjs repay --simulate --amount 0.01
node dist/cli/cli.bundle.mjs repay --amount 0.01
node dist/cli/cli.bundle.mjs market-withdraw --amount 1
eip155:56 vs eip155:1) before sending tx.borrow --simulate before first borrow on a market.user_rejected as normal user decision, not protocol failure.