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…