Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions docs/adapters/browser/bluesky.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Bluesky

**Mode**: 🌐 Public · **Domain**: `bsky.app`

## Commands

| Command | Description |
|---------|-------------|
| `opencli bluesky profile` | User profile info |
| `opencli bluesky user` | Recent posts from a user |
| `opencli bluesky trending` | Trending topics |
| `opencli bluesky search` | Search users |
| `opencli bluesky feeds` | Popular feed generators |
| `opencli bluesky followers` | User's followers |
| `opencli bluesky following` | Accounts a user follows |
| `opencli bluesky thread` | Post thread with replies |
| `opencli bluesky starter-packs` | User's starter packs |

## Usage Examples

```bash
# User profile
opencli bluesky profile --handle bsky.app

# Recent posts
opencli bluesky user --handle bsky.app --limit 10

# Trending topics
opencli bluesky trending --limit 10

# Search users
opencli bluesky search --query "AI" --limit 10

# Popular feeds
opencli bluesky feeds --limit 10

# Followers / following
opencli bluesky followers --handle bsky.app --limit 10
opencli bluesky following --handle bsky.app

# Post thread with replies
opencli bluesky thread --uri "at://did:.../app.bsky.feed.post/..."

# Starter packs
opencli bluesky starter-packs --handle bsky.app

# JSON output
opencli bluesky profile --handle bsky.app -f json
```

## Prerequisites

None — all commands use the public Bluesky AT Protocol API, no browser or login required.
29 changes: 29 additions & 0 deletions src/clis/bluesky/feeds.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
site: bluesky
name: feeds
description: Popular Bluesky feed generators
domain: public.api.bsky.app
strategy: public
browser: false

args:
limit:
type: int
default: 20
description: Number of feeds

pipeline:
- fetch:
url: https://public.api.bsky.app/xrpc/app.bsky.unspecced.getPopularFeedGenerators?limit=${{ args.limit }}

- select: feeds

- map:
rank: ${{ index + 1 }}
name: ${{ item.displayName }}
likes: ${{ item.likeCount }}
creator: ${{ item.creator.handle }}
description: ${{ item.description }}

- limit: ${{ args.limit }}

columns: [rank, name, likes, creator, description]
33 changes: 33 additions & 0 deletions src/clis/bluesky/followers.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
site: bluesky
name: followers
description: List followers of a Bluesky user
domain: public.api.bsky.app
strategy: public
browser: false

args:
handle:
type: str
required: true
positional: true
description: "Bluesky handle"
limit:
type: int
default: 20
description: Number of followers

pipeline:
- fetch:
url: https://public.api.bsky.app/xrpc/app.bsky.graph.getFollowers?actor=${{ args.handle }}&limit=${{ args.limit }}

- select: followers

- map:
rank: ${{ index + 1 }}
handle: ${{ item.handle }}
name: ${{ item.displayName }}
description: ${{ item.description }}

- limit: ${{ args.limit }}

columns: [rank, handle, name, description]
33 changes: 33 additions & 0 deletions src/clis/bluesky/following.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
site: bluesky
name: following
description: List accounts a Bluesky user is following
domain: public.api.bsky.app
strategy: public
browser: false

args:
handle:
type: str
required: true
positional: true
description: "Bluesky handle"
limit:
type: int
default: 20
description: Number of accounts

pipeline:
- fetch:
url: https://public.api.bsky.app/xrpc/app.bsky.graph.getFollows?actor=${{ args.handle }}&limit=${{ args.limit }}

- select: follows

- map:
rank: ${{ index + 1 }}
handle: ${{ item.handle }}
name: ${{ item.displayName }}
description: ${{ item.description }}

- limit: ${{ args.limit }}

columns: [rank, handle, name, description]
27 changes: 27 additions & 0 deletions src/clis/bluesky/profile.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
site: bluesky
name: profile
description: Get Bluesky user profile info
domain: public.api.bsky.app
strategy: public
browser: false

args:
handle:
type: str
required: true
positional: true
description: "Bluesky handle (e.g. bsky.app, jay.bsky.team)"

pipeline:
- fetch:
url: https://public.api.bsky.app/xrpc/app.bsky.actor.getProfile?actor=${{ args.handle }}

