| name | bluesky |
| version | 1.6.0 |
| 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
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:
bsky login --handle THEIR_HANDLE.bsky.social --password THEIR_APP_PASSWORD
Example:
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> |
| Create thread | bsky create-thread "Post 1" "Post 2" "Post 3" or bsky ct |
| 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
bsky timeline
bsky timeline -n 20
bsky timeline --json
Posting
bsky post "Hello world!"
bsky post "Check this!" --image pic.jpg --alt "A photo"
bsky post "Test" --dry-run
Reply & Quote
bsky reply <post-url> "Your reply"
bsky quote <post-url> "Your take on this"
Thread View
bsky thread <post-url>
bsky thread <url> --depth 10
bsky thread <url> --json
Create Thread
bsky create-thread "First post" "Second post" "Third post"
bsky ct "Post 1" "Post 2" "Post 3"
bsky create-thread "Hello!" "More thoughts" --dry-run
bsky create-thread "Look!" "Nice" --image pic.jpg --alt "A photo"
Engagement
bsky like <post-url>
bsky unlike <post-url>
bsky repost <post-url>
bsky unrepost <post-url>
Social Graph
bsky follow @someone
bsky unfollow @someone
bsky profile @someone
bsky profile --json
Moderation
bsky block @someone
bsky unblock @someone
bsky mute @someone
bsky unmute @someone
Search & Notifications
bsky search "query"
bsky search "topic" -n 20
bsky notifications
bsky n -n 30
Delete
bsky delete <post-url>
bsky delete <post-id>
JSON Output
Add --json to read commands for structured output:
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