{
  "schemaVersion": "1.0",
  "item": {
    "slug": "nft-skill",
    "name": "NFT Skill - Autonomous AI Artist Agent",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/Numba1ne/nft-skill",
    "canonicalUrl": "https://clawhub.ai/Numba1ne/nft-skill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/nft-skill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=nft-skill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      ".gitignore",
      "env-example.txt",
      "hardhat.config.ts",
      "jest.config.js",
      "LICENSE.txt",
      "package-lock.json"
    ],
    "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/nft-skill"
    },
    "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/nft-skill",
    "agentPageUrl": "https://openagent3.xyz/skills/nft-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/nft-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/nft-skill/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": "NFT Skill for OpenClaw",
        "body": "Allows an OpenClaw agent to autonomously generate art, mint NFTs, list on marketplace, monitor sales, evolve based on milestones, and post social updates."
      },
      {
        "title": "When to Use This Skill",
        "body": "User asks to generate AI art or procedural digital art\nUser wants to mint an NFT on Base\nUser wants to list an NFT for sale on the marketplace\nUser wants to monitor on-chain NFT sales\nUser wants to evolve art style after a sales milestone\nUser wants to tweet or announce a new NFT drop on X (Twitter)\nUser mentions \"NFT\", \"mint\", \"Base blockchain\", \"AI art\", \"digital art\", or \"marketplace listing\""
      },
      {
        "title": "Setup (First Run)",
        "body": "Before first use, ensure the project is built:\n\ncd {baseDir} && npm install && npm run build\n\nThe user must populate a .env file with their keys:\n\ncp {baseDir}/.env.example {baseDir}/.env\n\nRequired variables: BASE_RPC_URL, BASE_PRIVATE_KEY, NFT_CONTRACT_ADDRESS,\nMARKETPLACE_ADDRESS, PINATA_API_KEY, PINATA_SECRET, LLM_PROVIDER.\n\nTo deploy contracts (one-time setup):\n\ncd {baseDir} && npm run deploy:testnet   # Base Sepolia testnet\ncd {baseDir} && npm run deploy:mainnet   # Base mainnet\n\nContract addresses are automatically written to .env after deployment."
      },
      {
        "title": "Tools",
        "body": "All tools output JSON. The agent should look for the final line matching {\"status\":\"success\",...} or {\"status\":\"error\",...}."
      },
      {
        "title": "1. generate — Generate Art",
        "body": "Generate new art and upload to IPFS.\n\ncd {baseDir} && npm run cli -- generate --generation <number> --theme \"<description>\"\n\nParameters:\n\nFlagTypeRequiredDescription-g, --generationnumberyesGeneration number (determines evolution state)-t, --themestringyesArt theme description sent to LLM\n\nOutput:\n\n{\"status\": \"success\", \"result\": {\"imagePath\": \"...\", \"metadata\": {...}, \"metadataUri\": \"Qm...\"}}\n\nExample:\n\ncd {baseDir} && npm run cli -- generate --generation 1 --theme \"neon cyberpunk city\""
      },
      {
        "title": "2. mint — Mint NFT",
        "body": "Mint a new ERC721 token on Base with an IPFS metadata URI.\n\ncd {baseDir} && npm run cli -- mint --metadata-uri <uri>\n\nParameters:\n\nFlagTypeRequiredDescription-m, --metadata-uristringyesIPFS metadata URI (e.g. Qm... or ipfs://Qm...)\n\nOutput:\n\n{\"status\": \"success\", \"result\": {\"tokenId\": \"1\", \"txHash\": \"0x...\", \"blockNumber\": 12345, \"gasUsed\": \"80000\"}}\n\nExample:\n\ncd {baseDir} && npm run cli -- mint --metadata-uri QmXyz123abc"
      },
      {
        "title": "3. list — List NFT on Marketplace",
        "body": "List a minted NFT for sale on the marketplace.\n\ncd {baseDir} && npm run cli -- list --token-id <id> --price <eth>\n\nParameters:\n\nFlagTypeRequiredDescription-i, --token-idstringyesToken ID to list-p, --pricestringyesListing price in ETH (e.g. \"0.05\")\n\nOutput:\n\n{\"status\": \"success\", \"result\": {\"success\": true, \"price\": \"0.05\", \"txHash\": \"0x...\"}}\n\nExample:\n\ncd {baseDir} && npm run cli -- list --token-id 1 --price 0.05"
      },
      {
        "title": "4. monitor — Monitor Sales",
        "body": "Watch for sales events in real-time. Streams JSON to stdout until interrupted (Ctrl+C).\n\ncd {baseDir} && npm run cli -- monitor [--from-block <number>]\n\nParameters:\n\nFlagTypeRequiredDescription-f, --from-blocknumbernoReplay missed sales from this block before live monitoring\n\nOutput (per sale):\n\n{\"status\": \"sale\", \"result\": {\"buyer\": \"0x...\", \"tokenId\": \"1\", \"price\": \"0.05\", \"txHash\": \"0x...\", \"blockNumber\": 12345}}\n\nExample:\n\ncd {baseDir} && npm run cli -- monitor --from-block 12000000"
      },
      {
        "title": "5. evolve — Evolve Agent",
        "body": "Trigger the evolution logic when sales milestones are met.\n\ncd {baseDir} && npm run cli -- evolve --proceeds <eth> --generation <number> --trigger \"<reason>\"\n\nParameters:\n\nFlagTypeRequiredDescription-p, --proceedsstringyesTotal ETH proceeds earned so far-g, --generationnumberyesCurrent generation number--triggerstringyesHuman-readable reason for evolution\n\nOutput:\n\n{\"status\": \"success\", \"result\": {\"previousGeneration\": 1, \"newGeneration\": 2, \"improvements\": [...], \"newAbilities\": [...]}}\n\nExample:\n\ncd {baseDir} && npm run cli -- evolve --proceeds \"0.5\" --generation 1 --trigger \"Sold 3 NFTs\""
      },
      {
        "title": "6. tweet — Post to X",
        "body": "Post an update to X (Twitter).\n\ncd {baseDir} && npm run cli -- tweet --content \"<text>\"\n\nParameters:\n\nFlagTypeRequiredDescription-c, --contentstringyesTweet text (auto-truncated to 280 chars)\n\nOutput:\n\n{\"status\": \"success\", \"result\": \"tweet_id_string\"}\n\nExample:\n\ncd {baseDir} && npm run cli -- tweet --content \"New AI art drop incoming! #AIArt #Base\""
      },
      {
        "title": "Typical Workflow",
        "body": "A full autonomous cycle the agent should follow:\n\nGenerate art with a theme → receive metadata URI\nMint the NFT with that URI → receive token ID\nList the NFT on the marketplace at a price\nTweet about the new listing\nMonitor sales for purchase events\nEvolve when a sales milestone is reached\nRepeat from step 1 with the new generation number"
      },
      {
        "title": "Error Handling",
        "body": "If a command returns {\"status\":\"error\",...}, read the message field and report it to the user.\nCommon issues: missing .env variables, insufficient wallet balance, network RPC errors.\nFor wallet balance issues, suggest the user funds their Base wallet.\nFor missing env vars, remind the user to populate {baseDir}/.env."
      },
      {
        "title": "Environment Variables",
        "body": "VariableRequiredDescriptionBASE_RPC_URLyesBase network RPC endpointBASE_PRIVATE_KEYyes*Wallet private key (or use PRIVATE_KEY_FILE)PRIVATE_KEY_FILEnoPath to file containing the private key (safer alternative to env var)NFT_CONTRACT_ADDRESSyesDeployed NFTArt contract addressMARKETPLACE_ADDRESSyesDeployed NFTMarketplace contract addressPINATA_API_KEYyesPinata IPFS API keyPINATA_SECRETyesPinata IPFS secretLLM_PROVIDERyesopenrouter, groq, or ollamaLLM_MODELnoModel ID overrideOPENROUTER_API_KEYif LLM_PROVIDER=openrouterOpenRouter API keyGROQ_API_KEYif LLM_PROVIDER=groqGroq API keyOLLAMA_BASE_URLif LLM_PROVIDER=ollamaOllama base URLIMAGE_PROVIDERnostability, dalle, or procedural (default)IMAGE_MODELnoImage model overrideSTABILITY_API_KEYif IMAGE_PROVIDER=stabilityStability AI keyOPENAI_API_KEYif IMAGE_PROVIDER=dalleOpenAI key for DALL-EX_CONSUMER_KEYfor tweetX API consumer keyX_CONSUMER_SECRETfor tweetX API consumer secretX_ACCESS_TOKENfor tweetX access tokenX_ACCESS_SECRETfor tweetX access token secretBASESCAN_API_KEYnoFor contract verification on Basescan"
      }
    ],
    "body": "NFT Skill for OpenClaw\n\nAllows an OpenClaw agent to autonomously generate art, mint NFTs, list on marketplace, monitor sales, evolve based on milestones, and post social updates.\n\nWhen to Use This Skill\nUser asks to generate AI art or procedural digital art\nUser wants to mint an NFT on Base\nUser wants to list an NFT for sale on the marketplace\nUser wants to monitor on-chain NFT sales\nUser wants to evolve art style after a sales milestone\nUser wants to tweet or announce a new NFT drop on X (Twitter)\nUser mentions \"NFT\", \"mint\", \"Base blockchain\", \"AI art\", \"digital art\", or \"marketplace listing\"\nSetup (First Run)\n\nBefore first use, ensure the project is built:\n\ncd {baseDir} && npm install && npm run build\n\n\nThe user must populate a .env file with their keys:\n\ncp {baseDir}/.env.example {baseDir}/.env\n\n\nRequired variables: BASE_RPC_URL, BASE_PRIVATE_KEY, NFT_CONTRACT_ADDRESS, MARKETPLACE_ADDRESS, PINATA_API_KEY, PINATA_SECRET, LLM_PROVIDER.\n\nTo deploy contracts (one-time setup):\n\ncd {baseDir} && npm run deploy:testnet   # Base Sepolia testnet\ncd {baseDir} && npm run deploy:mainnet   # Base mainnet\n\n\nContract addresses are automatically written to .env after deployment.\n\nTools\n\nAll tools output JSON. The agent should look for the final line matching {\"status\":\"success\",...} or {\"status\":\"error\",...}.\n\n1. generate — Generate Art\n\nGenerate new art and upload to IPFS.\n\ncd {baseDir} && npm run cli -- generate --generation <number> --theme \"<description>\"\n\n\nParameters:\n\nFlag\tType\tRequired\tDescription\n-g, --generation\tnumber\tyes\tGeneration number (determines evolution state)\n-t, --theme\tstring\tyes\tArt theme description sent to LLM\n\nOutput:\n\n{\"status\": \"success\", \"result\": {\"imagePath\": \"...\", \"metadata\": {...}, \"metadataUri\": \"Qm...\"}}\n\n\nExample:\n\ncd {baseDir} && npm run cli -- generate --generation 1 --theme \"neon cyberpunk city\"\n\n2. mint — Mint NFT\n\nMint a new ERC721 token on Base with an IPFS metadata URI.\n\ncd {baseDir} && npm run cli -- mint --metadata-uri <uri>\n\n\nParameters:\n\nFlag\tType\tRequired\tDescription\n-m, --metadata-uri\tstring\tyes\tIPFS metadata URI (e.g. Qm... or ipfs://Qm...)\n\nOutput:\n\n{\"status\": \"success\", \"result\": {\"tokenId\": \"1\", \"txHash\": \"0x...\", \"blockNumber\": 12345, \"gasUsed\": \"80000\"}}\n\n\nExample:\n\ncd {baseDir} && npm run cli -- mint --metadata-uri QmXyz123abc\n\n3. list — List NFT on Marketplace\n\nList a minted NFT for sale on the marketplace.\n\ncd {baseDir} && npm run cli -- list --token-id <id> --price <eth>\n\n\nParameters:\n\nFlag\tType\tRequired\tDescription\n-i, --token-id\tstring\tyes\tToken ID to list\n-p, --price\tstring\tyes\tListing price in ETH (e.g. \"0.05\")\n\nOutput:\n\n{\"status\": \"success\", \"result\": {\"success\": true, \"price\": \"0.05\", \"txHash\": \"0x...\"}}\n\n\nExample:\n\ncd {baseDir} && npm run cli -- list --token-id 1 --price 0.05\n\n4. monitor — Monitor Sales\n\nWatch for sales events in real-time. Streams JSON to stdout until interrupted (Ctrl+C).\n\ncd {baseDir} && npm run cli -- monitor [--from-block <number>]\n\n\nParameters:\n\nFlag\tType\tRequired\tDescription\n-f, --from-block\tnumber\tno\tReplay missed sales from this block before live monitoring\n\nOutput (per sale):\n\n{\"status\": \"sale\", \"result\": {\"buyer\": \"0x...\", \"tokenId\": \"1\", \"price\": \"0.05\", \"txHash\": \"0x...\", \"blockNumber\": 12345}}\n\n\nExample:\n\ncd {baseDir} && npm run cli -- monitor --from-block 12000000\n\n5. evolve — Evolve Agent\n\nTrigger the evolution logic when sales milestones are met.\n\ncd {baseDir} && npm run cli -- evolve --proceeds <eth> --generation <number> --trigger \"<reason>\"\n\n\nParameters:\n\nFlag\tType\tRequired\tDescription\n-p, --proceeds\tstring\tyes\tTotal ETH proceeds earned so far\n-g, --generation\tnumber\tyes\tCurrent generation number\n--trigger\tstring\tyes\tHuman-readable reason for evolution\n\nOutput:\n\n{\"status\": \"success\", \"result\": {\"previousGeneration\": 1, \"newGeneration\": 2, \"improvements\": [...], \"newAbilities\": [...]}}\n\n\nExample:\n\ncd {baseDir} && npm run cli -- evolve --proceeds \"0.5\" --generation 1 --trigger \"Sold 3 NFTs\"\n\n6. tweet — Post to X\n\nPost an update to X (Twitter).\n\ncd {baseDir} && npm run cli -- tweet --content \"<text>\"\n\n\nParameters:\n\nFlag\tType\tRequired\tDescription\n-c, --content\tstring\tyes\tTweet text (auto-truncated to 280 chars)\n\nOutput:\n\n{\"status\": \"success\", \"result\": \"tweet_id_string\"}\n\n\nExample:\n\ncd {baseDir} && npm run cli -- tweet --content \"New AI art drop incoming! #AIArt #Base\"\n\nTypical Workflow\n\nA full autonomous cycle the agent should follow:\n\nGenerate art with a theme → receive metadata URI\nMint the NFT with that URI → receive token ID\nList the NFT on the marketplace at a price\nTweet about the new listing\nMonitor sales for purchase events\nEvolve when a sales milestone is reached\nRepeat from step 1 with the new generation number\nError Handling\nIf a command returns {\"status\":\"error\",...}, read the message field and report it to the user.\nCommon issues: missing .env variables, insufficient wallet balance, network RPC errors.\nFor wallet balance issues, suggest the user funds their Base wallet.\nFor missing env vars, remind the user to populate {baseDir}/.env.\nEnvironment Variables\nVariable\tRequired\tDescription\nBASE_RPC_URL\tyes\tBase network RPC endpoint\nBASE_PRIVATE_KEY\tyes*\tWallet private key (or use PRIVATE_KEY_FILE)\nPRIVATE_KEY_FILE\tno\tPath to file containing the private key (safer alternative to env var)\nNFT_CONTRACT_ADDRESS\tyes\tDeployed NFTArt contract address\nMARKETPLACE_ADDRESS\tyes\tDeployed NFTMarketplace contract address\nPINATA_API_KEY\tyes\tPinata IPFS API key\nPINATA_SECRET\tyes\tPinata IPFS secret\nLLM_PROVIDER\tyes\topenrouter, groq, or ollama\nLLM_MODEL\tno\tModel ID override\nOPENROUTER_API_KEY\tif LLM_PROVIDER=openrouter\tOpenRouter API key\nGROQ_API_KEY\tif LLM_PROVIDER=groq\tGroq API key\nOLLAMA_BASE_URL\tif LLM_PROVIDER=ollama\tOllama base URL\nIMAGE_PROVIDER\tno\tstability, dalle, or procedural (default)\nIMAGE_MODEL\tno\tImage model override\nSTABILITY_API_KEY\tif IMAGE_PROVIDER=stability\tStability AI key\nOPENAI_API_KEY\tif IMAGE_PROVIDER=dalle\tOpenAI key for DALL-E\nX_CONSUMER_KEY\tfor tweet\tX API consumer key\nX_CONSUMER_SECRET\tfor tweet\tX API consumer secret\nX_ACCESS_TOKEN\tfor tweet\tX access token\nX_ACCESS_SECRET\tfor tweet\tX access token secret\nBASESCAN_API_KEY\tno\tFor contract verification on Basescan"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/Numba1ne/nft-skill",
    "publisherUrl": "https://clawhub.ai/Numba1ne/nft-skill",
    "owner": "Numba1ne",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/nft-skill",
    "downloadUrl": "https://openagent3.xyz/downloads/nft-skill",
    "agentUrl": "https://openagent3.xyz/skills/nft-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/nft-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/nft-skill/agent.md"
  }
}