- map:
handle: ${{ item.handle }}
name: ${{ item.displayName }}
followers: ${{ item.followersCount }}
following: ${{ item.followsCount }}
posts: ${{ item.postsCount }}
description: ${{ item.description }}

columns: [handle, name, followers, following, posts, description]
34 changes: 34 additions & 0 deletions src/clis/bluesky/search.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
site: bluesky
name: search
description: Search Bluesky users
domain: public.api.bsky.app
strategy: public
browser: false

args:
query:
type: str
required: true
positional: true
description: Search query
limit:
type: int
default: 10
description: Number of results

pipeline:
- fetch:
url: https://public.api.bsky.app/xrpc/app.bsky.actor.searchActors?q=${{ args.query }}&limit=${{ args.limit }}

- select: actors

- map:
rank: ${{ index + 1 }}
handle: ${{ item.handle }}
name: ${{ item.displayName }}
followers: ${{ item.followersCount }}
description: ${{ item.description }}

- limit: ${{ args.limit }}

columns: [rank, handle, name, followers, description]
34 changes: 34 additions & 0 deletions src/clis/bluesky/starter-packs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
site: bluesky
name: starter-packs
description: Get starter packs created by a Bluesky user
domain: public.api.bsky.app
strategy: public
browser: false

args:
handle:
type: str
required: true
positional: true
description: "Bluesky handle"
limit:
type: int
default: 10
description: Number of starter packs

pipeline:
- fetch:
url: https://public.api.bsky.app/xrpc/app.bsky.graph.getActorStarterPacks?actor=${{ args.handle }}&limit=${{ args.limit }}

- select: starterPacks

- map:
rank: ${{ index + 1 }}
name: ${{ item.record.name }}
description: ${{ item.record.description }}
members: ${{ item.listItemCount }}
joins: ${{ item.joinedAllTimeCount }}

- limit: ${{ args.limit }}

columns: [rank, name, description, members, joins]
32 changes: 32 additions & 0 deletions src/clis/bluesky/thread.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
site: bluesky
name: thread
description: Get a Bluesky post thread with replies
domain: public.api.bsky.app
strategy: public
browser: false

args:
uri:
type: str
required: true
positional: true
description: "Post AT URI (at://did:.../app.bsky.feed.post/...) or bsky.app URL"
limit:
type: int
default: 20
description: Number of replies

pipeline:
- fetch:
url: https://public.api.bsky.app/xrpc/app.bsky.feed.getPostThread?uri=${{ args.uri }}&depth=2

- select: thread

- map:
author: ${{ item.post.author.handle }}
text: ${{ item.post.record.text }}
likes: ${{ item.post.likeCount }}
reposts: ${{ item.post.repostCount }}
replies_count: ${{ item.post.replyCount }}

columns: [author, text, likes, reposts, replies_count]
27 changes: 27 additions & 0 deletions src/clis/bluesky/trending.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
site: bluesky
name: trending
description: Trending topics on Bluesky
domain: public.api.bsky.app
strategy: public
browser: false

args:
limit:
type: int
default: 20
description: Number of topics

pipeline:
- fetch:
url: https://public.api.bsky.app/xrpc/app.bsky.unspecced.getTrendingTopics

- select: topics

- map:
rank: ${{ index + 1 }}
topic: ${{ item.topic }}
link: ${{ item.link }}

- limit: ${{ args.limit }}

columns: [rank, topic, link]
34 changes: 34 additions & 0 deletions src/clis/bluesky/user.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
site: bluesky
name: user
description: Get recent posts from a Bluesky user
domain: public.api.bsky.app
strategy: public
browser: false

args:
handle:
type: str
required: true
positional: true
description: "Bluesky handle (e.g. bsky.app)"
limit:
type: int
default: 20
description: Number of posts

pipeline:
- fetch:
url: https://public.api.bsky.app/xrpc/app.bsky.feed.getAuthorFeed?actor=${{ args.handle }}&limit=${{ args.limit }}

- select: feed

- map:
rank: ${{ index + 1 }}
text: ${{ item.post.record.text }}
likes: ${{ item.post.likeCount }}
reposts: ${{ item.post.repostCount }}
replies: ${{ item.post.replyCount }}

- limit: ${{ args.limit }}

columns: [rank, text, likes, reposts, replies]
Loading