{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreifibehrtdjmdx3k7wah46po6t6ibyxkvuk76ba5ibo5oyppjzyyym",
"uri": "at://did:plc:5dccc6r6eugls2vye2t44tvo/app.bsky.feed.post/3me647rhyaxq2"
},
"coverImage": {
"$type": "blob",
"ref": {
"$link": "bafkreifr73labk4rbs4wpy52xbn3rxwemvezh2by2ccgkmlin5khx7dh5i"
},
"mimeType": "image/jpeg",
"size": 482227
},
"path": "/blog/2025/05/04/clear-skies/?utm_source=rss&utm_medium=feed&utm_campaign=main",
"publishedAt": "2026-06-12T17:07:09.524Z",
"site": "https://stephenyeargin.com",
"tags": [
"Mastodon",
"privacy and social media could not be farther apart",
"[1]",
"Bluesky",
"[2]",
"I wrote my own",
"installed",
"[3]",
"Fork the repository",
"↩︎",
"App Password",
"@bsky.social"
],
"textContent": "One of the features I like about Mastodon is automated post deletion, where posts you make are removed after a set period of time. You can add exceptions, such as pinned posts or those that reached a certain level of engagement. I don't actually use the feature, but I understand why it exists. We're living in a time where privacy and social media could not be farther apart. Every quip we make on the internet is fodder for future employers or, in certain circumstances, the general public to analyze and cherry pick. Mastodon's philosophy is that you can choose whether to have those posts live on, or to remain ephemeral.[1]\n\nBluesky appears to be the chosen successor after Twitter's[2] collapse into an echo chamber for bots, scammers, right-wing personalities, and those too afraid of change to admit it is dominated by those other three groups. User created content is an asset, so they don't exactly want to provide a means to periodically delete it. They use it to capture more eyeballs for (eventual) advertisers, and discovering old posts keeps the engagement numbers up.\n\nA friend of mine had tried to get various other third-party projects to fill in the gap without much success. She really wanted to reduce her digital footprint these days. Having previously worked with Twitter's API to do something similar, I wrote my own in Go.\n\n## Using the script\n\nSet up is straightforward. You'll need `golang` installed on the machine that you'll use to run the cleanup script.\n\n### Step 1: Clone the repository\n\n\n git clone https://github.com/stephenyeargin/bskycleanup.git cd bskycleanup\n\n### Step 2: Create the configuration\n\n\n cp example.config.json config.json\n\n### Step 3: Update the configuration with the correct values[3]\n\n\n { \"handle\": \"your-handle\", \"password\": \"your-app-password\", \"baseURL\": \"https://bsky.social/xrpc\", \"dayCount\": 30 }\n\n * `handle` is your login to Bluesky. Likely either `<username>@bsky.social` or your domain name\n * `password` is that app password rather than your login password. See `Privacy and Security` > `App passwords` to create one.\n * `baseUrl` is most likely the default value above, `https://bsky.social/xrpc`\n * `dayCount` is how many days worth of posts you want to keep\n\n\n\n### Step 4: Run the script\n\n\n go run bskycleanup.go\n\nIf everything works correctly, you should see something like:\n\n\n Deleted record: at://did:plc:sm6y24btbwbevwgw3umxm6nc/app.bsky.feed.post/3lnodoyrtkk2b Total posts deleted: 1 Total posts skipped (newer than 30 days): 4\n\n### Step 5: (Optional) Automate with GitHub Actions\n\n 1. Fork the repository\n 2. Set the following GitHub Action Secrets with the same values from above. The action creates a `config.json` file on the fly.\n * `BSKY_BASE_URL`: The base URL for the Bluesky API (e.g., https://bsky.social/xrpc).\n * `BSKY_HANDLE`: Your Bluesky handle.\n * `BSKY_PASSWORD`: Your Bluesky app password.\n * `BSKY_DAY_COUNT`: Number of days to keep.\n 3. Run the Workflow manually via `Actions > Daily Cleanup > Run workflow` to verify the above settings work correctly\n\n\n\n## Closing thoughts\n\nMaybe Bluesky will add its own version of post deletion (or at least, ephemeral posts). Until then, this is a straightforward way to accomplish that goal. Everyone, myself included, should be cautious of what all we're leaving on the Internet.\n\nFuture ideas that aren't implemented yet:\n\n * Dry-run mode to see what _would_ be deleted\n * A way to set a threshold for keeping a post (number of likes, re-posts, etc.)\n * Interactive mode to pick and choose posts to keep\n\n\n\n* * *\n\n 1. I will note here that deleting something from the internet does not make it go away because archiving tools do a decent job of grabbing content from even the quiet corners of the web. ↩︎\n\n 2. I refuse to acknowledge the name ever changed. ↩︎\n\n 3. See notes on third-party tools to create an App Password. ↩︎\n\n\n",
"title": "To Clear Bluesky",
"updatedAt": "2025-05-04T15:10:00.000Z"
}