
Adopt a cat. It sets your fee.
A Uniswap v4 hook that prices every swap with the cat your pool adopts: a fee formula trained by builders on real swaps, reading volatility from the pool's own ticks, block by block.
A flat fee loses the volatile hours. A cat prices them.
Builders train fee formulas on real swaps, LPs adopt the best one, and every swap through the pool pays what the cat asks, computed onchain by the hook.
Every swap asks the cat
The fee follows the pool
On every swap the v4 hook asks the pool's cat for a fee. The cat reads state the hook keeps itself: an average of tick moves per block, the direction of the last move, the swap's size against active liquidity and the UTC clock.
The first swap of each block rolls the volatility forward, so the fee moves block by block, between 0.01% and 3.00%.

Builders train the cats
A cat is one of four formulas, Calm, Stalker, Heavy or Clock, plus a packed set of parameters. Builders replay seven days of real swaps in the browser, search the parameters and publish the winner.
Publishing is a storage write in the hook, not a contract deploy. The AI trainer proposes parameter sets once it is connected; the fee itself is always the formula.

LPs adopt a cat
Open an ETH pool against USDG, a tokenized stock or a Pons coin in one transaction, with the top cat of the week or any other. The keeper can switch cats at any time.
Liquidity goes through Uniswap's v4 PositionManager as usual. The hook never holds a position and never blocks liquidity.

The best cats eat first
Above a fixed 0.30%, LPs keep 88% of the extra fee. The cat's builder takes 10% and $HCAT stakers 2%, in ETH, claimable at any time.
Cats are ranked by the ETH they earned for LPs above 0.30% over 7 days. New pools default to the top cat, and the adoption list is sorted the same way.

One hour on a real pool
- Cat
- …
- Swaps replayed
- …
- Volume
- …
- Average fee
- …
- LPs vs 0.30%, same swaps
- …
- House pool fee quote
- …
- House pool swaps
- …
The house cat priced on the last 90 minutes of real ETH / USDG swaps, block by block, with the formula the hook runs. Refreshed every minute. The quote is the fee the hook charges right now on its own ETH / USDG pool (ETH in / ETH out).
Where the fee goes
of the fee above 0.30% stays with the pool's LPs, on top of the full 0.30%. Under 0.30%, LPs keep the whole fee and nothing is cut.
to the cat's builder, in ETH, from every pool that adopted the cat. claimBuilder() at any time.
to $HCAT stakers, in ETH, pro rata to stake, across every HookCat pool.
f ≤ b: LP fee = f, no cut
f > b: LP fee = b + 0.88 e, hook cut = 0.12 e of the ETH side (0.10 e builder, 0.02 e stakers); the trader pays f
Built for routers, agents and code
A v4 pool like any other
HookCat pools route through Uniswap's Universal Router 2.1.1 with Permit2. The fee a swap pays is readable before it is sent with quoteFee, from the SDK, the JSON API or the MCP server.
- SDK
- /sdk/hookcat.mjs
- API
- /api/cats
- MCP
- /api/mcp
// curl -O https://www.hookcat.app/sdk/hookcat.mjs (viem is the only dependency) import { quoteFee, buildSwap, openPool, listCats } from "./hookcat.mjs"; const cats = await listCats(); // ranked by 7-day take for LPs const q = await quoteFee(POOL_ID, true, -10n ** 15n); // { fee: 4397, lpFee: 4229, cutPips: 168 } pips, 1e-6 const tx = buildSwap({ token: USDG, zeroForOne: true, amountIn: 10n ** 15n, minOut }); await wallet.sendTransaction(tx); // Universal Router 2.1.1
Train a cat today
Seven days of real swaps, four formulas, one storage write to publish.
USDGETH pairsDynamic feeTick spacing 60
USDGETH pairsDynamic feeTick spacing 60