Operations

The keeper


A permissionless loop over every vault on one network (~/tender/keeper). Any number can run; every job re-reads chain state first. Configured by environment: KEEPER_NETWORK, KEEPER_RPC_URL, KEEPER_PAYER_KEYPAIR, KEEPER_LISTER_KEYPAIR, KEEPER_HISTORY_DIR, KEEPER_JOBS.

AreaJobs (keeper/src/jobs)
Launch vaultsopenCalls (opens calls on a launch still on its curve, if the launch flow did not), activate (arms and completes activation), poke, settleExpired, closeExpiredNfts, collectFees, unwindStake, burnLeftover, writeOff
BackstopplatformStream (claim_platform, roll)
Put vaultsrecordPrice (19:55 to 20:15 UTC), settleDay, planListing + listDay (lister key only), retireZeroClaims
Lookup tablesensureLaunchAlt

The mainnet keeper runs from the keeper key E4PwDtEVUUjH8VEwjxNBxuh9j768Pqd4Y78pcC5bpjNn, which is also the put vaults' lister and the launch vault's AUTO_EXERCISER. Put listings price off 31 days of GeckoTerminal 1-minute prints of each settlement pool (retried with backoff when rate-limited). Each listed day costs the keeper about 0.0052 SOL of rent it does not get back.

autoCash (added 2026-09-29): in the last 10 minutes before expiry, auto_cash_out every in-the-money call for its owner (the keeper's payer must be the program's AUTO_EXERCISER). It runs at the start and end of each pass. Keeper sends now resend with a fresh blockhash when a transaction expires unlanded, and the keeper pays a priority fee.