zest-auto-repay/SKILL.md
Autonomous Zest Protocol LTV guardian — monitors borrowing positions, detects liquidation risk, and executes safe repayments with enforced spend limits to protect collateral on Stacks mainnet.
npx skillsauth add aibtcdev/skills zest-auto-repayInstall 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.
Autonomous LTV guardian for Zest Protocol v2 borrowing positions on Stacks. Continuously monitors loan-to-value ratios across all supported assets (sBTC, wSTX, stSTX, USDC, USDH, stSTXbtc), detects when positions approach liquidation thresholds, and executes safe partial repayments to restore healthy LTV. This is a WRITE skill — the first autonomous liquidation protection system for Zest Protocol.
Zest Protocol liquidates borrowers when LTV exceeds ~85% (partial) or ~95% (full). Liquidation penalties destroy collateral value. Manual monitoring is unreliable — a 10% price move during off-hours can trigger liquidation before the borrower reacts. This skill gives agents the ability to:
Without this, leveraged Zest positions are exposed to unmonitored liquidation risk 24/7.
Direct integration with Zest Protocol v2 on Stacks mainnet:
SP1A27KFY4XERQCCRCARCYD1CC5N7M6688BSYADJ7.v0-4-marketzest_repay MCP tooldoctorCheck environment readiness: wallet, balances, Zest API connectivity, active positions, current LTV.
bun run zest-auto-repay/zest-auto-repay.ts doctor
run --action=statusFull position analysis with LTV scoring, liquidation distance, and risk classification.
bun run zest-auto-repay/zest-auto-repay.ts run --action=status
run --action=monitorContinuous monitoring mode. Polls position every interval, logs LTV changes, alerts on threshold crossings. Read-only — does not execute repayments.
bun run zest-auto-repay/zest-auto-repay.ts run --action=monitor --interval=300
run --action=repayCompute and execute a safe repayment to restore target LTV. Enforces all safety limits.
bun run zest-auto-repay/zest-auto-repay.ts run --action=repay --asset=sBTC --target-ltv=60 --max-repay=50000
run --action=emergency-repayImmediate maximum repayment when LTV is critical (>85%). Skips drift checks, uses higher spend cap, prioritizes speed.
bun run zest-auto-repay/zest-auto-repay.ts run --action=emergency-repay --asset=sBTC
All limits are implemented and enforced in the TypeScript file, not just documented:
| Control | Default | Enforced |
|---------|---------|----------|
| Max repay per operation | 50,000 sats (0.0005 BTC) | --max-repay flag, hard cap 500,000 sats |
| Target LTV after repay | 60% | --target-ltv flag, range 30-75% |
| Warning LTV threshold | 70% | Triggers alert, no auto-action |
| Critical LTV threshold | 80% | Triggers auto-repay if enabled |
| Emergency LTV threshold | 85% | Triggers emergency-repay |
| Minimum wallet reserve | 5,000 sats | Always enforced, never repays below this |
| Cooldown between repays | 600 seconds | Tracked per-session |
| Absolute hard cap per repay | 500,000 sats (0.005 BTC) | Cannot be overridden by any flag |
| Absolute hard cap per day | 1,000,000 sats (0.01 BTC) | Cannot be overridden by any flag |
All commands output structured JSON:
{
"status": "success | error | blocked",
"action": "Human-readable next step",
"data": { },
"error": { "code": "...", "message": "...", "next": "..." } | null
}
| Code | Meaning |
|------|---------|
| no_wallet | Wallet not unlocked or STACKS_ADDRESS not set |
| insufficient_balance | Not enough tokens to repay (after reserve) |
| no_position | No active Zest borrowing position found |
| healthy_ltv | LTV is below warning threshold — no action needed |
| exceeds_hard_cap | Requested repayment exceeds absolute safety cap |
| exceeds_daily_cap | Daily repayment limit already reached |
| cooldown_active | Must wait before next repayment operation |
| api_unreachable | Zest Protocol API not responding |
| repay_failed | On-chain repayment transaction failed |
| Evidence | Detail |
|----------|--------|
| Wallet | SP322ZK4VXT3KGDT9YQANN9R28SCT02MZ97Y24BRW |
| BTC Address | bc1qdfm56pmmq40me84aau2fts3725ghzqlwf6ys7p |
| sBTC Balance | 28,306 sats active on Zest-eligible wallet |
| DLMM NFTs | 387 NFTs across Bitflow pools (cross-protocol DeFi activity) |
| Stableswap LP | 771M tokens in USDH-USDCx pool |
| Agent | Flying Whale — Genesis L2, ERC-8004 #54 on aibtc.com |
| Explorer | View on Hiro |
Agent invokes skill
-> doctor: pre-flight checks (wallet, gas, API, position, LTV)
-> status: fetch all Zest positions -> LTV scoring -> risk classification
-> monitor: continuous polling -> LTV tracking -> alert on threshold crossing
-> repay: pre-flight -> LTV check -> compute safe amount -> enforce caps -> emit repay tx
-> emergency-repay: minimal checks -> max safe repayment -> immediate execution
The skill does NOT broadcast transactions directly. It computes parameters and emits structured MCP command objects that the agent framework executes. This separation ensures the agent always has final approval before any on-chain write.
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.