{
  "protocolVersion": "0.3.0",
  "name": "DefiLoops planner",
  "description": "DefiLoops planner is an agent whose plans DefiLoops runs. Its skills are the catalogue operations its capability manifest allows it to put in a plan, on the chains the manifest names, run through the /v1 REST gateway (contract: /v1/openapi.json). It is registered as eip155:8453:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432#141335. This service does not implement the A2A message/send task interface.",
  "url": "https://api.defiloops.com/v1",
  "preferredTransport": "HTTP+JSON",
  "iconUrl": "https://app.defiloops.com/logo/logo-mark-gradient.svg",
  "provider": {
    "organization": "DeFiLoops",
    "url": "https://app.defiloops.com"
  },
  "version": "1",
  "documentationUrl": "https://api.defiloops.com/v1/openapi.json",
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "stateTransitionHistory": false
  },
  "securitySchemes": {
    "agentSession": {
      "type": "http",
      "scheme": "bearer",
      "description": "A short-lived agent token from sign-in with a wallet (SIWX: CAIP-122 with the EIP-4361 message). POST /v1/auth/challenge returns a message, the wallet signs it, POST /v1/auth/verify returns the token. Send it as Authorization: Bearer <token>. GET /v1/openapi.json and GET /v1/catalog need no token."
    }
  },
  "security": [
    {
      "agentSession": []
    }
  ],
  "defaultInputModes": [
    "application/json"
  ],
  "defaultOutputModes": [
    "application/json"
  ],
  "skills": [
    {
      "id": "aavev4.borrow",
      "name": "aavev4 borrow",
      "description": "Borrow from an Aave v4 spoke. The collateral backing it must have been enabled — aavev4.supply does that as part of its step.",
      "tags": [
        "defi",
        "aavev4",
        "ethereum"
      ],
      "examples": [
        "borrow on aave v4",
        "take a loan from a spoke"
      ]
    },
    {
      "id": "aavev4.repay",
      "name": "aavev4 repay",
      "description": "Repay borrowed principal to an Aave v4 spoke.",
      "tags": [
        "defi",
        "aavev4",
        "ethereum"
      ],
      "examples": [
        "repay aave v4",
        "pay back a spoke loan"
      ]
    },
    {
      "id": "aavev4.supply",
      "name": "aavev4 supply",
      "description": "Supply collateral into an Aave v4 spoke. THREE calls: approve, supply, and setUsingAsCollateral — v4 treats a supply as a deposit until it is explicitly marked as collateral. The Gold Spoke holds NATIVE XAUt, which no other venue here does.",
      "tags": [
        "defi",
        "aavev4",
        "ethereum"
      ],
      "examples": [
        "supply on aave v4",
        "collateral into a spoke",
        "put up xaut",
        "gold spoke"
      ]
    },
    {
      "id": "aavev4.withdraw",
      "name": "aavev4 withdraw",
      "description": "Withdraw collateral from an Aave v4 spoke.",
      "tags": [
        "defi",
        "aavev4",
        "ethereum"
      ],
      "examples": [
        "withdraw from aave v4",
        "take collateral out of a spoke"
      ]
    },
    {
      "id": "bridge.across",
      "name": "bridge across",
      "description": "Move an asset to another chain through Across. Settles OUT OF BAND: minutes, and the destination step must not start before the source step is final. What lands is LESS than what was sent, by at most 100 bps.",
      "tags": [
        "defi",
        "bridge",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "bridge",
        "across",
        "move money to another chain",
        "send it to base"
      ]
    },
    {
      "id": "bridge.cctp",
      "name": "bridge cctp",
      "description": "Move USDC to another chain through CCTP Fast. Settles OUT OF BAND: minutes, and the destination step must not start before the source step is final. What lands is LESS than what was sent, by at most 100 bps.",
      "tags": [
        "defi",
        "bridge",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "bridge",
        "move money to another chain",
        "send it to base",
        "cross chain"
      ]
    },
    {
      "id": "cow.cancel",
      "name": "cow cancel",
      "description": "Withdraw a CoW Protocol order this account pre-signed and has not filled: clears the on-chain pre-signature and the standing allowance to CoW's vault relayer, so nothing more can be filled. Moves no token. Name the order exactly as it was placed — the same sell, buy, buy_min, valid_to, partial and amount — because the adapter rebuilds the order hash from them and refuses one it never pre-signed. Works after valid_to too, which is how a lapsed order's allowance is cleared.",
      "tags": [
        "defi",
        "cow",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "cancel my cow order",
        "withdraw the cow limit order",
        "revoke the presigned order",
        "pull my cow order"
      ]
    },
    {
      "id": "cow.presign",
      "name": "cow presign",
      "description": "ONLY WHEN SOMEBODY NAMES CoW BY NAME. Everything else that rests at a price is place_order on a saved plan, which re-arms itself after a short fill and which a later step can be written to follow. This is an outside venue settling out of band: nothing downstream can spend what it delivers and it cannot re-arm, so choosing it unasked substitutes a venue nobody picked.",
      "tags": [
        "defi",
        "cow",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "cow limit order",
        "presign an order for a counterparty to fill",
        "settle off chain",
        "good till"
      ]
    },
    {
      "id": "deleverage.aave_v3",
      "name": "deleverage aave_v3",
      "description": "LEVER AN AAVE v3 POSITION DOWN in one flash-loan transaction: flash-borrow the loan asset, repay part of the debt, withdraw the freed collateral, sell it back into the loan asset and repay the flash — the position stays OPEN, just smaller. Ordinary use is PARTIAL: pass collateral_amount and the debt to repay; repay_all clears it entirely. Taking the whole position to cash is loan.close, not this.",
      "tags": [
        "defi",
        "deleverage",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "deleverage",
        "lever down",
        "reduce leverage",
        "cut exposure"
      ]
    },
    {
      "id": "deleverage.aave_v4",
      "name": "deleverage aave_v4",
      "description": "Lever an AAVE v4 position down, the same shape as deleverage.aave_v3 but on a v4 spoke, which maxes the repay out by construction. ETHEREUM ONLY. `market` is the same curated PAIR the lever-up named, never a spoke name.",
      "tags": [
        "defi",
        "deleverage",
        "ethereum"
      ],
      "examples": [
        "deleverage on aave v4",
        "lever down on a v4 spoke",
        "reduce leverage on aave v4"
      ]
    },
    {
      "id": "deleverage.morpho",
      "name": "deleverage morpho",
      "description": "Lever a MORPHO Blue position down, the same shape as deleverage.aave_v3.",
      "tags": [
        "defi",
        "deleverage",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "deleverage on morpho",
        "lever down a morpho blue position",
        "reduce leverage on morpho"
      ]
    },
    {
      "id": "deposit.pull",
      "name": "deposit pull",
      "description": "Draw tokens the OWNER has approved into the account. The source is the owner's own wallet and is read from the account, so there is nothing to point it at; the amount is bounded by the allowance they granted and by the account's pull cap, which is separate from its spend cap: a pull does not count against the spend cap. Use it as the FIRST step when the account is empty and the owner's wallet is not.",
      "tags": [
        "defi",
        "deposit",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "take money from my wallet",
        "take $ from my account",
        "pull funds",
        "fund the account"
      ]
    },
    {
      "id": "lend.borrow",
      "name": "lend borrow",
      "description": "Borrow against supplied collateral.",
      "tags": [
        "defi",
        "lend",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "borrow",
        "take a loan",
        "draw down",
        "get usdc against my"
      ]
    },
    {
      "id": "lend.repay",
      "name": "lend repay",
      "description": "Repay borrowed principal to Aave. Repays an EXACT amount: interest accrues every block, so \"all\" is a number nobody signed.",
      "tags": [
        "defi",
        "lend",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "repay my loan",
        "repay",
        "pay back the loan",
        "pay back what i borrowed"
      ]
    },
    {
      "id": "lend.supply",
      "name": "lend supply",
      "description": "Supply an asset as collateral.",
      "tags": [
        "defi",
        "lend",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "supply",
        "deposit collateral",
        "put up collateral",
        "collateralize"
      ]
    },
    {
      "id": "lend.withdraw",
      "name": "lend withdraw",
      "description": "Take supplied collateral back out of Aave. Carries a loan-to-value cap because removing collateral raises the ratio on whatever debt remains.",
      "tags": [
        "defi",
        "lend",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "withdraw my collateral",
        "withdraw collateral",
        "take my collateral back",
        "pull collateral out of aave"
      ]
    },
    {
      "id": "leverage.aave_v3",
      "name": "leverage aave_v3",
      "description": "LEVER AN AAVE v3 POSITION UP in one flash-loan transaction: flash-borrow the loan asset, swap it into collateral, supply that (plus any principal you add), borrow against it and repay the flash from the borrow — the account never holds the flash. The market names both tokens. The owner's LTV ceiling is the guard on the result and is not a field here; shrinking a position is deleverage.aave_v3, taking it all to cash is loan.close.",
      "tags": [
        "defi",
        "leverage",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "lever up",
        "leverage a position",
        "go 3x long",
        "loop collateral"
      ]
    },
    {
      "id": "leverage.aave_v4",
      "name": "leverage aave_v4",
      "description": "Lever an AAVE v4 position up, the same shape as leverage.aave_v3 but on a v4 spoke. ETHEREUM ONLY: Aave v4 is on no other chain this system reaches. `market` is the curated PAIR (\"weth-usdc\"), never a spoke name: the spoke is the one that lists both tokens (weth-usdc lives in main, xaut-usdt in gold).",
      "tags": [
        "defi",
        "leverage",
        "ethereum"
      ],
      "examples": [
        "lever up on aave v4",
        "leverage on a v4 spoke",
        "loop collateral on aave v4",
        "increase exposure using aave v4"
      ]
    },
    {
      "id": "leverage.morpho",
      "name": "leverage morpho",
      "description": "Lever a MORPHO Blue position up, the same shape as leverage.aave_v3. Here Morpho is both the flash lender and where the position lives.",
      "tags": [
        "defi",
        "leverage",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "lever up on morpho",
        "leverage a morpho blue position",
        "loop collateral on morpho",
        "increase exposure on morpho"
      ]
    },
    {
      "id": "loan.close",
      "name": "loan close",
      "description": "CLOSE IT AND TAKE THE MONEY OUT. Ends the position: clear the debt with borrowed money, sell the collateral, repay the loan, keep the difference. THIS IS HOW AN ORDER FILLS WHEN THE ASSET TO SELL IS COLLATERAL — max_slippage_bps is the floor on that sale, so a triggered close with a floor IS a limit order on locked collateral. Set flash_market when the debt asset cannot itself be flash-borrowed. Partial: repay and sell less than all of it.",
      "tags": [
        "defi",
        "loan",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "close my position and take the money out",
        "unwind",
        "close the position",
        "exit the loan"
      ]
    },
    {
      "id": "loan.shift",
      "name": "loan shift",
      "description": "MOVE A LEVERAGED POSITION. Sells the collateral held and buys the destination market's, keeping the loan -- or sells NOTHING when both ends take the SAME collateral token, which is how a position changes protocol without changing its pair. BOTH ENDS ARE NAMED BY CURATED MARKET, so it reaches only pairs that are listed. Moves a leveraged position from one market to another in ONE transaction, paid for by a flash loan the account never holds. Set mode to what the position should BE — neutral means the same asset is lent and borrowed, short means a true reversal — and it is refused if the destination market disagrees. Set repay_all to clear the debt EXACTLY: a fixed amount leaves the interest accrued since planning, and dust debt blocks the withdraw. Amount is the COLLATERAL to move, because that is what leaves the account.",
      "tags": [
        "defi",
        "loan",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "change the collateral",
        "swap the collateral asset",
        "from cbbtc collateral to weth collateral",
        "hold a different asset"
      ]
    },
    {
      "id": "morpho.borrow",
      "name": "morpho borrow",
      "description": "Borrow the loan asset of a curated Morpho market.",
      "tags": [
        "defi",
        "morpho",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "borrow on morpho",
        "take a loan on morpho",
        "draw the loan asset"
      ]
    },
    {
      "id": "morpho.repay",
      "name": "morpho repay",
      "description": "Repay borrowed principal to a curated Morpho market. An amount at or above the debt clears ALL of it — repaid by shares, so no dust is left to block withdrawing the collateral — and what the repay did not need stays in the account. To close a position, size it a little over the debt (interest accrues until the step runs); below the debt it repays exactly the amount.",
      "tags": [
        "defi",
        "morpho",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "repay morpho",
        "pay back the morpho loan",
        "clear morpho debt"
      ]
    },
    {
      "id": "morpho.supply",
      "name": "morpho supply",
      "description": "Put up the COLLATERAL of a curated Morpho market. `asset` must be that market's collateral token — wsteth-usdc takes wstETH, not USDC — and a market is named <collateral>-<loan>. It earns NO YIELD: collateral in Morpho backs a borrow and accrues nothing. Lending the loan token to earn the supply rate is a different call this system does not make, so a Morpho supply APY is not something a plan can take.",
      "tags": [
        "defi",
        "morpho",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "supply on morpho",
        "put up collateral on morpho",
        "collateralize a morpho market"
      ]
    },
    {
      "id": "morpho.withdraw",
      "name": "morpho withdraw",
      "description": "Withdraw collateral from a curated Morpho market.",
      "tags": [
        "defi",
        "morpho",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "withdraw from morpho",
        "take collateral back off morpho"
      ]
    },
    {
      "id": "property.buy",
      "name": "property buy",
      "description": "Buy 0xequity property tokens. The venue prices the trade from its own oracle, so the amount is a TOKEN COUNT and what a plan bounds is the currency side.",
      "tags": [
        "defi",
        "property",
        "base"
      ],
      "examples": [
        "buy property",
        "buy shares",
        "buy wxrwa1",
        "invest in the property"
      ]
    },
    {
      "id": "property.sell",
      "name": "property sell",
      "description": "Sell 0xequity property tokens. Requires the ACCOUNT to hold them, which it does only once enrolled — the router pulls from msg.sender.",
      "tags": [
        "defi",
        "property",
        "base"
      ],
      "examples": [
        "sell property",
        "sell shares",
        "sell wxrwa1",
        "exit the property"
      ]
    },
    {
      "id": "rent.claim_own",
      "name": "rent claim_own",
      "description": "Collect rent on property the ACCOUNT itself holds. Needs the account enrolled on 0xequity and holding property; otherwise it harvests nothing and succeeds. Mints a lock NFT rather than paying out.",
      "tags": [
        "defi",
        "rent",
        "base"
      ],
      "examples": [
        "claim rent",
        "collect rent on what i hold",
        "harvest my rent",
        "rent income"
      ]
    },
    {
      "id": "rent.claim_position",
      "name": "rent claim_position",
      "description": "Collect this account's share of a rent position's harvested rent, paid in USDC and spendable by a later step exactly as rent.redeem's output is. The amount is the POSITION token id, not a quantity — the same shape as rent.redeem's lock NFT id. The recipient is not chosen here: the forwarder pays whoever the position's owner nominated, and the adapter refuses a position that pays neither this account nor its owner.",
      "tags": [
        "defi",
        "rent",
        "base"
      ],
      "examples": [
        "collect my share of a rent position",
        "take the position's rent",
        "claim from a rent position"
      ]
    },
    {
      "id": "rent.harvest_delegated",
      "name": "rent harvest_delegated",
      "description": "Drive 0xequity's rent automation for the OWNER's holding, when the owner delegated through RentDelegatee and created rent positions. Harvests, redeems and splits across those positions. DELIVERS THIS ACCOUNT NOTHING — the rent lands in the owner's positions and the un-delegated remainder in the owner's wallet — so nothing may spend its output. Pair it with rent.claim_position, which collects this account's share. Needs the owner's one global delegatee slot pointed at RentDelegatee, which the run checks before it commits.",
      "tags": [
        "defi",
        "rent",
        "base"
      ],
      "examples": [
        "run the rent automation",
        "harvest the delegated rent",
        "drive rent for the owner",
        "delegated rent positions"
      ]
    },
    {
      "id": "rent.redeem",
      "name": "rent redeem",
      "description": "TURN A RENT LOCK INTO MONEY. Redeems a matured lock NFT and delivers USDC to this account -- NOT a rent token, and nothing needs selling afterwards. A later step may spend the output directly: `{\"Symbolic\": \"<this step>.output\"}` with asset USDC is how rent repays a loan. The amount is the lock NFT id, not a quantity -- rent.claim_own mints one rather than paying out, and this is what turns it into tokens.",
      "tags": [
        "defi",
        "rent",
        "base"
      ],
      "examples": [
        "redeem the lock",
        "cash in the rent lock",
        "mature the lock nft",
        "turn the lock into rent tokens"
      ]
    },
    {
      "id": "revert.add_from_aave",
      "name": "revert add_from_aave",
      "description": "Pull Aave collateral into an existing Revert Uni NFT inside a Morpho flash.",
      "tags": [
        "defi",
        "revert",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "pull a lending position into the revert nft",
        "fold a plain loan into the levered lp"
      ]
    },
    {
      "id": "revert.add_leverage",
      "name": "revert add_leverage",
      "description": "Increase leverage on a Revert Uni position: add the flash-loaned asset's side as liquidity, funded by a larger Revert borrow, plus the other side from the account.",
      "tags": [
        "defi",
        "revert",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "increase leverage on revert",
        "add the flash as extra lp"
      ]
    },
    {
      "id": "revert.add_liquidity",
      "name": "revert add_liquidity",
      "description": "Increase liquidity on a Revert-levered Uni NFT inside a Morpho flash.",
      "tags": [
        "defi",
        "revert",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "add liquidity to a levered lp nft",
        "increase revert lp inside a flash"
      ]
    },
    {
      "id": "revert.borrow",
      "name": "revert borrow",
      "description": "Borrow more USDC against an existing Revert position. Proceeds land on the account.",
      "tags": [
        "defi",
        "revert",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "borrow more against my revert position",
        "take more out of the vault nft",
        "more debt on a position already levered"
      ]
    },
    {
      "id": "revert.close_levered",
      "name": "revert close_levered",
      "description": "Close a Revert-levered Uni position: repay, burn LP, keep proceeds on the account.",
      "tags": [
        "defi",
        "revert",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "close a levered lp position",
        "unwind revert via flash",
        "exit the vault nft"
      ]
    },
    {
      "id": "revert.collect_fees",
      "name": "revert collect_fees",
      "description": "Collect Uni fees on a Revert-levered position through the vault's own door: no flash, the loan stays open.",
      "tags": [
        "defi",
        "revert",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "collect fees on a levered lp",
        "harvest revert lp fees via flash"
      ]
    },
    {
      "id": "revert.create_borrow",
      "name": "revert create_borrow",
      "description": "Move a Uni V3 NFT into the Revert vault and borrow USDC onto the Kernel account.",
      "tags": [
        "defi",
        "revert",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "borrow against my uniswap position",
        "borrow against an lp i already hold",
        "deposit the nft into revert",
        "put my uniswap position up as collateral"
      ]
    },
    {
      "id": "revert.exit_to_aave",
      "name": "revert exit_to_aave",
      "description": "Move a Revert-levered Uni position onto Aave v3: repay vault, burn LP, supply both, borrow the flash.",
      "tags": [
        "defi",
        "revert",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "move revert onto the lending market",
        "migrate the levered lp into a plain loan"
      ]
    },
    {
      "id": "revert.exit_to_aave_long",
      "name": "revert exit_to_aave_long",
      "description": "Close a Revert Uni position into an Aave LONG: supply both tokens, borrow USDC, sell WETH if needed.",
      "tags": [
        "defi",
        "revert",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "close revert into a long",
        "exit the vault nft into a plain loan",
        "safe exit long"
      ]
    },
    {
      "id": "revert.exit_to_aave_one",
      "name": "revert exit_to_aave_one",
      "description": "Close a Revert Uni position into Aave with a single collateral, swapping the other side first.",
      "tags": [
        "defi",
        "revert",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "close revert into a single-sided loan",
        "one side of the levered lp"
      ]
    },
    {
      "id": "revert.exit_to_aave_short",
      "name": "revert exit_to_aave_short",
      "description": "Close a Revert Uni position into an Aave SHORT: supply USDC, borrow WETH, sell WETH for USDC.",
      "tags": [
        "defi",
        "revert",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "close revert into a short",
        "exit the vault as a short",
        "safe exit short"
      ]
    },
    {
      "id": "revert.mint_create_borrow",
      "name": "revert mint_create_borrow",
      "description": "Mint a Uni V3 NFT, deposit it into Revert, and borrow USDC in one intent.",
      "tags": [
        "defi",
        "revert",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "mint and borrow on revert",
        "open a levered uni position in one step"
      ]
    },
    {
      "id": "revert.move_from_aave",
      "name": "revert move_from_aave",
      "description": "Move Aave collateral into a Revert-levered Uni NFT, funded by a Morpho flash.",
      "tags": [
        "defi",
        "revert",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "move a plain loan into revert",
        "mint a levered lp nft from a lending position"
      ]
    },
    {
      "id": "revert.open_levered",
      "name": "revert open_levered",
      "description": "Mint a Uni V3 NFT and open a Revert borrow against it, funded by a Morpho flash.",
      "tags": [
        "defi",
        "revert",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "mint a levered uni nft",
        "open revert with a balancer flash"
      ]
    },
    {
      "id": "revert.rebalance",
      "name": "revert rebalance",
      "description": "Rebalance a Revert-levered Uni position to signed ticks inside a Morpho flash.",
      "tags": [
        "defi",
        "revert",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "rebalance a levered lp",
        "move revert ticks via flash"
      ]
    },
    {
      "id": "revert.remove",
      "name": "revert remove",
      "description": "Return a Uni V3 NFT from the Revert vault to the Kernel account.",
      "tags": [
        "defi",
        "revert",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "take the nft out of revert",
        "withdraw from the vault",
        "return the lp"
      ]
    },
    {
      "id": "revert.remove_liquidity",
      "name": "revert remove_liquidity",
      "description": "Decrease a Revert-levered Uni position through the vault's own door: no flash, the vault checks the loan stays healthy.",
      "tags": [
        "defi",
        "revert",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "decrease a levered lp position",
        "take lp out of revert via flash"
      ]
    },
    {
      "id": "revert.repay",
      "name": "revert repay",
      "description": "Repay a Revert USDC borrow. Cap is charged on USDC; leftover is refunded like Aave repay.",
      "tags": [
        "defi",
        "revert",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "repay revert",
        "pay down the vault borrow",
        "reduce revert debt"
      ]
    },
    {
      "id": "revert.repay_withdraw",
      "name": "revert repay_withdraw",
      "description": "Repay Revert, remove the NFT, and burn the LP onto the Kernel account.",
      "tags": [
        "defi",
        "revert",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "repay and withdraw from revert",
        "close the vault position",
        "burn the lp"
      ]
    },
    {
      "id": "revert.reposition",
      "name": "revert reposition",
      "description": "Reposition a Revert-levered Uni NFT to new ticks; same flash path as rebalance.",
      "tags": [
        "defi",
        "revert",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "reposition a levered lp",
        "new ticks on revert via flash"
      ]
    },
    {
      "id": "revert.split",
      "name": "revert split",
      "description": "Split a Revert-levered Uni NFT into two new levered NFTs inside a flash, meeting at the tick you name. MAJOR BUMP FROM v1 for the same reason as uni.split: v1 always cut at the geometric midpoint, so an odd-span range could not be split at all.",
      "tags": [
        "defi",
        "revert",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "split a levered lp nft",
        "two revert positions from one flash"
      ]
    },
    {
      "id": "swap.router",
      "name": "swap router",
      "description": "Swap through the first-party aggregating router. The route is computed off-chain and is therefore UNTRUSTED: the protection is the minimum output, not inspection of the route.",
      "tags": [
        "defi",
        "swap",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "swap",
        "trade",
        "convert",
        "exchange"
      ]
    },
    {
      "id": "transfer.erc20",
      "name": "transfer erc20",
      "description": "Move an ERC-20 token.",
      "tags": [
        "defi",
        "transfer",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "send tokens",
        "pay someone",
        "transfer usdc",
        "move tokens to an address"
      ]
    },
    {
      "id": "transfer.native",
      "name": "transfer native",
      "description": "Move the chain's native token by transaction value.",
      "tags": [
        "defi",
        "transfer",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "send eth",
        "pay out native",
        "move the chain's own coin",
        "transfer eth to an address"
      ]
    },
    {
      "id": "uni.close_at_tick",
      "name": "uni close_at_tick",
      "description": "Fully decrease a Uni V3 position if the current tick is inside a signed window.",
      "tags": [
        "defi",
        "uni",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "close if price hits",
        "unwind at this tick",
        "stop the lp at a level"
      ]
    },
    {
      "id": "uni.collect",
      "name": "uni collect",
      "description": "Collect fees from a Uni V3 NFT onto the Kernel account.",
      "tags": [
        "defi",
        "uni",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "collect my lp fees",
        "harvest lp fees",
        "take the fees without closing",
        "claim trading fees from the nft"
      ]
    },
    {
      "id": "uni.decrease",
      "name": "uni decrease",
      "description": "Remove a fraction of a Uni V3 position's liquidity. Proceeds land on the account.",
      "tags": [
        "defi",
        "uni",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "remove liquidity",
        "decrease the position",
        "take some lp out"
      ]
    },
    {
      "id": "uni.increase",
      "name": "uni increase",
      "description": "Add liquidity to an existing Uni V3 NFT the account already owns.",
      "tags": [
        "defi",
        "uni",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "add to my lp position",
        "add liquidity",
        "increase the position",
        "put more in"
      ]
    },
    {
      "id": "uni.mint",
      "name": "uni mint",
      "description": "Mint a Uniswap V3 LP NFT. The recipient is the Kernel account, never a signed field. token0 and token1 are symbols; ticks are the position's range.",
      "tags": [
        "defi",
        "uni",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "mint a uniswap lp",
        "open a uni v3 position",
        "provide liquidity",
        "start providing liquidity"
      ]
    },
    {
      "id": "uni.mint_single",
      "name": "uni mint_single",
      "description": "Mint a Uni V3 LP from ONE token. Ticks are computed on-chain from the current tick; one of amount0/amount1 must be zero.",
      "tags": [
        "defi",
        "uni",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "single sided mint",
        "mint lp from one token",
        "open a uni position with only weth"
      ]
    },
    {
      "id": "uni.rebalance",
      "name": "uni rebalance",
      "description": "Burn a Uni V3 NFT and mint a new one with signed ticks. Leftover tokens stay on the account.",
      "tags": [
        "defi",
        "uni",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "widen my lp range",
        "narrow my range",
        "change the range",
        "rebalance the lp"
      ]
    },
    {
      "id": "uni.reposition",
      "name": "uni reposition",
      "description": "Move a Uni V3 position to a one-spacing range around the current tick.",
      "tags": [
        "defi",
        "uni",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "reposition around the current tick",
        "tighten the range",
        "one spacing mint"
      ]
    },
    {
      "id": "uni.split",
      "name": "uni split",
      "description": "Split one Uni V3 NFT into two new NFTs on the account, meeting at the tick you name. MAJOR BUMP FROM v1: `tick` is required and there is no default. v1 always cut at the geometric midpoint, so a range spanning an ODD number of spacings could not be split at all -- the midpoint landed between two ticks and the position manager refused it with EMPTY RETURNDATA and nothing to read. A position left by uni.reposition is one spacing wide and can never be split, because no tick lies strictly inside it.",
      "tags": [
        "defi",
        "uni",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "split the lp nft",
        "cut the range in half",
        "two positions from one"
      ]
    },
    {
      "id": "uni.withdraw",
      "name": "uni withdraw",
      "description": "Burn a Uni V3 position fully and optionally swap the proceeds through the aggregation router at a signed minOut.",
      "tags": [
        "defi",
        "uni",
        "ethereum",
        "base",
        "arbitrum"
      ],
      "examples": [
        "burn the lp position",
        "close the lp",
        "withdraw both tokens",
        "exit the range"
      ]
    }
  ],
  "supportsAuthenticatedExtendedCard": false,
  "registration": {
    "registered": true,
    "agentRef": "eip155:8453:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432#141335",
    "agentRegistry": "eip155:8453:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",
    "agentId": "141335"
  }
}
