bluesky
Publish (with optional images), delete and read your own posts on Bluesky via the AT Protocol (XRPC).
Skill by acedatacloud
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/acedatacloud-bluesky
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: security, writing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Network hosts it talks to 3
bsky.app· found in codebsky.social· found in codecodeload.github.com· found in install command
Files it touches
~/.claude/skills/bluesky
What's inside
- Skill name
bluesky- Description
- Publish (with optional images), delete and read your own posts on Bluesky via the AT Protocol (XRPC). Use when the user wants to post to their Bluesky account (text or 带图 / with a picture), cross-post an article as a short dev-focused post, attach an image, delete a post, or list their own recent posts with engagement stats (reposts, likes, replies). Auth uses the user's handle plus an App Password.
- License
- Apache-2.0
- Metadata
- author: acedatacloud · version: 1.1
- Instructions
- 116 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
- Instructions call the network
Files (2)
- SKILL.md
- bluesky.py · scripts/
SKILL.md (first lines)
Everything runs through the shipped CLI [`scripts/bluesky.py`](scripts/bluesky.py)
— self-contained (`requests` + `Pillow`, both preinstalled in the sandbox). One
call creates the session, auto-computes clickable **facets** (links, #hashtags,
@mentions with correct UTF-8 byte offsets), and for image posts downloads the
file, **resizes/recompresses it to Bluesky's ~1 MB blob limit**, `uploadBlob`s it
and builds the `app.bsky.embed.images` embed — so there's no fragile
`curl + jq + heredoc` to hand-assemble (the old inline recipe kept breaking on
shell quoting, especially once an image + facets were involved).
Three connector credentials are injected: `$BLUESKY_HANDLE`
(e.g. `name.bsky.social`), `$BLUESKY_APP_PASSWORD` (an App Password from Bluesky
**Settings → Privacy and Security → App Passwords**, NOT the login password) and
`$BLUESKY_SERVICE` (PDS base URL, default `https://bsky.social`). The CLI reads
them from the env — never echo them.
```sh
# $SKILL_DIR can point at another skill loaded this turn — anchor on our own
# script (re-run this at the top of every fresh-shell Bash block below).
BSKY="$SKILL_DIR/scripts/bluesky.py"; [ -f "$BSKY" ] || BSKY=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/bluesky.py' 2>/dev/null | head -1)
[ -f "$BSKY" ] || { echo "bluesky script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
python3 "$BSKY" whoami # verify the session → {did, handle, service}
```
If `whoami` fails with `session_failed` / `AuthenticationRequired`, the
identifier or App Password is wrong. The **#1 cause is a bare handle** — the CLI
auto-appends `.bsky.social` to a bare username on the default PDS, but if it
still fails the user must reconnect the connector with their **full** handle
(`name.bsky.social`, a custom domain, a DID, or the account email) and a valid
App Password.
## Post — text, images and links in one call
**Confirm the text with the user before posting** (it publishes as their real
account). Text ≤ **300 graphemes**. Clickable links / #hashtags / @mentions are
turned into facets automatically — just write them in the text, no byte-offset
math needed.
```sh
# plain text post
python3 "$BSKY" post --text "Hello Bluesky 👋 shipping with the AT Protocol"
# 带图发送 / post WITH an image (URL or local path) — the image is downloaded,
# resized to fit the blob limit, uploaded and embedded automatically:
python3 "$BSKY" post \
--text "Stop wiring 3 image APIs. One endpoint → posters, cards, mockups. https://platform.acedata.cloud/documents/openai-images-generations-integration #AI #API" \
--image "https://cdn.acedata.cloud/xxxx.png" --alt "AI image API hero"
# up to 4 images, each with its own --alt (paired by order)
python3 "$BSKY" post --text "gallery" --image a.png --alt "one" --image b.png --alt "two"
```
Multi-line text or lots of emoji? Skip shell-quoting headaches by writing the
text to a file and using `--text-file` (or pipe via `--text -`):
```sh
cat > /tmp/post.txt <<'EOF'
Line one 🎨
Line two with a link https://platform.acedata.cloud #AI
EOF
python3 "$BSKY" post --text-file /tmp/post.txt --image "https://cdn.acedata.cloud/xxxx.png"
```
Success prints
`{"posted":true,"uri":"at://…","url":"https://bsky.app/profile/<handle>/post/<rkey>", ...}`.
The `url` is the public, shareable link — hand it to the user verbatim.
## List my recent posts + engagement
```sh
python3 "$BSKY" list --limit 20 # default filter: posts_no_replies
python3 "$BSKY" list --limit 50 --filter posts_with_media
```
`--filter`: `posts_no_replies` | `posts_with_replies` | `posts_with_media` |
`posts_and_author_threads`. `--limit` max 100.
## Delete a post
```sh
python3 "$BSKY" delete --uri "at://did:plc:xxxx/app.bsky.feed.post/3kabc123xyz"
```
Pass the full `at://…` post `uri` (from `list` or a prior `post`); the CLI
extracts the `rkey`. An empty result / `deleted:true` is success.
## Gotchas
- **App Password, not account password:** creating a session with the real
login password may be rejected or trip 2FA. Always the App Password from
Settings → App Passwords.
- **Facets & image resizing are automatic** — the CLI computes link/#tag/@mention
byte offsets and shrinks oversized images to the ~1 MB blob limit for you.
- **300 graphemes**, counted as user-perceived characters (emoji = 1).
- **Rate limits:** the PDS rate-limits writes per account; space out bulk posts
or you'll get `429 {"error":"RateLimitExceeded"}`.
- **Self-hosted PDS:** if the user runs their own PDS, `$BLUESKY_SERVICE` points
there; all XRPC calls target that host, not `bsky.social`.
- The CLI creates a fresh short-lived session on **every** invocation, so an
expiring `accessJwt` is never a concern — just run the command again.
## Record the output
After you successfully publish and obtain the live result URL, call the built-in
`publish_artifact` tool ONCE so the user can track this deliverable in **My Outputs**:
```
publish_artifact(kind="message", channel="bluesky", title="<title>", url="<the REAL returned URL>", status="delivered")
```
Use the real returned URL — never fabricate one. Call it once per published item,
only after delivery is confirmed; skip it (or use `status="failed"`) if publishing failed.
See `_shared/artifacts.md`.From AceDataCloud/Skills, Apache-2.0.
More from AceDataCloud/Skills
- 0.646score
discord
acedatacloud
Work with the user's Discord account.
SkillAFreshness: A★ 17Claude Code +9 - 0.646score
acedatacloud
acedatacloud
Manage your AceDataCloud account through the management API (platform.acedata.cloud).
SkillAFreshness: A★ 17Claude Code +9 - 0.646score
apple-notes
acedatacloud
Manage Apple Notes on macOS — list, search, read, create, append, move, delete, and export notes, and manage folders.
SkillAFreshness: A★ 17Claude Code +9 - 0.646score
didi-ride
acedatacloud
通过滴滴出行 MCP 打车、查价、查询订单、取消订单、规划路线(驾车/公交/步行/骑行)和搜索地点。Use when the user mentions 滴滴, 打车, 叫车, 回家/上班要打车, 查一下从 A 到 B 多少钱/怎么走, 查询订单, 司机在哪/多久到, 预约叫车, 路线规划, DiDi…
SkillAFreshness: A★ 17Claude Code +9 - 0.646score
ghost
acedatacloud
Create drafts and publish or update posts on a self-hosted Ghost site through the official Admin API.
SkillAFreshness: A★ 17Claude Code +9 - 0.646score
bilibili
acedatacloud
Read and publish 专栏 articles on Bilibili (bilibili.com) with the user's own login cookies (BYOC) — list their published articles with view/like/comment stats…
SkillAFreshness: A★ 17Claude Code +9 - 0.646score
capability-spotlight-video
acedatacloud
Plan and submit a recurring series of diverse, premium Ace Data Cloud sales films.
SkillAFreshness: A★ 17Claude Code +9 - 0.646score
cnblogs
acedatacloud
Publish, update and read CNBlogs (博客园) posts with a personal access token through the API used by the official vscode-cnb client.
SkillAFreshness: A★ 17Claude Code +9 - 0.646score
csdn
acedatacloud
Read and publish on CSDN (blog.csdn.net) with the user's own login cookies (BYOC) — list their published articles with view/like/comment stats, inspect one…
SkillAFreshness: A★ 17Claude Code +9 - 0.646score
cto51
acedatacloud
Read the connected 51CTO 博客 (blog.51cto.com) account and create Markdown article drafts with the user's own login cookies (BYOC).
SkillAFreshness: A★ 17Claude Code +9 - 0.643score
discordbot
acedatacloud
List channels, read recent messages, send channel messages, and send a single user-initiated DM on Discord using the user's own bot via the Discord REST API.
SkillAFreshness: A★ 17Claude Code +9 - 0.641score
happyhorse
AceDataCloud
Use HappyHorse video tools through an Ace Data Cloud account in Claude Code, including setup and retrieval of the same task.
SkillAFreshness: A★ 17Claude Code +9
Signals
- Stars
- 17
- Forks
- 1
- Open issues
- 0
- Last commit (this folder)
- Jul 5, 2026 (3 months ago)
- Last release
- Oct 23, 2026 (4 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- Version
- 1.1
- License
- Apache-2.0
- Repository
- github.com/AceDataCloud/Skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from acedatacloud
- 0.646score
acedatacloud
acedatacloud
Manage your AceDataCloud account through the management API (platform.acedata.cloud).
SkillAFreshness: A★ 17Claude Code +9 - 0.646score
apple-notes
acedatacloud
Manage Apple Notes on macOS — list, search, read, create, append, move, delete, and export notes, and manage folders.
SkillAFreshness: A★ 17Claude Code +9 - 0.646score
cnblogs
acedatacloud
Publish, update and read CNBlogs (博客园) posts with a personal access token through the API used by the official vscode-cnb client.
SkillAFreshness: A★ 17Claude Code +9 - 0.646score
bilibili
acedatacloud
Read and publish 专栏 articles on Bilibili (bilibili.com) with the user's own login cookies (BYOC) — list their published articles with view/like/comment stats…
SkillAFreshness: A★ 17Claude Code +9 - 0.646score
capability-spotlight-video
acedatacloud
Plan and submit a recurring series of diverse, premium Ace Data Cloud sales films.
SkillAFreshness: A★ 17Claude Code +9 - 0.646score
csdn
acedatacloud
Read and publish on CSDN (blog.csdn.net) with the user's own login cookies (BYOC) — list their published articles with view/like/comment stats, inspect one…
SkillAFreshness: A★ 17Claude Code +9
Cite this page
bluesky skill. Agent Mart. https://agentmart.dev/skills/acedatacloud-bluesky (last updated 2026-10-24)