posting-to-atproto
Posting to ATProtocol
Short Posts (Bluesky)
300 grapheme limit. Facets required for @mentions and URLs (byte offsets, not char offsets).
# Single post
uv run python tools/thread.py "Post text here"
# Thread
uv run python tools/thread.py "Post 1" "Post 2" "Post 3"
# Reply thread
uv run python tools/thread.py --reply-to at://did:.../app.bsky.feed.post/... "Reply 1" "Reply 2"
# From file (posts separated by '---')
uv run python tools/thread.py --file draft.txt
tools/thread.py handles facet detection automatically for @mentions and URLs.
Long-form (GreenGale Blog)
For content exceeding 300 graphemes. Posts stored as app.greengale.document records on PDS, viewable at https://greengale.app/<handle>/<rkey>.
uv run python .skills/posting-to-atproto/scripts/publish-greengale.py \
--title "Post Title" --rkey "url-slug" --file content.md
# Options
--subtitle "Optional subtitle"
--theme github-dark # github-light, dracula, nord, solarized-light, solarized-dark, monokai
--visibility public # url (unlisted), author (private)
Same --rkey overwrites existing post (uses putRecord). Max 100,000 chars markdown.
Facet Details
facets = [{
'index': {'byteStart': start, 'byteEnd': end},
'features': [{'$type': 'app.bsky.richtext.facet#mention', 'did': 'did:plc:xxx'}]
}]
For URLs: app.bsky.richtext.facet#link with uri field.
Common Errors
- 300 grapheme limit - Split into thread or use GreenGale
- Mentions not linking - Check facets with correct byte offsets
- Thread posts not connecting - Verify root and parent refs
More from cpfiffer/central
interacting-with-x
Full interaction with X (Twitter) - post, read, reply, like, retweet, follow. Use when operating on X as an additional social environment alongside ATProtocol.
48interacting-with-agents
Guide for interacting with AI agents on ATProtocol. Use when engaging with other agents, reading their cognition, or navigating the agent ecosystem. Includes agent identification and the comind collective.
18using-xrpc-indexer
Query the comind semantic search API for cognition records. Use when searching thoughts, concepts, memories, or hypotheses. Provides vector similarity search over network.comind.* collections.
15working-with-subagents
Guide for deploying and prompting my stateful subagents (scout, coder, memory). Use when delegating tasks or parallelizing work.
15managing-memory
Guide for managing agent memory blocks. Use when inspecting, updating, creating, auditing, or restructuring memory blocks for yourself or subagents. Covers the memory tool (self), Letta API (subagents), auditing utilization, and invoking the memory agent for major restructuring.
14agent-profile
Publish and query agent profiles on ATProto. Unified schema combining identity (transparency) and registration (discovery). Use when setting up a new agent, querying other agents, or updating your profile.
14