[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GR2JXW4HNFC8RG4MSZ2WX1":3,"skill-same:01M6GR2JXW4HNFC8RG4MSZ2WX1":84},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":16,"sourceHtmlUrl":17,"categories":18,"keywords":19,"publishedAt":42,"linkOnly":43,"markdownContent":44,"markdownBody":45,"frontMatter":46,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":50,"repositoryHtmlUrl":51,"repositoryHomepageUrl":6,"ownerHtmlUrl":52,"ownerBlogUrl":53,"ownerDescription":54,"updatedAt":55,"install":56,"resources":69},"01M6GR2JXW4HNFC8RG4MSZ2WX1","intent-to-transaction",null,"Build unsigned DeFi transactions from natural language across multiple chains. Use when the user wants to send, transfer, swap, stake, unstake, wrap, unwrap, supply, withdraw, borrow, repay, deposit, delegate, add liquidity, remove liquidity, or trade yield tokens on-chain. Supports Ethereum, Arbitrum, Base, Optimism, Polygon, and Sepolia. Covers ETH, ERC-20, ERC-721, Aave, Lido, Uniswap, Curve, Compound, MakerDAO, Rocket Pool, EigenLayer, Balancer, Pendle, Fibrous, and WETH.","jiayaoqijia\u002Fcryptoskill","jiayaoqijia","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1453879?v=4","01M6GMYTX7Q7S504VC6E756ENR","YQ","01M6GMYV1QKJ1CC75MTTGT9PR0",81,"MIT","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdefi\u002Fnethermindeth-official-intent-to-transaction\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdefi\u002Fnethermindeth-official-intent-to-transaction\u002FSKILL.md",[],[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],"intent to transaction","intent","transaction","when","ethereum","send","on-chain","supply","rocket","add","chain","liquidity","uniswap","yield","withdraw","deposit","across","natural language","remove","delegate","transactions","defi","2026-11-10 10:12:30",false,"---\nname: intent-to-transaction\ndescription: \"Build unsigned DeFi transactions from natural language across multiple chains. Use when the user wants to send, transfer, swap, stake, unstake, wrap, unwrap, supply, withdraw, borrow, repay, deposit, delegate, add liquidity, remove liquidity, or trade yield tokens on-chain. Supports Ethereum, Arbitrum, Base, Optimism, Polygon, and Sepolia. Covers ETH, ERC-20, ERC-721, Aave, Lido, Uniswap, Curve, Compound, MakerDAO, Rocket Pool, EigenLayer, Balancer, Pendle, Fibrous, and WETH.\"\n---\n\n# Intent to Transaction\n\nBuilds raw unsigned DeFi transactions using the `defi-skills` CLI. The tool is a deterministic, stateless PlaybookEngine. It takes one action at a time with structured input, resolves token addresses, converts amounts to base units, ABI-encodes calldata, and outputs unsigned transactions. It has no memory between calls.\n\n**You are the LLM.** Your job is to understand the user's intent, determine the correct action and arguments, then call the CLI with `--action` and `--args`. No LLM runs inside the CLI. It is purely deterministic. You handle all planning, decomposition, and sequencing.\n\nThe output is an unsigned transaction (`to`, `value`, `data`). It never signs or broadcasts.\n\n## Agent Behavior\n\nThese are financial transactions. Be collaborative, not autonomous.\n\n**Direct intent**: If the user's request maps to a single action with clear parameters, build it immediately. No discussion needed.\nExamples: \"Send 0.5 ETH to vitalik.eth\", \"Supply 100 USDC to Aave\", \"Wrap 5 ETH\".\n\n**Multi-step intent**: If the request requires multiple actions, present your execution plan to the user before building anything. Explain:\n- What steps you will execute and in what order\n- What tokens and amounts are involved at each step\n- Whether you can build all steps upfront (predictable outputs like stake\u002Fwrap) or need to execute step-by-step (unpredictable outputs like swaps)\n- Any assumptions you are making (e.g., \"I will use the same amount for step 2 since Lido staking is roughly 1:1\")\n\nOnly proceed after the user confirms the plan. If the user modifies the plan, adjust accordingly.\n\n**Ambiguous intent**: If the request is vague or could be interpreted multiple ways, ask clarifying questions before doing anything. Do not assume a protocol, token, or strategy.\nExamples:\n- \"I want to earn yield on my ETH\": Which protocol? Lido staking? Aave supply? Rocket Pool? Each has different risk\u002Freward.\n- \"Move my stables somewhere safe\": Which stablecoins? What does \"safe\" mean to them? Aave supply? MakerDAO DSR?\n- \"Do something with my USDC\": Too vague. Ask what they want to achieve.\n\n**Large amounts or \"max\"**: If the user is operating with \"max\" (entire wallet balance) or amounts you consider significant, confirm the details before building. Remind them that \"max\" means their entire balance of that token, not just a portion.\n\n## Constraints\n\n- **Multi-chain support.** Supported chains: Ethereum Mainnet (1), Arbitrum (42161), Base (8453), Optimism (10), Polygon (137), Sepolia (11155111). Default is mainnet. Use `--chain-id` to target other chains. Not all actions are available on all chains — check with `defi-skills actions --chain-id \u003Cid>`.\n- **One action per CLI call.** For multi-step intents, decompose into separate build calls. You are the planner.\n- **Some actions restrict valid tokens.** If you are unsure whether a token is supported for an action, run `defi-skills actions \u003Cname> --json` to check. The CLI will reject unsupported tokens with a clear error listing the valid options.\n- **Negative amounts are rejected.** All amounts must be zero or positive.\n- **Always check `\"success\"` in the JSON response.** If `success` is `false`, the `error` field explains what went wrong. Do not proceed with failed builds.\n- **Some actions have optional parameters with sensible defaults** (slippage, fee tier, deadline, recipient address). These are visible via `defi-skills actions \u003Cname> --json`. Inform the user about relevant defaults before building so they can override if needed.\n\n## Prerequisites\n\nThe CLI must be installed:\n\n```bash\npip install --upgrade defi-skills\n```\n\nA wallet address is required. The CLI reads it from (in priority order):\n1. `--wallet` flag on each command\n2. `WALLET_ADDRESS` environment variable\n3. Persisted config (`defi-skills config set-wallet`)\n\nFor agents, prefer the env var or `--wallet` flag — no file writes needed. If no wallet is available, ask the user to provide their address before continuing.\n\n### API keys\n\n**Most actions that involve on-chain data need `ALCHEMY_API_KEY`** (ENS resolution, swap quotes, \"max\" balance queries, EigenLayer strategy verification, etc.). Simple actions with known tokens and fixed amounts (like `aave_supply` with USDC) work without it.\n\nIf a build fails with \"no web3 instance\" or \"no RPC provider available\", the user needs to set their Alchemy key via environment variable or CLI config:\n\n```bash\n# Environment variable (preferred for agents)\nexport ALCHEMY_API_KEY=\"\u003CKEY>\"\n\n# Or persist via CLI config\ndefi-skills config set alchemy_api_key \"\u003CKEY>\"\n```\n\n**Balancer actions** additionally need `THEGRAPH_API_KEY`:\n\n```bash\nexport THEGRAPH_API_KEY=\"\u003CKEY>\"\n# Or persist via CLI config\ndefi-skills config set thegraph_api_key \"\u003CKEY>\"\n```\n\n## Workflow\n\n### Step 1: Identify the Action\n\nDetermine the correct action from the supported actions table below. If unsure, or to check availability on a specific chain:\n\n```bash\ndefi-skills actions --json\ndefi-skills actions --chain-id 42161 --json   # Arbitrum actions only\n```\n\n### Step 2: Check Parameters (always)\n\nAlways check parameters before building. The call is instant (local lookup) and prevents errors from wrong field names:\n\n```bash\ndefi-skills actions aave_supply --json\n```\n\n### Step 3: Build the Transaction\n\n```bash\nTX=$(defi-skills build --action aave_supply --args '{\"asset\":\"USDC\",\"amount\":\"500\"}' --json)\n\n# On L2 chains, pass --chain-id\nTX=$(defi-skills build --action aave_supply --args '{\"asset\":\"USDC\",\"amount\":\"500\"}' --chain-id 42161 --json)\n```\n\nAlways check the response before proceeding:\n\n```bash\necho \"$TX\" | jq '.success'        # must be true\necho \"$TX\" | jq '.transactions'   # ordered array: approvals first, then action\n```\n\n## Response Format\n\nThe response is a JSON object with `success` and either `transactions` (on success) or `error` (on failure).\n\nOn success, `transactions` is an ordered array. **Execute them in order**: approval transactions first, then the main action. Some actions need no approval (1 transaction), others need 1 approval (2 transactions), and USDT needs a reset-to-zero step (3 transactions).\n\n```json\n{\n  \"success\": true,\n  \"transactions\": [\n    {\n      \"type\": \"approval\",\n      \"token\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n      \"spender\": \"0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2\",\n      \"raw_tx\": {\n        \"chain_id\": 1,\n        \"to\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n        \"value\": \"0\",\n        \"data\": \"0x095ea7b3...\"\n      }\n    },\n    {\n      \"type\": \"action\",\n      \"action\": \"aave_supply\",\n      \"target_contract\": \"0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2\",\n      \"function_name\": \"supply\",\n      \"arguments\": {\n        \"asset\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n        \"amount\": \"500000000\",\n        \"onBehalfOf\": \"0x...\"\n      },\n      \"raw_tx\": {\n        \"chain_id\": 1,\n        \"to\": \"0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2\",\n        \"value\": \"0\",\n        \"data\": \"0x617ba037...\"\n      }\n    }\n  ]\n}\n```\n\nOn failure: `{\"success\": false, \"error\": \"description of what went wrong\"}`.\n\n## Supported Actions\n\n| Protocol | Actions | Chains |\n|----------|---------|--------|\n| Transfers | `transfer_native`, `transfer_erc20`, `transfer_erc721` | All chains |\n| WETH | `weth_wrap`, `weth_unwrap` | Mainnet, Arbitrum, Base, Optimism, Sepolia |\n| Aave V3 | `aave_supply`, `aave_withdraw`, `aave_borrow`, `aave_repay`, `aave_set_collateral`, `aave_repay_with_atokens`, `aave_claim_rewards` | Mainnet, Arbitrum, Base, Optimism, Polygon, Sepolia |\n| Uniswap V3 | `uniswap_swap`, `uniswap_lp_mint`, `uniswap_lp_collect`, `uniswap_lp_decrease`, `uniswap_lp_increase` | Mainnet, Arbitrum, Base, Optimism, Polygon, Sepolia |\n| Compound V3 | `compound_supply`, `compound_withdraw`, `compound_borrow`, `compound_repay`, `compound_claim_rewards` | Mainnet, Arbitrum, Base, Optimism, Polygon, Sepolia |\n| Balancer V2 | `balancer_swap`, `balancer_join_pool`, `balancer_exit_pool` | Mainnet, Arbitrum, Base, Optimism, Polygon |\n| Lido | `lido_stake`, `lido_wrap_steth`, `lido_unwrap_wsteth`, `lido_unstake`, `lido_claim_withdrawals` | Mainnet only |\n| Curve 3pool | `curve_add_liquidity`, `curve_remove_liquidity` | Mainnet only |\n| Curve Gauges | `curve_gauge_deposit`, `curve_gauge_withdraw`, `curve_mint_crv` | Mainnet only |\n| MakerDAO DSR | `maker_deposit`, `maker_redeem` | Mainnet only |\n| Rocket Pool | `rocketpool_stake`, `rocketpool_unstake` | Mainnet only |\n| EigenLayer | `eigenlayer_deposit`, `eigenlayer_delegate`, `eigenlayer_undelegate`, `eigenlayer_queue_withdrawals`, `eigenlayer_complete_withdrawal` | Mainnet only |\n| Pendle V2 | `pendle_swap_token_for_pt`, `pendle_swap_pt_for_token`, `pendle_swap_token_for_yt`, `pendle_swap_yt_for_token`, `pendle_add_liquidity`, `pendle_remove_liquidity`, `pendle_mint_py`, `pendle_redeem_py`, `pendle_claim_rewards` | Mainnet only |\n| Fibrous | `fibrous_swap` | Base only |\n\nNot all actions are available on all chains. Use `defi-skills actions --chain-id \u003Cid> --json` to check.\n\n## How to Build Any Action\n\nFor every action, follow these three steps in order:\n\n**1. Find the action name** from the table above. If unsure, list all:\n```bash\ndefi-skills actions --json | jq '.by_protocol'\n```\n\n**2. Check its parameters** (always do this before building):\n```bash\ndefi-skills actions \u003Caction_name> --json\n```\nThis returns `required` and `optional` fields with exact parameter names and valid tokens. Use these names in `--args`.\n\n**3. Build the transaction:**\n```bash\nTX=$(defi-skills build --action \u003Caction_name> --args '{\"param\":\"value\"}' --json)\necho \"$TX\" | jq '.success'\necho \"$TX\" | jq '.transactions'\n```\n\n## Examples\n\n### Simple: Aave Supply\n\n```bash\ndefi-skills actions aave_supply --json    # check params first\nTX=$(defi-skills build --action aave_supply --args '{\"asset\":\"USDC\",\"amount\":\"1000\"}' --json)\n```\n\nReturns 2 transactions: ERC-20 approval, then `supply()`.\n\n### ENS Transfer (needs ALCHEMY_API_KEY)\n\n```bash\nTX=$(defi-skills build --action transfer_native --args '{\"to\":\"vitalik.eth\",\"amount\":\"0.5\"}' --json)\n```\n\n### L2: Supply USDC on Arbitrum\n\n```bash\ndefi-skills actions aave_supply --chain-id 42161 --json   # check params on Arbitrum\nTX=$(defi-skills build --action aave_supply --args '{\"asset\":\"USDC\",\"amount\":\"1000\"}' --chain-id 42161 --json)\n```\n\n### Multi-step: Stake then Restake (Mainnet)\n\nLido staking is predictable (~1:1), so build both upfront:\n\n```bash\nTX1=$(defi-skills build --action lido_stake --args '{\"amount\":\"10\"}' --json)\nTX2=$(defi-skills build --action eigenlayer_deposit --args '{\"asset\":\"stETH\",\"amount\":\"10\"}' --json)\n```\n\n## Multi-Step Planning\n\nThe CLI is stateless. Each build call is independent with no memory of previous calls and no way to reference the output of a prior transaction. When planning multi-step intents:\n\n- **Predictable outputs** (stake, wrap, supply): input roughly equals output. Build all steps upfront with the same amount. Example: stake 10 ETH on Lido produces ~10 stETH, so pass `\"amount\":\"10\"` to the EigenLayer deposit.\n- **Unpredictable outputs** (swaps, complex withdrawals): the output depends on live prices or on-chain state. You cannot know the exact amount at build time. Build and execute step 1 first, then ask the user for the result or check on-chain before building step 2. Do not guess amounts.\n- **`\"max\"` means entire wallet balance**, not \"whatever came from the last step.\" If the user already holds the token, `\"max\"` will include their existing balance plus the new amount. Make sure the user understands this before using it.\n\n## Error Handling\n\n- **`success: false`**: Read the `error` field. Do not retry blindly. Fix the input based on the error message.\n- **Unknown action**: Run `defi-skills actions` to see all supported actions.\n- **Unsupported token**: The error lists valid tokens for the action.\n- **Action not available on chain**: The action exists but not on the requested chain. Use `defi-skills actions --chain-id \u003Cid>` to see what's available. Suggest mainnet if the action is mainnet-only (e.g., Lido, EigenLayer, Curve).\n- **Negative amount**: Amounts must be zero or positive.\n- **ENS resolution failed**: The user needs to run `defi-skills config set alchemy_api_key \u003CKEY>`, or provide a hex address instead. Note: ENS is only available on Ethereum Mainnet and Sepolia. On L2 chains, always use hex addresses (0x...).\n- **Missing wallet**: Run `defi-skills config set-wallet \u003Caddress>`.\n- **CLI not found**: Run `pip install defi-skills`.\n\n## Safety\n\n- Output is an unsigned transaction. The tool never signs or broadcasts.\n- No private keys are involved at any stage.\n- The deterministic build path (`--action` + `--args`) uses zero LLM tokens.\n- Always review the `raw_tx` before signing. Verify `to`, `value`, and `data`.\n","# Intent to Transaction\n\nBuilds raw unsigned DeFi transactions using the `defi-skills` CLI. The tool is a deterministic, stateless PlaybookEngine. It takes one action at a time with structured input, resolves token addresses, converts amounts to base units, ABI-encodes calldata, and outputs unsigned transactions. It has no memory between calls.\n\n**You are the LLM.** Your job is to understand the user's intent, determine the correct action and arguments, then call the CLI with `--action` and `--args`. No LLM runs inside the CLI. It is purely deterministic. You handle all planning, decomposition, and sequencing.\n\nThe output is an unsigned transaction (`to`, `value`, `data`). It never signs or broadcasts.\n\n## Agent Behavior\n\nThese are financial transactions. Be collaborative, not autonomous.\n\n**Direct intent**: If the user's request maps to a single action with clear parameters, build it immediately. No discussion needed.\nExamples: \"Send 0.5 ETH to vitalik.eth\", \"Supply 100 USDC to Aave\", \"Wrap 5 ETH\".\n\n**Multi-step intent**: If the request requires multiple actions, present your execution plan to the user before building anything. Explain:\n- What steps you will execute and in what order\n- What tokens and amounts are involved at each step\n- Whether you can build all steps upfront (predictable outputs like stake\u002Fwrap) or need to execute step-by-step (unpredictable outputs like swaps)\n- Any assumptions you are making (e.g., \"I will use the same amount for step 2 since Lido staking is roughly 1:1\")\n\nOnly proceed after the user confirms the plan. If the user modifies the plan, adjust accordingly.\n\n**Ambiguous intent**: If the request is vague or could be interpreted multiple ways, ask clarifying questions before doing anything. Do not assume a protocol, token, or strategy.\nExamples:\n- \"I want to earn yield on my ETH\": Which protocol? Lido staking? Aave supply? Rocket Pool? Each has different risk\u002Freward.\n- \"Move my stables somewhere safe\": Which stablecoins? What does \"safe\" mean to them? Aave supply? MakerDAO DSR?\n- \"Do something with my USDC\": Too vague. Ask what they want to achieve.\n\n**Large amounts or \"max\"**: If the user is operating with \"max\" (entire wallet balance) or amounts you consider significant, confirm the details before building. Remind them that \"max\" means their entire balance of that token, not just a portion.\n\n## Constraints\n\n- **Multi-chain support.** Supported chains: Ethereum Mainnet (1), Arbitrum (42161), Base (8453), Optimism (10), Polygon (137), Sepolia (11155111). Default is mainnet. Use `--chain-id` to target other chains. Not all actions are available on all chains — check with `defi-skills actions --chain-id \u003Cid>`.\n- **One action per CLI call.** For multi-step intents, decompose into separate build calls. You are the planner.\n- **Some actions restrict valid tokens.** If you are unsure whether a token is supported for an action, run `defi-skills actions \u003Cname> --json` to check. The CLI will reject unsupported tokens with a clear error listing the valid options.\n- **Negative amounts are rejected.** All amounts must be zero or positive.\n- **Always check `\"success\"` in the JSON response.** If `success` is `false`, the `error` field explains what went wrong. Do not proceed with failed builds.\n- **Some actions have optional parameters with sensible defaults** (slippage, fee tier, deadline, recipient address). These are visible via `defi-skills actions \u003Cname> --json`. Inform the user about relevant defaults before building so they can override if needed.\n\n## Prerequisites\n\nThe CLI must be installed:\n\n```bash\npip install --upgrade defi-skills\n```\n\nA wallet address is required. The CLI reads it from (in priority order):\n1. `--wallet` flag on each command\n2. `WALLET_ADDRESS` environment variable\n3. Persisted config (`defi-skills config set-wallet`)\n\nFor agents, prefer the env var or `--wallet` flag — no file writes needed. If no wallet is available, ask the user to provide their address before continuing.\n\n### API keys\n\n**Most actions that involve on-chain data need `ALCHEMY_API_KEY`** (ENS resolution, swap quotes, \"max\" balance queries, EigenLayer strategy verification, etc.). Simple actions with known tokens and fixed amounts (like `aave_supply` with USDC) work without it.\n\nIf a build fails with \"no web3 instance\" or \"no RPC provider available\", the user needs to set their Alchemy key via environment variable or CLI config:\n\n```bash\n# Environment variable (preferred for agents)\nexport ALCHEMY_API_KEY=\"\u003CKEY>\"\n\n# Or persist via CLI config\ndefi-skills config set alchemy_api_key \"\u003CKEY>\"\n```\n\n**Balancer actions** additionally need `THEGRAPH_API_KEY`:\n\n```bash\nexport THEGRAPH_API_KEY=\"\u003CKEY>\"\n# Or persist via CLI config\ndefi-skills config set thegraph_api_key \"\u003CKEY>\"\n```\n\n## Workflow\n\n### Step 1: Identify the Action\n\nDetermine the correct action from the supported actions table below. If unsure, or to check availability on a specific chain:\n\n```bash\ndefi-skills actions --json\ndefi-skills actions --chain-id 42161 --json   # Arbitrum actions only\n```\n\n### Step 2: Check Parameters (always)\n\nAlways check parameters before building. The call is instant (local lookup) and prevents errors from wrong field names:\n\n```bash\ndefi-skills actions aave_supply --json\n```\n\n### Step 3: Build the Transaction\n\n```bash\nTX=$(defi-skills build --action aave_supply --args '{\"asset\":\"USDC\",\"amount\":\"500\"}' --json)\n\n# On L2 chains, pass --chain-id\nTX=$(defi-skills build --action aave_supply --args '{\"asset\":\"USDC\",\"amount\":\"500\"}' --chain-id 42161 --json)\n```\n\nAlways check the response before proceeding:\n\n```bash\necho \"$TX\" | jq '.success'        # must be true\necho \"$TX\" | jq '.transactions'   # ordered array: approvals first, then action\n```\n\n## Response Format\n\nThe response is a JSON object with `success` and either `transactions` (on success) or `error` (on failure).\n\nOn success, `transactions` is an ordered array. **Execute them in order**: approval transactions first, then the main action. Some actions need no approval (1 transaction), others need 1 approval (2 transactions), and USDT needs a reset-to-zero step (3 transactions).\n\n```json\n{\n  \"success\": true,\n  \"transactions\": [\n    {\n      \"type\": \"approval\",\n      \"token\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n      \"spender\": \"0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2\",\n      \"raw_tx\": {\n        \"chain_id\": 1,\n        \"to\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n        \"value\": \"0\",\n        \"data\": \"0x095ea7b3...\"\n      }\n    },\n    {\n      \"type\": \"action\",\n      \"action\": \"aave_supply\",\n      \"target_contract\": \"0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2\",\n      \"function_name\": \"supply\",\n      \"arguments\": {\n        \"asset\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n        \"amount\": \"500000000\",\n        \"onBehalfOf\": \"0x...\"\n      },\n      \"raw_tx\": {\n        \"chain_id\": 1,\n        \"to\": \"0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2\",\n        \"value\": \"0\",\n        \"data\": \"0x617ba037...\"\n      }\n    }\n  ]\n}\n```\n\nOn failure: `{\"success\": false, \"error\": \"description of what went wrong\"}`.\n\n## Supported Actions\n\n| Protocol | Actions | Chains |\n|----------|---------|--------|\n| Transfers | `transfer_native`, `transfer_erc20`, `transfer_erc721` | All chains |\n| WETH | `weth_wrap`, `weth_unwrap` | Mainnet, Arbitrum, Base, Optimism, Sepolia |\n| Aave V3 | `aave_supply`, `aave_withdraw`, `aave_borrow`, `aave_repay`, `aave_set_collateral`, `aave_repay_with_atokens`, `aave_claim_rewards` | Mainnet, Arbitrum, Base, Optimism, Polygon, Sepolia |\n| Uniswap V3 | `uniswap_swap`, `uniswap_lp_mint`, `uniswap_lp_collect`, `uniswap_lp_decrease`, `uniswap_lp_increase` | Mainnet, Arbitrum, Base, Optimism, Polygon, Sepolia |\n| Compound V3 | `compound_supply`, `compound_withdraw`, `compound_borrow`, `compound_repay`, `compound_claim_rewards` | Mainnet, Arbitrum, Base, Optimism, Polygon, Sepolia |\n| Balancer V2 | `balancer_swap`, `balancer_join_pool`, `balancer_exit_pool` | Mainnet, Arbitrum, Base, Optimism, Polygon |\n| Lido | `lido_stake`, `lido_wrap_steth`, `lido_unwrap_wsteth`, `lido_unstake`, `lido_claim_withdrawals` | Mainnet only |\n| Curve 3pool | `curve_add_liquidity`, `curve_remove_liquidity` | Mainnet only |\n| Curve Gauges | `curve_gauge_deposit`, `curve_gauge_withdraw`, `curve_mint_crv` | Mainnet only |\n| MakerDAO DSR | `maker_deposit`, `maker_redeem` | Mainnet only |\n| Rocket Pool | `rocketpool_stake`, `rocketpool_unstake` | Mainnet only |\n| EigenLayer | `eigenlayer_deposit`, `eigenlayer_delegate`, `eigenlayer_undelegate`, `eigenlayer_queue_withdrawals`, `eigenlayer_complete_withdrawal` | Mainnet only |\n| Pendle V2 | `pendle_swap_token_for_pt`, `pendle_swap_pt_for_token`, `pendle_swap_token_for_yt`, `pendle_swap_yt_for_token`, `pendle_add_liquidity`, `pendle_remove_liquidity`, `pendle_mint_py`, `pendle_redeem_py`, `pendle_claim_rewards` | Mainnet only |\n| Fibrous | `fibrous_swap` | Base only |\n\nNot all actions are available on all chains. Use `defi-skills actions --chain-id \u003Cid> --json` to check.\n\n## How to Build Any Action\n\nFor every action, follow these three steps in order:\n\n**1. Find the action name** from the table above. If unsure, list all:\n```bash\ndefi-skills actions --json | jq '.by_protocol'\n```\n\n**2. Check its parameters** (always do this before building):\n```bash\ndefi-skills actions \u003Caction_name> --json\n```\nThis returns `required` and `optional` fields with exact parameter names and valid tokens. Use these names in `--args`.\n\n**3. Build the transaction:**\n```bash\nTX=$(defi-skills build --action \u003Caction_name> --args '{\"param\":\"value\"}' --json)\necho \"$TX\" | jq '.success'\necho \"$TX\" | jq '.transactions'\n```\n\n## Examples\n\n### Simple: Aave Supply\n\n```bash\ndefi-skills actions aave_supply --json    # check params first\nTX=$(defi-skills build --action aave_supply --args '{\"asset\":\"USDC\",\"amount\":\"1000\"}' --json)\n```\n\nReturns 2 transactions: ERC-20 approval, then `supply()`.\n\n### ENS Transfer (needs ALCHEMY_API_KEY)\n\n```bash\nTX=$(defi-skills build --action transfer_native --args '{\"to\":\"vitalik.eth\",\"amount\":\"0.5\"}' --json)\n```\n\n### L2: Supply USDC on Arbitrum\n\n```bash\ndefi-skills actions aave_supply --chain-id 42161 --json   # check params on Arbitrum\nTX=$(defi-skills build --action aave_supply --args '{\"asset\":\"USDC\",\"amount\":\"1000\"}' --chain-id 42161 --json)\n```\n\n### Multi-step: Stake then Restake (Mainnet)\n\nLido staking is predictable (~1:1), so build both upfront:\n\n```bash\nTX1=$(defi-skills build --action lido_stake --args '{\"amount\":\"10\"}' --json)\nTX2=$(defi-skills build --action eigenlayer_deposit --args '{\"asset\":\"stETH\",\"amount\":\"10\"}' --json)\n```\n\n## Multi-Step Planning\n\nThe CLI is stateless. Each build call is independent with no memory of previous calls and no way to reference the output of a prior transaction. When planning multi-step intents:\n\n- **Predictable outputs** (stake, wrap, supply): input roughly equals output. Build all steps upfront with the same amount. Example: stake 10 ETH on Lido produces ~10 stETH, so pass `\"amount\":\"10\"` to the EigenLayer deposit.\n- **Unpredictable outputs** (swaps, complex withdrawals): the output depends on live prices or on-chain state. You cannot know the exact amount at build time. Build and execute step 1 first, then ask the user for the result or check on-chain before building step 2. Do not guess amounts.\n- **`\"max\"` means entire wallet balance**, not \"whatever came from the last step.\" If the user already holds the token, `\"max\"` will include their existing balance plus the new amount. Make sure the user understands this before using it.\n\n## Error Handling\n\n- **`success: false`**: Read the `error` field. Do not retry blindly. Fix the input based on the error message.\n- **Unknown action**: Run `defi-skills actions` to see all supported actions.\n- **Unsupported token**: The error lists valid tokens for the action.\n- **Action not available on chain**: The action exists but not on the requested chain. Use `defi-skills actions --chain-id \u003Cid>` to see what's available. Suggest mainnet if the action is mainnet-only (e.g., Lido, EigenLayer, Curve).\n- **Negative amount**: Amounts must be zero or positive.\n- **ENS resolution failed**: The user needs to run `defi-skills config set alchemy_api_key \u003CKEY>`, or provide a hex address instead. Note: ENS is only available on Ethereum Mainnet and Sepolia. On L2 chains, always use hex addresses (0x...).\n- **Missing wallet**: Run `defi-skills config set-wallet \u003Caddress>`.\n- **CLI not found**: Run `pip install defi-skills`.\n\n## Safety\n\n- Output is an unsigned transaction. The tool never signs or broadcasts.\n- No private keys are involved at any stage.\n- The deterministic build path (`--action` + `--args`) uses zero LLM tokens.\n- Always review the `raw_tx` before signing. Verify `to`, `value`, and `data`.\n",{"name":5,"description":7},"main","3df1d0d67b30ff15236561f8c0f9f06d33f42dfd","skills\u002Fdefi\u002Fnethermindeth-official-intent-to-transaction",17,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia","https:\u002F\u002Feth2030.com","Hardcore infra. Building @alt-research and applied cryptography.","2026-11-14 02:27:51",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add jiayaoqijia\u002Fcryptoskill --skill intent-to-transaction",{"tool":62,"command":63},"bunx","bunx skills add jiayaoqijia\u002Fcryptoskill --skill intent-to-transaction",{"tool":65,"command":66},"pnpm","pnpm dlx skills add jiayaoqijia\u002Fcryptoskill --skill intent-to-transaction","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdefi\u002Fnethermindeth-official-intent-to-transaction\u002FSKILL.md",true,[70,74,80],{"path":71,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":73,"sourceHtmlUrl":16},"LICENSE","许可证",1075,{"path":75,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":78,"sourceHtmlUrl":79},"SOURCE.md","REFERENCE","参考文档",371,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdefi\u002Fnethermindeth-official-intent-to-transaction\u002FSOURCE.md",{"path":81,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":82,"sourceHtmlUrl":83},"TRUST.auto.yaml",2208,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdefi\u002Fnethermindeth-official-intent-to-transaction\u002FTRUST.auto.yaml",[85,113,136,154,167,177],{"skillNo":86,"name":87,"nameZh":6,"description":88,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":89,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":42},"01M712C436EQYE43342Q4E7GG1","recipe-performance","Diagnose a specific MetaMask user flow's real-app performance and Sentry critical-user-flow telemetry with deterministic mm-harness recipes. Use for CUF boundaries, cold\u002Fwarm\u002Fbackground-resume behavior, latency regressions, lifecycle tags, duplicate or blocking network requests, long tasks, layout\u002Fpaint cost, screen redraws, React rerenders, or browser trace analysis where tests alone cannot prove the real app.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fwallets\u002Fmetamask-official-recipe-performance\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fwallets\u002Fmetamask-official-recipe-performance\u002FSKILL.md",[],[93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112],"performance","recipe performance","recipe","mm","sentry","harness","app","deterministic","recipes","flow","cold","critical","analysis","tasks","react","browser","layout","screen","network","metamask",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":117,"licenseFileUrl":118,"sourceHtmlUrl":119,"categories":120,"keywords":121,"publishedAt":42},"01M70XT2F8A5CQZ81JBP98KSW3","mexc-spot-websocket","MEXC Spot WebSocket workflows for public streams, protobuf handling, depth maintenance, listen keys, and private streams without exposing API keys.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-websocket\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-websocket\u002FSKILL.md",[],[122,123,124,125,126,127,128,129,130,131,132,133,134,135],"mexc spot websocket","spot","websocket","api","workflows","public","listen","streams","depth","keys","for","api keys","maintenance","protobuf",{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":117,"licenseFileUrl":140,"sourceHtmlUrl":141,"categories":142,"keywords":143,"publishedAt":42},"01M70XT0MBXN3WZY1BKN0CPNKR","mexc-spot-rest","MEXC Spot REST workflows for public data, signed account requests, orders, wallet\u002Fadmin actions, and secure signing without exposing API keys.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-rest\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-rest\u002FSKILL.md",[],[144,123,145,146,147,148,149,133,132,131,150,151,152,127,153,126,125],"mexc spot rest","REST","admin","signing","Wallet","requests","actions","secure","data","orders",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":117,"licenseFileUrl":158,"sourceHtmlUrl":159,"categories":160,"keywords":161,"publishedAt":42},"01M70XSYSVZ2N0N91XCAR2CAK0","mexc-futures-websocket","MEXC Futures WebSocket workflows for public streams, private account\u002Forder\u002Fposition streams, ping\u002Fpong, subscriptions, and depth maintenance.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-futures-websocket\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-futures-websocket\u002FSKILL.md",[],[162,163,124,164,165,134,132,166,130,129,127,126],"mexc futures websocket","futures","position","ping","subscriptions",{"skillNo":168,"name":169,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":170,"sourceHtmlUrl":171,"categories":172,"keywords":173,"publishedAt":42},"01M6H0ZWHVE5W04WG2DKQE2SQC","0xklen-version-and-refresh-sanctions-lists","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-version-and-refresh-sanctions-lists\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-version-and-refresh-sanctions-lists\u002FSKILL.md",[],[174,175,176],"refresh","0xklen version and refresh sanctions lists","version",{"skillNo":178,"name":179,"nameZh":6,"description":180,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":181,"sourceHtmlUrl":182,"categories":183,"keywords":184,"publishedAt":42},"01M6H0Z28Q3R8J0S799GJQWXM3","verify-tests-cover-changed-lines","Use when a PR adds code that the existing suite may not exercise. Measures patch coverage — the share of newly changed lines hit by tests — before approving.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-verify-tests-cover-changed-lines\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-verify-tests-cover-changed-lines\u002FSKILL.md",[],[185,186,187,188,189,190,191,192,193,194,195],"tests","cover","verify tests cover changed lines","verify","coverage","pr","exercise","use","patch","code","share"]