agentleFS
PSCatLabsPSCatLabs/pscat/.claude/skills/announce-release/SKILL.md

announce-release

Skill2 starsChanged 27 days agoApache-2.0View on GitHub

Draft and (only after explicit approval) e-mail a pscat release announcement to the PSCat-announcements Google Group. Use when the user says "/announce-release", "announce the release", "send the release announcement", or "tell the mailing list about vX.Y.Z". Never sends without the user approving the exact subject and body in this conversation.

  • Installs packages

The file

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 4 are distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈4

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Write two files to the session scratchpad (not the repo): the draft, and the HTML version beside it.

    line 38
  2. Distinctive:

    Leave out CI, dependency bumps and SDLC/process entries unless they change what users install.

    line 77
  3. Distinctive:

    Keep the plain text under ~350 words, the HTML's prose to about the same.

    line 84
  4. Distinctive:

    No hype words, no emoji. Don't invent features: every claim must trace to a CHANGELOG entry or PR.

    line 85
  5. Very specific:

    If credentials are missing, the script says what to set — point the user to docs/dev/ANNOUNCING.md and have them run any keychain command …

    line 112

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

announce-release — e-mail a release to the mailing list

scripts/announce_release.py does the mechanics (fetch the release, dry run, send over SMTP/TLS, refuse duplicates, log). Your job is the writing and the approval gate. Setup and credentials: docs/dev/ANNOUNCING.md.

Hard rule: no e-mail leaves without the user's explicit "send it" in this conversation for this exact draft. Not even to a test address. A changed draft needs a fresh approval.

1. Fetch the release

python3 scripts/announce_release.py info                  # latest stable release
python3 scripts/announce_release.py info --tag v0.7.0     # a specific one

It refuses pre-releases (-rc.N) unless --allow-prerelease is passed; ask the user before announcing a release candidate. A candidate has no CHANGELOG section: its GitHub notes are boilerplate, so draft from git log --no-merges <last stable tag>..<rc tag> and the PRs it cites, and say plainly that it is a pre-release for testing (plugin and GitHub downloads only; crates.io and npm stay on the last stable). A note: on stderr means the tag was already announced: say so and stop unless the user wants a resend.

The JSON body is the CHANGELOG.md section for that version (terse PR titles). Also read that section in CHANGELOG.md, and, where a headline entry is unclear, gh pr view <N> for the PR it cites.

2. Draft

Write two files to the session scratchpad (not the repo): the draft, and the HTML version beside it.

Subject: pscat 0.7.0: <the one or two headline changes>
Tag: v0.7.0
Html: announce.html

<plain-text body>

The e-mail goes out as multipart/alternative: mail clients show the HTML, and the plain text is the fallback (and what some readers of the group's digest see). Both say the same thing.

HTML (announce.html): copy template.html and fill every {{...}}. It carries the branding (logo, "PostScript for precision and imagination", the site's light palette), install steps for each host (Cowork, ChatGPT desktop, Claude Code, Codex) and a block of example prompts. Keep its e-mail rules (in the file's top comment): tables, inline styles, absolute https image URLs only — the site (https://pscatlabs.github.io/pscat/assets/...) or https://raw.githubusercontent.com/PSCatLabs/pscat/main/... — checked with curl -sI before use. Pick the three strip images and 4–6 prompts to show the range (a practical document, a QR code, a chalkboard formula, a painting, a chart, handwriting), weighted to what this release added. A prompt must work on a fresh plugin install and in one turn; if unsure, try it with the MCP tools first. Install steps: only channels this release ships (a candidate has no cargo install/npm line).

Plain text (Google Groups' archive and plain-text readers show it as-is; no Markdown tables or HTML):

  • One opening paragraph: what pscat is, in the README's voice — "PostScript for precision and imagination", practical documents and creative art — and what this release is about.
  • Highlights: 3–6 user-visible features, each a sentence of plain English saying what someone can now do. Translate PR titles; don't paste them.
  • Improvements and fixes: a short list, merged and summarised.
  • Leave out CI, dependency bumps and SDLC/process entries unless they change what users install.
  • Upgrade/install: one line (cargo install pscat, the plugin, npm — only the channels this release actually ships, per the release notes) and the getting-started guide link.
  • The release URL from info, then a one-line sign-off.

Keep the plain text under ~350 words, the HTML's prose to about the same. No hype words, no emoji. Don't invent features: every claim must trace to a CHANGELOG entry or PR.

3. Review

Show the user the complete subject, recipient and plain-text body (print the draft file verbatim), and give them the HTML to look at: render it to a PNG (npx playwright screenshot --full-page file://<path> out.png, or the Playwright MCP tools) and show the image, and give the absolute path of the .html so they can open it in a browser. Then the dry run:

python3 scripts/announce_release.py send --draft <file>

Then ask with AskUserQuestion: send to the list / send to a test address first / revise. Apply revisions and show the full draft again.

4. Send (only after approval)

# test address (not logged; does not block the real send)
python3 scripts/announce_release.py send --draft <file> --test-to <addr> --send --confirm v0.7.0
# the list
python3 scripts/announce_release.py send --draft <file> --send --confirm v0.7.0

If credentials are missing, the script says what to set — point the user to docs/dev/ANNOUNCING.md and have them run any keychain command themselves (! security add-generic-password ...); never ask them to paste a password into the chat. If the send fails, show the error; don't retry in a loop. Report the result and the log line it wrote.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.