Turn one open-source release/topic into platform-tailored posts and publish them through a gated, auditable path. Use when the user wants to announce or promote an OSS project/release across X, Bluesky, dev.to, Reddit, Hacker News, etc. Triggers: "announce my release", "promote my repo", "post about this project", "oss launch", "Show HN", "发布开源项目", "宣传项目".
Scanned 9/2/2026
Install to Claude Code
npx -y skills add signalridge/dotfiles --skill oss-x-post --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Oss X Post?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/signalridge-oss-x-post)More formats (shields.io, HTML) on the badges page.
---
name: oss-launch
description: 'Turn one open-source release/topic into platform-tailored posts and publish them through a gated, auditable path. Use when the user wants to announce or promote an OSS project/release across X, Bluesky, dev.to, Reddit, Hacker News, etc. Triggers: "announce my release", "promote my repo", "post about this project", "oss launch", "Show HN", "发布开源项目", "宣传项目".'
---
# OSS Launch
Take **one topic** (a release, a new project, a milestone) and produce **different,
platform-native content for each target**, then publish through the gated
`social-post` wrapper. One idea in, many tailored posts out — never the same blob
copy-pasted everywhere.
## Voice (non-negotiable)
- English, written for **developers**, in the project author's own voice.
- **No hype, no marketing-speak.** State concrete technical value plainly.
- Never invent metrics, stars, benchmarks, users, or endorsements.
- At most 2 hashtags, and only where they're idiomatic (X).
## Workflow
1. **Gather the brief.** Read what's available: `README.md`, `CHANGELOG.md`, the
GitHub release body, and the repo URL. Ask the user for the one-line angle if
it isn't obvious (what's new / why it matters). Keep it small — do not scan the
whole repo.
2. **Pick targets.** Confirm which platforms to publish to (default offer: X,
Bluesky, Reddit; add dev.to when relevant).
3. **Draft per platform.** Write one file per target under `tmp/launch/<platform>.md`
following the rules below. Each draft is genuinely rewritten for its platform —
not a truncation of the X post.
4. **Review gate.** Show every draft to the user together. Let them edit. Do not
proceed until they explicitly approve.
5. **Publish — only through this skill's `scripts/social-post`.** For each approved
draft run the dry-run first, show it, then re-run with `--yes` after confirmation.
Never call `crosspost`, `xurl post`, or any platform CLI directly.
6. **Report.** List what was posted (and any failures) with links/IDs.
## Per-platform rules
| Platform | File | Limit | Shape |
| -------- | ---------------------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| X | `tmp/launch/x.md` | 280 | One hook line + concrete value + repo link. ≤2 hashtags. |
| Bluesky | `tmp/launch/bluesky.md` | 300 | Slightly more relaxed than X; can add one line of context. |
| dev.to | `tmp/launch/devto.md` | — | Full technical post (markdown). Lead with the problem; include a code/usage snippet and the canonical repo link. |
| Reddit | `tmp/launch/reddit-<sub>.md` | title ≤300 | Per-subreddit. Frame as "I built X to solve Y, feedback on Z" — not "please star". One file per subreddit, reworded for that community. |
For Reddit, first run the bundled helper `bash "$SKILL/scripts/reddit-submit" rules <sub>`
and `… requirements <sub>` (`$SKILL` defined below) and adapt the draft to that
subreddit's rules before submitting.
## Publishing commands
The publish gate (`social-post`) and the Reddit helper (`reddit-submit`) are bundled in
this skill under `scripts/` — there is no `~/.local/bin` dependency. Dry-run is the
default; `--yes` actually sends. Credentials come from gopass at send time (see
`docs/social-publishing.md`).
```bash
SKILL=~/.harnesses/skills/social/oss-x-post # this skill's installed path
bash "$SKILL/scripts/social-post" x --file tmp/launch/x.md
bash "$SKILL/scripts/social-post" bluesky --file tmp/launch/bluesky.md
bash "$SKILL/scripts/social-post" devto --file tmp/launch/devto.md
bash "$SKILL/scripts/social-post" reddit --subreddit rust --title "<title>" --file tmp/launch/reddit-rust.md
# add --yes to each, only after the user approves the dry-run
```
## Prepare-only platforms (no API — never auto-post)
These have no publishing API, or automated posting violates their norms and gets
flagged. Produce a ready-to-paste artifact and a checklist, then **open the page so
the user submits manually**. Do not script the submission.
- **Hacker News (Show HN):** title `Show HN: <name> – <one line>` + a first comment
with the backstory and a direct, signup-free try link. Open <https://news.ycombinator.com/submit>.
- **Lobsters:** only if the user has an account/invite; high-quality writeup. Manual.
- **Product Hunt:** draft the tagline, description, first maker comment, and a media
checklist. Launch is manual in the PH UI.
- **Directories** (OpenSourceAlternative.to, AlternativeTo, LibHunt, awesome lists):
for awesome lists, draft a `gh` pull request; for the rest, fill the submit form
manually.
Write these drafts to `tmp/launch/<platform>.md` too, clearly marked as manual.
## Out of scope (intentional)
This skill is for **broadcast publishing only**. The following are deliberately not
handled here, and `social-post` will refuse to do them:
- **DMs / replies / follows / likes / reposts / quote-engagement loops.** Platform
ToS (X, LinkedIn, Reddit) and most data-protection regimes (GDPR / ePrivacy /
PIPL) treat automated one-to-one outreach as spam. Account suspension risk is
high and conversion is poor. Do this manually in the platform UI, sparingly,
and only where the recipient has signalled interest.
- **Research / audience discovery.** Use the sibling `xurl` skill for X reads
(search / profile / timeline). xurl is read-only — it identifies who's already
discussing your niche so you can engage **publicly and manually**.
- **Engagement-growth automation** of any kind (follow-for-follow, reply ladders,
metric chasing).
The right escalation when promoting a project is: `xurl` search → triage manually
→ **public reply / quote** to a relevant tweet (high reach, low spam risk) → if
someone clearly signals interest, a single hand-written DM. Never templated,
never batched, never via this toolchain.
## Safety rules (enforced by `social-post`, restated here)
1. Posting only — never reply, DM, follow, like, repost, or chase trends.
2. One main post per platform per launch (an optional thread is fine).
3. Different content per platform; never blast identical text everywhere.
4. Every draft is human-approved before `--yes`.
5. On send failure, stop and report — do not retry in a loop.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!