{
  "schemaVersion": "1.0",
  "item": {
    "slug": "bluesky",
    "name": "Bluesky",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/jeffaf/bluesky",
    "canonicalUrl": "https://clawhub.ai/jeffaf/bluesky",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/bluesky",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=bluesky",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "requirements.txt",
      "scripts/bsky.py",
      "tests/__init__.py",
      "tests/conftest.py"
    ],
    "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",
      "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/bluesky"
    },
    "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/bluesky",
    "agentPageUrl": "https://openagent3.xyz/skills/bluesky/agent",
    "manifestUrl": "https://openagent3.xyz/skills/bluesky/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/bluesky/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": "Bluesky CLI",
        "body": "Full-featured CLI for Bluesky/AT Protocol."
      },
      {
        "title": "Agent Instructions",
        "body": "First: Check if logged in\n\nbsky whoami\n\nIf shows handle → ready to use commands below\nIf \"Not logged in\" → guide user through Setup section\n\nCommon tasks:\n\n\"Post to Bluesky\" → bsky post \"text\"\n\"Check my timeline\" → bsky timeline\n\"Like this post\" → bsky like <url>\n\"Follow someone\" → bsky follow @handle"
      },
      {
        "title": "Setup",
        "body": "If user isn't logged in (bsky whoami shows \"Not logged in\"), guide them through setup:"
      },
      {
        "title": "Getting an App Password",
        "body": "Tell the user:\n\nGo to bsky.app → click your avatar → Settings → Privacy and Security → App Passwords → Add App Password. Name it \"OpenClaw\" and copy the password (like xxxx-xxxx-xxxx-xxxx). You'll only see it once!"
      },
      {
        "title": "Logging In",
        "body": "Once they have the app password, run:\n\nbsky login --handle THEIR_HANDLE.bsky.social --password THEIR_APP_PASSWORD\n\nExample:\n\nbsky login --handle alice.bsky.social --password abcd-1234-efgh-5678\n\nSecurity: Password is used once to get a session token, then immediately discarded. Never stored on disk. Session auto-refreshes."
      },
      {
        "title": "Quick Reference",
        "body": "ActionCommandView timelinebsky timeline or bsky tlPostbsky post \"text\"Post with imagebsky post \"text\" --image photo.jpg --alt \"description\"Replybsky reply <url> \"text\"Quote-postbsky quote <url> \"text\"View threadbsky thread <url>Create threadbsky create-thread \"Post 1\" \"Post 2\" \"Post 3\" or bsky ctLikebsky like <url>Repostbsky repost <url>Followbsky follow @handleBlockbsky block @handleMutebsky mute @handleSearchbsky search \"query\"Notificationsbsky notifications or bsky nDelete postbsky delete <url>"
      },
      {
        "title": "Timeline",
        "body": "bsky timeline              # 10 posts\nbsky timeline -n 20        # 20 posts\nbsky timeline --json       # JSON output"
      },
      {
        "title": "Posting",
        "body": "bsky post \"Hello world!\"                           # Basic post\nbsky post \"Check this!\" --image pic.jpg --alt \"A photo\"  # With image\nbsky post \"Test\" --dry-run                         # Preview only"
      },
      {
        "title": "Reply & Quote",
        "body": "bsky reply <post-url> \"Your reply\"\nbsky quote <post-url> \"Your take on this\""
      },
      {
        "title": "Thread View",
        "body": "bsky thread <post-url>           # View conversation\nbsky thread <url> --depth 10     # More replies\nbsky thread <url> --json         # JSON output"
      },
      {
        "title": "Create Thread",
        "body": "bsky create-thread \"First post\" \"Second post\" \"Third post\"   # Create a thread\nbsky ct \"Post 1\" \"Post 2\" \"Post 3\"                           # Short alias\nbsky create-thread \"Hello!\" \"More thoughts\" --dry-run         # Preview only\nbsky create-thread \"Look!\" \"Nice\" --image pic.jpg --alt \"A photo\"  # Image on first post"
      },
      {
        "title": "Engagement",
        "body": "bsky like <post-url>             # ❤️ Like\nbsky unlike <post-url>           # Remove like\nbsky repost <post-url>           # 🔁 Repost (aliases: boost, rt)\nbsky unrepost <post-url>         # Remove repost"
      },
      {
        "title": "Social Graph",
        "body": "bsky follow @someone             # Follow user\nbsky unfollow @someone           # Unfollow user\nbsky profile @someone            # View profile\nbsky profile --json              # JSON output"
      },
      {
        "title": "Moderation",
        "body": "bsky block @someone              # 🚫 Block user\nbsky unblock @someone            # Unblock\nbsky mute @someone               # 🔇 Mute user\nbsky unmute @someone             # Unmute"
      },
      {
        "title": "Search & Notifications",
        "body": "bsky search \"query\"              # Search posts\nbsky search \"topic\" -n 20        # More results\nbsky notifications               # Recent notifications\nbsky n -n 30                     # More notifications"
      },
      {
        "title": "Delete",
        "body": "bsky delete <post-url>           # Delete your post\nbsky delete <post-id>            # By ID"
      },
      {
        "title": "JSON Output",
        "body": "Add --json to read commands for structured output:\n\nbsky timeline --json\nbsky search \"topic\" --json\nbsky notifications --json\nbsky profile @someone --json\nbsky thread <url> --json"
      },
      {
        "title": "Error Handling",
        "body": "ErrorFix\"Session expired\"Run bsky login again\"Not logged in\"Run bsky login --handle ... --password ...\"Post is X chars (max 300)\"Shorten text\"Image too large\"Use image under 1MB"
      },
      {
        "title": "Notes",
        "body": "All <url> parameters accept either https://bsky.app/... URLs or at:// URIs\nHandles auto-append .bsky.social if no domain specified\nImage posts require --alt for accessibility (Bluesky requirement)\nSession tokens auto-refresh; password never stored"
      }
    ],
    "body": "Bluesky CLI\n\nFull-featured CLI for Bluesky/AT Protocol.\n\nAgent Instructions\n\nFirst: Check if logged in\n\nbsky whoami\n\nIf shows handle → ready to use commands below\nIf \"Not logged in\" → guide user through Setup section\n\nCommon tasks:\n\n\"Post to Bluesky\" → bsky post \"text\"\n\"Check my timeline\" → bsky timeline\n\"Like this post\" → bsky like <url>\n\"Follow someone\" → bsky follow @handle\nSetup\n\nIf user isn't logged in (bsky whoami shows \"Not logged in\"), guide them through setup:\n\nGetting an App Password\n\nTell the user:\n\nGo to bsky.app → click your avatar → Settings → Privacy and Security → App Passwords → Add App Password. Name it \"OpenClaw\" and copy the password (like xxxx-xxxx-xxxx-xxxx). You'll only see it once!\n\nLogging In\n\nOnce they have the app password, run:\n\nbsky login --handle THEIR_HANDLE.bsky.social --password THEIR_APP_PASSWORD\n\n\nExample:\n\nbsky login --handle alice.bsky.social --password abcd-1234-efgh-5678\n\n\nSecurity: Password is used once to get a session token, then immediately discarded. Never stored on disk. Session auto-refreshes.\n\nQuick Reference\nAction\tCommand\nView timeline\tbsky timeline or bsky tl\nPost\tbsky post \"text\"\nPost with image\tbsky post \"text\" --image photo.jpg --alt \"description\"\nReply\tbsky reply <url> \"text\"\nQuote-post\tbsky quote <url> \"text\"\nView thread\tbsky thread <url>\nCreate thread\tbsky create-thread \"Post 1\" \"Post 2\" \"Post 3\" or bsky ct\nLike\tbsky like <url>\nRepost\tbsky repost <url>\nFollow\tbsky follow @handle\nBlock\tbsky block @handle\nMute\tbsky mute @handle\nSearch\tbsky search \"query\"\nNotifications\tbsky notifications or bsky n\nDelete post\tbsky delete <url>\nCommands\nTimeline\nbsky timeline              # 10 posts\nbsky timeline -n 20        # 20 posts\nbsky timeline --json       # JSON output\n\nPosting\nbsky post \"Hello world!\"                           # Basic post\nbsky post \"Check this!\" --image pic.jpg --alt \"A photo\"  # With image\nbsky post \"Test\" --dry-run                         # Preview only\n\nReply & Quote\nbsky reply <post-url> \"Your reply\"\nbsky quote <post-url> \"Your take on this\"\n\nThread View\nbsky thread <post-url>           # View conversation\nbsky thread <url> --depth 10     # More replies\nbsky thread <url> --json         # JSON output\n\nCreate Thread\nbsky create-thread \"First post\" \"Second post\" \"Third post\"   # Create a thread\nbsky ct \"Post 1\" \"Post 2\" \"Post 3\"                           # Short alias\nbsky create-thread \"Hello!\" \"More thoughts\" --dry-run         # Preview only\nbsky create-thread \"Look!\" \"Nice\" --image pic.jpg --alt \"A photo\"  # Image on first post\n\nEngagement\nbsky like <post-url>             # ❤️ Like\nbsky unlike <post-url>           # Remove like\nbsky repost <post-url>           # 🔁 Repost (aliases: boost, rt)\nbsky unrepost <post-url>         # Remove repost\n\nSocial Graph\nbsky follow @someone             # Follow user\nbsky unfollow @someone           # Unfollow user\nbsky profile @someone            # View profile\nbsky profile --json              # JSON output\n\nModeration\nbsky block @someone              # 🚫 Block user\nbsky unblock @someone            # Unblock\nbsky mute @someone               # 🔇 Mute user\nbsky unmute @someone             # Unmute\n\nSearch & Notifications\nbsky search \"query\"              # Search posts\nbsky search \"topic\" -n 20        # More results\nbsky notifications               # Recent notifications\nbsky n -n 30                     # More notifications\n\nDelete\nbsky delete <post-url>           # Delete your post\nbsky delete <post-id>            # By ID\n\nJSON Output\n\nAdd --json to read commands for structured output:\n\nbsky timeline --json\nbsky search \"topic\" --json\nbsky notifications --json\nbsky profile @someone --json\nbsky thread <url> --json\n\nError Handling\nError\tFix\n\"Session expired\"\tRun bsky login again\n\"Not logged in\"\tRun bsky login --handle ... --password ...\n\"Post is X chars (max 300)\"\tShorten text\n\"Image too large\"\tUse image under 1MB\nNotes\nAll <url> parameters accept either https://bsky.app/... URLs or at:// URIs\nHandles auto-append .bsky.social if no domain specified\nImage posts require --alt for accessibility (Bluesky requirement)\nSession tokens auto-refresh; password never stored"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/jeffaf/bluesky",
    "publisherUrl": "https://clawhub.ai/jeffaf/bluesky",
    "owner": "jeffaf",
    "version": "1.6.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/bluesky",
    "downloadUrl": "https://openagent3.xyz/downloads/bluesky",
    "agentUrl": "https://openagent3.xyz/skills/bluesky/agent",
    "manifestUrl": "https://openagent3.xyz/skills/bluesky/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/bluesky/agent.md"
  }
}