Skip to main content
Automation cover: auto-compound, auto-range and auto-exit cards with only auto-compound switched on (one automation at a time, with one exception: auto-exit and auto-compound together when auto-exit uses Allow for all positions), and the pixel goat keeper holding a wrench.
Goat LP is experimental. Use small amounts.
Let a keeper do routine work on your positions. You stay the owner, you can still deposit, withdraw and collect, and you can stop at any time. Automation is live on Uniswap v3 and v4.

The three automations

On Uniswap v4, auto-compound can also send the fees to your wallet instead of adding them back: 10% of the fees collected, gas paid by us. The exact base of each fee is on Fees. A position runs one automation at a time, with one exception: auto-exit and auto-compound together when auto-exit uses Allow for all positions. Auto-range runs alone, and it includes auto-compound: it puts your fees back in at each move. On v4, each signed message allows one compound. To change, press Switch to auto-range on the auto-range card: it turns auto-compound off (and auto-exit, if it is on) and auto-range on, in one review.

How a run works

Price protection: every automatic swap (in a compound, a range move or a swap exit) first checks a Chainlink price, or the time-weighted average of a deep reference pool; pairs with neither get no automation. If the prices agree it acts; if the check is not ready or the prices do not agree, it waits.Price protection: every automatic swap (in a compound, a range move or a swap exit) first checks a Chainlink price, or the time-weighted average of a deep reference pool; pairs with neither get no automation. If the prices agree it acts; if the check is not ready or the prices do not agree, it waits.
  • The keeper only triggers the run. The contract decides what happens and where the money goes.
  • Before any swap, the contract compares the pool price with an outside price, so one big trade in the pool cannot set off a run or push its price.
  • Every output goes to the position’s owner. The keeper receives nothing.

Turn it on

1

Open the setup sheet

Press Automate on the position page and pick Auto-compound, Auto-range or Auto-exit. The sheet says straight away if the automation cannot run on this position, and why.
2

Pick your settings

Every field starts with a default. The picture shows your range and the prices where we act. The cost line shows Goat’s fee and that the gas is paid by us.
3

Review, then two wallet steps

Allow this position, then Turn on. On Uniswap v4, auto-compound asks for no permission: Sign N runs (free), then Turn on. Your wallet opens N times in a row, once per signed message, free and with no gas; you can stop and continue later. Changing a rule later is one step, Save changes, and the permission stays. Nothing is sent until you confirm in your wallet.

What you allow

Every automation works through a permission for one position. The exceptions are auto-range and auto-exit: each can use one permission for all your positions of one Uniswap version, see Allow for all positions. Per-position permission: the automation contract gets permission for one position only (here Position C, with auto-range on); every position NFT stays in your wallet, and an automation never blocks collect or withdraw. Per-position permission: the automation contract gets permission for one position only (here Position C, with auto-range on); every position NFT stays in your wallet, and an automation never blocks collect or withdraw. On Uniswap v4, auto-compound uses signed messages. Signing is free and costs no gas. Each signed message allows one compound of this position until the end date you pick, and “A signed message can’t move anything except back into your own position.” When the signed runs are used up or reach their end date, you sign again. Wallets that cannot sign these messages (smart-contract wallets such as Safe, and 7702 wallets) give one permission per compound instead: “Your wallet can’t sign the messages auto-compound uses. You can allow this position instead; each permission covers one compound.” Before you allow it, you tick that you understand it covers one compound, and the details say: “On Uniswap v4 a permission on a position also allows removing its liquidity. The Goat contract you allow has no code that does that; it can only run the rule you set.” After each compound the card asks: “Allow again for the next compound.”
What you sign. Each signed message for v4 auto-compound is a typed message (EIP-712) of the Uniswap v4 position manager (“Uniswap v4 Positions NFT”, chain 4663). It has four fields:
  • spender: GoatAutoCompoundV4, the address on Contracts
  • tokenId: your position number
  • nonce: a number that lets the message be used only once
  • deadline: the end date you picked, at most 90 days away
