{
  "schemaVersion": "1.0",
  "item": {
    "slug": "coinfello",
    "name": "CoinFello",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/BrettCleary/coinfello",
    "canonicalUrl": "https://clawhub.ai/BrettCleary/coinfello",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/coinfello",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=coinfello",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/REFERENCE.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-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.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/coinfello"
    },
    "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/coinfello",
    "agentPageUrl": "https://openagent3.xyz/skills/coinfello/agent",
    "manifestUrl": "https://openagent3.xyz/skills/coinfello/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/coinfello/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": "CoinFello CLI Skill",
        "body": "Use the npx @coinfello/agent-cli@latest CLI to interact with CoinFello. The CLI handles smart account creation, SIWE authentication, delegation management, prompt-based transactions, and transaction status checks."
      },
      {
        "title": "Prerequisites",
        "body": "Node.js 20 or later (npx is included with Node.js)\n\nThe CLI is available via npx @coinfello/agent-cli@latest. No manual build step is required."
      },
      {
        "title": "Environment Variables",
        "body": "VariableRequiredDefaultDescriptionCOINFELLO_BASE_URLNohttps://app.coinfello.com/Base URL for the CoinFello API"
      },
      {
        "title": "Security Notice",
        "body": "This skill performs the following sensitive operations:\n\nKey generation and storage: By default, create_account generates a hardware-backed P256 key in the macOS Secure Enclave (or TPM 2.0 where available). The private key never leaves the hardware and cannot be exported — only public key coordinates and a key tag are saved to ~/.clawdbot/skills/coinfello/config.json. If hardware key support is not available, the CLI warns and falls back to a software private key. You can also explicitly opt into a plaintext software key by passing --use-unsafe-private-key, which stores a raw private key in the config file — this is intended only for development and testing.\nSigner daemon: Running signer-daemon start authenticates once via Touch ID / password and caches the authorization. All subsequent signing operations reuse this cached context, eliminating repeated auth prompts. The daemon communicates over a user-scoped Unix domain socket with restricted permissions (0600). If the daemon is not running, signing operations fall back to direct execution (prompting Touch ID each time).\nSession token storage: Running sign_in stores a SIWE session token in the same config file.\nDelegation signing: Running send_prompt may automatically create and sign blockchain delegations based on server-requested scopes, then submit them to the CoinFello API.\n\nUsers should ensure they trust the CoinFello API endpoint configured via COINFELLO_BASE_URL before running delegation flows."
      },
      {
        "title": "Quick Start",
        "body": "# 1. Start the signing daemon (optional, but avoids repeated Touch ID prompts)\nnpx @coinfello/agent-cli@latest signer-daemon start\n\n# 2. Create a smart account (uses Secure Enclave by default)\nnpx @coinfello/agent-cli@latest create_account\n\n# 3. Sign in to CoinFello with your smart account (SIWE)\nnpx @coinfello/agent-cli@latest sign_in\n\n# 4. Send a natural language prompt — the server will request a delegation if needed\nnpx @coinfello/agent-cli@latest send_prompt \"send 5 USDC to 0xRecipient...\""
      },
      {
        "title": "create_account",
        "body": "Creates a MetaMask Hybrid smart account. By default, the signing key is generated in the macOS Secure Enclave (hardware-backed, non-exportable). If Secure Enclave is unavailable, the CLI warns and falls back to a software key. Pass --use-unsafe-private-key to explicitly use a plaintext software key (development/testing only).\n\nnpx @coinfello/agent-cli@latest create_account [--use-unsafe-private-key]\n\nDefault (Secure Enclave): Generates a P256 key in hardware; saves key_tag, public_key_x, public_key_y, key_id, and smart_account_address to ~/.clawdbot/skills/coinfello/config.json. The private key never leaves the Secure Enclave.\n--use-unsafe-private-key: Generates a random secp256k1 private key and stores it in plaintext in the config file. Use only for development and testing.\nMust be run before send_prompt"
      },
      {
        "title": "get_account",
        "body": "Displays the current smart account address from local config.\n\nnpx @coinfello/agent-cli@latest get_account\n\nPrints the stored smart_account_address\nExits with an error if no account has been created yet"
      },
      {
        "title": "sign_in",
        "body": "Authenticates with CoinFello using Sign-In with Ethereum (SIWE) and your smart account. Saves the session token to local config.\n\nnpx @coinfello/agent-cli@latest sign_in\n\nSigns in using the private key stored in config\nSaves the session token to ~/.clawdbot/skills/coinfello/config.json\nThe session token is loaded automatically for subsequent send_prompt calls\nMust be run after create_account and before send_prompt for authenticated flows"
      },
      {
        "title": "set_delegation",
        "body": "Stores a signed parent delegation (JSON) in local config.\n\nnpx @coinfello/agent-cli@latest set_delegation '<delegation-json>'\n\n<delegation-json> — A JSON string representing a Delegation object from MetaMask Smart Accounts Kit"
      },
      {
        "title": "new_chat",
        "body": "Clears the saved chat session ID from local config so the next send_prompt starts a fresh conversation.\n\nnpx @coinfello/agent-cli@latest new_chat\n\nRemoves chat_id from ~/.clawdbot/skills/coinfello/config.json\nUse this when you want to reset conversation context (for example, after context-window errors)"
      },
      {
        "title": "signer-daemon",
        "body": "Manages the Secure Enclave signing daemon. Starting the daemon authenticates once via Touch ID / password and caches the authorization, so subsequent signing operations (account creation, sign-in, delegation signing) do not prompt again.\n\nnpx @coinfello/agent-cli@latest signer-daemon start    # Start daemon (one-time auth)\nnpx @coinfello/agent-cli@latest signer-daemon status   # Check if daemon is running\nnpx @coinfello/agent-cli@latest signer-daemon stop     # Stop the daemon\n\nIf the daemon is not running, all Secure Enclave operations fall back to direct execution (prompting Touch ID each time)\nThe daemon is optional — all commands work without it"
      },
      {
        "title": "send_prompt",
        "body": "Sends a natural language prompt to CoinFello. If the server requires a delegation to execute the action, the CLI creates and signs a subdelegation automatically based on the server's requested scope and chain.\n\nnpx @coinfello/agent-cli@latest send_prompt \"<prompt>\"\n\nNote that if you receive\nFailed to send prompt: Conversation request failed (400): {\"error\":\"Your input exceeds the context window of this model. Please adjust your input or start a new chat and try again.\"}\nthen you should call npx @coinfello/agent-cli@latest new_chat to start a new chat with a new context window.\n\nWhat happens internally:\n\nFetches available agents from /api/v1/automation/coinfello-agents and sends the prompt to CoinFello's conversation endpoint\nIf the server returns a read-only response (no clientToolCalls and no txn_id) → prints the response text and exits\nIf the server returns a txn_id directly with no tool calls → prints it and exits\nIf the server sends an ask_for_delegation client tool call with a chainId and scope:\n\nFetches CoinFello's delegate address\nRebuilds the smart account using the chain ID from the tool call\nParses the server-provided scope (supports ERC-20, native token, ERC-721, and function call scopes)\nCreates and signs a subdelegation (wraps with ERC-6492 signature if the smart account is not yet deployed on-chain)\nSends the signed delegation back as a clientToolCallResponse along with the chatId and callId from the initial response\nReturns a txn_id for tracking"
      },
      {
        "title": "Basic: Send a Prompt (Server-Driven Delegation)",
        "body": "# Start the signing daemon (optional, reduces Touch ID prompts)\nnpx @coinfello/agent-cli@latest signer-daemon start\n\n# Create account if not already done (uses Secure Enclave by default)\nnpx @coinfello/agent-cli@latest create_account\n\n# Sign in (required for delegation flows)\nnpx @coinfello/agent-cli@latest sign_in\n\n# Send a natural language prompt — delegation is handled automatically\nnpx @coinfello/agent-cli@latest send_prompt \"send 5 USDC to 0xRecipient...\""
      },
      {
        "title": "Read-Only Prompt",
        "body": "Some prompts don't require a transaction. The CLI detects this automatically and just prints the response.\n\nnpx @coinfello/agent-cli@latest send_prompt \"what is the chain ID for Base?\""
      },
      {
        "title": "Gas Cost Estimates",
        "body": "Actual on-chain gas costs vary by network. Do not assume mainnet Ethereum gas prices for L2 chains.\n\nNetworkSwap / Transfer Gas CostBase$0.0003 – $0.0006\n\nThese are approximate ranges under normal network conditions. L2s like Base are significantly cheaper than Ethereum mainnet."
      },
      {
        "title": "Edge Cases",
        "body": "No smart account: Run create_account before send_prompt. The CLI checks for a saved private key and address in config.\nNot signed in: Run sign_in before send_prompt if the server requires authentication.\nInvalid chain name: The CLI throws an error listing valid viem chain names.\nRead-only response: If the server returns a text response with no transaction, the CLI prints it and exits without creating a delegation."
      },
      {
        "title": "Reference",
        "body": "See references/REFERENCE.md for the full config schema, supported chains, API details, scope types, and troubleshooting."
      }
    ],
    "body": "CoinFello CLI Skill\n\nUse the npx @coinfello/agent-cli@latest CLI to interact with CoinFello. The CLI handles smart account creation, SIWE authentication, delegation management, prompt-based transactions, and transaction status checks.\n\nPrerequisites\nNode.js 20 or later (npx is included with Node.js)\n\nThe CLI is available via npx @coinfello/agent-cli@latest. No manual build step is required.\n\nEnvironment Variables\nVariable\tRequired\tDefault\tDescription\nCOINFELLO_BASE_URL\tNo\thttps://app.coinfello.com/\tBase URL for the CoinFello API\nSecurity Notice\n\nThis skill performs the following sensitive operations:\n\nKey generation and storage: By default, create_account generates a hardware-backed P256 key in the macOS Secure Enclave (or TPM 2.0 where available). The private key never leaves the hardware and cannot be exported — only public key coordinates and a key tag are saved to ~/.clawdbot/skills/coinfello/config.json. If hardware key support is not available, the CLI warns and falls back to a software private key. You can also explicitly opt into a plaintext software key by passing --use-unsafe-private-key, which stores a raw private key in the config file — this is intended only for development and testing.\nSigner daemon: Running signer-daemon start authenticates once via Touch ID / password and caches the authorization. All subsequent signing operations reuse this cached context, eliminating repeated auth prompts. The daemon communicates over a user-scoped Unix domain socket with restricted permissions (0600). If the daemon is not running, signing operations fall back to direct execution (prompting Touch ID each time).\nSession token storage: Running sign_in stores a SIWE session token in the same config file.\nDelegation signing: Running send_prompt may automatically create and sign blockchain delegations based on server-requested scopes, then submit them to the CoinFello API.\n\nUsers should ensure they trust the CoinFello API endpoint configured via COINFELLO_BASE_URL before running delegation flows.\n\nQuick Start\n# 1. Start the signing daemon (optional, but avoids repeated Touch ID prompts)\nnpx @coinfello/agent-cli@latest signer-daemon start\n\n# 2. Create a smart account (uses Secure Enclave by default)\nnpx @coinfello/agent-cli@latest create_account\n\n# 3. Sign in to CoinFello with your smart account (SIWE)\nnpx @coinfello/agent-cli@latest sign_in\n\n# 4. Send a natural language prompt — the server will request a delegation if needed\nnpx @coinfello/agent-cli@latest send_prompt \"send 5 USDC to 0xRecipient...\"\n\nCommands\ncreate_account\n\nCreates a MetaMask Hybrid smart account. By default, the signing key is generated in the macOS Secure Enclave (hardware-backed, non-exportable). If Secure Enclave is unavailable, the CLI warns and falls back to a software key. Pass --use-unsafe-private-key to explicitly use a plaintext software key (development/testing only).\n\nnpx @coinfello/agent-cli@latest create_account [--use-unsafe-private-key]\n\nDefault (Secure Enclave): Generates a P256 key in hardware; saves key_tag, public_key_x, public_key_y, key_id, and smart_account_address to ~/.clawdbot/skills/coinfello/config.json. The private key never leaves the Secure Enclave.\n--use-unsafe-private-key: Generates a random secp256k1 private key and stores it in plaintext in the config file. Use only for development and testing.\nMust be run before send_prompt\nget_account\n\nDisplays the current smart account address from local config.\n\nnpx @coinfello/agent-cli@latest get_account\n\nPrints the stored smart_account_address\nExits with an error if no account has been created yet\nsign_in\n\nAuthenticates with CoinFello using Sign-In with Ethereum (SIWE) and your smart account. Saves the session token to local config.\n\nnpx @coinfello/agent-cli@latest sign_in\n\nSigns in using the private key stored in config\nSaves the session token to ~/.clawdbot/skills/coinfello/config.json\nThe session token is loaded automatically for subsequent send_prompt calls\nMust be run after create_account and before send_prompt for authenticated flows\nset_delegation\n\nStores a signed parent delegation (JSON) in local config.\n\nnpx @coinfello/agent-cli@latest set_delegation '<delegation-json>'\n\n<delegation-json> — A JSON string representing a Delegation object from MetaMask Smart Accounts Kit\nnew_chat\n\nClears the saved chat session ID from local config so the next send_prompt starts a fresh conversation.\n\nnpx @coinfello/agent-cli@latest new_chat\n\nRemoves chat_id from ~/.clawdbot/skills/coinfello/config.json\nUse this when you want to reset conversation context (for example, after context-window errors)\nsigner-daemon\n\nManages the Secure Enclave signing daemon. Starting the daemon authenticates once via Touch ID / password and caches the authorization, so subsequent signing operations (account creation, sign-in, delegation signing) do not prompt again.\n\nnpx @coinfello/agent-cli@latest signer-daemon start    # Start daemon (one-time auth)\nnpx @coinfello/agent-cli@latest signer-daemon status   # Check if daemon is running\nnpx @coinfello/agent-cli@latest signer-daemon stop     # Stop the daemon\n\nIf the daemon is not running, all Secure Enclave operations fall back to direct execution (prompting Touch ID each time)\nThe daemon is optional — all commands work without it\nsend_prompt\n\nSends a natural language prompt to CoinFello. If the server requires a delegation to execute the action, the CLI creates and signs a subdelegation automatically based on the server's requested scope and chain.\n\nnpx @coinfello/agent-cli@latest send_prompt \"<prompt>\"\n\n\nNote that if you receive Failed to send prompt: Conversation request failed (400): {\"error\":\"Your input exceeds the context window of this model. Please adjust your input or start a new chat and try again.\"} then you should call npx @coinfello/agent-cli@latest new_chat to start a new chat with a new context window.\n\nWhat happens internally:\n\nFetches available agents from /api/v1/automation/coinfello-agents and sends the prompt to CoinFello's conversation endpoint\nIf the server returns a read-only response (no clientToolCalls and no txn_id) → prints the response text and exits\nIf the server returns a txn_id directly with no tool calls → prints it and exits\nIf the server sends an ask_for_delegation client tool call with a chainId and scope:\nFetches CoinFello's delegate address\nRebuilds the smart account using the chain ID from the tool call\nParses the server-provided scope (supports ERC-20, native token, ERC-721, and function call scopes)\nCreates and signs a subdelegation (wraps with ERC-6492 signature if the smart account is not yet deployed on-chain)\nSends the signed delegation back as a clientToolCallResponse along with the chatId and callId from the initial response\nReturns a txn_id for tracking\nCommon Workflows\nBasic: Send a Prompt (Server-Driven Delegation)\n# Start the signing daemon (optional, reduces Touch ID prompts)\nnpx @coinfello/agent-cli@latest signer-daemon start\n\n# Create account if not already done (uses Secure Enclave by default)\nnpx @coinfello/agent-cli@latest create_account\n\n# Sign in (required for delegation flows)\nnpx @coinfello/agent-cli@latest sign_in\n\n# Send a natural language prompt — delegation is handled automatically\nnpx @coinfello/agent-cli@latest send_prompt \"send 5 USDC to 0xRecipient...\"\n\nRead-Only Prompt\n\nSome prompts don't require a transaction. The CLI detects this automatically and just prints the response.\n\nnpx @coinfello/agent-cli@latest send_prompt \"what is the chain ID for Base?\"\n\nGas Cost Estimates\n\nActual on-chain gas costs vary by network. Do not assume mainnet Ethereum gas prices for L2 chains.\n\nNetwork\tSwap / Transfer Gas Cost\nBase\t$0.0003 – $0.0006\n\nThese are approximate ranges under normal network conditions. L2s like Base are significantly cheaper than Ethereum mainnet.\n\nEdge Cases\nNo smart account: Run create_account before send_prompt. The CLI checks for a saved private key and address in config.\nNot signed in: Run sign_in before send_prompt if the server requires authentication.\nInvalid chain name: The CLI throws an error listing valid viem chain names.\nRead-only response: If the server returns a text response with no transaction, the CLI prints it and exits without creating a delegation.\nReference\n\nSee references/REFERENCE.md for the full config schema, supported chains, API details, scope types, and troubleshooting."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/BrettCleary/coinfello",
    "publisherUrl": "https://clawhub.ai/BrettCleary/coinfello",
    "owner": "BrettCleary",
    "version": "0.2.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/coinfello",
    "downloadUrl": "https://openagent3.xyz/downloads/coinfello",
    "agentUrl": "https://openagent3.xyz/skills/coinfello/agent",
    "manifestUrl": "https://openagent3.xyz/skills/coinfello/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/coinfello/agent.md"
  }
}