yield-hunter
Yield Hunter Skill
Provides an autonomous yield hunting daemon that monitors your wallet's sBTC balance and automatically deposits to Zest Protocol's lending pool to earn yield. The daemon runs in the foreground and can be stopped with Ctrl+C or the stop subcommand.
State is persisted to ~/.aibtc/yield-hunter-state.json between runs.
Requirements:
- Mainnet only (Zest Protocol is mainnet-only)
- Unlocked wallet with sBTC balance
- STX balance for transaction fees (Stacks gas is paid in STX, not sBTC)
Usage
bun run yield-hunter/yield-hunter.ts <subcommand> [options]
Subcommands
start
Start autonomous yield hunting. Runs in the foreground until stopped.
bun run yield-hunter/yield-hunter.ts start [--threshold 10000] [--reserve 0] [--interval 600]
Options:
--threshold <sats>(optional) — Minimum sBTC balance in satoshis before depositing (default: 10000 = 0.0001 sBTC)--reserve <sats>(optional) — sBTC in satoshis to keep liquid, never deposited (default: 0 — deposit all)--interval <seconds>(optional) — Check interval in seconds (default: 600 = 10 minutes)
What it does:
- Verifies wallet is unlocked and on mainnet
- Fetches current Zest Protocol APY
- Runs an immediate balance check
- Schedules periodic checks at the configured interval
- When wallet sBTC >= (threshold + reserve), deposits (balance - reserve) to Zest
Output:
{
"success": true,
"message": "Yield hunter started",
"pid": 12345,
"config": {
"minDepositThreshold": "10000",
"minDepositThresholdFormatted": "0.00010000 sBTC",
"reserve": "0",
"reserveFormatted": "0.00000000 sBTC",
"checkIntervalSeconds": 600,
"asset": "sBTC"
},
"note": "Running in foreground. Press Ctrl+C to stop."
}
stop
Stop the running yield hunter process.
bun run yield-hunter/yield-hunter.ts stop
Sends SIGTERM to the running daemon. Your existing Zest positions remain untouched.
Output:
{
"success": true,
"message": "Yield hunter stopped (PID: 12345)",
"stats": {
"checksRun": 24,
"depositsExecuted": 3,
"totalDeposited": "300000",
"totalDepositedFormatted": "0.00300000 sBTC"
}
}
status
Get the current yield hunter status, configuration, and recent activity.
bun run yield-hunter/yield-hunter.ts status
When a wallet is active and on mainnet, also fetches current wallet balance and Zest position.
Output:
{
"running": true,
"pid": 12345,
"network": "mainnet",
"config": {
"minDepositThreshold": "10000",
"minDepositThresholdFormatted": "0.00010000 sBTC",
"reserve": "0",
"reserveFormatted": "0.00000000 sBTC",
"effectiveThreshold": "10000",
"checkIntervalMs": 600000,
"checkIntervalSeconds": 600,
"asset": "sBTC"
},
"stats": {
"lastCheck": "2024-01-01T12:00:00.000Z",
"totalDeposited": "300000",
"totalDepositedFormatted": "0.00300000 sBTC",
"checksRun": 24,
"depositsExecuted": 3,
"lastError": null,
"currentApy": "5.00%"
},
"currentPosition": {
"walletSbtc": "150000",
"walletSbtcFormatted": "0.00150000 sBTC",
"availableToDeposit": "150000",
"availableToDepositFormatted": "0.00150000 sBTC",
"zestSupplied": "300000",
"zestSuppliedFormatted": "0.00300000 sBTC",
"zestBorrowed": "0"
},
"recentLogs": [
{ "timestamp": "2024-01-01T12:00:00.000Z", "type": "info", "message": "Wallet sBTC: 0.00150000 sBTC" }
]
}
configure
Update yield hunter configuration. Changes are saved immediately and take effect on the next check cycle.
bun run yield-hunter/yield-hunter.ts configure [--threshold 20000] [--reserve 5000] [--interval 300]
Options:
--threshold <sats>(optional) — New minimum deposit threshold in satoshis--reserve <sats>(optional) — New reserve amount in satoshis--interval <seconds>(optional) — New check interval in seconds (minimum: 10)
Output:
{
"success": true,
"changes": [
"Deposit threshold set to 0.00020000 sBTC",
"Reserve set to 0.00005000 sBTC"
],
"config": {
"minDepositThreshold": "20000",
"minDepositThresholdFormatted": "0.00020000 sBTC",
"reserve": "5000",
"reserveFormatted": "0.00005000 sBTC",
"checkIntervalMs": 600000,
"checkIntervalSeconds": 600,
"asset": "sBTC"
},
"note": "Changes saved. The running daemon will pick them up on the next check cycle."
}
Notes
- State is stored in
~/.aibtc/yield-hunter-state.json - PID tracking uses
~/.aibtc/yield-hunter.pid - Deposits use Zest Protocol's
supplyfunction via the borrow-helper contract - Transaction fees are paid in STX — ensure you have STX balance for fees
- The daemon runs in the foreground; use a process manager (e.g.,
tmux,screen, orpm2) to run it in the background statusworks even when the daemon is not running (reads persisted state)configureworks when the daemon is not running (changes take effect on nextstart)
More from aibtcdev/skills
arxiv-research
Fetch and compile arXiv papers on LLMs, autonomous agents, and AI infrastructure into scored, grouped research digests. Stores digests at ~/.aibtc/arxiv-research/digests/. No API key required.
178aibtc-news
aibtc.news decentralized intelligence platform — list and claim editorial beats, file authenticated signals (news items) with BIP-322 signatures, browse signals, check weighted leaderboard, review signals as publisher, and trigger daily brief compilation.
166aibtc-news-correspondent
Correspondent for aibtc.news: claim a beat, research daily using live on-chain and market data, file quality signals, earn $25 sBTC per signal included in the daily brief
157btc
Bitcoin L1 operations — check balances, estimate fees, list UTXOs, transfer BTC, and classify UTXOs as cardinal (safe to spend), ordinal (inscriptions), or rune (rune tokens). Data sourced from mempool.space and the Unisat API.
150aibtc-news-fact-checker
Side role: find and correct bad signals, earn leaderboard points per Publisher-approved correction (max 3/day)
149defi
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.
148