{
  "schemaVersion": "1.0",
  "item": {
    "slug": "walletpilot-7715",
    "name": "WalletPilot 7715",
    "source": "tencent",
    "type": "skill",
    "category": "金融交易",
    "sourceUrl": "https://clawhub.ai/andreolf/walletpilot-7715",
    "canonicalUrl": "https://clawhub.ai/andreolf/walletpilot-7715",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/walletpilot-7715",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=walletpilot-7715",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/walletpilot-7715"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/walletpilot-7715",
    "agentPageUrl": "https://openagent3.xyz/skills/walletpilot-7715/agent",
    "manifestUrl": "https://openagent3.xyz/skills/walletpilot-7715/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/walletpilot-7715/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "WalletPilot-7715",
        "body": "Give your AI agent crypto superpowers with MetaMask ERC-7715 permissions."
      },
      {
        "title": "Overview",
        "body": "WalletPilot enables AI agents to execute on-chain transactions using MetaMask's ERC-7715 permission standard. Users grant scoped permissions (spend limits, chain restrictions) once, then agents can execute freely within those limits.\n\nKey Features:\n\nNo private keys shared - users keep their MetaMask\nConfigurable guardrails (spend limits, chain allowlists)\nMulti-chain support (Ethereum, Polygon, Arbitrum, Optimism, Base)\nBuilt on MetaMask's official Smart Accounts Kit"
      },
      {
        "title": "Setup",
        "body": "Get an API key at walletpilot.xyz\nInstall the SDK: npm install @walletpilot/sdk"
      },
      {
        "title": "connect",
        "body": "Request wallet permissions from user.\n\nimport { WalletPilot, PermissionBuilder } from '@walletpilot/sdk';\n\nconst pilot = new WalletPilot({ apiKey: 'wp_...' });\n\nconst permission = new PermissionBuilder()\n  .spend('USDC', '100', 'day')   // Max $100 USDC per day\n  .spend('ETH', '0.1', 'day')    // Max 0.1 ETH per day\n  .chains([1, 137, 42161])       // Ethereum, Polygon, Arbitrum\n  .expiry('30d')                 // Valid for 30 days\n  .build();\n\nconst { deepLink } = await pilot.requestPermission(permission);\nconsole.log('User should open:', deepLink);"
      },
      {
        "title": "execute",
        "body": "Execute a transaction using granted permissions.\n\nconst result = await pilot.execute({\n  to: '0x1234...',        // Target contract\n  data: '0xabcd...',      // Calldata (e.g., swap)\n  value: '0',             // ETH value (optional)\n  chainId: 1,             // Chain ID\n});\n\nconsole.log('Transaction hash:', result.hash);"
      },
      {
        "title": "balance",
        "body": "Check token balances (uses standard RPC, no permission needed).\n\nimport { createPublicClient, http } from 'viem';\nimport { mainnet } from 'viem/chains';\n\nconst client = createPublicClient({\n  chain: mainnet,\n  transport: http(),\n});\n\nconst balance = await client.getBalance({ address: '0x...' });"
      },
      {
        "title": "swap",
        "body": "Execute a token swap via DEX aggregator.\n\n// Get swap quote from 1inch, 0x, or similar\nconst quote = await fetch('https://api.1inch.io/v5.0/1/swap?...');\nconst { tx } = await quote.json();\n\n// Execute via WalletPilot\nawait pilot.execute({\n  to: tx.to,\n  data: tx.data,\n  value: tx.value,\n  chainId: 1,\n});"
      },
      {
        "title": "send",
        "body": "Send tokens to an address.\n\nimport { encodeFunctionData, erc20Abi } from 'viem';\n\n// Encode ERC20 transfer\nconst data = encodeFunctionData({\n  abi: erc20Abi,\n  functionName: 'transfer',\n  args: ['0xRecipient...', 1000000n], // 1 USDC (6 decimals)\n});\n\nawait pilot.execute({\n  to: '0xUSDC_ADDRESS...',\n  data,\n  chainId: 1,\n});"
      },
      {
        "title": "history",
        "body": "Get transaction history.\n\nconst state = pilot.getState();\nconsole.log('Active permissions:', state.permissions);\n\n// Or via API\nconst response = await fetch('https://api.walletpilot.xyz/v1/tx/history/PERMISSION_ID', {\n  headers: { 'Authorization': 'Bearer wp_...' },\n});\nconst { data } = await response.json();\nconsole.log('Recent transactions:', data);"
      },
      {
        "title": "Permission Types",
        "body": "PermissionExampleDescriptionspend{ token: 'USDC', limit: '100', period: 'day' }Max token spend per periodchains[1, 137, 42161]Allowed chain IDscontracts['0x...']Allowed contract addressesexpiry'30d'Permission expiration"
      },
      {
        "title": "Supported Chains",
        "body": "ChainIDNameEthereum1mainnetPolygon137polygonArbitrum42161arbitrumOptimism10optimismBase8453base"
      },
      {
        "title": "Security",
        "body": "No Private Keys: Users keep full custody via MetaMask\nScoped Permissions: Agents can only act within granted limits\nTime-Limited: Permissions automatically expire\nRevocable: Users can revoke permissions anytime\nAuditable: All transactions logged and visible"
      },
      {
        "title": "API Reference",
        "body": "Base URL: https://api.walletpilot.xyz\n\nEndpointMethodDescription/v1/permissions/requestPOSTRequest new permission/v1/permissions/:idGETGet permission details/v1/tx/executePOSTExecute transaction/v1/tx/:hashGETGet transaction status"
      },
      {
        "title": "Example: DeFi Agent",
        "body": "import { WalletPilot, PermissionBuilder } from '@walletpilot/sdk';\n\nasync function defiAgent() {\n  const pilot = new WalletPilot({ apiKey: process.env.WALLETPILOT_KEY });\n\n  // Check if we have active permissions\n  const state = pilot.getState();\n  \n  if (!state.connected) {\n    // Request permission\n    const permission = new PermissionBuilder()\n      .spend('USDC', '500', 'day')\n      .chains([1, 42161])\n      .expiry('7d')\n      .description('DeFi trading agent')\n      .build();\n    \n    const { deepLink } = await pilot.requestPermission(permission);\n    console.log('Approve in MetaMask:', deepLink);\n    return;\n  }\n\n  // Execute trades\n  const swapData = await getSwapQuote('USDC', 'ETH', '100');\n  \n  await pilot.execute({\n    to: swapData.to,\n    data: swapData.data,\n    chainId: 1,\n  });\n  \n  console.log('Swap executed!');\n}"
      },
      {
        "title": "Links",
        "body": "Documentation\nGitHub\nAPI Reference"
      }
    ],
    "body": "WalletPilot-7715\n\nGive your AI agent crypto superpowers with MetaMask ERC-7715 permissions.\n\nOverview\n\nWalletPilot enables AI agents to execute on-chain transactions using MetaMask's ERC-7715 permission standard. Users grant scoped permissions (spend limits, chain restrictions) once, then agents can execute freely within those limits.\n\nKey Features:\n\nNo private keys shared - users keep their MetaMask\nConfigurable guardrails (spend limits, chain allowlists)\nMulti-chain support (Ethereum, Polygon, Arbitrum, Optimism, Base)\nBuilt on MetaMask's official Smart Accounts Kit\nSetup\nGet an API key at walletpilot.xyz\nInstall the SDK: npm install @walletpilot/sdk\nAvailable Actions\nconnect\n\nRequest wallet permissions from user.\n\nimport { WalletPilot, PermissionBuilder } from '@walletpilot/sdk';\n\nconst pilot = new WalletPilot({ apiKey: 'wp_...' });\n\nconst permission = new PermissionBuilder()\n  .spend('USDC', '100', 'day')   // Max $100 USDC per day\n  .spend('ETH', '0.1', 'day')    // Max 0.1 ETH per day\n  .chains([1, 137, 42161])       // Ethereum, Polygon, Arbitrum\n  .expiry('30d')                 // Valid for 30 days\n  .build();\n\nconst { deepLink } = await pilot.requestPermission(permission);\nconsole.log('User should open:', deepLink);\n\nexecute\n\nExecute a transaction using granted permissions.\n\nconst result = await pilot.execute({\n  to: '0x1234...',        // Target contract\n  data: '0xabcd...',      // Calldata (e.g., swap)\n  value: '0',             // ETH value (optional)\n  chainId: 1,             // Chain ID\n});\n\nconsole.log('Transaction hash:', result.hash);\n\nbalance\n\nCheck token balances (uses standard RPC, no permission needed).\n\nimport { createPublicClient, http } from 'viem';\nimport { mainnet } from 'viem/chains';\n\nconst client = createPublicClient({\n  chain: mainnet,\n  transport: http(),\n});\n\nconst balance = await client.getBalance({ address: '0x...' });\n\nswap\n\nExecute a token swap via DEX aggregator.\n\n// Get swap quote from 1inch, 0x, or similar\nconst quote = await fetch('https://api.1inch.io/v5.0/1/swap?...');\nconst { tx } = await quote.json();\n\n// Execute via WalletPilot\nawait pilot.execute({\n  to: tx.to,\n  data: tx.data,\n  value: tx.value,\n  chainId: 1,\n});\n\nsend\n\nSend tokens to an address.\n\nimport { encodeFunctionData, erc20Abi } from 'viem';\n\n// Encode ERC20 transfer\nconst data = encodeFunctionData({\n  abi: erc20Abi,\n  functionName: 'transfer',\n  args: ['0xRecipient...', 1000000n], // 1 USDC (6 decimals)\n});\n\nawait pilot.execute({\n  to: '0xUSDC_ADDRESS...',\n  data,\n  chainId: 1,\n});\n\nhistory\n\nGet transaction history.\n\nconst state = pilot.getState();\nconsole.log('Active permissions:', state.permissions);\n\n// Or via API\nconst response = await fetch('https://api.walletpilot.xyz/v1/tx/history/PERMISSION_ID', {\n  headers: { 'Authorization': 'Bearer wp_...' },\n});\nconst { data } = await response.json();\nconsole.log('Recent transactions:', data);\n\nPermission Types\nPermission\tExample\tDescription\nspend\t{ token: 'USDC', limit: '100', period: 'day' }\tMax token spend per period\nchains\t[1, 137, 42161]\tAllowed chain IDs\ncontracts\t['0x...']\tAllowed contract addresses\nexpiry\t'30d'\tPermission expiration\nSupported Chains\nChain\tID\tName\nEthereum\t1\tmainnet\nPolygon\t137\tpolygon\nArbitrum\t42161\tarbitrum\nOptimism\t10\toptimism\nBase\t8453\tbase\nSecurity\nNo Private Keys: Users keep full custody via MetaMask\nScoped Permissions: Agents can only act within granted limits\nTime-Limited: Permissions automatically expire\nRevocable: Users can revoke permissions anytime\nAuditable: All transactions logged and visible\nAPI Reference\n\nBase URL: https://api.walletpilot.xyz\n\nEndpoint\tMethod\tDescription\n/v1/permissions/request\tPOST\tRequest new permission\n/v1/permissions/:id\tGET\tGet permission details\n/v1/tx/execute\tPOST\tExecute transaction\n/v1/tx/:hash\tGET\tGet transaction status\nExample: DeFi Agent\nimport { WalletPilot, PermissionBuilder } from '@walletpilot/sdk';\n\nasync function defiAgent() {\n  const pilot = new WalletPilot({ apiKey: process.env.WALLETPILOT_KEY });\n\n  // Check if we have active permissions\n  const state = pilot.getState();\n  \n  if (!state.connected) {\n    // Request permission\n    const permission = new PermissionBuilder()\n      .spend('USDC', '500', 'day')\n      .chains([1, 42161])\n      .expiry('7d')\n      .description('DeFi trading agent')\n      .build();\n    \n    const { deepLink } = await pilot.requestPermission(permission);\n    console.log('Approve in MetaMask:', deepLink);\n    return;\n  }\n\n  // Execute trades\n  const swapData = await getSwapQuote('USDC', 'ETH', '100');\n  \n  await pilot.execute({\n    to: swapData.to,\n    data: swapData.data,\n    chainId: 1,\n  });\n  \n  console.log('Swap executed!');\n}\n\nLinks\nDocumentation\nGitHub\nAPI Reference"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/andreolf/walletpilot-7715",
    "publisherUrl": "https://clawhub.ai/andreolf/walletpilot-7715",
    "owner": "andreolf",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/walletpilot-7715",
    "downloadUrl": "https://openagent3.xyz/downloads/walletpilot-7715",
    "agentUrl": "https://openagent3.xyz/skills/walletpilot-7715/agent",
    "manifestUrl": "https://openagent3.xyz/skills/walletpilot-7715/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/walletpilot-7715/agent.md"
  }
}