Skip to content
Back to skills

Post Bluesky

ASecurity

Post to Bluesky (AT Protocol). Body from target/value. Returns confirmation Note with post URI in metadata.

  • 10 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added June 6, 2026
devopspythondevops

Works with

  • cli

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned June 6, 2026

npx -y skills add bdambrosio/Cognitive_workbench --skill post-bluesky --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Post Bluesky?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Post Bluesky
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/bdambrosio-post-bluesky/badge)](https://www.skillsdirectory.com/skills/bdambrosio-post-bluesky)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: post-bluesky
type: python
description: "Post to Bluesky (AT Protocol). Body from target/value. Returns confirmation Note with post URI in metadata."
schema_hint:
  target: "$variable (post body from prior step, optional)"
  value: "string (literal post body, optional)"
  tags: "string or list (optional): comma-separated tags or list, e.g. 'AI,research' or ['AI','research']"
  out: "$variable (optional)"
---

# post-bluesky

Post a text message to Bluesky using the AT Protocol. The post body comes from `target` (a Note or Collection from a prior step) or `value` (literal text). Returns a confirmation Note with the post URI and CID in metadata.

## Input

Body content (one of):

- `target`: Variable or resource ID — content becomes the post body (plain text)
- `value`: Literal string — used as the post body directly

Optional:

- `tags`: Hashtags to append to the post. Either a comma-separated string (`"AI,research"`) or a list (`["AI", "research"]`). Tags are appended as `#AI #research` and linked as clickable Bluesky tags.

## Output

Success (`status: "success"`):
- `resource_id`: Note ID containing confirmation text (e.g., `"Posted to Bluesky: Hello world..."`).
- Metadata (accessible via `get-metadata`): `uri`, `cid`, `timestamp`.

Failure (`status: "failed"`):
- `reason`: Error description (e.g., `BLUESKY_ACCOUNT_HANDLE and BLUESKY_APP_PASSWORD environment variables required`, `authentication_failed`)

## Requirements

- `BLUESKY_ACCOUNT_HANDLE` — Bluesky handle (e.g., `alice.bsky.social`)
- `BLUESKY_APP_PASSWORD` — App Password from Bluesky Settings > App Passwords

## Behavior

- Authenticates via `com.atproto.server.createSession` to obtain an access token
- Creates a post via `com.atproto.repo.createRecord`
- Posts as plain text (UTF-8) with optional hashtag facets
- Post text is truncated at 294 characters (+ "..." if truncated) to stay within Bluesky's 300 grapheme limit
- Tags are appended after the body and linked as clickable hashtags via AT Protocol facets

## Common Workflows

**Post a simple status update with tags:**
```json
{"type":"post-bluesky","value":"Just deployed a new feature! Everything is running smoothly.","tags":"devops,shipping","out":"$posted"}
```

**Post a generated summary:**
```json
{"type":"generate-note","prompt":"Write a short tweet-length summary of today's progress","out":"$update"}
{"type":"post-bluesky","target":"$update","out":"$posted"}
```

**Post synthesized research:**
```json
{"type":"search-web","query":"latest developments in AI safety 2026","out":"$research"}
{"type":"synthesize","target":"$research","focus":"one key takeaway","format":"brief","out":"$summary"}
{"type":"post-bluesky","target":"$summary","out":"$posted"}
```

Files in this skill

  • Skill.md2.7 KB
  • tool.py12.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.