Content Writer Agent
mastra-ai/mastra
Authoring playbook for building agents that draft written content — blog posts, marketing copy, social media posts, newsletters, product descriptions, landing pages, or ad copy.
Generates an AP-style press release for an intelligent textbook or course milestone — headline, lead, attributed quotes, boilerplate, and media-contact block.
$ npx skills add dmccreary/ibook-skills --skill press-release-generator -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install dmccreary/ibook-skills press-release-generator --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/dmccreary/ibook-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/archived/press-release-generator .claude/skills/press-release-generator && rm -rf skills-srcUse ~/.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/
Install the "press-release-generator" agent skill from https://github.com/dmccreary/ibook-skills/tree/main/skills/archived/press-release-generator into .claude/skills/press-release-generator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "press-release-generator", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/dmccreary/ibook-skills/tree/main/skills/archived/press-release-generatorType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add dmccreary/ibook-skills --skill press-release-generator -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install dmccreary/ibook-skills press-release-generator --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dmccreary/ibook-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/archived/press-release-generator .agents/skills/press-release-generator && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "press-release-generator" agent skill from https://github.com/dmccreary/ibook-skills/tree/main/skills/archived/press-release-generator into .agents/skills/press-release-generator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "press-release-generator", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add dmccreary/ibook-skills --skill press-release-generator -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install dmccreary/ibook-skills press-release-generator --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dmccreary/ibook-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/archived/press-release-generator .cursor/skills/press-release-generator && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "press-release-generator" agent skill from https://github.com/dmccreary/ibook-skills/tree/main/skills/archived/press-release-generator into .cursor/skills/press-release-generator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "press-release-generator", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/dmccreary/ibook-skills.git --path skills/archived/press-release-generator--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add dmccreary/ibook-skills --skill press-release-generator -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install dmccreary/ibook-skills press-release-generator --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dmccreary/ibook-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/archived/press-release-generator .gemini/skills/press-release-generator && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "press-release-generator" agent skill from https://github.com/dmccreary/ibook-skills/tree/main/skills/archived/press-release-generator into .gemini/skills/press-release-generator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "press-release-generator", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install dmccreary/ibook-skills press-release-generatorInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add dmccreary/ibook-skills --skill press-release-generator -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/dmccreary/ibook-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/archived/press-release-generator .github/skills/press-release-generator && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "press-release-generator" agent skill from https://github.com/dmccreary/ibook-skills/tree/main/skills/archived/press-release-generator into .github/skills/press-release-generator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "press-release-generator", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add dmccreary/ibook-skills --skill press-release-generator -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install dmccreary/ibook-skills press-release-generator --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dmccreary/ibook-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/archived/press-release-generator .opencode/skills/press-release-generator && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "press-release-generator" agent skill from https://github.com/dmccreary/ibook-skills/tree/main/skills/archived/press-release-generator into .opencode/skills/press-release-generator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "press-release-generator", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
press-release-generatorGenerates an AP-style press release for an intelligent textbook or course milestone — headline, lead, attributed quotes, boilerplate, and media-contact block.
Press Release Generator is an agent skill from dmccreary/ibook-skills. Generates an AP-style press release for an intelligent textbook or course milestone — headline, lead, attributed quotes, boilerplate, and media-contact block. Use when pitching to journalists or education trade press; distinct from linkedin-announcement-generator (social post) and readme-generator (GitHub docs).
Its SKILL.md is about 3.5k 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 Copywriting, Social media posts and Project management. It works with LinkedIn and GitHub. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 98a9991. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
python3curlFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
apstylebook.comowl.purdue.eduFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Press Release Generator loads about 3.5k tokens when it runs. Until then it costs about 84 tokens; SKILL.md has 1,503 words of instructions outside code blocks.
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.
The automated check found no risky patterns in SKILL.md.
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.
The full file from dmccreary/ibook-skills at commit 98a9991, republished under its MIT licence (© dmccreary). 1,503 words, ~3,530 tokens.
.claude/skills/press-release-generator/SKILL.md (or your agent's skills folder).This skill writes a professional press release that announces an intelligent textbook (or a major milestone, such as a new edition or a tie-in to current events or legislation). It pulls the same canonical book statistics that the README, LinkedIn, and case-study skills use, then reshapes them into the form journalists actually expect: Associated Press (AP) style, inverted-pyramid structure, a genuine news hook, attributed quotes, and a boilerplate.
A press release is not a LinkedIn post with a dateline glued on. The two formats optimize for different readers, and that difference drives almost every instruction below:
If you find yourself reaching for the LinkedIn voice (📊 bullet dumps, "thrilled to announce," hashtags), stop — that is the wrong instrument.
The skill must work in both of these situations, because the user often wants a release for a book that is already deployed but not checked out locally:
docs/learning-graph/book-metrics.json
and mkdocs.yml are on disk. Use the canonical metrics directly.Detect which mode you are in before gathering data, and tell the user which one you used so they know how the figures were sourced.
From mkdocs.yml (or, in live-site mode, the site <head> and footer):
site_name — the textbook titlesite_url — the live URL (the single most important link in the release)site_description — one-line descriptionrepo_url — repository, for a "the project is open source" line if relevantFrom docs/course-description.md (if present): audience, prerequisites,
subject scope, and learning goals. These shape the "who is this for" sentence.
Read the canonical metrics file — never recount content by hand or scrape the
brittle book-metrics.md table. This is the same source the other book skills
use, so every artifact reports identical numbers.
python3 - <<'PY'
import json, pathlib, sys
p = pathlib.Path("docs/learning-graph/book-metrics.json")
if not p.exists():
sys.exit("book-metrics.json missing — run bk-generate-book-metrics, or use Step 2B")
print(json.dumps(json.loads(p.read_text())["metrics"], indent=2))
PYUseful keys: chapters, concepts, glossaryTerms, quizQuestions,
microsims, words, equivalentPages, faqs, diagrams, developmentStage.
When there is no repo, the deployed site still yields hard, checkable facts. The sitemap is the fastest route to an accurate structural skeleton:
curl -s https://SITE/sitemap.xml | grep -o '<loc>[^<]*</loc>' | sed 's/<[^>]*>//g'From the URL list you can count chapters, simulations (/sims/), quizzes, and
named tools, and confirm the presence of a glossary, FAQ, and resources page.
Fetch the home page for the title, tagline, publisher, and mission language.
Prefer fewer, certain numbers (e.g., "nine chapters and four interactive
simulations," both countable from the sitemap) over impressive-but-unverifiable
ones. Tell the user which figures came from the sitemap so they can confirm.
This is the step that separates a real release from a glorified summary, and it is the step the repo cannot answer for you. Interview the user for:
If the user does not have a quote or contact yet, do not stall and do not invent them — see "Never fabricate sourced facts" below.
Use the structure and rules in the AP Style Reference section. Build the body in inverted-pyramid order: the single most important fact first, then decreasing importance, so an editor can cut from the bottom without losing the story.
Before presenting, verify against the Quality Checklist below. AP-style slips (a superlative in the headline, a wrong month abbreviation, a quote that starts with "I") are exactly what signals "amateur" to an editor.
Present the release as clean, copy-paste-ready text (plain paragraphs, no markdown styling inside the release body — newsrooms want plain text). Follow it with 2–4 lines of practical distribution advice tailored to the topic: which kinds of outlets fit (local dailies, education trade press, the relevant advocacy/professional newsletters, the city/regional desk), and a reminder to send as pasted text plus a PDF, not only an attachment.
Embed this format exactly; it is what newsrooms expect.
FOR IMMEDIATE RELEASE
[or: EMBARGOED UNTIL 9 A.M. CT, MONTH DAY, YEAR]
Headline in Title Case, Present Tense, No Period
Optional Subhead Adding the Second-Most-Important Fact
CITY, State abbrev., Month Day, Year — The lead sentence states WHO did WHAT,
WHEN, WHERE, and WHY in roughly 25–35 words, leading with the news hook.
The second paragraph expands the lead with the most important supporting facts
and context — the scale of the problem, the need, or the data.
"A quote that adds perspective or a forward-looking statement rather than
repeating the facts above," said Full Name, title at Organization. "An optional
second sentence."
Body paragraphs in descending order of importance: what the resource contains,
who it is for, what makes it credible or distinctive, how it is funded or
governed. Weave in two or three verifiable figures — do not dump a metrics list.
"An optional supporting quote from a partner, educator, parent, or expert,"
said Full Name, title at Organization.
A closing paragraph with availability, price (note if free), and the call to
action — the URL.
About [Organization]
[Organization] is a [one-sentence description]. [One or two sentences of
mission/background.] Learn more at [URL].
Media Contact:
Full Name
Email
Phone
###The closing ### (centered) is the traditional "end of release" mark; editors
rely on it to know nothing was truncated.
❌ Amazing New Epilepsy Textbook Will Revolutionize School Safety!
❌ Press Release: A New Resource for Schools
✅ Student-Led Group Releases Free Guide to Help Minnesota Schools Prepare for SeizuresFormat: CITY, State abbrev., Month Day, Year —
AP abbreviates these months: Jan., Feb., Aug., Sept., Oct., Nov., Dec. March, April, May, June, and July are spelled out. The city is uppercase; the state uses the AP abbreviation (e.g., Minn., Calif., Mass.). Large cities that stand alone without a state in AP style include New York, Chicago, Los Angeles, Boston, and Washington; most others take the state.
ST. PAUL, Minn., June 19, 2026 —
MINNEAPOLIS, Sept. 3, 2026 —Answer the five W's, hook first, in ~25–35 words. Lead with why it matters, not with the existence of a document.
❌ A new website has been launched that contains educational materials about
epilepsy for use in schools and other settings.
✅ With Minnesota law now requiring every school to be ready for student
seizures, a student-led advocacy group today released a free, plain-language
textbook that walks families and staff through seizure first aid, the law,
and a child's rights."Quote," said Full Name, title at Organization.❌ "I think this is a really exciting and important new resource," said the team.
✅ "Most seizures at school are handled by teachers, not doctors, so the people
on the front lines deserve materials they can actually use," said Jane Doe,
founder of the Epilepsy Data & Advocacy Network.A press release goes on the public record and editors verify it. A quote attributed to a named person, a contact phone number, a partner organization, or a statistic that turns out to be invented does lasting damage to the author's credibility and cannot be un-published once it is on the wire. So:
[DRAFT QUOTE — replace with approved language from Jane Doe, EDAN founder]
and tell the user it must be filled before distribution.[TK] ("to come") marker — e.g., [TK: media contact email] — for anything the user must supply. Bracketed gaps in a draft are
normal and expected; fabricated specifics are not.This is about protecting the user, not bureaucratic caution — frame any gaps to them plainly so they know exactly what to approve before sending.
[TK] placeholders flagged)###[TK]/[DRAFT ...] placeholder called out to the userFOR IMMEDIATE RELEASE
Nonprofit Releases Free Interactive Textbook on [Topic] for [Audience]
CITY, State., Month Day, Year — [Lead: hook + five W's in 25–35 words.]
[Second paragraph: the need or the data behind the news.]
"[Perspective quote that does not restate the facts]," said Full Name, title
at Organization.
[Body: what the resource includes — chapters, interactive simulations,
glossary, quizzes — woven with two or three verified figures and who it serves.]
[Closing: free and open, where to find it, the URL.]
About [Organization]
[One-sentence description. Mission sentence.] Learn more at [URL].
Media Contact:
Full Name
Email
Phone
###bk-generate-book-metrics —
produces the book-metrics.json this skill reads in repo mode© dmccreary, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/archived/press-release-generator of dmccreary/ibook-skills.
Open the folder on GitHubat commit 98a9991
Press Release Generator 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Press Release Generator this skilldmccreary/ibook-skills | 105 | — | ~3.5k | Automated safety check: Pass | MIT | |
| Content Writer Agentmastra-ai/mastra | 29k | — | ~1.3k | Automated safety check: Pass | Custom licence | |
| Linkedin Publishereunomia-bpf/eunomia.dev | 236 | — | ~1.1k | Automated safety check: Pass | MIT | |
| Product Update LoggerVarnan-Tech/opendirectory | 674 | — | ~3.9k | Automated safety check: Pass | MIT | |
| Linkedin Post GeneratorVarnan-Tech/opendirectory | 674 | — | ~2.6k | Automated safety check: Notes | MIT | |
| 26 Thought Leadership Content Globalminhnv0807/ai-business-skills | 609 | — | ~4.7k | Automated safety check: Pass | MIT |
mastra-ai/mastra
Authoring playbook for building agents that draft written content — blog posts, marketing copy, social media posts, newsletters, product descriptions, landing pages, or ad copy.
eunomia-bpf/eunomia.dev
Prepare or publish eunomia.dev content for LinkedIn posts, articles, carousels, and professional updates.
Varnan-Tech/opendirectory
Tell the skill what your product shipped. An agent skill from Varnan-Tech/opendirectory.
Varnan-Tech/opendirectory
Converts any content, blog post URL, pasted article, GitHub PR description, or a description of something built, into a formatted LinkedIn post with proper hook, story arc, and formatting.
minhnv0807/ai-business-skills
A skill your agent uses when a PERSONAL brand needs long-form WRITTEN content that builds authority rather than sells — LinkedIn posts, X threads, Substack and Medium essays, using PAS-Insight for…
minhnv0807/ai-business-skills
A skill your agent uses when the user needs ORGANIC social captions for Instagram, LinkedIn, TikTok, Facebook, or X — hook, mobile-readable body, two A/B variants, platform-correct hashtags, written…
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…
dmccreary/ibook-skills
Generates a 13-slide LinkedIn carousel (a "document post" — PPTX/PDF) that showcases an intelligent textbook's key features, with real screenshots, mascot art, and metrics pulled from the project.
dmccreary/ibook-skills
A skill your agent uses when the user wants an existing MicroSim or chapter quiz to record what students do with it.
dmccreary/ibook-skills
Generates a status report of all diagrams and MicroSims across an intelligent textbook's chapters, including difficulty, Bloom's level, and UI complexity.
dmccreary/ibook-skills
Converts .docx files (papers, briefs, reports) into styled React component pages in a Next.js content-catalog site.
dmccreary/ibook-skills
Generates media for intelligent textbooks - slide decks and presentations (MARP web decks in docs/slides/ or PowerPoint .pptx lecture downloads), illustrated stories and graphic novels…
Categories
Generates an AP-style press release for an intelligent textbook or course milestone — headline, lead, attributed quotes, boilerplate, and media-contact block. Press Release Generator is an agent skill from dmccreary/ibook-skills. Generates an AP-style press release for an intelligent textbook or course milestone — headline, lead, attributed quotes, boilerplate, and media-contact block.
Press Release Generator fits situations like: pitching to journalists; education trade press; distinct from linkedin-announcement-generator (social post) and readme-generator (GitHub docs).
Run `npx skills add dmccreary/ibook-skills --skill press-release-generator -a claude-code`. Or copy the skill folder (skills/archived/press-release-generator in dmccreary/ibook-skills) into .claude/skills/press-release-generator in your project. Claude Code loads it when a task matches its description.
Run `npx skills add dmccreary/ibook-skills --skill press-release-generator -a codex`. Or copy the skill folder (skills/archived/press-release-generator in dmccreary/ibook-skills) into .agents/skills/press-release-generator in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add dmccreary/ibook-skills --skill press-release-generator -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/press-release-generator, .gemini/skills/press-release-generator, .github/skills/press-release-generator and .opencode/skills/press-release-generator in your project.
Going by SKILL.md and its folder, Press Release Generator needs the command-line tools its instructions call (python3 and curl). Our summary lists: Python 3.
SKILL.md names 2 domains. As links in the text: apstylebook.com and owl.purdue.edu. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Press Release Generator is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Press Release Generator: Content Writer Agent (mastra-ai/mastra, 29k stars), Linkedin Publisher (eunomia-bpf/eunomia.dev, 236 stars), Product Update Logger (Varnan-Tech/opendirectory, 674 stars) and Linkedin Post Generator (Varnan-Tech/opendirectory, 674 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
dmccreary (a GitHub user) maintains it in dmccreary/ibook-skills, which has 105 GitHub stars. The repository holds 32 skills in this directory. The repository was last updated on October 9, 2026.
Source: dmccreary/ibook-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.