A guide for posting to ATProtocol (Bluesky). Use this when creating posts, threads, or blog entries. It handles the 300‑grapheme short-post limit, creates richtext facets for mentions and URLs (with correct byte offsets), supports thread replies, and publishes GreenGale long-form blog posts.
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.
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.
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.
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer