agentleFS
chellehonikerchellehoniker/claude-code-storytelleros/skills/wordpress-posts/SKILL.md

wordpress-posts

Skill1 starsChanged 12 days agoMITView on GitHub

Use when the user wants to draft, edit, schedule, publish, or delete blog posts on their connected WordPress site. Triggers on "write a blog post", "draft a post about X", "publish my post", "update the last post", "schedule this for tomorrow", "delete the post called X".

The file

We split this skill into the rules it gives an agent

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

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈1

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

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

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Do not store post content as Markdown — WordPress doesn't render it natively.

    line 82
  2. Very specific:

    Do not pass tag IDs to tags.

    line 83
  3. Very specific:

    Do not assume the user wants to publish.

    line 84

≈ “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

WordPress posts

The user's connected WordPress site is the source of truth for blog posts. This skill writes to it through StorytellerOS.

Tools

stos_wp_posts_list({ status, search, page, per_page })
stos_wp_posts_get({ id })
stos_wp_posts_create({ fields: { title, content, excerpt, slug, status, date, categories, tags, featured_media } })
stos_wp_posts_update({ id, fields: { ... } })
stos_wp_posts_delete({ id })   // moves the post to WordPress trash; permanent deletion is done in WordPress itself

All tools take an optional penNameId — the user can connect one WordPress site per pen name plus an account default. Omit for the account default; pass a pen name id (from stos_pen_names_list) to act on that pen name's site. When the user has multiple pen names and it's ambiguous which site they mean, ask.

Field shapes

FieldTypeNotes
titlestringPlain text.
contentstringHTML allowed — preserved by WordPress. Most authors prefer paragraphs separated by \n\n.
excerptstringShort summary used in feeds.
slugstringURL fragment. Omit to let WordPress generate from the title.
statusdraft | publish | pending | private | futurefuture requires date in the future.
dateISO 8601Future date for scheduled publish.
categoriesnumber[]Category IDs. Look up via stos_wp_categories_list.
tagsstring[]Tag NAMES (WordPress find-or-creates).
featured_medianumberMedia ID. Look up via stos_wp_media_list or upload via stos_wp_media_create.

Patterns

Draft a new post

const post = await stos_wp_posts_create({
  fields: {
    title: "Why I Killed My Side Plot",
    content: "<p>Three rewrites in, the side plot was dead weight. Here's how I cut it without losing the emotional through-line.</p>",
    excerpt: "Why side plots fail and what to do about them.",
    status: "draft",
    tags: ["craft", "revision"],
  }
});

Schedule for later

stos_wp_posts_create({
  fields: {
    title: "Launch day post",
    content: "<p>...</p>",
    status: "future",
    date: "2026-06-01T08:00:00Z",
  }
});

Publish an existing draft

stos_wp_posts_update({ id: 123, fields: { status: "publish" } });

Add a featured image from a public URL

const media = await stos_wp_media_create({
  fields: { url: "https://stos-cdn/cover-2026-launch.jpg", alt: "Launch banner" }
});
stos_wp_posts_update({ id: 123, fields: { featured_media: media.id } });

Anti-patterns

  • Do not store post content as Markdown — WordPress doesn't render it natively. Convert to HTML before sending.
  • Do not pass tag IDs to tags. WordPress's REST API for our plugin accepts tag names only; IDs are categories' domain.
  • Do not assume the user wants to publish. Default to status: "draft" unless they explicitly say "publish".

Composes well with

  • wordpress-media — upload featured images
  • blog-post-and-newsletter — full pipeline that drafts post + image + newsletter from one prompt

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.