Postiz
gitroomhq/postiz-agent
Postiz is a tool to schedule social media and chat posts to 28+ channels X, LinkedIn, LinkedIn Page, Reddit, Instagram, Facebook Page, Threads, YouTube, Google My Business, TikTok, Pinterest…
Renders a Bluesky post as an anonymised screenshot so its words can be criticised without a link back to whoever wrote them.
$ npx skills add oaustegard/claude-skills --skill dunking-anonymously -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install oaustegard/claude-skills dunking-anonymously --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/dunking-anonymously .claude/skills/dunking-anonymously && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "dunking-anonymously" agent skill from https://github.com/oaustegard/claude-skills/tree/main/dunking-anonymously into .claude/skills/dunking-anonymously/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dunking-anonymously", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/oaustegard/claude-skills/tree/main/dunking-anonymouslyType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add oaustegard/claude-skills --skill dunking-anonymously -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install oaustegard/claude-skills dunking-anonymously --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/dunking-anonymously .agents/skills/dunking-anonymously && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "dunking-anonymously" agent skill from https://github.com/oaustegard/claude-skills/tree/main/dunking-anonymously into .agents/skills/dunking-anonymously/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dunking-anonymously", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add oaustegard/claude-skills --skill dunking-anonymously -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install oaustegard/claude-skills dunking-anonymously --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/dunking-anonymously .cursor/skills/dunking-anonymously && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "dunking-anonymously" agent skill from https://github.com/oaustegard/claude-skills/tree/main/dunking-anonymously into .cursor/skills/dunking-anonymously/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dunking-anonymously", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/oaustegard/claude-skills.git --path dunking-anonymously--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add oaustegard/claude-skills --skill dunking-anonymously -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install oaustegard/claude-skills dunking-anonymously --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/dunking-anonymously .gemini/skills/dunking-anonymously && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "dunking-anonymously" agent skill from https://github.com/oaustegard/claude-skills/tree/main/dunking-anonymously into .gemini/skills/dunking-anonymously/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dunking-anonymously", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install oaustegard/claude-skills dunking-anonymouslyInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add oaustegard/claude-skills --skill dunking-anonymously -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/dunking-anonymously .github/skills/dunking-anonymously && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "dunking-anonymously" agent skill from https://github.com/oaustegard/claude-skills/tree/main/dunking-anonymously into .github/skills/dunking-anonymously/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dunking-anonymously", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add oaustegard/claude-skills --skill dunking-anonymously -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install oaustegard/claude-skills dunking-anonymously --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/dunking-anonymously .opencode/skills/dunking-anonymously && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "dunking-anonymously" agent skill from https://github.com/oaustegard/claude-skills/tree/main/dunking-anonymously into .opencode/skills/dunking-anonymously/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dunking-anonymously", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
dunking-anonymouslyRenders a Bluesky post as an anonymised screenshot so its words can be criticised without a link back to whoever wrote them.
Dunking Anonymously is an agent skill from oaustegard/claude-skills. Renders a Bluesky post as an anonymised screenshot so its words can be criticised without a link back to whoever wrote them. Blacks out avatar, display name, handle and any at-mentions in declassified-document styling, then emits a PNG and its alt text. Use for anonymous dunk-quoting, "dunk on this without linking it", "screenshot this post with the author hidden", "quote this without naming them", "redact this before I share it", or when a bad take from a small account deserves an answer and its author does not…
Its SKILL.md is about 1.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including scripts and assets (for example `CHANGELOG.md`, `README.md` and `scripts/dunk.py`).
It sits in Writing & Content. It works with Bluesky. The repository describes itself as: My collection of Claude skills. The licence is MIT.
Read from SKILL.md and the folder at commit cf49d47. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
python3From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
bsky.appFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Dunking Anonymously loads about 1.6k tokens when it runs. Until then it costs about 140 tokens; SKILL.md has 903 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from oaustegard/claude-skills at commit cf49d47, republished under its MIT licence (© oaustegard). 903 words, ~1,610 tokens.
.claude/skills/dunking-anonymously/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.A quote-post delivers your whole audience to the original author. For an account with forty followers that is a pile-on whatever your caption said. This renders the post as an image instead, so the words can be quoted without the handle.
Idea from Luis Villa, who built the same feature for himself (https://bsky.app/profile/lu.is/post/3mv6ynbcjr62b). His render greys the identity out; this one blacks it out.
python3 scripts/dunk.py https://bsky.app/profile/someone.bsky.social/post/3mv6...Takes a bsky.app URL, an at:// URI, or handle/rkey. Writes <rkey>.png to
the working directory, prints the alt text to stdout, and writes <rkey>.json
holding the source URI for your own records. The source URI stays out of both
the image and the alt text.
| flag | effect |
|---|---|
--redact "phrase" | blacks out a literal phrase, repeatable |
--stamp | adds the rotated REDACTED stamp |
--show-date | prints the post date in the footer |
--out PATH | output path |
--width N | image width, default 1200 |
Then read the rendered PNG, actually open it, and re-run with --redact for
anything in the body that identifies the author. This is the step
that gets skipped.
Deps are PIL and the standard library. DejaVu Mono ships with the container. The API call is unauthenticated, so it needs no token and leaves no trace in anyone's notifications. See README.md for the host fallback and network surface.
Avatar, display name and handle become black bars. Every at-mention facet in the
body is blacked out, since a mention is a second person's handle and a strong
search key for finding the original. Embedded images, video, link cards and quoted
posts render as [image not shown] and friends rather than being fetched, since
an embedded image can carry a face, a location or a watermark.
Engagement counts are dropped. The date is dropped unless --show-date, because
a date plus one distinctive sentence narrows a search to a single post.
The script cannot strip identity from the post's own words. Bluesky indexes full
post text, so a post naming its author's employer, town or cat stays traceable by
anyone who pastes a sentence into search. --redact is the only defence and it
is manual.
| situation | what owns it |
|---|---|
| reading, searching or sampling Bluesky content | browsing-bluesky |
| sorting an account list by topic | categorizing-bsky-accounts |
| posting a link with a card preview | muninn_utils.bsky_card |
| bulk-classifying the repliers under a post | muninn_utils.bsky_moderation |
Quote-post public figures and large accounts normally. Anonymising a senator is not protection. It removes the reader's ability to check the source while protecting nobody. The skill is for accounts small enough that attention itself is the harm.
Earned exceptions. Anonymising a large account is earned when the post is being shown as a specimen of a pattern rather than as one person's position, and the handle would pull the thread toward the individual. It is not earned when the reader would reasonably want to verify who said it.
Abandon mid-run when the post cannot be anonymised, meaning the author's
identity is the claim, the text names them, or the render still reads as them
after --redact has eaten half the body. At that point either quote-post it with the
link or drop it. A half-redacted post that everyone recognises is worse than
both, because it performs restraint while doing the pile-on.
Do not use it to launder something you would not say with the link attached. If the criticism only works because nobody can read the original in context, fix the criticism.
Black bars in the header, author named in the body. The render looks
correctly anonymised and one sentence still says "when I worked at Foo". Signal:
you did not read the PNG, you read the terminal. Open the image every time and
pass --redact per identifying phrase.
Two bars where one phrase should be. A multi-word --redact phrase renders
as separate bars with visible gaps, and word lengths leak. Signal: gaps inside
what should be one black run. Adjacent redacted tokens are meant to merge across the
spaces between them. If they do not, the merge logic in render() broke.
Mentions survive the redaction. Signal: an @handle renders as readable
text. The script reads mention facets, not the @ character, so a post whose
facets were stripped by the client that wrote it has no mention to find. Catch
it by reading the PNG and use --redact "@handle" as the fallback.
no post at at://.... The post is deleted, the author blocks the public
AppView, or the rkey is wrong. Not a transport failure, so refetching will not
fix it.
403 from the AppView. public.api.bsky.app refuses some proxied
environments. The script retries on api.bsky.app, which serves the same
lexicon, and only gives up when both refuse.
python3 scripts/dunk.py <url> --stampThen open the PNG. Three checks: no handle or display name anywhere in the image, no at-mention rendered as text, and the alt text opening with "Screenshot of a Bluesky post, author hidden:".
A bad success here is a clean-looking render that still identifies its author — every bar in place, and the body naming a workplace or a town. It passes every automated check the script can make, which is why the read-through is part of the procedure rather than a nicety.
Attach the PNG in whatever client you post from and paste the printed alt text. It opens with "Screenshot of a Bluesky post, author hidden:" so screen-reader users get the framing that sighted readers get from the black bars.
© oaustegard, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (scripts, assets) in dunking-anonymously of oaustegard/claude-skills.
Open the folder on GitHubat commit cf49d47
Dunking Anonymously next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Dunking Anonymously this skilloaustegard/claude-skills | 150 | — | ~1.6k | Automated safety check: Pass | MIT | |
| Postizgitroomhq/postiz-agent | 508 | 2 repos | ~7.9k | Automated safety check: Pass | AGPL-3.0 | |
| Typefullyfreekmurze/dotfiles | 1k | 1 repos | ~3.4k | Automated safety check: Notes | None | |
| Creating Letta Code Channelsletta-ai/skills | 149 | — | ~1.1k | Automated safety check: Pass | MIT | |
| Outlier Post FinderScrapeCreators/social-media-research-skills | 3.4k | — | ~1.5k | Automated safety check: Notes | MIT | |
| Content Calendar Smsblacktwist/social-media-skills | 559 | — | ~2.8k | Automated safety check: Pass | MIT |
gitroomhq/postiz-agent
Postiz is a tool to schedule social media and chat posts to 28+ channels X, LinkedIn, LinkedIn Page, Reddit, Instagram, Facebook Page, Threads, YouTube, Google My Business, TikTok, Pinterest…
freekmurze/dotfiles
Create, schedule, and manage social media posts via Typefully.
letta-ai/skills
Builds and debugs Letta Code channels, including first-party channel adapters and dynamic user channel plugins under ~/.letta/channels.
ScrapeCreators/social-media-research-skills
A skill your agent uses when the user wants to find posts, videos, reels, shorts, tweets, or social content that overperformed versus a creator, brand, or competitor baseline.
blacktwist/social-media-skills
When the user wants to plan a posting schedule, create a content calendar, or organize when and what to post.
blacktwist/social-media-skills
When the user wants to turn one piece of content into multiple formats or adapt content across text-first and visual-first platforms (LinkedIn, Twitter/X, Threads, Bluesky, Facebook, Instagram…
oaustegard/claude-skills
Builds interactive Vega-Lite charts from uploaded data: analyzes the fields, picks five to ten fitting chart types, and produces a React artifact with the data embedded inline.
oaustegard/claude-skills
Builds self-contained single-file HTML pages such as reports, decks, postmortems, flowcharts and prototypes from a small spec using a bundled Python composer and templates.
oaustegard/claude-skills
Rewrites model-sounding prose into plain technical writing and checks that every claim survives, for PR text, docs, commit messages and similar drafts.
oaustegard/claude-skills
Guides building standards-based Preact apps with native-first choices, HTM syntax, import maps and vendored ESM, from single-file demos to larger builds.
oaustegard/claude-skills
Deprecated sampler that captures short windows of the Bluesky firehose, clusters trending terms and builds an HTML report; replaced by the browsing-bluesky skill.
oaustegard/claude-skills
Has a fresh-context adversary attack a blog post, recommendation, analysis brief or piece of code before you ship it, using a profile suited to that kind of artifact.
Works with
Categories
Renders a Bluesky post as an anonymised screenshot so its words can be criticised without a link back to whoever wrote them. Dunking Anonymously is an agent skill from oaustegard/claude-skills. Renders a Bluesky post as an anonymised screenshot so its words can be criticised without a link back to whoever wrote them.
Dunking Anonymously fits situations like: anonymous dunk-quoting; dunk on this without linking it; screenshot this post with the author hidden; quote this without naming them.
Run `npx skills add oaustegard/claude-skills --skill dunking-anonymously -a claude-code`. Or copy the skill folder (dunking-anonymously in oaustegard/claude-skills) into .claude/skills/dunking-anonymously in your project. Claude Code loads it when a task matches its description.
Run `npx skills add oaustegard/claude-skills --skill dunking-anonymously -a codex`. Or copy the skill folder (dunking-anonymously in oaustegard/claude-skills) into .agents/skills/dunking-anonymously in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add oaustegard/claude-skills --skill dunking-anonymously -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/dunking-anonymously, .gemini/skills/dunking-anonymously, .github/skills/dunking-anonymously and .opencode/skills/dunking-anonymously in your project.
Going by SKILL.md and its folder, Dunking Anonymously needs Python for the scripts in its folder and the command-line tools its instructions call (python3). Our summary lists: Python 3.
SKILL.md names 1 domain. In commands or code: bsky.app; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Dunking Anonymously is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.6k tokens (SKILL.md is roughly 6.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Dunking Anonymously: Postiz (gitroomhq/postiz-agent, 508 stars), Typefully (freekmurze/dotfiles, 1k stars), Creating Letta Code Channels (letta-ai/skills, 149 stars) and Outlier Post Finder (ScrapeCreators/social-media-research-skills, 3.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
oaustegard (a GitHub user) maintains it in oaustegard/claude-skills, which has 150 GitHub stars. The repository holds 66 skills in this directory. The repository was last updated on October 8, 2026.
Source: oaustegard/claude-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.