Agent skill

Announce Article

by open-cqrs in open-cqrs/opencqrs

Generate the release announcement package for a finished blog article — Google-Sheet row fields plus three LinkedIn-post variants — and print everything to the terminal as copy-ready templates.

Apache-2.0Auto-check: notesWriting & Content

Install Announce Article

skills CLI
$ npx skills add open-cqrs/opencqrs --skill announce-article -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install open-cqrs/opencqrs announce-article --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/open-cqrs/opencqrs.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/announce-article .claude/skills/announce-article && rm -rf skills-src

Use ~/.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/

Facts

Skill name
announce-article
GitHub stars
118
Token cost
~2.6k tokens
SKILL.md length
1,346 words
Files
1
Skills in repo
7
Repo updated
First seen
Licence
Apache-2.0

At a glance

Generate the release announcement package for a finished blog article — Google-Sheet row fields plus three LinkedIn-post variants — and print everything to the terminal as copy-ready templates.

  • Works in 7 steps: Locate the Article → Extract Metadata → Construct the Published URL → …
  • Tasks that involve Social media posts
  • SKILL.md covers Configuration, Workflow and End-State
  • Reaches docs.opencqrs.com

What it does

Announce Article is an agent skill from open-cqrs/opencqrs. Generate the release announcement package for a finished blog article — Google-Sheet row fields plus three LinkedIn-post variants — and print everything to the terminal as copy-ready templates. Final, terminal step in the article pipeline.

Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Writing & Content, covering Social media posts, Excel spreadsheets and Changelog and release notes. It works with LinkedIn and Google Sheets. The repository describes itself as: Java CQRS/ES Framework for the EventSourcingDB. The licence is Apache-2.0.

When your agent uses it

  • Tasks that involve Social media posts
  • Tasks that involve Excel spreadsheets
  • Tasks that involve Changelog and release notes

Example prompts

  • “/announce-article”

Requirements

  • Pre-approved tools (allowed-tools): Read, Glob, Grep, Bash

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Locate the Article
  2. Extract Metadata
  3. Construct the Published URL
  4. Generate the Sheet Row
  5. Generate Three LinkedIn-Post Variants
  6. Manual Operations Checklist
  7. Output Format

What it can do on your machine

Read from SKILL.md and the folder at commit 48b96be. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Glob
    • Grep
    • Bash

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • docs.opencqrs.com

    Also links to:

    • docs.google.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Announce Article loads about 2.6k tokens when it runs. Until then it costs about 64 tokens; SKILL.md has 1,346 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~64
When it runs · the whole SKILL.md, loaded when a task matches
~2.6k

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.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Read, Glob, Grep, Bash

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); files beside SKILL.md are not scanned.

SKILL.md

The full file from open-cqrs/opencqrs at commit 48b96be, republished under its Apache-2.0 licence (© open-cqrs). 1,346 words, ~2,646 tokens.

