A full-featured command-line interface for Bluesky (AT Protocol). Post, reply, like, repost, follow, block, mute, search — everything you need to engage on Bluesky from your terminal.
Built for OpenClaw — works standalone too.
| Category | Commands |
|---|---|
| Content | post, reply, quote, delete |
| Engagement | like, unlike, repost, unrepost |
| Social | follow, unfollow, profile |
| Moderation | block, unblock, mute, unmute |
| Discovery | timeline, search, notifications, thread |
| Threading | create-thread — post multi-part threads |
| Media | Image attachments with alt text |
Plus: JSON output on all read commands, dry-run mode, auto-linked URLs and @mentions.
- Open bsky.app and log in
- Click your avatar → Settings
- Go to Privacy and Security → App Passwords
- Click Add App Password
- Name it something like "CLI" or "OpenClaw"
- Copy the password (looks like
xxxx-xxxx-xxxx-xxxx)
⚠️ Save this password somewhere safe — Bluesky only shows it once!
Tell your OpenClaw agent:
"Log me into Bluesky. My handle is
yourname.bsky.socialand my app password isxxxx-xxxx-xxxx-xxxx"
Or run directly:
bsky login --handle yourname.bsky.social --password xxxx-xxxx-xxxx-xxxxYour password is used once to get a session token, then immediately discarded. It's never stored.
bsky whoami # Confirm you're logged in
bsky post "Hello from the command line! 🦋" # Your first post!bsky post "Hello world!" # Simple post
bsky post "Look!" --image pic.jpg --alt "A sunset" # With image
bsky reply <url> "Great point!" # Reply
bsky quote <url> "This is important" # Quote-post
bsky delete <url> # Delete your postbsky like <url> # ❤️ Like a post
bsky unlike <url> # Remove like
bsky repost <url> # 🔁 Boost (aliases: boost, rt)
bsky unrepost <url> # Remove repostbsky follow @someone.bsky.social # Follow
bsky unfollow @someone # Unfollow
bsky profile @someone # View profilebsky block @troll.bsky.social # 🚫 Block
bsky unblock @someone # Unblock
bsky mute @noisy.bsky.social # 🔇 Mute
bsky unmute @someone # Unmutebsky create-thread "First post" "Second post" "Third post" # Create a thread
bsky ct "Post 1" "Post 2" "Post 3" # Short alias
bsky create-thread "Intro" "Details" --dry-run # Preview only
bsky create-thread "Look!" "More" --image pic.jpg --alt "Photo" # Image on first postbsky timeline # Your home feed
bsky timeline -n 30 # More posts
bsky search "topic" # Search posts
bsky notifications # Your notifications
bsky thread <url> # View conversationAdd --json to any read command for structured output:
bsky timeline --json | jq '.[0].text'
bsky search "AI" --json
bsky notifications --json- Password never stored — used once to get a session token, then discarded
- Session tokens auto-refresh — no need to re-login
- Config file permissions — 600 (owner-only read/write)
- Location:
~/.config/bsky/config.json
clawhub install blueskygit clone https://github.com/jeffaf/bluesky-skill.git ~/clawd/skills/bluesky
cd ~/clawd/skills/bluesky/scripts
./bsky --version # Auto-creates venv on first run- Python 3.8+
atprotopackage (installed automatically on first run via venv)
- Handles: Auto-appends
.bsky.socialif no domain specified - URLs: Both
https://bsky.app/...andat://URIs work - Dry run: Use
--dry-runon post/reply/quote to preview - Images: Max 1MB, alt text required (accessibility)
See CHANGELOG.md for version history.
MIT — do whatever you want with it.