defi/SKILL.md
DeFi operations on Stacks — ALEX DEX token swaps and liquidity pool queries, plus Zest Protocol lending (supply, withdraw, borrow, repay, claim rewards). All operations are mainnet-only. Write operations require an unlocked wallet.
npx skillsauth add aibtcdev/skills defiInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Provides DeFi operations across two protocols:
Write operations (swap, supply, withdraw, borrow, repay, claim-rewards) require an unlocked wallet (use bun run wallet/wallet.ts unlock first). Read operations (get-swap-quote, get-pool-info, list-pools, list-assets, get-position) also require an unlocked wallet for routing context.
bun run defi/defi.ts <subcommand> [options]
Get a swap quote from ALEX DEX. Returns the expected output amount for swapping tokenX to tokenY.
bun run defi/defi.ts alex-get-swap-quote --token-x <contractId> --token-y <contractId> --amount-in <units>
Options:
--token-x (required) — Input token: contract ID (e.g., SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.token-wstx-v2) or symbol (STX, ALEX)--token-y (required) — Output token: contract ID or symbol--amount-in (required) — Amount of tokenX to swap (in smallest units)Output:
{
"network": "mainnet",
"quote": {
"tokenIn": "SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.token-wstx-v2",
"tokenOut": "SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex",
"amountIn": "1000000",
"expectedAmountOut": "52341",
"route": ["STX", "ALEX"]
}
}
Execute a token swap on ALEX DEX. Requires an unlocked wallet.
bun run defi/defi.ts alex-swap --token-x <contractId> --token-y <contractId> --amount-in <units> [--min-amount-out <units>]
Options:
--token-x (required) — Input token: contract ID or symbol--token-y (required) — Output token: contract ID or symbol--amount-in (required) — Amount of tokenX to swap (in smallest units)--min-amount-out (optional) — Minimum acceptable output amount for slippage protection (default: 0)Output:
{
"success": true,
"txid": "abc123...",
"swap": {
"tokenIn": "SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.token-wstx-v2",
"tokenOut": "SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex",
"amountIn": "1000000",
"minAmountOut": "0"
},
"network": "mainnet",
"explorerUrl": "https://explorer.hiro.so/txid/abc123...?chain=mainnet"
}
Get liquidity pool information from ALEX DEX. Returns reserve balances and pool details for a token pair.
bun run defi/defi.ts alex-get-pool-info --token-x <contractId> --token-y <contractId>
Options:
--token-x (required) — First token contract ID or symbol--token-y (required) — Second token contract ID or symbolOutput:
{
"network": "mainnet",
"pool": {
"poolId": "SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.token-wstx-v2-SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex",
"tokenX": "SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.token-wstx-v2",
"tokenY": "SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex",
"reserveX": "5000000000",
"reserveY": "12000000000",
"totalShares": "8000000000"
}
}
List all available trading pools on ALEX DEX.
bun run defi/defi.ts alex-list-pools [--limit <n>]
Options:
--limit (optional) — Maximum number of pools to return (default: 50)Output:
{
"network": "mainnet",
"poolCount": 3,
"pools": [
{
"id": 1,
"pair": "wstx-v2/alex",
"tokenX": "SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.token-wstx-v2",
"tokenY": "SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex",
"factor": "100000000"
}
],
"usage": "Use the tokenX and tokenY contract IDs with alex-get-swap-quote or alex-swap"
}
List all supported assets on Zest Protocol.
bun run defi/defi.ts zest-list-assets
Output:
{
"network": "mainnet",
"assetCount": 3,
"assets": [
{
"symbol": "sBTC",
"name": "Stacked Bitcoin",
"contractId": "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token"
},
{
"symbol": "stSTX",
"name": "Stacked STX",
"contractId": "SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG.ststx-token"
}
],
"usage": "Use the symbol (e.g., 'stSTX') or full contract ID in other zest-* commands"
}
Get a user's lending position on Zest Protocol.
bun run defi/defi.ts zest-get-position --asset <symbolOrContractId> [--address <addr>]
Options:
--asset (required) — Asset symbol (e.g., stSTX, aeUSDC) or full contract ID--address (optional) — User address (uses active wallet if omitted)Output:
{
"network": "mainnet",
"address": "SP2...",
"position": {
"asset": "SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG.ststx-token",
"supplied": "5000000",
"borrowed": "0"
}
}
Supply assets to the Zest Protocol lending pool to earn interest. Requires an unlocked wallet.
bun run defi/defi.ts zest-supply --asset <symbolOrContractId> --amount <units> [--on-behalf-of <addr>]
Options:
--asset (required) — Asset symbol or full contract ID--amount (required) — Amount to supply (in smallest units)--on-behalf-of (optional) — Supply on behalf of another addressOutput:
{
"success": true,
"txid": "abc123...",
"action": "supply",
"asset": "SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG.ststx-token",
"amount": "5000000",
"onBehalfOf": "SP2...",
"network": "mainnet",
"explorerUrl": "https://explorer.hiro.so/txid/abc123...?chain=mainnet"
}
Withdraw assets from the Zest Protocol lending pool. Requires an unlocked wallet.
bun run defi/defi.ts zest-withdraw --asset <symbolOrContractId> --amount <units>
Options:
--asset (required) — Asset symbol or full contract ID--amount (required) — Amount to withdraw (in smallest units)Output:
{
"success": true,
"txid": "abc123...",
"action": "withdraw",
"asset": "SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG.ststx-token",
"amount": "5000000",
"network": "mainnet",
"explorerUrl": "https://explorer.hiro.so/txid/abc123...?chain=mainnet"
}
Borrow assets from Zest Protocol against supplied collateral. Requires an unlocked wallet.
bun run defi/defi.ts zest-borrow --asset <symbolOrContractId> --amount <units>
Options:
--asset (required) — Asset symbol or full contract ID--amount (required) — Amount to borrow (in smallest units)Output:
{
"success": true,
"txid": "abc123...",
"action": "borrow",
"asset": "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token",
"amount": "100000",
"network": "mainnet",
"explorerUrl": "https://explorer.hiro.so/txid/abc123...?chain=mainnet"
}
Repay borrowed assets to Zest Protocol. Requires an unlocked wallet.
bun run defi/defi.ts zest-repay --asset <symbolOrContractId> --amount <units> [--on-behalf-of <addr>]
Options:
--asset (required) — Asset symbol or full contract ID--amount (required) — Amount to repay (in smallest units)--on-behalf-of (optional) — Repay on behalf of another addressOutput:
{
"success": true,
"txid": "abc123...",
"action": "repay",
"asset": "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token",
"amount": "100000",
"onBehalfOf": "SP2...",
"network": "mainnet",
"explorerUrl": "https://explorer.hiro.so/txid/abc123...?chain=mainnet"
}
Register existing zTokens as collateral on Zest Protocol v2. Calls v0-4-market.collateral-add. Only needed if you deposited directly to a vault without going through zest-supply (which handles collateral registration atomically). Requires an unlocked wallet.
bun run defi/defi.ts zest-enable-collateral --asset <symbolOrContractId> --amount <units>
Options:
--asset (required) — Asset symbol or full contract ID--amount (required) — Amount of zTokens to add as collateral (in smallest units)Output:
{
"success": true,
"txid": "abc123...",
"action": "enable_collateral",
"asset": "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token",
"amount": "100000",
"network": "mainnet",
"explorerUrl": "https://explorer.hiro.so/txid/abc123...?chain=mainnet"
}
Claim accumulated rewards from the Zest Protocol incentives program. sBTC suppliers earn wSTX rewards. Requires an unlocked wallet.
bun run defi/defi.ts zest-claim-rewards [--asset <symbolOrContractId>]
Options:
--asset (optional) — Asset you supplied to earn rewards (default: sBTC)Output:
{
"success": true,
"txid": "abc123...",
"action": "claim_rewards",
"asset": "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token",
"rewardAsset": "wSTX",
"network": "mainnet",
"explorerUrl": "https://explorer.hiro.so/txid/abc123...?chain=mainnet",
"note": "Rewards will be sent to your wallet once the transaction confirms."
}
STX, ALEX) or full contract IDs. Use alex-list-pools to discover available pairs.stSTX, aeUSDC, sBTC) or full contract IDs. Use zest-list-assets to discover supported assets.bun run wallet/wallet.ts unlock first).development
Web of Trust operations for Nostr pubkeys — trust scoring, sybil detection, trust path analysis, neighbor discovery, follow recommendations, and network health. Free tier (wot.klabo.world, 50 req/day) with paid fallback (maximumsats.com, 100 sats via L402). Covers 52K+ pubkeys and 2.4M+ zap-weighted trust edges. Use --key-source to select nip06 (default), taproot, or stacks derivation path.
data-ai
BTC ordinals marketplace operations via Magic Eden — browse active listings, list inscriptions for sale via PSBT flow, submit signed listings, buy inscriptions, and cancel active listings. BTC ordinals only (not Solana). Mainnet-only.
testing
Pay-per-call access to LunarCrush social and market intelligence (Galaxy Score, AltRank, market cap rank, price, 24h change) via x402 on Stacks. USD-pegged pricing recomputed hourly from live STX/USD. Mainnet endpoint live; testnet supported.
devops
Detects HODLMM LP inventory drift (token-ratio imbalance from one-sided swap flow) and restores the target ratio via a corrective Bitflow swap plus a hodlmm-move-liquidity redeploy, gated by the 4h per-pool cooldown.