Agent skill
bsky
Use this when working with BlueSky - fetching threads, reading posts, creating content. Shows you how to use pdsx MCP tools for the task.
Install this agent skill to your Project
npx add-skill https://github.com/zzstoatzz/pdsx/tree/main/skills/bsky
SKILL.md
BlueSky with pdsx
Use the pdsx MCP tools (list_records, get_record, create_record, etc.) for BlueSky tasks.
Quick Reference
| Task | Tool | Example |
|---|---|---|
| get a post | get_record |
get_record(uri="at://did:plc:xxx/app.bsky.feed.post/abc123") |
| list someone's posts | list_records |
list_records("app.bsky.feed.post", repo="handle.bsky.social") |
| get a profile | get_record |
get_record(uri="app.bsky.actor.profile/self", repo="handle.bsky.social") |
| create a post | create_record |
create_record("app.bsky.feed.post", {"text": "hello"}) |
Following Threads
Threads span multiple users. Pattern:
-
Get the root post to see its content and who posted it:
pythonget_record(uri="at://did:plc:xxx/app.bsky.feed.post/abc123") -
List the OP's posts to find replies:
pythonlist_records("app.bsky.feed.post", repo="did:plc:xxx")Look for posts with
replyfields pointing back to the thread. -
Extract DIDs from the URIs (format:
at://DID/collection/rkey) -
Query each participant's posts for their contributions to the thread:
pythonlist_records("app.bsky.feed.post", repo="did:plc:other")Filter the results locally to find posts where
reply.root.urimatches the thread root.
Collections
| Collection | Purpose |
|---|---|
app.bsky.feed.post |
posts |
app.bsky.actor.profile |
profile (rkey is always self) |
app.bsky.feed.like |
likes |
app.bsky.feed.repost |
reposts |
app.bsky.graph.follow |
follows |
Post Structure
Posts reference other posts via reply:
{
"text": "reply text",
"reply": {
"root": {"uri": "at://did/collection/rkey", "cid": "bafyrei..."},
"parent": {"uri": "at://did/collection/rkey", "cid": "bafyrei..."}
}
}
reply.root- thread's original postreply.parent- immediate parent being replied to
Creating Posts
Simple:
create_record("app.bsky.feed.post", {"text": "hello world"})
Reply (requires both uri AND cid from the parent/root posts):
create_record("app.bsky.feed.post", {
"text": "my reply",
"reply": {
"root": {"uri": "at://...", "cid": "..."},
"parent": {"uri": "at://...", "cid": "..."}
}
})
Gotchas
- strongRef needs uri AND cid - when creating replies, you need both from the parent post
- profile rkey is always
self- useapp.bsky.actor.profile/self - byte indices for facets - links/mentions use UTF-8 byte positions, not character positions
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
cli
Use the pdsx CLI for ATProto record operations. Requires auth for writes, supports batch operations via stdin.
git-guardrails-claude-code
Set up Claude Code hooks to block dangerous git commands (push, reset --hard, clean, branch -D, etc.) before they execute. Use when user wants to prevent destructive git operations, add git safety hooks, or block git push/reset in Claude Code.
edit-article
Edit and improve articles by restructuring sections, improving clarity, and tightening prose. Use when user wants to edit, revise, or improve an article draft.
handoff
Compact the current conversation into a handoff document for another agent to pick up.
setup-pre-commit
Set up Husky pre-commit hooks with lint-staged (Prettier), type checking, and tests in the current repo. Use when user wants to add pre-commit hooks, set up Husky, configure lint-staged, or add commit-time formatting/typechecking/testing.
scaffold-exercises
Create exercise directory structures with sections, problems, solutions, and explainers that pass linting. Use when user wants to scaffold exercises, create exercise stubs, or set up a new course section.
Didn't find tool you were looking for?