Build in public
Agent Skills by Myra Agents — install with: npx skills add https://github.com/Myra-Agents/skills --skill <name>
npx -y skills add Myra-Agents/skills --skill build-in-publicAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Turn a shipped release OR a single feature/bug-fix branch into review-ready "build in public" drafts — an X/Twitter thread, a LinkedIn post, and (for major releases) a Product Hunt launch kit, from the repo's changelog, as English drafts you edit before posting. Use when the user wants to announce a release or a feature/fix, build in public, write a launch thread or post, draft a Product Hunt launch, or share dev progress publicly after tagging a version or finishing a branch.
SKILL.md
7.1 KB, ~1.7k tokens by cl100k_base, as published. Nobody here has run it
Build in Public
Turn a release into ready-to-edit launch copy. The skill reads the changelog
since the previous release, learns the product's voice from the repo, and writes
one English draft per channel — X/Twitter thread, LinkedIn post, and (for major
releases) a Product Hunt launch kit — into build-in-public/<tag>/. It drafts,
it never posts: you review the files, edit, and publish manually.
Resolve release → Changelog → Project context → Draft per channel → [you review the files] → Report + checklist
1. Resolve what to announce
- Scope — a whole release (a tag) or a single feature/bug-fix
branch. Branch mode makes a focused "just shipped X / just fixed Y" post
about one change (present tense, no Product Hunt); output goes to
build-in-public/<branch-slug>/. Pick branch mode when the user names a branch, a feature, or a fix rather than a version. - Tag (release) — use the tag the user names. If none, list candidates
(
git tag --sort=-v:refname | head) and confirm the latest version tag. - Branch — use the branch the user names (or the current branch). Its base defaults to the repo's default branch; the post covers only the commits the branch adds.
- Major? — a release is major when the tag is
vX.0.0(semver major bump) or the user calls it a launch/major. Major releases get the Product Hunt kit; others (and all branch posts) get X + LinkedIn only. - Series — a repo may hold several tag series (e.g.
v*app tags andserver-v*worker tags). Stay within the series of the tag you announce; the changelog helper does this automatically.
2. Build the changelog
Run the bundled helper from inside the target repo:
bash <skill-dir>/scripts/changelog.sh <tag> # release: auto prev-tag
bash <skill-dir>/scripts/changelog.sh <tag> <prev> # release: explicit range
bash <skill-dir>/scripts/changelog.sh --branch <name> # branch: vs default base
bash <skill-dir>/scripts/changelog.sh --branch <name> <base>
It prints grouped Features / Fixes / Improvements (Conventional Commits, PR
refs preserved) and counts pure maintenance commits instead of listing them.
Logic + manual fallback for non-conventional histories: references/changelog.md.
Curate — the changelog is raw material, not the post. For a release, pick the 2–4 changes a user actually cares about. For a branch, the post is usually one change — lead with what it does and why it helps, in plain language, not commit-speak.
3. Learn the project's voice
Gather, don't invent:
- What it is — one line. Sources: repo
README,CLAUDE.md,package.jsondescription. - Links — website / download / repo (
git remote get-url origin), and the release URL if one exists (gh release view <tag> --json urlwhenghis available). - Tone — skim existing public copy (a
blog/, landing page, prior posts) and match it. If there's none, ask the user for one line of positioning. - Locale — default English; switch only if the user asks.
If a product claim isn't discoverable, ask one tight question rather than guessing.
4. Write the drafts
Read references/platforms.md for each channel's exact format, limits, and
good/bad examples, then write to build-in-public/<tag>/:
x-thread.md— numbered thread: hook → 2–4 highlights → CTA + link. Annotate each tweet with its character count (≤280).linkedin.md— one narrative post + 3 highlights + link + a few hashtags.producthunt.md— major releases only — tagline (≤60), description, first maker comment, topics, gallery shot list, links.
Every file opens with > DRAFT — review & edit before posting; nothing is auto-posted. Honest copy only: no metrics you can't back, no competitor-
bashing, claim only what actually shipped.
5. Attach feature visuals
Posts with images of the actual features get far more engagement. From the
feat items in the changelog, build a shot list — roughly one image per
user-facing feature — and put the files in build-in-public/<tag>/images/.
Source them best-effort (mix — auto when possible):
- Auto-capture when the project can run and the feature has a UI: start the
app (its dev/preview command or an existing screenshot script) and capture the
screen/state each
feattouches; name files by feature (e.g.schedules-cron.png). Use whatever capture tooling the repo already has (Playwright, ascreenshots/shotsscript, the preview/browser tools). - Reuse existing assets for unchanged areas (e.g. a landing
assets/dir). - Else write
images/SHOTS.md— a checklist mapping each feature to the shot to capture — and leave it for the user to fill in.
Reference the chosen images in each draft (so the publish step can pick them up): X attaches up to 4, LinkedIn 1–N, Product Hunt uses them as the gallery.
6. Report
Tell the user the output directory, list the files + images written, and give a posting checklist: post the X thread · post on LinkedIn · (major) submit to Product Hunt · confirm the images attach · double-check every link. Flag anything you had to assume so they can fix it before posting.
7. Publish (optional)
The skill's job is the drafts (steps 1–5). Publishing is entirely optional — by default you copy-paste the files yourself. Two opt-in publishers ship for the LinkedIn draft; both post only the file you've already reviewed:
-
Direct, no third party —
scripts/linkedin.mjscalls LinkedIn's API itself. One-timelogin(OAuth, token cached locally), thenpost:LINKEDIN_CLIENT_ID=<id> LINKEDIN_CLIENT_SECRET=<secret> \ node scripts/linkedin.mjs login # once node scripts/linkedin.mjs post --file build-in-public/<tag>/linkedin.md \ --image build-in-public/<tag>/images/feature-a.png --image .../feature-b.png--image(repeatable) uploads the feature screenshots and attaches them. Personal profile (free, scopew_member_social). Posting as a Company Page (--org <id>) needs LinkedIn's gated Community Management API (separate app, review for production) — see the--orgnotes in the script header. -
Via Postiz —
scripts/post.mjsposts/schedules through a self-host/cloud Postiz instance. Setup + LinkedIn scope caveat:references/postiz.md. -
X stays manual: X's API is pay-per-use since 2026 (~$0.01/post, $0.20 with a link) — copy-paste the
x-thread.mddraft for free. -
Product Hunt stays manual: no launch API.
Gives 0 of the 12 instructions most social media skills give in ~1.7k tokens
Counted across 489 of the 492 authors here whose files we hold, read 2026-08-06
- build content around three to five pillarsin 24 of 489, across 12 files
- read product marketing context before asking questionsin 23 of 489, across 13 files
- respond to all comments on your postsin 21 of 489, across 9 files
- adapt tone and structure per platformin 18 of 489, across 8 files
- adapt content for each platformin 15 of 489, across 10 files
- use the output flag to specify an output directoryin 14 of 489, across 4 files
- Generate output logo images with white backgroundin 13 of 489, across 4 files
- Fix failing generation scripts directlyin 13 of 489, across 4 files
- ask user about html preview after logo generationin 12 of 489, across 3 files
- run the download script with a URLin 12 of 489, across 3 files
- implement exponential backoff for 429 responsesin 12 of 489, across 3 files
- include a single clear call to actionin 12 of 489, across 9 files
Said here and by no other author read
- confirm release tag if not specified
- run the changelog helper script
- curate changes into two to four highlights
- ask user if product positioning is unknown
- match existing public tone
- create a visual shot list for features
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.