Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add ccashwell/evm-cortex --skill uniswap-mathgit clone --depth 1 https://github.com/ccashwell/evm-cortexWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/ccashwell/evm-cortex/uniswap-math)<a href="https://agentmods.dev/skills/ccashwell/evm-cortex/uniswap-math"><img src="https://agentmods.dev/badge/skills/ccashwell/evm-cortex/uniswap-math/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/ccashwell/evm-cortex/uniswap-math"><img src="https://agentmods.dev/badge/skills/ccashwell/evm-cortex/uniswap-math.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00064 | $0.08851 |
| Opus 5.5 | $0.00026 | $0.03540 |
| Sonnet 5.5 | $0.00013 | $0.01770 |
| Haiku 4.5 | $0.00006 | $0.00885 |
Grade A, and why
uniswap-math scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 17d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 943 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Uniswap Concentrated Liquidity Math
Q64.96 Fixed-Point Arithmetic
Uniswap V3/V4 stores prices as Q64.96 fixed-point numbers representing the square root of the price ratio. This encoding fits in uint160 and enables efficient swap math without division.
sqrtPriceX96 = √(price) × 2⁹⁶
- 64 bits for the integer part, 96 bits for the fractional part
- Stored as
uint160— fits alongsideint24 tickanduint128 liquidityin the pool'sSlot0 - Price of token1 in terms of token0:
price = (sqrtPriceX96 / 2⁹⁶)² - Inverse conversion:
sqrtPriceX96 = √(price) × 2⁹⁶
Why Store √P Instead of P
- The core swap formulas only need
√P, neverPdirectly amount1 = L × Δ√Pis a simple multiplication — no square root at runtimeamount0 = L × Δ(1/√P)avoids computing reciprocals of prices- Avoids the precision loss of squaring and rooting during swaps
Decimal Normalization
Prices are always in raw token units — you must account for decimals manually.
token0 = WETH (18 decimals)
token1 = USDC (6 decimals)
Human-readable price: 1 ETH = 3000 USDC
Raw price (token1/token0) = 3000 × 10⁶ / 10¹⁸ = 3000 × 10⁻¹²
sqrtPrice = √(3000 × 10⁻¹²) = √(3 × 10⁻⁹) ≈ 5.47722558 × 10⁻⁵
sqrtPriceX96 = 5.47722558 × 10⁻⁵ × 2⁹⁶ ≈ 4_339_505_179_874_779_489_431_521
For a pair where both tokens have 18 decimals (e.g., WETH/DAI at price 3000):
Raw price = 3000 (decimals cancel)
sqrtPrice = √3000 ≈ 54.7722558
sqrtPriceX96 = 54.7722558 × 2⁹⁶ ≈ 4_339_505_179_874_779_489_431_521_786_241
Converting sqrtPriceX96 to Human Price
// In Solidity — use FullMath to avoid overflow
uint256 priceX192 = FullMath.mulDiv(sqrtPriceX96, sqrtPriceX96, 1);
// priceX192 is price * 2^192, divide by 2^192 to get raw price
// For display: rawPrice * 10^(decimals0 - decimals1) = human price
# In Python (offchain)
def sqrtPriceX96_to_price(sqrtPriceX96, decimals0, decimals1):
price = (sqrtPriceX96 / 2**96) ** 2
adjusted = price * 10 ** (decimals0 - decimals1)
return adjusted
# ETH/USDC: sqrtPriceX96 = 4_339_505_179_874_779_489_431_521
sqrtPriceX96_to_price(4_339_505_179_874_779_489_431_521, 18, 6)
# ≈ 3000.0
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 17d ago Changed 74583454cd00
- 1mo ago First seen · 943 lines · 64 tokens per session scan A b59ffd246cb1
uniswap-math is a skill published in the GitHub repository ccashwell/evm-cortex (131 stars, last pushed 17d ago), licensed MIT. It adds 64 tokens to every session and 8,851 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.
Other skills, from other repositories
signature-replay
Signature replay attacks — missing nonces, missing chain ID, ecrecover zero address, signature malleability, cross-chain replay.
official-sui-skills
Pointer to the official Mysten Labs skills for building on Sui — language fundamentals, object model, PTBs, SDKs, publishing, upgrades, frontend integration, accessing on-chain data. Maintained upstream at github.com/MystenLabs/skills; pinned to the same ref the audit catalog derives from (see…
bridge
Cross-chain token transfers using Wormhole and CCTP.
onchainkit
Build onchain apps with Coinbase's OnchainKit React components - wallets, swaps, NFTs, payments.
marginfi
MarginFi — Solana lending and borrowing.
devtools-event-client
Create typed EventClient for a library. Define event maps with typed payloads, pluginId auto-prepend namespacing, emit()/on()/onAll()/onAllPluginEvents() API. Connection lifecycle (5 retries, 300ms), event queuing, enabled/disabled state, SSR fallbacks, singleton pattern. Unique pluginId requirement to avoid event…