| 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
- 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.
- Pick targets. Confirm which platforms to publish to (default offer: X,
Bluesky, Reddit; add dev.to when relevant).
- 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.
- Review gate. Show every draft to the user together. Let them edit. Do not
proceed until they explicitly approve.
- 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.
- 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).
SKILL=~/.harnesses/skills/social/oss-x-post
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
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)
- Posting only — never reply, DM, follow, like, repost, or chase trends.
- One main post per platform per launch (an optional thread is fine).
- Different content per platform; never blast identical text everywhere.
- Every draft is human-approved before
--yes.
- On send failure, stop and report — do not retry in a loop.