Install any skill in seconds. Free to start, no credit card required.
Get Started Free →View and operate Lista Lending vaults/markets. Use when user asks about LENDING-ONLY positions or wants to deposit/withdraw/borrow/repay. For report-style overview, use lista instead.
.claude/skills/leoyeai-lista-lending/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 143% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 279% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 890% | 0% |
| case-09 | ✓→✗ | ▼ Worse | 658% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 346% | 0% |
> Status: Pre-release (internal only, not in public registry) > Agent quick check: node dist/cli/cli.bundle.mjs version > Agent 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:isSmartLendingisFixedTermisActionabletextskills/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.
bashcd 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:
bashcd skills/lista-lending npm install npm run build node dist/cli/cli.bundle.mjs version
Fallback for local debugging (non-bundled output):
bashcd 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:
bashcd skills/lista-wallet-connect npm install npm run build
Agent execution path:
bashcd 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.
bashnode dist/cli/cli.bundle.mjs version
configPurpose: Manage RPC override.
Examples:
bash# 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:
bashnode 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:
bashnode 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:
bash# 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:
bash# 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:
bash# 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:
bashnode dist/cli/cli.bundle.mjs withdraw --amount 0.5 node dist/cli/cli.bundle.mjs withdraw --withdraw-all
supplyPurpose: Supply market collateral.
Required:
--amountExample:
bashnode 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:
bash# 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:
bash# 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:
bashnode 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".bash# 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
bash# 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.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 7,770 | 9,460 | +22% | 1 | 1 | 0% | 642 | 5,404 | +742% | 0 | 0 | — |
case-13 | fail→fail | 8,072 | 8,974 | +11% | 1 | 1 | 0% | 1,482 | 5,164 | +248% | 0 | 0 | — |
case-02 | fail→fail | 8,176 | 7,006 | -14% | 1 | 1 | 0% | 1,525 | 5,259 | +245% | 0 | 0 | — |
case-03 | fail→fail | 8,636 | 7,324 | -15% | 1 | 1 | 0% | 1,486 | 5,286 | +256% | 0 | 0 | — |
case-04 | pass→pass | 7,103 | 3,608 | -49% | 1 | 1 | 0% | 1,195 | 5,327 | +346% | 0 | 0 | — |
case-05 | fail→pass | 13,953 | 3,213 | -77% | 1 | 1 | 0% | 2,212 | 5,365 | +143% | 0 | 0 | — |
case-06 | pass→pass | 4,304 | 3,876 | -10% | 1 | 1 | 0% | 706 | 5,430 | +669% | 0 | 0 | — |
case-07 | fail→fail | 3,926 | 9,472 | +141% | 1 | 1 | 0% | 703 | 5,423 | +671% | 0 | 0 | — |
case-08 | fail→pass | 7,700 | 3,909 | -49% | 1 | 1 | 0% | 1,449 | 5,486 | +279% | 0 | 0 | — |
case-09 | pass→fail | 5,196 | 7,823 | +51% | 1 | 1 | 0% | 700 | 5,307 | +658% | 0 | 0 | — |
case-10 | pass→pass | 8,855 | 2,763 | -69% | 1 | 1 | 0% | 1,565 | 5,321 | +240% | 0 | 0 | — |
case-11 | fail→pass | 3,823 | 2,525 | -34% | 1 | 1 | 0% | 524 | 5,190 | +890% | 0 | 0 | — |
case-12 | fail→fail | 3,831 | 7,773 | +103% | 1 | 1 | 0% | 610 | 5,191 | +751% | 0 | 0 | — |
case-14 | fail→fail | 13,050 | 6,556 | -50% | 1 | 1 | 0% | 1,901 | 5,240 | +176% | 0 | 0 | — |
case-15 | fail→fail | 23,368 | 6,868 | -71% | 1 | 1 | 0% | 4,144 | 5,153 | +24% | 0 | 0 | — |
case-16 | fail→fail | 5,344 | 6,771 | +27% | 1 | 1 | 0% | 935 | 5,153 | +451% | 0 | 0 | — |
case-17 | fail→fail | 6,891 | 11,018 | +60% | 1 | 1 | 0% | 859 | 5,637 | +556% | 0 | 0 | — |
case-18 | fail→fail | 9,719 | 7,900 | -19% | 1 | 1 | 0% | 1,489 | 5,303 | +256% | 0 | 0 | — |
case-19 | pass→pass | 10,176 | 6,024 | -41% | 1 | 1 | 0% | 1,621 | 5,678 | +250% | 0 | 0 | — |
case-20 | pass→pass | 10,354 | 1,664 | -84% | 1 | 1 | 0% | 1,548 | 5,030 | +225% | 0 | 0 | — |
case-21 | fail→fail | 4,961 | 6,021 | +21% | 1 | 1 | 0% | 806 | 5,106 | +533% | 0 | 0 | — |
case-22 | fail→fail | 8,740 | 7,857 | -10% | 1 | 1 | 0% | 1,522 | 5,272 | +246% | 0 | 0 | — |
case-23 | pass→pass | 12,592 | 3,655 | -71% | 1 | 1 | 0% | 1,882 | 5,395 | +187% | 0 | 0 | — |
case-24 | fail→fail | 5,280 | 7,251 | +37% | 1 | 1 | 0% | 671 | 5,272 | +686% | 0 | 0 | — |
case-25 | fail→fail | 3,915 | 6,072 | +55% | 1 | 1 | 0% | 604 | 5,245 | +768% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 25 cases were attempted, and 9 counted toward the lift figure. The other 16 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +8 percentage points is the difference between those two pass rates over the 9 comparable cases. 4 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.