Back to Skills
    🦞

    bluesky

    Complete Bluesky CLI: post, reply, like, repost, follow, block, mute, search,.

    By @jeffaf
    View on GitHub
    SKILL.md
    ---
    name: bluesky
    version: 1.5.3
    description: "Complete Bluesky CLI: post, reply, like, repost, follow, block, mute, search, threads, images. Everything you need to engage on Bluesky from the terminal."
    homepage: https://bsky.app
    metadata:
      openclaw:
        emoji: "🦋"
        requires:
          bins: ["python3"]
        tags: ["social", "bluesky", "at-protocol", "cli"]
    ---
    
    # Bluesky CLI
    
    Full-featured CLI for Bluesky/AT Protocol.
    
    ## Agent Instructions
    
    **First: Check if logged in**
    ```bash
    bsky whoami
    ```
    
    - If shows handle → ready to use commands below
    - If "Not logged in" → guide user through Setup section
    
    **Common tasks:**
    - "Post to Bluesky" → `bsky post "text"`
    - "Check my timeline" → `bsky timeline`
    - "Like this post" → `bsky like <url>`
    - "Follow someone" → `bsky follow @handle`
    
    ## Setup
    
    If user isn't logged in (`bsky whoami` shows "Not logged in"), guide them through setup:
    
    ### Getting an App Password
    
    Tell the user:
    > Go 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!
    
    ### Logging In
    
    Once they have the app password, run:
    ```bash
    bsky login --handle THEIR_HANDLE.bsky.social --password THEIR_APP_PASSWORD
    ```
    
    Example:
    ```bash
    bsky login --handle alice.bsky.social --password abcd-1234-efgh-5678
    ```
    
    **Security:** Password is used once to get a session token, then immediately discarded. Never stored on disk. Session auto-refreshes.
    
    ## Quick Reference
    
    | Action | Command |
    |--------|---------|
    | View timeline | `bsky timeline` or `bsky tl` |
    | Post | `bsky post "text"` |
    | Post with image | `bsky post "text" --image photo.jpg --alt "description"` |
    | Reply | `bsky reply <url> "text"` |
    | Quote-post | `bsky quote <url> "text"` |
    | View thread | `bsky thread <url>` |
    | Like | `bsky like <url>` |
    | Repost | `bsky repost <url>` |
    | Follow | `bsky follow @handle` |
    | Block | `bsky block @handle` |
    | Mute | `bsky mute @handle` |
    | Search | `bsky search "query"` |
    | Notifications | `bsky notifications` or `bsky n` |
    | Delete post | `bsky delete <url>` |
    
    ## Commands
    
    ### Timeline
    ```bash
    bsky timeline              # 10 posts
    bsky timeline -n 20        # 20 posts
    bsky timeline --json       # JSON output
    ```
    
    ### Posting
    ```bash
    bsky post "Hello world!"                           # Basic post
    bsky post "Check this!" --image pic.jpg --alt "A photo"  # With image
    bsky post "Test" --dry-run                         # Preview only
    ```
    
    ### Reply & Quote
    ```bash
    bsky reply <post-url> "Your reply"
    bsky quote <post-url> "Your take on this"
    ```
    
    ### Thread View
    ```bash
    bsky thread <post-url>           # View conversation
    bsky thread <url> --depth 10     # More replies
    bsky thread <url> --json         # JSON output
    ```
    
    ### Engagement
    ```bash
    bsky like <post-url>             # ❤️ Like
    bsky unlike <post-url>           # Remove like
    bsky repost <post-url>           # 🔁 Repost (aliases: boost, rt)
    bsky unrepost <post-url>         # Remove repost
    ```
    
    ### Social Graph
    ```bash
    bsky follow @someone             # Follow user
    bsky unfollow @someone           # Unfollow user
    bsky profile @someone            # View profile
    bsky profile --json              # JSON output
    ```
    
    ### Moderation
    ```bash
    bsky block @someone              # 🚫 Block user
    bsky unblock @someone            # Unblock
    bsky mute @someone               # 🔇 Mute user
    bsky unmute @someone             # Unmute
    ```
    
    ### Search & Notifications
    ```bash
    bsky search "query"              # Search posts
    bsky search "topic" -n 20        # More results
    bsky notifications               # Recent notifications
    bsky n -n 30                     # More notifications
    ```
    
    ### Delete
    ```bash
    bsky delete <post-url>           # Delete your post
    bsky delete <post-id>            # By ID
    ```
    
    ## JSON Output
    
    Add `--json` to read commands for structured output:
    ```bash
    bsky timeline --json
    bsky search "topic" --json
    bsky notifications --json
    bsky profile @someone --json
    bsky thread <url> --json
    ```
    
    ## Error Handling
    
    | Error | Fix |
    |-------|-----|
    | "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 |
    
    ## Notes
    
    - All `<url>` parameters accept either `https://bsky.app/...` URLs or `at://` URIs
    - Handles auto-append `.bsky.social` if no domain specified
    - Image posts require `--alt` for accessibility (Bluesky requirement)
    - Session tokens auto-refresh; password never stored