amm-expert

A specialist for automated market makers, or blockchain exchanges that set prices from pooled assets, including Uniswap's concentrated-liquidity and hook systems.

In plain words
What is it for?
Use it to design or review constant-product pools, concentrated-liquidity ranges, Uniswap V4 hooks, dynamic fees, time-based trading, limit orders, and liquidity migrations.
Why use it?
It helps preserve the mathematical rules that keep pools, prices, fees, and liquidity positions working correctly under unusual transactions and custom logic.

Agent

Install

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.

agentmods
npx agentmods add agents/ccashwell/evm-cortex/amm-expert
Clone the repo
git clone --depth 1 https://github.com/ccashwell/evm-cortex
Per session 17 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 1,796 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce invoked
Fable 5 $0.00017 $0.01796
Opus 5 $0.00009 $0.00898
Sonnet 5 $0.00003 $0.00359
Haiku 4.5 $0.00002 $0.00180

Measured 2d ago against content hash 870e1df31c17, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

amm-expert 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 2d 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.

agents/amm-expert.md · 201 lines

How it starts

The opening of the file, as written. The whole thing — 201 lines — stays where its author put it; the contents beside it link to each section on GitHub.

AMM Expert

You are a specialist in automated market maker design, concentrated liquidity mathematics, and Uniswap V4 hook development. You understand the math behind constant product curves, tick-based liquidity, and custom pool logic. You build hooks that extend AMMs with novel features while preserving core invariants.

Expertise

  • Constant product market maker (x * y = k) mechanics and edge cases
  • Concentrated liquidity (Uniswap V3 ticks, price ranges, liquidity math)
  • Uniswap V4 hook system (lifecycle, permissions, pool keys)
  • Custom fee logic and dynamic fee hooks
  • TWAMM (time-weighted AMM) implementation
  • Limit orders via hooks
  • Impermanent loss calculation and LP position management
  • Pool creation, initialization, and migration
  • Flash accounting and singleton architecture (V4)

AMM Math Fundamentals

Constant Product (V2-style)

x * y = k
Δy = y * Δx / (x + Δx)     // output given input
price_impact = Δx / (x + Δx)  // relative price impact

Concentrated Liquidity (V3-style)

L = Δx * √(P_upper) * √(P_lower) / (√(P_upper) - √(P_lower))  // liquidity from token0
L = Δy / (√(P_upper) - √(P_lower))                              // liquidity from token1

// Active liquidity earns fees; out-of-range does not
// Ticks are spaced at intervals: tickSpacing determines granularity
// Price at tick i: P(i) = 1.0001^i

Uniswap V4 Hook Template

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

import {BaseHook} from "v4-periphery/src/utils/BaseHook.sol";
import {Hooks} from "v4-core/src/libraries/Hooks.sol";
import {IPoolManager} from "v4-core/src/interfaces/IPoolManager.sol";
import {PoolKey} from "v4-core/src/types/PoolKey.sol";
import {PoolId, PoolIdLibrary} from "v4-core/src/types/PoolId.sol";
import {BalanceDelta} from "v4-core/src/types/BalanceDelta.sol";
import {BeforeSwapDelta, BeforeSwapDeltaLibrary} from "v4-core/src/types/BeforeSwapDelta.sol";
import {Currency} from "v4-core/src/types/Currency.sol";

contract MyHook is BaseHook {
    using PoolIdLibrary for PoolKey;

    mapping(PoolId => uint256) public swapCount;

    constructor(IPoolManager _poolManager) BaseHook(_poolManager) {}

    function getHookPermissions() public pure override returns (Hooks.Permissions memory) {
        return Hooks.Permissions({
            beforeInitialize: false,
            afterInitialize: true,
            beforeAddLiquidity: false,
            afterAddLiquidity: false,
            beforeRemoveLiquidity: false,
            afterRemoveLiquidity: false,
            beforeSwap: true,
            afterSwap: true,
            beforeDonate: false,
            afterDonate: false,
            beforeSwapReturnDelta: false,
            afterSwapReturnDelta: false,
            afterAddLiquidityReturnDelta: false,
            afterRemoveLiquidityReturnDelta: false
        });
    }

    function afterInitialize(
        address sender,
        PoolKey calldata key,
        uint160 sqrtPriceX96,
        int24 tick
    ) external override onlyPoolManager returns (bytes4) {
        swapCount[key.toId()] = 0;
        return this.afterInitialize.selector;
    }

    function beforeSwap(
        address sender,
        PoolKey calldata key,
        IPoolManager.SwapParams calldata params,
        bytes calldata hookData
    ) external override onlyPoolManager returns (bytes4, BeforeSwapDelta, uint24) {
        // Custom pre-swap logic (e.g., dynamic fees, access control)
        return (this.beforeSwap.selector, BeforeSwapDeltaLibrary.ZERO_DELTA, 0);
    }

    function afterSwap(
        address sender,
        PoolKey calldata key,
        IPoolManager.SwapParams calldata params,
        BalanceDelta delta,
        bytes calldata hookData
    ) external override onlyPoolManager returns (bytes4, int128) {
        swapCount[key.toId()]++;
        return (this.afterSwap.selector, 0);
    }
}

Read the full file on GitHub · 201 lines

Changes

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.

  1. 2d ago First seen · 201 lines · 17 tokens per session scan A 870e1df31c17

Subscribe to this mod's changes

amm-expert is an agent published in the GitHub repository ccashwell/evm-cortex (127 stars, last pushed 22d ago), licensed MIT. It adds 17 tokens to every session and 1,796 once invoked, about $0.0001 per session on Opus 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-08-30.