{
  "schemaVersion": "1.0",
  "item": {
    "slug": "farcaster-skill",
    "name": "Farcaster Skill",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/openclaw-consensus-bot/farcaster-skill",
    "canonicalUrl": "https://clawhub.ai/openclaw-consensus-bot/farcaster-skill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/farcaster-skill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=farcaster-skill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "package.json",
      "references/neynar_endpoints.md",
      "scripts/fc_cast.sh",
      "scripts/fc_channels.sh"
    ],
    "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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "slug": "farcaster-skill",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-03T04:18:18.111Z",
      "expiresAt": "2026-05-10T04:18:18.111Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=farcaster-skill",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=farcaster-skill",
        "contentDisposition": "attachment; filename=\"farcaster-skill-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "farcaster-skill"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/farcaster-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/farcaster-skill",
    "agentPageUrl": "https://openagent3.xyz/skills/farcaster-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/farcaster-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/farcaster-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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Farcaster Skill (Neynar v2)",
        "body": "All scripts use the Neynar v2 REST API. Requires curl and jq."
      },
      {
        "title": "Setup",
        "body": "Set these env vars (or pass --api-key / --signer flags):\n\nexport NEYNAR_API_KEY=\"your-api-key\"\nexport NEYNAR_SIGNER_UUID=\"your-signer-uuid\"   # required for write ops\n\nAlternatively, put credentials in a JSON file and source them:\n\neval $(jq -r '\"export NEYNAR_API_KEY=\\(.apiKey)\\nexport NEYNAR_SIGNER_UUID=\\(.signerUuid)\"' /path/to/neynar.json)"
      },
      {
        "title": "fc_cast.sh — Post a Cast",
        "body": "Post text, with optional embeds, channel, or reply-to.\n\n# Simple text cast\nscripts/fc_cast.sh --text \"Hello Farcaster!\"\n\n# Cast with image/video embed\nscripts/fc_cast.sh --text \"Check this out\" --embed \"https://example.com/image.png\"\n\n# Cast with two embeds (max 2)\nscripts/fc_cast.sh --text \"Links\" --embed \"https://a.com\" --embed \"https://b.com\"\n\n# Post to a channel\nscripts/fc_cast.sh --text \"gm\" --channel \"base\"\n\n# Reply to a cast\nscripts/fc_cast.sh --text \"Great point!\" --parent \"0xabcdef1234...\"\n\n# Quote-cast (embed another cast)\nscripts/fc_cast.sh --text \"This 👆\" --embed-cast \"0xabcdef1234...\" --embed-cast-fid 12345\n\nOutput: JSON {success, hash}."
      },
      {
        "title": "fc_feed.sh — Read Feeds",
        "body": "# User's casts by FID\nscripts/fc_feed.sh --fid 3 --limit 10\n\n# User's casts by username\nscripts/fc_feed.sh --username \"vitalik\" --limit 5\n\n# Channel feed\nscripts/fc_feed.sh --channel \"base\" --limit 10\n\n# Following feed (casts from people the signer follows)\nscripts/fc_feed.sh --following --fid 3 --limit 10\n\n# Cast replies/thread\nscripts/fc_feed.sh --thread \"0xabcdef...\"\n\n# Pagination with cursor\nscripts/fc_feed.sh --fid 3 --cursor \"eyJwYWdlIjoxfQ==\"\n\nOutput: JSON array of casts with {hash, author, text, timestamp, embeds, reactions, replies}."
      },
      {
        "title": "fc_user.sh — User Lookup",
        "body": "# By username\nscripts/fc_user.sh --username \"dwr\"\n\n# By FID\nscripts/fc_user.sh --fid 3\n\n# By Ethereum address (verified)\nscripts/fc_user.sh --address \"0x1234...\"\n\n# Bulk by FIDs\nscripts/fc_user.sh --fids \"3,194,6131\"\n\nOutput: JSON user object(s) with {fid, username, display_name, bio, follower_count, following_count, verified_addresses}."
      },
      {
        "title": "fc_search.sh — Search Casts",
        "body": "# Search by keyword\nscripts/fc_search.sh --query \"base chain\"\n\n# Search with author filter\nscripts/fc_search.sh --query \"ethereum\" --author-fid 3\n\n# Search in channel\nscripts/fc_search.sh --query \"gm\" --channel \"base\"\n\n# Limit results\nscripts/fc_search.sh --query \"nft\" --limit 5\n\nOutput: JSON array of matching casts."
      },
      {
        "title": "fc_react.sh — Like / Recast",
        "body": "# Like a cast\nscripts/fc_react.sh --like \"0xabcdef...\"\n\n# Unlike\nscripts/fc_react.sh --like \"0xabcdef...\" --undo\n\n# Recast\nscripts/fc_react.sh --recast \"0xabcdef...\"\n\n# Undo recast\nscripts/fc_react.sh --recast \"0xabcdef...\" --undo"
      },
      {
        "title": "fc_delete.sh — Delete a Cast",
        "body": "scripts/fc_delete.sh --hash \"0xabcdef...\""
      },
      {
        "title": "fc_channels.sh — List and Search Channels",
        "body": "# Search channels by keyword\nscripts/fc_channels.sh --search \"defi\"\n\n# Get channel details by ID\nscripts/fc_channels.sh --id \"base\"\n\n# List trending channels\nscripts/fc_channels.sh --trending --limit 10"
      },
      {
        "title": "Thread a multi-cast announcement",
        "body": "HASH1=$(scripts/fc_cast.sh --text \"Thread 🧵 1/3: Big news!\" --channel \"base\" | jq -r .hash)\nHASH2=$(scripts/fc_cast.sh --text \"2/3: Details here...\" --parent \"$HASH1\" | jq -r .hash)\nscripts/fc_cast.sh --text \"3/3: Link below\" --parent \"$HASH2\" --embed \"https://example.com\""
      },
      {
        "title": "Monitor mentions (poll loop)",
        "body": "while true; do\n  scripts/fc_search.sh --query \"@yourusername\" --limit 5\n  sleep 300\ndone"
      },
      {
        "title": "Post with media (upload first, then embed)",
        "body": "# Upload to catbox/litterbox first\nURL=$(curl -sS -F \"reqtype=fileupload\" -F \"time=72h\" \\\n  -F \"fileToUpload=@/path/to/image.png\" \\\n  https://litterbox.catbox.moe/resources/internals/api.php)\n\n# Then embed the URL\nscripts/fc_cast.sh --text \"Check this out!\" --embed \"$URL\""
      },
      {
        "title": "Free vs Paid Tier",
        "body": "Not all endpoints are available on Neynar's free plan.\n\nFeatureScriptFree?Post castfc_cast.sh✅User casts feedfc_feed.sh --fid✅User lookup (username/FID/address)fc_user.sh✅Like / recastfc_react.sh✅Following feedfc_feed.sh --following✅Channel feedfc_feed.sh --channel❌ PaidCast searchfc_search.sh❌ PaidChannel search/details/trendingfc_channels.sh❌ PaidDelete castfc_delete.sh❌ PaidThread/conversationfc_feed.sh --thread✅\n\nScripts that hit paid endpoints will exit non-zero with a clear 402 PaymentRequired error."
      },
      {
        "title": "Error Handling",
        "body": "All scripts exit 0 on success, non-zero on failure. Errors print to stderr as JSON:\n\n{\"error\": \"message\", \"status\": 403}\n\nCommon errors:\n\n401 — Invalid API key\n402 — Feature requires paid Neynar plan\n403 — Signer not approved or not paired with API key\n404 — Cast/user/channel not found\n429 — Rate limited (Neynar free tier: 300 req/min)"
      },
      {
        "title": "API Reference",
        "body": "See references/neynar_endpoints.md for the full endpoint list and parameter docs."
      }
    ],
    "body": "Farcaster Skill (Neynar v2)\n\nAll scripts use the Neynar v2 REST API. Requires curl and jq.\n\nSetup\n\nSet these env vars (or pass --api-key / --signer flags):\n\nexport NEYNAR_API_KEY=\"your-api-key\"\nexport NEYNAR_SIGNER_UUID=\"your-signer-uuid\"   # required for write ops\n\n\nAlternatively, put credentials in a JSON file and source them:\n\neval $(jq -r '\"export NEYNAR_API_KEY=\\(.apiKey)\\nexport NEYNAR_SIGNER_UUID=\\(.signerUuid)\"' /path/to/neynar.json)\n\nScripts\nfc_cast.sh — Post a Cast\n\nPost text, with optional embeds, channel, or reply-to.\n\n# Simple text cast\nscripts/fc_cast.sh --text \"Hello Farcaster!\"\n\n# Cast with image/video embed\nscripts/fc_cast.sh --text \"Check this out\" --embed \"https://example.com/image.png\"\n\n# Cast with two embeds (max 2)\nscripts/fc_cast.sh --text \"Links\" --embed \"https://a.com\" --embed \"https://b.com\"\n\n# Post to a channel\nscripts/fc_cast.sh --text \"gm\" --channel \"base\"\n\n# Reply to a cast\nscripts/fc_cast.sh --text \"Great point!\" --parent \"0xabcdef1234...\"\n\n# Quote-cast (embed another cast)\nscripts/fc_cast.sh --text \"This 👆\" --embed-cast \"0xabcdef1234...\" --embed-cast-fid 12345\n\n\nOutput: JSON {success, hash}.\n\nfc_feed.sh — Read Feeds\n# User's casts by FID\nscripts/fc_feed.sh --fid 3 --limit 10\n\n# User's casts by username\nscripts/fc_feed.sh --username \"vitalik\" --limit 5\n\n# Channel feed\nscripts/fc_feed.sh --channel \"base\" --limit 10\n\n# Following feed (casts from people the signer follows)\nscripts/fc_feed.sh --following --fid 3 --limit 10\n\n# Cast replies/thread\nscripts/fc_feed.sh --thread \"0xabcdef...\"\n\n# Pagination with cursor\nscripts/fc_feed.sh --fid 3 --cursor \"eyJwYWdlIjoxfQ==\"\n\n\nOutput: JSON array of casts with {hash, author, text, timestamp, embeds, reactions, replies}.\n\nfc_user.sh — User Lookup\n# By username\nscripts/fc_user.sh --username \"dwr\"\n\n# By FID\nscripts/fc_user.sh --fid 3\n\n# By Ethereum address (verified)\nscripts/fc_user.sh --address \"0x1234...\"\n\n# Bulk by FIDs\nscripts/fc_user.sh --fids \"3,194,6131\"\n\n\nOutput: JSON user object(s) with {fid, username, display_name, bio, follower_count, following_count, verified_addresses}.\n\nfc_search.sh — Search Casts\n# Search by keyword\nscripts/fc_search.sh --query \"base chain\"\n\n# Search with author filter\nscripts/fc_search.sh --query \"ethereum\" --author-fid 3\n\n# Search in channel\nscripts/fc_search.sh --query \"gm\" --channel \"base\"\n\n# Limit results\nscripts/fc_search.sh --query \"nft\" --limit 5\n\n\nOutput: JSON array of matching casts.\n\nfc_react.sh — Like / Recast\n# Like a cast\nscripts/fc_react.sh --like \"0xabcdef...\"\n\n# Unlike\nscripts/fc_react.sh --like \"0xabcdef...\" --undo\n\n# Recast\nscripts/fc_react.sh --recast \"0xabcdef...\"\n\n# Undo recast\nscripts/fc_react.sh --recast \"0xabcdef...\" --undo\n\nfc_delete.sh — Delete a Cast\nscripts/fc_delete.sh --hash \"0xabcdef...\"\n\nfc_channels.sh — List and Search Channels\n# Search channels by keyword\nscripts/fc_channels.sh --search \"defi\"\n\n# Get channel details by ID\nscripts/fc_channels.sh --id \"base\"\n\n# List trending channels\nscripts/fc_channels.sh --trending --limit 10\n\nCommon Patterns\nThread a multi-cast announcement\nHASH1=$(scripts/fc_cast.sh --text \"Thread 🧵 1/3: Big news!\" --channel \"base\" | jq -r .hash)\nHASH2=$(scripts/fc_cast.sh --text \"2/3: Details here...\" --parent \"$HASH1\" | jq -r .hash)\nscripts/fc_cast.sh --text \"3/3: Link below\" --parent \"$HASH2\" --embed \"https://example.com\"\n\nMonitor mentions (poll loop)\nwhile true; do\n  scripts/fc_search.sh --query \"@yourusername\" --limit 5\n  sleep 300\ndone\n\nPost with media (upload first, then embed)\n# Upload to catbox/litterbox first\nURL=$(curl -sS -F \"reqtype=fileupload\" -F \"time=72h\" \\\n  -F \"fileToUpload=@/path/to/image.png\" \\\n  https://litterbox.catbox.moe/resources/internals/api.php)\n\n# Then embed the URL\nscripts/fc_cast.sh --text \"Check this out!\" --embed \"$URL\"\n\nFree vs Paid Tier\n\nNot all endpoints are available on Neynar's free plan.\n\nFeature\tScript\tFree?\nPost cast\tfc_cast.sh\t✅\nUser casts feed\tfc_feed.sh --fid\t✅\nUser lookup (username/FID/address)\tfc_user.sh\t✅\nLike / recast\tfc_react.sh\t✅\nFollowing feed\tfc_feed.sh --following\t✅\nChannel feed\tfc_feed.sh --channel\t❌ Paid\nCast search\tfc_search.sh\t❌ Paid\nChannel search/details/trending\tfc_channels.sh\t❌ Paid\nDelete cast\tfc_delete.sh\t❌ Paid\nThread/conversation\tfc_feed.sh --thread\t✅\n\nScripts that hit paid endpoints will exit non-zero with a clear 402 PaymentRequired error.\n\nError Handling\n\nAll scripts exit 0 on success, non-zero on failure. Errors print to stderr as JSON:\n\n{\"error\": \"message\", \"status\": 403}\n\n\nCommon errors:\n\n401 — Invalid API key\n402 — Feature requires paid Neynar plan\n403 — Signer not approved or not paired with API key\n404 — Cast/user/channel not found\n429 — Rate limited (Neynar free tier: 300 req/min)\nAPI Reference\n\nSee references/neynar_endpoints.md for the full endpoint list and parameter docs."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/openclaw-consensus-bot/farcaster-skill",
    "publisherUrl": "https://clawhub.ai/openclaw-consensus-bot/farcaster-skill",
    "owner": "openclaw-consensus-bot",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/farcaster-skill",
    "downloadUrl": "https://openagent3.xyz/downloads/farcaster-skill",
    "agentUrl": "https://openagent3.xyz/skills/farcaster-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/farcaster-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/farcaster-skill/agent.md"
  }
}