One SKILL.md that makes blogging with AI dramatically easier
You have a topic. You open your AI assistant and start typing. First you explain your blog: who reads it, how you write, what you covered last month. Then the topic. The draft comes back sounding like every other draft.
You have a topic. You open your AI assistant and start typing.
First you explain your blog: who reads it, how you write, what you covered last month. Then the topic. The draft comes back sounding like every other draft. You ask for a title. Then a summary. Then a search description and some tags. Somewhere in the middle sits a statistic you never gave it and cannot find anywhere. You delete it. Then you open another chat to write the LinkedIn post.
Next week, you start from an empty context again.
goodsender-blog is an open-source skill: one SKILL.md file with its reference notes that replaces that routine with a workflow your assistant follows. Install it, and your next post starts from a workflow instead of a blank chat.
It works in Claude, ChatGPT, and Gemini, and in coding agents such as Claude Code, Codex, Gemini CLI, GitHub Copilot, and Cursor. The skill is published under the Apache-2.0 license, and a GoodSender account is free.
What changes in your routine
| Empty chat | With goodsender-blog | |
|---|---|---|
| Context | You re-explain your blog every time | It reads your blog first: byline, tags, voice, and topics you already covered |
| Topic | Whatever you typed | It states the goal and, if you have not picked an angle, offers two or three with trade-offs and recommends one |
| Facts | Gaps filled from the model's memory | Every factual claim tied to a source or to your word, then checked in a separate pass |
| Post fields | Title, summary, description, and tags requested one by one | Prepared together and saved in one draft, with a preview link |
| Social posts | Written later, in another chat | Prepared for each destination you select, before anything is published |
| Publishing | Copied by hand into each place | Nothing goes out until you approve the actual destinations |
The skill keeps its editorial questions to three moments: one message with what only you know, at most one question about claims that still need a source, and one review package at the end. Connecting your account, choosing destinations, and your assistant's own tool confirmations can add a step. Publishing waits for your separate approval.
A workflow, not a prompt
A prompt tells the assistant what you want. The skill tells it how to get there. It carries an editorial process refined over years: how to choose a topic and an angle, how to find and check facts, and how to build the structure around them.
The process runs in twelve stages, grouped here into four phases. Each stage has a gate the assistant must pass before it moves on.
- Understand. With GoodSender connected, the assistant reads your blog settings and your most recent posts to learn the voice, byline, and tags. Then it settles the goal: who the post is for and what they should do afterward. It also reads the post type from your request, whether that is an explainer, a tutorial, an opinion piece, a case study, an interview, or a story, and applies the checks that type needs. It asks you once for what it cannot infer, such as what happened, real numbers, dates, and whether you want images.
- Write. Evidence is collected in a fixed order of trust. Every major claim in the outline is tagged with its source, or marked as needing one. The draft is written in your blog's voice and toward the goal, then fact-checked in a separate pass.
- Package. Title options, summary, description, tags, and any images you asked for are prepared, the draft is saved to GoodSender, and a preview link is created.
- Ship. When you ask for it, with the draft or when you plan to publish, copy for each destination you select is prepared and saved without sending. You review everything and approve where it goes.
The skill works for posts on any topic, including fiction and other creative writing, where it checks continuity and any real-world claims instead of sourcing every sentence. It does not need a repository, a particular model, or a paid image generator. Short requests have their own paths: a quick sample skips the interview, and a narrow edit changes only what you asked for.
Facts checked before your name goes on them
When an empty chat is missing a fact, it can fill the gap itself: a plausible number, a study that sounds right, a quote nobody said. Under your byline, that becomes your mistake.
The skill's first rule is that the model's own knowledge is never a source. A factual claim the assistant introduces goes into the post only when something stands behind it, in this order of trust:
- You: what you say in the conversation and the files you share
- Git repositories you work in or name
- Your blog's published posts
- Web sources with a URL, cited in the post
A claim without a source is marked in the draft, never quietly asserted. Then a separate fact-check pass, run in a fresh-context subagent where your assistant supports one, reads the draft as if someone else wrote it. It sweeps for words like "most" and "typically" and for every first-person sentence. It returns a ledger: what was verified, what rests on your word, what was hedged, and what was cut.
If anything still lacks a source, you get one numbered message: confirm, source, or cut. Anything you leave unanswered is hedged or removed, so the draft never stalls.
The check works in both directions. If the model's knowledge is out of date or it simply invents something, the claim does not pass. If a reliable source contradicts your own material, the skill tells you once, with the link, and you decide.
You still own the post. What you state or confirm goes in the way you want it. The ledger shows you which parts nobody checked.
All the post fields in one save
A GoodSender post carries more than its body, and each field feeds a different place:
| Field | Where it appears |
|---|---|
| Title | Page heading and search result title |
| Summary | Lede under the title, blog index card, RSS |
| Description | Search snippet and social cards |
| Tags and categories | Public index pages on your blog |
| Byline | Author line and structured data |
| Cover image | Post page, cards, and social previews |
Through the GoodSender MCP server, the skill saves them together with the draft. The cover is included when you have an image or your assistant can generate one. It proposes the title with alternatives instead of choosing silently. It writes the summary and the description as two different sentences for two different readers. It reuses the tags your blog already has, because a near-duplicate tag splits one topic across two index pages. Images are uploaded through GoodSender and converted to WebP.
The post is saved as a draft with a signed preview link. There are no extra rounds asking for the description you forgot.
Announcements written for each platform
The skill writes separate announcement copy for each destination you select, framed for the people who follow you there. A professional audience may need the practical implication and a concrete example. A short post may need only the problem and the payoff. Each version is checked for new claims and against the platform's length budget, including the link GoodSender adds, and the whole package is reviewed together before you see it.
| Destination | What the skill prepares |
|---|---|
| X, LinkedIn, Bluesky, Mastodon | Announcement copy for that platform, with a link to your post |
| dev.to, Hashnode | The full article, with a canonical URL pointing back to your blog |
| Newsletter | A dedicated subject line and summary, followed by a "Read the full post" button |
Distribution is saved as a plan, not sent. A connected account is an option, not consent: if you asked for announcements but have not said where, the skill asks which connected destinations to use, and it makes the newsletter a separate, explicit choice. Before publishing, you see the exact destinations and accounts.
When you publish, GoodSender puts the page live and delivers to every destination you selected: announcements, republished copies, and the newsletter email. Sent email cannot be recalled and external posts are not removed for you, which is why the approval comes first. The skill then reports what was published, delivered, pending, blocked, or failed, each separately.
Get started
- Download the skill: goodsender-blog-latest.zip. The link always points to the latest release.
-
Install it.
- Claude: Customize โ Skills โ Create skill โ Upload a skill, then upload the ZIP as downloaded. Skills must be enabled for your account. To update later, download the link again and re-upload.
- ChatGPT: Skills โ Create โ Upload from your computer. Availability depends on your ChatGPT plan, and uploaded skills do not sync between the desktop app and web or mobile, so add it on each one you use.
- Gemini (web or Mac app): Settings โ Skills โ Upload. If the ZIP is not accepted, unpack it and upload the folder.
- Coding agents: unpack the ZIP into the agent's skills folder:
mkdir -p ~/.claude/skills && unzip goodsender-blog-latest.zip -d ~/.claude/skills/ # Claude Code
mkdir -p ~/.agents/skills && unzip goodsender-blog-latest.zip -d ~/.agents/skills/ # Codex, Gemini CLI, Copilot, Cursor
- Ask for your first post:
"Use goodsender-blog to write a post about [your topic] and leave it as a draft for review."
That is all you need to start. Writing the post does not need anything else. When the draft is ready to save, the skill asks for a GoodSender account and its connection to your assistant, and helps with whichever step is missing. Once a session, it also checks for a newer release and mentions it in passing; it never installs anything on its own.
Bring the topic you have been putting off. This time the routine starts from your blog, not from an empty chat.
Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes โ full credit and traffic to the original publisher.