AI agent skills related to using social media
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

Replace authenticate.sh with atproto_authenticate launcher

All bluesky/ shell scripts now call `atproto_authenticate` (the Racket
launcher) instead of `bash "${SCRIPT_DIR}/../atproto/authenticate.sh"`.
Updated both SKILL.md files to reflect the new authentication method.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

Claude 8c8c5f13 d3ffee58

+15 -13
+6 -6
atproto/SKILL.md
··· 124 124 125 125 ## Helper scripts 126 126 127 - ### authenticate.sh 127 + ### atproto_authenticate 128 128 129 - Authenticates with the PDS and returns an access JWT to stdout. Used by 130 - Bluesky scripts internally, but can also be called directly when you need a 131 - token for manual API calls. 129 + Authenticates with the PDS and returns an access JWT to stdout. Installed as 130 + a Racket launcher with the social-skills package. Used by Bluesky scripts 131 + internally, but can also be called directly when you need a token for manual 132 + API calls. 132 133 133 134 ```sh 134 - JWT=$(bash atproto/authenticate.sh) 135 + JWT=$(atproto_authenticate) 135 136 ``` 136 137 137 138 Requires: 138 139 - `AGENT_ATPROTO_APP_PASSWORD` environment variable pointing to app password file 139 - - `curl` and `python3` available on PATH
+3 -1
bluesky/SKILL.md
··· 104 104 - `AGENT_ATPROTO_APP_PASSWORD` environment variable pointing to app password 105 105 file 106 106 - `curl` and `python3` available on PATH 107 + - `atproto_authenticate` Racket launcher on PATH (installed with social-skills 108 + package) 107 109 108 - All scripts use the shared `atproto/authenticate.sh` for authentication. 110 + All scripts use the `atproto_authenticate` launcher for authentication. 109 111 110 112 The scripts hardcode the PDS URL and DID for claude.notjack.space. If the 111 113 account moves to a different PDS, update the `PDS` variable in the scripts.
+1 -1
bluesky/create-post.sh
··· 30 30 FACETS_JSON="${2:-}" 31 31 32 32 # Authenticate 33 - ACCESS_JWT=$(bash "${SCRIPT_DIR}/../atproto/authenticate.sh") 33 + ACCESS_JWT=$(atproto_authenticate) 34 34 35 35 # Build and send post 36 36 TS=$(date -u +%Y-%m-%dT%H:%M:%S.000Z)
+1 -1
bluesky/like-post.sh
··· 24 24 POST_URI="$1" 25 25 26 26 # Authenticate first (needed for viewer.like to populate) 27 - ACCESS_JWT=$(bash "${SCRIPT_DIR}/../atproto/authenticate.sh") 27 + ACCESS_JWT=$(atproto_authenticate) 28 28 29 29 # Fetch post with auth to get viewer.like and CID 30 30 POST_DATA=$(curl -s "${PDS}/xrpc/app.bsky.feed.getPosts?uris=${POST_URI}" \
+1 -1
bluesky/read-dms.sh
··· 30 30 LIMIT="${2:-20}" 31 31 32 32 # Authenticate 33 - ACCESS_JWT=$(bash "${SCRIPT_DIR}/../atproto/authenticate.sh") 33 + ACCESS_JWT=$(atproto_authenticate) 34 34 35 35 curl -s "${PDS}/xrpc/chat.bsky.convo.getMessages?convoId=${CONVO_ID}&limit=${LIMIT}" \ 36 36 -H "Authorization: Bearer ${ACCESS_JWT}" \
+1 -1
bluesky/read-notifications.sh
··· 20 20 LIMIT="${1:-30}" 21 21 22 22 # Authenticate 23 - ACCESS_JWT=$(bash "${SCRIPT_DIR}/../atproto/authenticate.sh") 23 + ACCESS_JWT=$(atproto_authenticate) 24 24 25 25 curl -s "${PDS}/xrpc/app.bsky.notification.listNotifications?limit=${LIMIT}" \ 26 26 -H "Authorization: Bearer ${ACCESS_JWT}" \
+1 -1
bluesky/reply-to-post.sh
··· 33 33 FACETS_JSON="${3:-}" 34 34 35 35 # Authenticate 36 - ACCESS_JWT=$(bash "${SCRIPT_DIR}/../atproto/authenticate.sh") 36 + ACCESS_JWT=$(atproto_authenticate) 37 37 38 38 # Fetch parent post to get CID and thread root 39 39 PARENT_DATA=$(curl -s "https://public.api.bsky.app/xrpc/app.bsky.feed.getPosts?uris=${PARENT_URI}")
+1 -1
bluesky/send-dm.sh
··· 46 46 " "$CONVO_ID" 47 47 48 48 # Authenticate 49 - ACCESS_JWT=$(bash "${SCRIPT_DIR}/../atproto/authenticate.sh") 49 + ACCESS_JWT=$(atproto_authenticate) 50 50 51 51 # Send message using python3 for proper JSON escaping 52 52 RESULT=$(python3 -c "