If your wallet shows another spender, another position number or an end date more than 90 days away, do not sign.
After each auto-range move the new position has a new number and needs your OK before it can move again: Allow #new, one tap, a network fee under a cent, no Goat LP fee. Your settings move with it. You can skip this tap with Allow for all positions. On Uniswap v3, a manual compound, or a withdraw or collect to one token, moves the NFT through a contract and back, which removes the permission you gave that position. If an automation is on, the app says so before your wallet opens and adds Allow again to the same transaction (a second wallet step if your wallet cannot batch calls). Moving a range yourself makes a new position with a new number, and an automation that is on stays on the old number. The app says so before your wallet opens, and after a one-transaction move it offers to set it up on the new position. On Uniswap v3, a deposit while auto-range is on moves the fees collected so far out of the position, so auto-range’s next move sends them, and the fees collected until then, to your wallet instead of into the new range. The deposit screen says so above its button.
On Uniswap v3 and v4, a permission on a position lets the allowed contract manage that position. What limits it is the contract’s code: each Goat contract only runs the rule you set and sends every output to the owner. The contract addresses are on Contracts.

Settings

  • At most once every: 1 hour, 6 hours, 12 hours, 1 day or 7 days. The default is 1 hour on v3 and on wallets that give one permission per compound. With v4 signed runs, the default is the end date divided by the runs, rounded down to one of these and never under 1 hour: 30 days and 12 runs give 1 day; 90 days and 4 runs give 7 days.
  • Price protection: the most the swap may lose against the reference price (default 1%).
  • Uniswap v4 mode: Add fees back (default) or Send fees to my wallet.
  • Uniswap v4 signed runs: Keep running for 7, 30 (default) or 90 days; after that date the keeper stops by itself. Runs to sign now 4, 12 (default) or 30. A position under the minimum size starts at 4 runs over 90 days. When 3 days or 2 runs are left, the app asks you to sign again: “Auto-compound stops on date. Sign again to keep it running.” with Sign N more (free).
  • Uniswap v3: Swap to match the range. Off: only the matching part is added; the rest comes back to you without a fee.
  • How far past the edge before we move: at least the pair’s closest move point. Before every move we check an outside price, and the pool price and the outside price may be a little apart, so the move point can’t be closer than that. The sheet shows the exact figure for your pair.
  • Width of each new range: on v3, same as now or custom; on v4, the same width as now.
  • Price protection per move: default 0.50%.
  • Uniswap v4 only: wait between moves (1 hour to 30 days, default 6 hours), the highest swap fee in a move (default 1%, at most 10%) and 20 moves. After the last one the card says “Auto-range used all its moves. Renew to keep it running.” and you press Renew.
  • Uniswap v3: no wait between moves.
  • A level below your range, above it, or both. The sheet suggests 5% beyond each edge. A level must sit at least the pair’s buffer outside your range; the sheet shows the closest allowed level.
  • Keep (withdraw only) acts as soon as the pool price reaches your level.
  • Swap all to one token also checks the outside price first, so in a fast move it can wait.
  • In a sudden jump the price can pass your level before we act, so you may get less than shown.

Where it can run

  • Listed pairs with an outside price: a Chainlink price, or a deep pool Goat checks against. Pairs without one are not offered. Of the pairs priced without Chainlink, only v4 PONS / USDG offers auto-range and swap exits today. On the others the sheet says “Auto-range and swap exits aren’t offered on this pair yet. Exits without a swap work.”
  • Withdraw-only exits also work on a listed pair’s pools that have no price check of their own.
  • In the deep pool Goat checks a pair against, auto-compound’s price check uses that pool’s own 30-minute average.
  • Uniswap v4 hooks: pools without a hook, or with a hook Goat reviewed. Other hook pools get no automation (“Hook not reviewed”). Auto-compound follows its own list of reviewed hooks inside GoatAutoCompoundV4, pinned by code hash, so a pool can be open for auto-range and auto-exit but not for auto-compound, or the reverse. Some hooks change what is offered: see the table below.
  • Tokens that keep a cut when they move (a transfer tax): no auto-range and no swap exits. Withdraw-only exits work.
  • Size: there is no per-position cap. Positions under about $50 at today’s gas are too small for us to move, so auto-range is not offered for them; the app shows the current figure. On pairs without a Chainlink price, an hourly swap limit is shared by everyone on the pair; auto-range is not offered for a position too large for it, and larger runs wait until the pair’s price check is deeper. Smaller runs still go ahead. In both cases auto-exit still works, but a swap exit above the pair’s limit gets “A swap exit this large is above this pair’s limit (about $N). Withdraw only would act right away.”
  • Stock-token pairs run swaps only while their outside price is updating, so a move or a swap exit can wait a day or more.
  • Pairs priced without Chainlink: automatic swaps pause when the price moves fast. They resume by themselves once the pair’s other pools, and for a stock token its outside price, agree for an hour. The card says “Paused for a price check. Back in about N min.” or “Paused for a price check. We check again every 5 minutes.” Exits without a swap never wait.
Positions that cannot be automated:
  • A full-range position: no auto-range or auto-exit, because it never leaves its range.
  • An empty position.
  • A position held by another app.
  • A position linked to another app: “This position is linked to another app. Unlink it first.”
  • A range too narrow for auto-range. On v4 a range needs at least about 4% between min and max, more on some pools; on v3 each new range must be at least that wide. The sheet shows the exact figure.
The Agents light on the Pools list shows green (available), red (not offered, with the reason) or grey.

Status and stopping

When v4 auto-compound has no signed message the keeper can use (all used, past their end date, or never received), a banner shows at the top of every Goat LP page: “Auto-compound stopped on one of your positions” (or “on N of your positions”), “It needs you to sign again before it can run. Signing is free.” Press Sign again. Stop turns the rule off (the keeper stops right away), then removes the permission:
  • v4 auto-compound: the rule is turned off, then the unused signed messages are cancelled and the permission, if one is set, is removed.
  • v4 auto-range and auto-exit: the rule is cleared, then the permission is removed.
  • v3: the rule is turned off, then the permission is removed.
Only the permission of that Goat automation is removed; another app’s permission on the position is left alone. The sheet then checks the chain and says “Checked on chain: the rule is off and no permission is left.” (v4 auto-compound: “Checked on chain: the rule is off, the unused signed messages are cancelled and no permission is left.”) Your funds stay in the position. Automation also stops when the position changes owner. On a v4 auto-range rule whose trigger is reached, you can press Move now yourself: one transaction, you pay the network fee, the 0.15% fee applies as usual. When a v4 auto-range card is paused because the pair’s hourly swap limit is in use, it can show Run now: your own move is not held by that limit, on the same terms. On some hook pools only the keeper can run a move or a swap exit. There, Move now and Run now do not show, and the keeper runs it on its own once your trigger is reached.

Keepers

Pixel goat with a large wrench and a gear: a Goat keeper starts the automation runs. Pixel goat with a large wrench and a gear: a Goat keeper starts the automation runs.
  • Keepers are Goat-run bots. They pay the gas. They never hold or receive your tokens.
  • A position that is too small for us to move is not moved. The card says “Too small for us to move at this size. Your rule stays on.”
  • Exits run even on small positions: we cover the gas, within a daily limit. An exit can wait when Goat’s daily gas budget for exits is used up, when Goat’s gas help for small exits is at its limit, or when network gas is higher than Goat pays for an exit. The card then says when the keeper tries again (in UTC), and it keeps trying while the exit is on.
  • If a keeper is late or down, nothing happens to your position. Do not rely on automation alone.