Publish Blog
indranilbanerjee/digital-marketing-pro
Publish a blog post to WordPress or Webflow through the connected CMS MCP with SEO metadata, categories and tags, featured image, slug optimization, and optional scheduling.
Drafts a release announcement blog post for an obot release as a Markdown file, with an optional WordPress draft through MCP and no live publishing without confirmation.
$ npx skills add obot-platform/obot --skill draft-release-blog -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install obot-platform/obot draft-release-blog --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/obot-platform/obot.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/draft-release-blog .claude/skills/draft-release-blog && 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 "draft-release-blog" agent skill from https://github.com/obot-platform/obot/tree/main/.claude/skills/draft-release-blog into .claude/skills/draft-release-blog/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "draft-release-blog", 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/obot-platform/obot/tree/main/.claude/skills/draft-release-blogType 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 obot-platform/obot --skill draft-release-blog -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install obot-platform/obot draft-release-blog --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/obot-platform/obot.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/draft-release-blog .agents/skills/draft-release-blog && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "draft-release-blog" agent skill from https://github.com/obot-platform/obot/tree/main/.claude/skills/draft-release-blog into .agents/skills/draft-release-blog/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "draft-release-blog", 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 obot-platform/obot --skill draft-release-blog -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install obot-platform/obot draft-release-blog --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/obot-platform/obot.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/draft-release-blog .cursor/skills/draft-release-blog && 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 "draft-release-blog" agent skill from https://github.com/obot-platform/obot/tree/main/.claude/skills/draft-release-blog into .cursor/skills/draft-release-blog/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "draft-release-blog", 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/obot-platform/obot.git --path .claude/skills/draft-release-blog--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 obot-platform/obot --skill draft-release-blog -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install obot-platform/obot draft-release-blog --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/obot-platform/obot.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/draft-release-blog .gemini/skills/draft-release-blog && 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 "draft-release-blog" agent skill from https://github.com/obot-platform/obot/tree/main/.claude/skills/draft-release-blog into .gemini/skills/draft-release-blog/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "draft-release-blog", 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 obot-platform/obot draft-release-blogInstalls 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 obot-platform/obot --skill draft-release-blog -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/obot-platform/obot.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/draft-release-blog .github/skills/draft-release-blog && 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 "draft-release-blog" agent skill from https://github.com/obot-platform/obot/tree/main/.claude/skills/draft-release-blog into .github/skills/draft-release-blog/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "draft-release-blog", 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 obot-platform/obot --skill draft-release-blog -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install obot-platform/obot draft-release-blog --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/obot-platform/obot.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/draft-release-blog .opencode/skills/draft-release-blog && 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 "draft-release-blog" agent skill from https://github.com/obot-platform/obot/tree/main/.claude/skills/draft-release-blog into .opencode/skills/draft-release-blog/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "draft-release-blog", 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.
draft-release-blogDrafts a release announcement blog post for an obot release as a Markdown file, with an optional WordPress draft through MCP and no live publishing without confirmation.
This skill drafts a blog post announcing an obot release in the voice of the existing obot.ai blog. It takes the feature list from the draft GitHub release, then researches further to add the detail, context and rationale that release notes leave out. The default output is a Markdown file in the current project directory that you paste into the CMS yourself, left untracked on purpose.
Style rules are strict: company-announcement voice in the first-person plural, no emojis or em dashes, no hype words, straight quotes, a mandated opening pattern taken from a recent post, one section per feature and a closing call to action. Statistics, quotes and technical claims must come from pull requests, issues, code or docs the agent has actually read. On request it can also create a WordPress draft through the obot-wordpress MCP server, and it never publishes a live post without explicit confirmation. A small md_to_html.py script ships with it.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 43a9522. 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.
Ships script files (Python), which the agent can run.
Shell commands in SKILL.md call:
uvghFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
obot.aiFrom 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.
Release Blog Drafter loads about 4.6k tokens when it runs. Until then it costs about 116 tokens; SKILL.md has 2,489 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 obot-platform/obot at commit 43a9522, republished under its MIT licence (© obot-platform). 2,489 words, ~4,593 tokens.
.claude/skills/draft-release-blog/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Drafts a blog post announcing an obot release. Sources the feature spine from the draft GitHub release (the output of the draft-release skill or an existing draft on GitHub), then does additional research to add the kind of detail, context, and rationale that release notes deliberately omit but a blog post needs.
The blog is for obot.ai's hosted Wordpress CMS. The default output is a markdown file at <repo root>/release-blog-<VERSION>.md (i.e. the current project directory) that the user can paste into the CMS themselves. Writing it into the repo makes it easy to review in the IDE; it is an intentionally untracked file — do not commit it and do not add it to .gitignore. If the user explicitly asks to post it (e.g. "post it up there", "create the draft in Wordpress"), the skill can also create the post as a Wordpress draft via the obot-wordpress MCP server (see step 8). The skill never publishes a live post without explicit user confirmation of the publish status.
Read both before drafting, every time. Both are multi-feature roundups, which is the shape every obot release blog uses:
## <Feature Name> section per feature, closes with a multi-CTA "Get started". Note: this post opens with a "client zoo" problem-first hook. Use it as a reference for body voice and structure only. Do NOT copy its opener; the required opener pattern is in step 6.Author byline is Craig Jellick (craig@obot.ai). Write in the first-person plural ("we") throughout — these are company announcements, not personal essays. Reserve first-person singular for a specific personal-stake line only if the user supplies one.
—). Use plain hyphens or rewrite. No "thrilled / proud / revolutionary / game-changing / unlock the power of" hype words.' and "), not curly quotes.<repo root>/release-blog-<VERSION>.md is always the first output. Posting to Wordpress (step 8) is opt-in: only do it when the user explicitly asks.draft unless the user explicitly confirms publish. Never default to publishing live.Confirm with the user which release the blog is for. Then find the canonical feature list:
# Look for an existing draft (or published) release for the version:
gh release view <VERSION> --repo obot-platform/obotIf a draft or published release exists, its Big Updates section is the spine. The blog highlights those same features in the same order — do not introduce features that didn't make it into the release notes, and do not silently demote features the release notes promoted.
If no release exists yet, ask the user whether to run draft-release first, or proceed by surveying commits directly. Do not invent a feature list out of commits alone for the blog — the release notes are where editorial alignment happens, and the blog should follow that.
Every obot release blog uses the same multi-feature roundup shape as the two reference posts. Target ~1,800-2,100 words. The structure is:
The Obot Platform <VERSION> release is out. (or a very close variant), then short factual sentences naming the headline change and the other notable ones. No problem-first hook, no suspense, no marketing framing. See step 6 for the required pattern, the model opener, and the banned phrasings.## <Feature Name> section per feature, in the same order as the release notes' Big Updates. Each section gives the concrete problem, how the feature works, and (where relevant) a short code/config example.## Additional Improvements with one short bullet per notable smaller item.## Upgrade Notes with one short bullet per breaking change or migration callout, followed by a link to the version's GitHub release notes for complete instructions.## Get started closing CTA (see step 6 for the exact links).There is no separate deep-dive shape. If one feature dominates the release, give it the longest section and let the smaller ones be brief; do not switch to a single-feature format.
This is the step that separates a blog from rephrased release notes. The release notes answer what. The blog needs why and context. For each feature being covered:
closes #N, so grep PR body/comments for issue numbers; see the related memory). The design discussions, alternatives considered, and user-reported problems live here.docs/ for any feature documentation written for this release. Pull concrete language from the docs where it's clearer than what's in the PR.Research implementation details to establish accuracy, but write from the user's perspective. Explain what users can now do and why it matters. Avoid internal IDs, controller behavior, database shapes, resolution mechanics, and other implementation details unless readers need them to use or upgrade the feature.
The goal: walk away from research with enough material to write three things per feature that release notes don't have:
Even in the roundup shape, some lines can only come from the user: forward-looking commitments, statements about a partner, or a "why we bet on this" take. For example:
We're already in conversations with other networking companies about additional integrations, so if you're using a different platform, let us know what you'd like to see supported.
This is just the start of what we're building here.
These are POV statements about partners, future plans, or company stake. The skill should NOT invent them. Before drafting, identify 2-4 places in the planned structure where such POV would belong, then ask the user:
Look for POV opportunities that answer:
For the blog draft, these spots are best filled by your voice rather than mine. Want to give me a sentence or two for each, or should I leave them as `[POV: ...]` placeholders for you to fill in after?
1. <Feature A> — your take on the partner / why you bet on this approach / what you'd say to skeptics
2. <Feature B> — what's next / what you're excited about next quarter
3. ...Use AskUserQuestion when the placeholders map to clean forks. Otherwise plain text reply.
Before writing prose, post a short plan:
Blog plan for <VERSION>:
Working title: <draft title>
Opening: leads with "The Obot Platform <VERSION> release is out." then <one line on the concrete facts the first paragraph will state>
Sections:
1. <Section name> — <one-line description of angle/content>
2. ...
Features covered: <list>
Features omitted from blog (but in release notes): <list, with brief reason>
POV inputs needed from you: <list from step 4, or "none">
OK to draft, or want to adjust?Wait for confirmation or adjustments before writing prose.
Match the reference posts:
Title format: Announcing Obot Platform <VERSION>: <feature, feature, and theme> (e.g. "Announcing Obot Platform v0.22.0: Centrally Managed Skills, Fleet Scanning, and Enterprise Controls for MCP"). The subtitle after the colon is optional — v0.23.0 used just Announcing Obot Platform v0.23.0. Use "Obot Platform", not "Obot MCP Platform".
Opener: always lead with the release being out, stated plainly. Start with The Obot Platform <VERSION> release is out. (or a very close variant), then short, concrete, factual sentences: what the headline change is, followed by a sentence listing the other notable additions. Sound like an engineer explaining the release to another engineer, not a copywriter creating suspense. Lead with a fact, never a hook.
Banned in the opener (and generally): rhetorical questions; "We're thrilled/proud/excited to announce"; "visibility/security/X is more important than ever"; the cadence "as X grows" or "as teams adopt Y, the same question keeps coming up"; dramatic before/after contrasts; and phrases like "changes everything", "closes the gap", "pulls into view", and "the theme of this release".
Model opener (from the v0.24.0 post):
The Obot Platform v0.24.0 release is out. It adds audit logging for AI activity that previously happened outside Obot. A new companion tool, Obot Sentry, captures tool calls made by Claude Code, Codex, VS Code, and Cursor on developer machines and sends them to Obot's existing audit logs. This release also adds full LLM Gateway audit logs, three new model providers, and a reworked MCP proxy that substantially reduces the resources required to run Obot.
Use ## <Feature Name> headings, one per feature, then separate ## Additional Improvements, ## Upgrade Notes, and ## Get started sections.
Keep Additional Improvements and Upgrade Notes scannable: one short bullet per item. Do not reproduce detailed migration steps, cleanup commands, or implementation notes in the blog. End Upgrade Notes with a link to https://github.com/obot-platform/obot/releases/tag/<VERSION> for the complete details.
For supporting features, lead with the intended scenario instead of lower-level implementation or security details. For example, frame local authentication as a fast path for evaluations and development or test environments, not as a password-storage feature.
Concrete > abstract in every sentence. If a sentence could appear in any company's launch blog, rewrite or delete it.
End ## Get started with one casual sentence that summarizes the release, followed by the CTA paragraph. Do not introduce a new product thesis, roadmap, or upgrade summary in the closing.
In the CTA paragraph, include a link to try Obot free, a link to request a demo, and a link to the docs, followed by a short invitation to email feedback to info@obot.ai. Use the same links the current reference posts use — verify them by re-reading the reference post rather than inventing URLs.
Add a frontmatter block at the top of the markdown for the CMS to consume:
---
title: <full title>
category: Blog
author: Craig Jellick
date: <today, ISO format>
version: <VERSION>
---Write the post to $CLAUDE_PROJECT_DIR/release-blog-<VERSION>.md (the repo root of the current project). This is an intentionally untracked file for easy IDE review; do not commit it and do not touch .gitignore. Print:
[POV: ...] placeholders that still need the user's personal voiceEnd the turn there. Do not run any publish/upload commands. Do not modify the GitHub release. Do not commit anything to the repo.
Skip this step unless the user explicitly asks for it. Phrases that mean yes: "post it to Wordpress", "create the draft", "post it up there", "put it in the CMS". If the user just says "good draft" or stops at step 7, leave it as a local file.
When the user does ask, post the blog as a Wordpress draft (never publish without explicit confirmation) via the obot-wordpress MCP server. The flow has four sub-steps.
8a. Authenticate (one time per session). Call mcp__obot-wordpress__authenticate to start the OAuth flow. Share the authorization URL it returns with the user; tell them the redirect to localhost may show a connection error and that's fine. The server's full tool set (create_post, list_categories, list_users, update_post, etc.) becomes available once auth completes. If auto-completion doesn't fire after they authorize, ask for the full callback URL from their browser and pass it to mcp__obot-wordpress__complete_authentication.
8b. Convert the markdown to HTML. Wordpress's create_post expects the post body as HTML. A helper script lives next to this SKILL.md:
Immediately before conversion, re-read the markdown from disk and confirm it contains the user's latest requested revisions. Record its SHA-256 hash so the exact source state being uploaded is explicit.
shasum -a 256 "$CLAUDE_PROJECT_DIR/release-blog-<VERSION>.md"
uv run "$CLAUDE_PROJECT_DIR/.claude/skills/draft-release-blog/md_to_html.py" \
"$CLAUDE_PROJECT_DIR/release-blog-<VERSION>.md" \
> /tmp/release-blog-<VERSION>.htmlThe markdown source lives in the repo root; the HTML is just a transient intermediate for the Wordpress upload, so it stays in /tmp.
It strips the YAML frontmatter so it doesn't render in the post body and emits HTML5 with the Python markdown library's extra and sane_lists extensions. Dependencies are declared inline (PEP 723) so uv run resolves them automatically — no virtualenv setup needed. Important: redirect only stdout (no 2>&1) so uv's "Installed N packages" line doesn't get mixed into the HTML.
8c. Look up category and author IDs. The create_post tool wants integer IDs, not names. Run these in parallel:
mcp__obot-wordpress__list_categories(search_query="Blog") # → expect id 6
mcp__obot-wordpress__list_users(context="view") # → find Craig Jellick, expect id 9IDs may differ if the Wordpress site is reconfigured. Always look them up; don't hardcode.
8d. Create the draft. Call mcp__obot-wordpress__create_post with:
title: the full title from the markdown frontmatter (title: line), unquoted.content: the HTML from step 8b, pasted in as a single string.status: "draft". Never "publish" unless the user has explicitly confirmed publishing live.author_id: the integer from list_users for Craig Jellick.categories: the Blog category ID as a string (e.g. "6"), since the tool accepts a comma-separated list.The response returns a post id and a link like https://obot.ai/?p=<id>. Share both with the user and remind them to review and publish from the WP admin (Posts → Drafts).
After creation, retrieve the post by ID and verify that its status is draft, its title matches the frontmatter, and its author and category match the resolved IDs. Report only the verified result.
Sanity checks before posting:
grep -nF $'\xe2\x80\x94' "$CLAUDE_PROJECT_DIR/release-blog-<VERSION>.md" (or grep -nF $'—') to confirm no em dashes slipped in. The hard constraints forbid them; the markdown editor sometimes auto-substitutes when copy-pasting.create_post.The opener always leads with the plain announcement, as in v0.23.0:
The Obot Platform v0.23.0 release is out. It is a step toward deeper integration between Obot and the clients and agents that connect to it.
For the body, match this register: confident, concrete, no rhetorical flourishes, technical without being dry, first-person plural for the company. For example (v0.23.0):
A developer points their agent at the gateway and gets to work.
Lead with a plain statement of what shipped, never with a hook, a rhetorical question, or hype. The v0.22.0 post opened with a 'client zoo' problem framing; do not copy that approach for the opener. Lead with the release being out instead.
© obot-platform, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in .claude/skills/draft-release-blog of obot-platform/obot.
Open the folder on GitHubat commit 43a9522
Release Blog Drafter 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 |
|---|---|---|---|---|---|---|
| Release Blog Drafter this skillobot-platform/obot | 1.1k | — | ~4.6k | Automated safety check: Pass | MIT | |
| Publish Blogindranilbanerjee/digital-marketing-pro | 855 | 1 repos | ~2.8k | Automated safety check: Pass | MIT | |
| Prompt Gap To Publishamplitude/builder-skills | 159 | — | ~2.8k | Automated safety check: Pass | None | |
| Publish ReleaseAyuilos/Miffan | 192 | — | ~635 | Automated safety check: Pass | AGPL-3.0 | |
| Noodle Releasewilfredinni/noodle | 363 | — | ~2k | Automated safety check: Pass | Apache-2.0 | |
| Figurevectorize-io/hindsight | 47k | — | ~1.9k | Automated safety check: Pass | MIT |
indranilbanerjee/digital-marketing-pro
Publish a blog post to WordPress or Webflow through the connected CMS MCP with SEO metadata, categories and tags, featured image, slug optimization, and optional scheduling.
amplitude/builder-skills
A skill your agent uses whenever a user wants to turn AI Visibility data into published content — whether they say "find content gaps", "what should we write about", "which topics have low…
Ayuilos/Miffan
Publish a GitHub release for this fork, with a bilingual changelog that separates fork-owned changes from changes introduced by upstream merges.
wilfredinni/noodle
Prepare a versioned Noodle release by updating package.json, inspecting changes since the latest tag, auditing every repository-maintained skill, synchronizing affected README, AGENTS.md, tests…
vectorize-io/hindsight
Draw an animated figure (boxes, arrows, moving data) as one self-contained SVG for a GitHub README, PR, issue or blog post.
Nanako0129/sepia
Make AI-generated writing read as human-written, in fiction and in professional prose.
obot-platform/obot
Drafts release notes for an upcoming Obot minor release and saves them as an unpublished GitHub draft release, never tagging or publishing.
obot-platform/obot
Turns a verbose, reporter-submitted obot security advisory into a short, deployer-facing writeup covering impact, affected versions and mitigation.
Works with
Categories
Drafts a release announcement blog post for an obot release as a Markdown file, with an optional WordPress draft through MCP and no live publishing without confirmation. ai blog. It takes the feature list from the draft GitHub release, then researches further to add the detail, context and rationale that release notes leave out.
Release Blog Drafter fits situations like: writing the announcement post for a new obot release; turning a draft GitHub release into a fuller blog narrative; creating a WordPress draft of a release post for review; matching the voice of earlier obot.ai blog posts.
Run `npx skills add obot-platform/obot --skill draft-release-blog -a claude-code`. Or copy the skill folder (.claude/skills/draft-release-blog in obot-platform/obot) into .claude/skills/draft-release-blog in your project. Claude Code loads it when a task matches its description.
Run `npx skills add obot-platform/obot --skill draft-release-blog -a codex`. Or copy the skill folder (.claude/skills/draft-release-blog in obot-platform/obot) into .agents/skills/draft-release-blog 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 obot-platform/obot --skill draft-release-blog -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/draft-release-blog, .gemini/skills/draft-release-blog, .github/skills/draft-release-blog and .opencode/skills/draft-release-blog in your project.
Going by SKILL.md and its folder, Release Blog Drafter needs Python for the scripts in its folder and the command-line tools its instructions call (uv and gh). Our summary lists: A draft GitHub release for the version being announced; The obot-wordpress MCP server, only for creating a WordPress draft.
SKILL.md names 1 domain. In commands or code: obot.ai; the agent is likely to contact it when it follows the instructions. 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.
Release Blog Drafter is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.6k tokens (SKILL.md is roughly 18k 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 Release Blog Drafter: Publish Blog (indranilbanerjee/digital-marketing-pro, 855 stars), Prompt Gap To Publish (amplitude/builder-skills, 159 stars), Publish Release (Ayuilos/Miffan, 192 stars) and Noodle Release (wilfredinni/noodle, 363 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
obot-platform (a GitHub organization) maintains it in obot-platform/obot, which has 1,095 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 8, 2026.
Source: obot-platform/obot on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.