{
  "schemaVersion": "1.0",
  "item": {
    "slug": "raindrop",
    "name": "Raindrop.io Bookmarks",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/velvet-shark/raindrop",
    "canonicalUrl": "https://clawhub.ai/velvet-shark/raindrop",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/raindrop",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=raindrop",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "_meta.json",
      "scripts/raindrop.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. 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-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-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/raindrop"
    },
    "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/raindrop",
    "agentPageUrl": "https://openagent3.xyz/skills/raindrop/agent",
    "manifestUrl": "https://openagent3.xyz/skills/raindrop/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/raindrop/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": "Raindrop.io Bookmarks",
        "body": "Manage bookmarks via the Raindrop.io API."
      },
      {
        "title": "Setup",
        "body": "# Get token from: https://app.raindrop.io/settings/integrations → \"Create test token\"\necho 'RAINDROP_TOKEN=\"your-token\"' > ~/.config/raindrop.env\n\n# Or pass token at runtime (recommended for ephemeral use)\n{baseDir}/scripts/raindrop.sh --token \"your-token\" whoami"
      },
      {
        "title": "Quick Start",
        "body": "# Search bookmarks\n{baseDir}/scripts/raindrop.sh search \"AI tools\"\n\n# List unsorted bookmarks\n{baseDir}/scripts/raindrop.sh list -1 --limit 50\n\n# Count unsorted\n{baseDir}/scripts/raindrop.sh count -1\n\n# Create collection and move bookmarks\n{baseDir}/scripts/raindrop.sh create-collection \"AI Coding\"\n{baseDir}/scripts/raindrop.sh move 12345 66016720\n\n# Bulk move (efficient!)\n{baseDir}/scripts/raindrop.sh bulk-move \"123,456,789\" 66016720"
      },
      {
        "title": "Reading",
        "body": "CommandDescriptionwhoamiShow authenticated usercollectionsList all collections with IDslist [ID]List bookmarks (default: 0 = all)count [ID]Count bookmarks in collectionsearch QUERY [ID]Search bookmarksget IDGet bookmark detailstagsList all tags with countslist-untagged [ID]Find bookmarks without tagscache IDGet permanent copy (Pro only)"
      },
      {
        "title": "Writing",
        "body": "CommandDescriptionadd URL [ID]Add bookmark (default: -1 = Unsorted)delete IDDelete bookmarkcreate-collection NAMECreate new collectionmove ID COLLECTIONMove bookmark to collectionupdate ID [opts]Update tags/title/collectionbulk-move IDS TARGET [SOURCE]Move multiple bookmarks (source defaults to -1/Unsorted)suggest URLGet AI-suggested tags/title"
      },
      {
        "title": "Options",
        "body": "FlagDescription--jsonRaw JSON output--limit NMax results (default: 25)--page NPagination (0-indexed)--delay MSDelay between API calls (rate limiting)--token TOKENOverride API token"
      },
      {
        "title": "Update Options",
        "body": "For the update command:\n\nFlagDescription--tags TAG1,TAG2Set tags (comma-separated)--title TITLESet title--collection IDMove to collection"
      },
      {
        "title": "Collection IDs",
        "body": "0 = All bookmarks\n-1 = Unsorted\n-99 = Trash\nN = Specific collection (get IDs from collections)"
      },
      {
        "title": "Examples",
        "body": "# List unsorted with pagination\n{baseDir}/scripts/raindrop.sh list -1 --limit 50 --page 0\n{baseDir}/scripts/raindrop.sh list -1 --limit 50 --page 1\n\n# Create collection\n{baseDir}/scripts/raindrop.sh create-collection \"AI Coding\"\n# Output: Created: AI Coding / ID: 66016720\n\n# Move single bookmark\n{baseDir}/scripts/raindrop.sh move 1234567 66016720\n\n# Update bookmark with tags and move\n{baseDir}/scripts/raindrop.sh update 1234567 --tags \"claude-code,workflow,tips\" --collection 66016720\n\n# Bulk move with rate limiting (100ms between calls)\n{baseDir}/scripts/raindrop.sh bulk-move \"123,456,789,101112\" 66016720 --delay 100\n\n# Find untagged bookmarks in unsorted\n{baseDir}/scripts/raindrop.sh list-untagged -1 --limit 100\n\n# Get JSON for scripting\n{baseDir}/scripts/raindrop.sh list -1 --json --limit 50 | jq '.items[]._id'\n\n# Count unsorted bookmarks\n{baseDir}/scripts/raindrop.sh count -1"
      },
      {
        "title": "Bulk Operations",
        "body": "For large batch operations, use bulk-move which uses the Raindrop batch API (up to 100 items per request):\n\n# Get IDs from unsorted\nids=$({baseDir}/scripts/raindrop.sh list -1 --json --limit 100 | jq -r '[.items[]._id] | join(\",\")')\n\n# Move all to collection\n{baseDir}/scripts/raindrop.sh bulk-move \"$ids\" 66016720"
      },
      {
        "title": "Rate Limiting",
        "body": "Raindrop API has rate limits. For bulk operations:\n\nUse --delay 100 (100ms between calls)\nUse bulk-move instead of individual move calls\nProcess in batches of 50-100"
      },
      {
        "title": "Direct API",
        "body": "For operations not covered:\n\nsource ~/.config/raindrop.env\n\n# Update tags\ncurl -X PUT \"https://api.raindrop.io/rest/v1/raindrop/ID\" \\\n  -H \"Authorization: Bearer $RAINDROP_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"tags\": [\"tag1\", \"tag2\"]}'\n\n# Bulk update (up to 100 IDs)\ncurl -X PUT \"https://api.raindrop.io/rest/v1/raindrops\" \\\n  -H \"Authorization: Bearer $RAINDROP_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"ids\": [123, 456, 789], \"collectionId\": 12345}'\n\nAPI docs: https://developer.raindrop.io/"
      }
    ],
    "body": "Raindrop.io Bookmarks\n\nManage bookmarks via the Raindrop.io API.\n\nSetup\n# Get token from: https://app.raindrop.io/settings/integrations → \"Create test token\"\necho 'RAINDROP_TOKEN=\"your-token\"' > ~/.config/raindrop.env\n\n# Or pass token at runtime (recommended for ephemeral use)\n{baseDir}/scripts/raindrop.sh --token \"your-token\" whoami\n\nQuick Start\n# Search bookmarks\n{baseDir}/scripts/raindrop.sh search \"AI tools\"\n\n# List unsorted bookmarks\n{baseDir}/scripts/raindrop.sh list -1 --limit 50\n\n# Count unsorted\n{baseDir}/scripts/raindrop.sh count -1\n\n# Create collection and move bookmarks\n{baseDir}/scripts/raindrop.sh create-collection \"AI Coding\"\n{baseDir}/scripts/raindrop.sh move 12345 66016720\n\n# Bulk move (efficient!)\n{baseDir}/scripts/raindrop.sh bulk-move \"123,456,789\" 66016720\n\nCommands\nReading\nCommand\tDescription\nwhoami\tShow authenticated user\ncollections\tList all collections with IDs\nlist [ID]\tList bookmarks (default: 0 = all)\ncount [ID]\tCount bookmarks in collection\nsearch QUERY [ID]\tSearch bookmarks\nget ID\tGet bookmark details\ntags\tList all tags with counts\nlist-untagged [ID]\tFind bookmarks without tags\ncache ID\tGet permanent copy (Pro only)\nWriting\nCommand\tDescription\nadd URL [ID]\tAdd bookmark (default: -1 = Unsorted)\ndelete ID\tDelete bookmark\ncreate-collection NAME\tCreate new collection\nmove ID COLLECTION\tMove bookmark to collection\nupdate ID [opts]\tUpdate tags/title/collection\nbulk-move IDS TARGET [SOURCE]\tMove multiple bookmarks (source defaults to -1/Unsorted)\nsuggest URL\tGet AI-suggested tags/title\nOptions\nFlag\tDescription\n--json\tRaw JSON output\n--limit N\tMax results (default: 25)\n--page N\tPagination (0-indexed)\n--delay MS\tDelay between API calls (rate limiting)\n--token TOKEN\tOverride API token\nUpdate Options\n\nFor the update command:\n\nFlag\tDescription\n--tags TAG1,TAG2\tSet tags (comma-separated)\n--title TITLE\tSet title\n--collection ID\tMove to collection\nCollection IDs\n0 = All bookmarks\n-1 = Unsorted\n-99 = Trash\nN = Specific collection (get IDs from collections)\nExamples\n# List unsorted with pagination\n{baseDir}/scripts/raindrop.sh list -1 --limit 50 --page 0\n{baseDir}/scripts/raindrop.sh list -1 --limit 50 --page 1\n\n# Create collection\n{baseDir}/scripts/raindrop.sh create-collection \"AI Coding\"\n# Output: Created: AI Coding / ID: 66016720\n\n# Move single bookmark\n{baseDir}/scripts/raindrop.sh move 1234567 66016720\n\n# Update bookmark with tags and move\n{baseDir}/scripts/raindrop.sh update 1234567 --tags \"claude-code,workflow,tips\" --collection 66016720\n\n# Bulk move with rate limiting (100ms between calls)\n{baseDir}/scripts/raindrop.sh bulk-move \"123,456,789,101112\" 66016720 --delay 100\n\n# Find untagged bookmarks in unsorted\n{baseDir}/scripts/raindrop.sh list-untagged -1 --limit 100\n\n# Get JSON for scripting\n{baseDir}/scripts/raindrop.sh list -1 --json --limit 50 | jq '.items[]._id'\n\n# Count unsorted bookmarks\n{baseDir}/scripts/raindrop.sh count -1\n\nBulk Operations\n\nFor large batch operations, use bulk-move which uses the Raindrop batch API (up to 100 items per request):\n\n# Get IDs from unsorted\nids=$({baseDir}/scripts/raindrop.sh list -1 --json --limit 100 | jq -r '[.items[]._id] | join(\",\")')\n\n# Move all to collection\n{baseDir}/scripts/raindrop.sh bulk-move \"$ids\" 66016720\n\nRate Limiting\n\nRaindrop API has rate limits. For bulk operations:\n\nUse --delay 100 (100ms between calls)\nUse bulk-move instead of individual move calls\nProcess in batches of 50-100\nDirect API\n\nFor operations not covered:\n\nsource ~/.config/raindrop.env\n\n# Update tags\ncurl -X PUT \"https://api.raindrop.io/rest/v1/raindrop/ID\" \\\n  -H \"Authorization: Bearer $RAINDROP_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"tags\": [\"tag1\", \"tag2\"]}'\n\n# Bulk update (up to 100 IDs)\ncurl -X PUT \"https://api.raindrop.io/rest/v1/raindrops\" \\\n  -H \"Authorization: Bearer $RAINDROP_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"ids\": [123, 456, 789], \"collectionId\": 12345}'\n\n\nAPI docs: https://developer.raindrop.io/"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/velvet-shark/raindrop",
    "publisherUrl": "https://clawhub.ai/velvet-shark/raindrop",
    "owner": "velvet-shark",
    "version": "1.0.4",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/raindrop",
    "downloadUrl": "https://openagent3.xyz/downloads/raindrop",
    "agentUrl": "https://openagent3.xyz/skills/raindrop/agent",
    "manifestUrl": "https://openagent3.xyz/skills/raindrop/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/raindrop/agent.md"
  }
}