Husk
Hi I am Husk đź‘‹ Click to see more đź‘€
Created on 5th September 2026
•
Husk
Hi I am Husk đź‘‹ Click to see more đź‘€
The problem Husk solves
Most onchain holders carry naked bag risk around macro events — CPI, FOMC, NFP, token unlocks — but options desks are built for professionals: wrong expiry windows, unfamiliar strikes, and no simple “insurance for my bag” flow.
Husk turns calendar.thetanuts.finance into a consumer coverage shelf on Base mainnet. You connect a wallet, pick the event that can hurt you, and get a defined-risk long put spread sized by a deterministic underwriter (Gemini only parses language — it never picks strikes). Max loss is the premium. If the bag dumps through the floor, payout settles in USDC via Chainlink TWAP after the print.
Three ways in, one engine:
- Home calendar — browse, filter, open a policy card with stress simulation
- Ask Husk — natural language → same
PolicyQuote→ sign in wallet - Positions — track active / in-flight RFQs and renew into the next event
We route to OptionBook when liquidity matches, else OptionFactory RFQ when expiry must cross the event — the load-bearing Thetanuts integration for event-aligned coverage.
Live Base mainnet proof (demo wallet 0x078c…ceD1a, $1 FOMC RFQ via UI):
| Step | Transaction |
|---|---|
| USDC approve ($1 → OptionFactory) | 0xe341ebfc…3f49 |
RFQ requestForQuotation | 0x8fe7b1f8…ab16e |
Status: rfq_open — pipeline encoded and broadcast correctly; at $1 notional professional makers typically do not bid (honest liquidity, not a product bug). Larger tickets or the OptionBook path are the path to an instant fill.
Challenges we ran into
1. RFQ gas limit vs public RPC
requestForQuotation estimates ~140M gas, but MetaMask’s default Infura RPC rejects anything above 25M per tx (exceeds maximum per-tx gas limit: 140000000 > 25000000). Approve succeeded; RFQ failed until we switched Base RPC to Alchemy / mainnet.base.org and documented this in the README.
→ Approve tx · RFQ tx (after fix)
2. Event-aligned expiry — Book vs RFQ
OptionBook orders use standard expiries; macro coverage needs expiry at the next Chainlink TWAP after the print. We built a router: try Book match first, fall back to Factory RFQ with buildSpreadRFQ + encrypted ECDH keys in Supabase.
3. LLM safety — numbers must not be invented
LangGraph agent parses intent only; all strikes, premiums, and payouts come from @thetanuts-finance/thetanuts-client (previewFillOrder, calculatePayout). Guardrails refuse calls, leverage, and “max profit” requests. Ask Husk shows a human summary + sign CTA, not raw calldata in chat.
4. SDK r12 settlement surface
Thetanuts SDK 0.3 removed user-callable payout(); settlement is factory-driven. Our keeper observes isExpired / isSettled / calculatePayout instead of encoding a trigger that no longer exists.
5. AgentKit vs disk / scope
Coinbase AgentKit’s dependency tree blew local disk limits, so autonomous writes use ethers + a fail-closed assertSafetyPolicy (cap-gated, PUT/PUT_SPREAD only, exact USDC approve) — same safety semantics, less bundle weight.
6. Honest liquidity at hackathon size
We intentionally ran a $1 USDC RFQ on mainnet to prove end-to-end encoding. MMs did not offer — expected at sub-economic size. We treat that as a feature: the system works; liquidity is the real-world constraint.
Tracks Applied (2)
BEST PRODUCT BUILT ON THE THETANUTS SDK
Thetanuts Finance
AI Ă— OPTIONS
Thetanuts Finance
Technologies used