Download SKILL.mdSave it as .claude/skills/announce-article/SKILL.md (or your agent's skills folder).
name
announce-article
description
Generate the release announcement package for a finished blog article — Google-Sheet row fields plus three LinkedIn-post variants — and print everything to the terminal as copy-ready templates. Final, terminal step in the article pipeline.
allowed-tools
Read, Glob, Grep, Bash
argument-hint
[path-to-article] [optional: personal-motivation hint]

Article Announcement Skill

Generate the release-package templates for a published article: $ARGUMENTS

Layout reference: the full pipeline is specified in .claude/article-pipeline.md. This skill runs after enrich-article and after the article is published/merged. It produces no files — its only output is terminal-printed copy-ready templates the user pastes into the tracking Google Sheet and LinkedIn.

You are the announcement formulator at the end of the article chain. The article is already shipped. Your job is to deliver two artifacts to the terminal:

  1. The full set of fields for the tracking Google Sheet row corresponding to this article.
  2. Three LinkedIn-post variants in German, each with a different rhetorical energy.

You also remind the user of the manual sheet operations the read-only Drive integration cannot perform (row background colour, etc.).

Configuration

Workflow

Step 1: Locate the Article
  1. If $ARGUMENTS contains a path to a markdown file under mkdocs/docs/blog/posts/, use it.
  2. Otherwise, list the most recent posts under mkdocs/docs/blog/posts/ (sorted by date desc) and ask which one to announce.
  3. Read the article file.
Step 2: Extract Metadata

From the article's frontmatter, extract:

  • title
  • date
  • slug
  • categories (often two: a topic category like Event Sourcing and a series category)
  • tags

From the article body, also identify:

  • The central named concept the article introduces (often appears in section headings and the lede — e.g. Process Version Pinning, Lazy Enrichment, Subject Conditions).
  • The core question the article answers (often stated in the opening paragraphs).
  • One or two bullet-worthy facts about the solution — usually mirrored in the article's tldr/summary or in the "What You Have Learned" section.

If a session folder .article-work/{date}-{slug}/ exists, scan brief.md and enrichment-notes.md for additional context (especially personal motivation, audience-question anecdotes, or framing hints the article itself does not spell out).

Step 3: Construct the Published URL

https://docs.opencqrs.com/blog/{slug}/

The slug comes from the article frontmatter, not from the file path.

Step 4: Generate the Sheet Row

Produce a copy-ready block with these fields, in this exact order, each in its own fenced code block under a clear label:

  • Topic — one or two sentences describing what the article is about, suited for the planning sheet (not the article opener). Strip any padding from the existing topic entry if rewriting.
  • Title — verbatim from the frontmatter.
  • Key Focus — one tight paragraph (1–2 sentences) summarising the central insight. Avoid duplicate clauses — if the existing sheet cell has been copy-pasted from the brief, produce a clean, dedupe'd version.
  • Keywords — verbatim from tags, comma-separated, lower-case as written.
  • Publishing Date — frontmatter date, formatted DD.MM.YYYY.
  • Category — comma-separated list from frontmatter categories, same order as in the article.
  • Comments — leave empty unless there is something genuinely worth noting (open follow-up, special caveat). Default: (leer).
Step 5: Generate Three LinkedIn-Post Variants

Each variant follows the same structural template, but with a different opener energy:

  • Variant A — Rhetorical-question hook. Open with a direct question to the reader that names the broader phenomenon the article addresses. Example: "Wie geht eure Software eigentlich damit um, dass Geschäftsprozesse langlaufend und evolutionär sind?"
  • Variant B — Declarative observation. Open with a punchy statement of the underlying tension. Example: "In klassischen Systemen ist eine Datenänderung ein Skript. In Event Sourcing ist sie eine Frage der Architektur."
  • Variant C — Counter-intuitive claim or surprise. Open with something that mildly contradicts expectation, making the reader want to know why. Example: "Veränderung ist im Event Sourcing kein Bug, sondern Teil des Modells."

All three then share the same downstream structure:

  1. Personal/contextual paragraph — why this article matters, broad relevance, ES-elegance note. Roughly 1–2 sentences. If the user supplied a personal-motivation hint in $ARGUMENTS, weave it in. Otherwise, default to: "Auf diesen Artikel habe ich mich besonders gefreut. Das Thema trifft viele, die heute moderne Software bauen — und er zeigt einmal mehr, wie sauber sich komplexe Probleme mit Event Sourcing lösen lassen."
  2. Problem-to-solution bridge sentence — names the central concept (Step 2) as the article's proposal. Example: "Wenn sich die Geschäftslogik selbst ändert — nicht nur ihre Datenstruktur —, stellt sich für jede laufende Instanz die Frage: nach welchen Regeln läuft sie weiter? Process Version Pinning gibt eine saubere Antwort:"
  3. Three bullet points with semantic emojis (see Style Rules below). Each bullet is one short concrete claim about how the solution works, no jargon-stacking.
  4. Wrap-up sentence — one line that summarises what the pattern buys you.
  5. Link — 👉 https://docs.opencqrs.com/blog/{slug}/
  6. Hashtags — article tags converted to PascalCase hashtags PLUS the stable brand/tech set: #EventSourcing #CQRS #SoftwareArchitecture #OpenSource #OpenCQRS #DigitalFrontiers #Kotlin #SpringBoot. Article tags first, then the stable set. Deduplicate.
Show full SKILL.md (567 more words)Show less
Style Rules (apply to ALL variants)

These rules encode lessons learned from prior post iterations — follow them strictly:

  • Knackig, präzise, kürzer. A LinkedIn post is not a blog summary. If a sentence does not advance reader understanding or invitation, cut it.
  • No 🔹 bullets. Use semantic emojis that match the bullet content. Examples that have worked:
    • 📌 for pinning / anchoring concepts
    • 📘 for a ruleset / strategy / encoded policy
    • 🕰️ for time, durability, "auch Jahre später"
    • 📦 for self-contained units / packages
    • 🧩 for composability / fitting in
    • 🔒 for invariants / immutability
    • ⚙️ for mechanisms / processing
    • ♾️ for indefinite continuation Pick what fits the actual claim. Never pad with generic emojis.
  • No Denglish mid-sentence. Established technical terms (Event Sourcing, CQRS, Upcasting, Process Version Pinning, Strategy, Ruleset) stay in English as named noun phrases, embedded in clean German grammar. Do NOT write "Wenn sich Business Logic in Event-Sourced Systems ändert" — that's English vocabulary on German scaffolding. DO write "Wenn sich die Geschäftslogik selbst ändert" and treat Process Version Pinning as a proper noun for the concept.
  • No assumed cross-article context. A LinkedIn post must stand on its own. Do not reference "Upcasting from the previous article" unless you also explicitly say "first part of the series". Better: rephrase the problem so the named concept introduces itself.
  • Personal voice is welcome, anecdotal scaffolding is not. A line like "Auf diesen Artikel habe ich mich besonders gefreut" works because it is short and declarative. Long talk-Q&A setups feel forced unless the user supplies a real one.
  • No mistaken claims. Avoid sweeping statements like "klassische Migration hilft nicht" — they are usually too sharp and easy to disprove. State the shape of the problem (e.g. "jede laufende Instanz braucht eine Antwort darauf, unter welchen Regeln sie weiterläuft") and let the article's solution speak.
  • Hashtag hygiene. Article tags first (PascalCase), then the stable set. No more than ~10 total. Keep them informative, not decorative.
Length target

Each variant should fit comfortably above the LinkedIn "see more" fold for a typical reader. As a heuristic: opener ≤ 2 short lines; personal paragraph ≤ 2 lines; bridge ≤ 2 lines; 3 bullets; one wrap-up line; link; hashtags. If a variant exceeds that envelope, tighten.

Step 6: Manual Operations Checklist

After the templates, print a short Manual Operations checklist reminding the user of what cannot be automated through the read-only Drive integration:

  • Set the article's row background colour to green (released indicator).
  • Paste the Post deutsch cell with the chosen variant.
  • Verify Category, Topic, Key Focus, Keywords cells against the templates — overwrite if drifted.
  • If the article belongs to a series, double-check the series ordering above the row matches the article positions.
Step 7: Output Format

Print to the terminal in this order, using markdown headings so the user can scan:

# Announcement Package — {Article Title}

## Sheet Row (copy-paste cell by cell)
... seven labelled code blocks, one per field ...

## LinkedIn Post — Variant A (Rhetorical question)

(post body in a fenced block)


## LinkedIn Post — Variant B (Declarative observation)

(post body)


## LinkedIn Post — Variant C (Counter-intuitive)

(post body)


## Manual Operations
- [ ] ...

Each variant goes inside its own fenced code block so the user can copy the whole thing with one click — do not insert the emojis as raw characters that confuse the code block; just include them inline.

End-State

You finish the chain. There is no handoff. The user copies what they need into the sheet and into LinkedIn. If they want a different variant set later, they re-invoke this skill — it is idempotent and reads the published article as ground truth.

If the user asks you to refine a variant (different hook, different bullet wording, different emoji set), do so directly in the conversation — do not rerun the full skill.

© open-cqrs, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/announce-article of open-cqrs/opencqrs.

Open the folder on GitHubat commit 48b96be

Compare with similar skills

Announce Article 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.

Announce Article compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Announce Article this skillopen-cqrs/opencqrs118—~2.6kAutomated safety check: NotesApache-2.0
Changelog Social RecapFlorianBruniaux/claude-code-ultimate-guide6.1k—~1.8kAutomated safety check: NotesCC-BY-SA-4.0
Product Update LoggerVarnan-Tech/opendirectory674—~3.9kAutomated safety check: PassMIT
Job Posting Intentgooseworks-ai/goose-skills1.2k1 repos~2.2kAutomated safety check: PassMIT
Book Publisherdmccreary/ibook-skills105—~1.3kAutomated safety check: PassCC-BY-NC-4.0
Fullenrich Content EngagersOthmane-Khadri/YALC-the-GTM-operating-system317—~1.5kAutomated safety check: WarnMIT

Similar skills

  • Changelog Social Recap

    FlorianBruniaux/claude-code-ultimate-guide

    Turns CHANGELOG.md entries for a release or a week into LinkedIn, Twitter/X, newsletter and Slack posts in French and English.

    6.1k GitHub stars~1.8k tokensUpdated 2 days ago
    Writing & ContentAuto-check: notes
  • Product Update Logger

    Varnan-Tech/opendirectory

    Tell the skill what your product shipped. An agent skill from Varnan-Tech/opendirectory.

    674 GitHub stars~3.9k tokensUpdated 1 mo ago
    Writing & ContentAuto-check passed
  • Job Posting Intent

    gooseworks-ai/goose-skills

    Detect buying intent from job postings. An agent skill from gooseworks-ai/goose-skills.

    1.2k GitHub starsUsed in 1 repo~2.2k tokens
    Documents & OfficeAuto-check passed
  • Book Publisher

    dmccreary/ibook-skills

    Publishes and promotes a finished intelligent textbook - GitHub README with badges and site statistics, LinkedIn announcement posts, LinkedIn carousel document posts (PPTX/PDF slideshows), and…

    105 GitHub stars~1.3k tokensUpdated yesterday
    Writing & ContentAuto-check passed
  • Fullenrich Content Engagers

    Othmane-Khadri/YALC-the-GTM-operating-system

    A skill your agent uses when the user says "enrich people who engaged with this post", "qualify post engagers with FullEnrich", "scrape and enrich LinkedIn post {URL}", "engagers from this post into…

    317 GitHub stars~1.5k tokensUpdated 1 mo ago
    Writing & ContentAuto-check: warnings
  • Repurpose Linkedin

    AgriciDaniel/claude-repurpose

    Generates LinkedIn content from content atoms: text posts with hook-first formatting, PDF carousel slide scripts (10-12 slides), and strategic polls.

    157 GitHub stars~1.6k tokensUpdated 6 mo ago
    Writing & ContentAuto-check passed

More from open-cqrs/opencqrs

  • Write Article

    open-cqrs/opencqrs

    Write well-structured professional articles. An agent skill from open-cqrs/opencqrs.

    118 GitHub stars~3.9k tokensUpdated 11 days ago
    Auto-check: notes
  • Brainstorm Article

    open-cqrs/opencqrs

    Develop a blog article topic through a guided conversation. An agent skill from open-cqrs/opencqrs.

    118 GitHub stars~3.7k tokensUpdated 11 days ago
    Auto-check: notes
  • Enrich Article

    open-cqrs/opencqrs

    Enrich a blog article with cross-links to OpenCQRS documentation, abbreviation tooltips, admonitions, and content annotations.

    118 GitHub stars~4k tokensUpdated 11 days ago
    Auto-check passed
  • Grill Article

    open-cqrs/opencqrs

    Critically inspect a written article before enrichment — verify codebase claims with real tool lookups, find internal contradictions, and (for argumentative articles) sparr with the author about…

    118 GitHub stars~5k tokensUpdated 11 days ago
    Auto-check: notes
  • Prospect Topics

    open-cqrs/opencqrs

    Cross-article topic prospecting. An agent skill from open-cqrs/opencqrs.

    118 GitHub stars~2.5k tokensUpdated 11 days ago
    Auto-check: notes
  • Topic Dialogue

    open-cqrs/opencqrs

    Exploratory technical dialogue about a topic with an open outcome.

    118 GitHub stars~3.9k tokensUpdated 11 days ago
    Auto-check: notes

Questions about Announce Article

What does Announce Article do?

Generate the release announcement package for a finished blog article — Google-Sheet row fields plus three LinkedIn-post variants — and print everything to the terminal as copy-ready templates. Announce Article is an agent skill from open-cqrs/opencqrs. Generate the release announcement package for a finished blog article — Google-Sheet row fields plus three LinkedIn-post variants — and print everything to the terminal as copy-ready templates.

When should I use Announce Article?

Announce Article fits situations like: tasks that involve Social media posts; tasks that involve Excel spreadsheets; tasks that involve Changelog and release notes.

How do I install Announce Article in Claude Code?

Run `npx skills add open-cqrs/opencqrs --skill announce-article -a claude-code`. Or copy the skill folder (.claude/skills/announce-article in open-cqrs/opencqrs) into .claude/skills/announce-article in your project. Claude Code loads it when a task matches its description.

How do I install Announce Article in Codex?

Run `npx skills add open-cqrs/opencqrs --skill announce-article -a codex`. Or copy the skill folder (.claude/skills/announce-article in open-cqrs/opencqrs) into .agents/skills/announce-article in your project. Codex loads it when a task matches its description.

Can I use Announce Article in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add open-cqrs/opencqrs --skill announce-article -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/announce-article, .gemini/skills/announce-article, .github/skills/announce-article and .opencode/skills/announce-article in your project.

What does Announce Article need to run?

SKILL.md names no scripts, command-line tools or credentials: Announce Article is instructions for the agent only. Its frontmatter pre-approves these tools: Read, Glob, Grep, Bash.

Does Announce Article access the network?

SKILL.md names 2 domains. In commands or code: docs.opencqrs.com; the agent is likely to contact it when it follows the instructions. As links in the text: docs.google.com. This is read from the text; nothing was executed.

Is Announce Article safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Announce Article use?

Announce Article is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Announce Article use?

About 2.6k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Announce Article?

Skills that share tags, products or a category with Announce Article: Changelog Social Recap (FlorianBruniaux/claude-code-ultimate-guide, 6.1k stars), Product Update Logger (Varnan-Tech/opendirectory, 674 stars), Job Posting Intent (gooseworks-ai/goose-skills, 1.2k stars) and Book Publisher (dmccreary/ibook-skills, 105 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Announce Article?

open-cqrs (a GitHub organization) maintains it in open-cqrs/opencqrs, which has 118 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on September 28, 2026.

Source: open-cqrs/opencqrs on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.