Agent Skills: Editorial Calendar Operations

Run your blog like a queue, not a guessing game. This skill is the orchestration layer on top of blog-topic-research and seo-blog-writer: it keeps an evidence-backed backlog, picks the next topic so your corpus drifts toward the cluster + format mix you defined, schedules posts into a rolling daily cadence, and marks them done — autonomously, two posts a day if you want. It scores every pick by how far each topic cluster is from its target weight (so you never end up with 40 troubleshooting posts and no comparisons), reconciles the backlog against what's actually live on your CMS, and auto-refills by calling blog-topic-research when the queue runs dry. Platform-agnostic: it drives whatever publish adapter seo-blog-writer is configured for (Ghost, WordPress, static site). Built for founders, indie hackers, and content teams who want a hands-off long-tail SEO pipeline that publishes on a schedule and stays balanced. Trigger when the user says: 'what should I write next', 'pick the next topic', 'schedule the next N posts', 'editorial calendar status', 'add this to the backlog', 'mark this post done', or any variant of running a recurring publish cadence.

UncategorizedID: jeremylongshore/claude-code-plugins/blog-editorial-calendar

Install this agent skill to your local

pnpm dlx add-skill https://github.com/jeremylongshore/claude-code-plugins-plus-skills/tree/HEAD/plugins/productivity/publishing-skills/skills/blog-editorial-calendar

Skill Files

Browse the full folder contents for blog-editorial-calendar.

Download Skill

Loading file tree…

plugins/productivity/publishing-skills/skills/blog-editorial-calendar/SKILL.md

Skill Metadata

Name
blog-editorial-calendar
Description
'Operate an evidence-backed editorial queue, balance topic and format coverage, schedule approved drafts, and reconcile backlog state with the publishing system. Use when choosing or scheduling the next blog work. Trigger with "show the editorial calendar" or "pick the next topic".'

Editorial Calendar Operations

Overview

Maintain a durable editorial backlog and select the next work from evidence rather than intuition. This skill balances configured topic clusters and post formats, reserves publishing slots, and reconciles local state with the real CMS before changing the queue.

It coordinates blog-topic-research and seo-blog-writer; it does not replace their research, drafting, review, or publishing controls.

Prerequisites

  • An approved config.json defining target_platform, author, UTC cadence, cluster targets, format targets, and CMS tag mappings
  • A writable backlog.json with stable IDs, titles, clusters, formats, evidence URLs, priorities, statuses, and scheduled timestamps
  • Read-only CMS listing access for sync; separate approved write access only when the user requests scheduling or publication
  • blog-topic-research for backlog replenishment and seo-blog-writer for draft production
  • Topic and format target weights that each total approximately 1.0

Tool Discipline

Use Read to inspect configuration and backlog state. Use WebSearch and WebFetch only to confirm public evidence or read the authorized CMS inventory. Use Write or Edit for reviewed, secretless state updates; never write credentials, raw access tokens, or unpublished sensitive content into receipts.

Instructions

  1. Parse the requested action: status, next, add, mark-done, or sync. Reject unknown actions and mutually incompatible scheduling flags.
  2. Read and validate config.json and backlog.json. Confirm unique IDs, valid statuses, parseable UTC timestamps, nonnegative priorities, and target weights near 1.0.
  3. Run a read-only reconciliation before selection. Match CMS records by stable CMS ID first, canonical URL second, and normalized slug only as a last resort. Report ambiguous matches instead of guessing.
  4. For next, score only eligible ready items. Rank cluster deficit first, then format deficit, evidence strength, explicit priority, and oldest creation time. Record the score factors so the choice is reproducible.
  5. Reserve the selected item with a stable run ID. For --draft, invoke the writer without a publish time. Otherwise choose the next free configured UTC slot or validate each explicit slot.
  6. Require review before any live publish or schedule mutation. Pass the topic scaffold and approved target to seo-blog-writer; do not copy CMS credentials into the handoff.
  7. Commit the state transition only after the downstream operation returns a durable draft ID, CMS ID, or explicit failure. Move ready -> reserved -> drafted -> scheduled -> published; never skip directly to published without CMS evidence.
  8. For add, normalize the title and compare it with existing titles, slugs, canonical URLs, and distinctive error/version tokens. Add only evidence-backed, nonduplicate topics.
  9. For mark-done, require a matching live URL or an owner-approved manual receipt. For sync, preserve local notes while updating only fields supported by CMS evidence.
  10. Return the chosen work, schedule, state changes, conflicts, and next eligible slot. Leave failed or ambiguous items recoverable.

Selection Contract

Each backlog record should include:

{
  "id": "topic-0042",
  "title": "How to diagnose webhook signature failures",
  "cluster": "integrations",
  "format": "how-to-fix",
  "status": "ready",
  "priority": 2,
  "evidence_urls": ["https://example.com/verified-source"],
  "scheduled_at": null,
  "cms_id": null,
  "canonical_url": null
}

Selection must be deterministic for the same configuration, backlog, and CMS snapshot. Never fabricate traffic, demand, availability, or publication evidence.

Approval Boundaries

Ask for owner approval before scheduling, publishing, rescheduling, deleting, bulk-mutating, or overwriting reconciled backlog state. A read-only status or dry-run selection does not require CMS write access. Default to draft when publication intent is absent.

Output

Return a compact operational receipt containing:

  • action, run ID, timestamp, and configuration checksum
  • selected IDs and score factors
  • old and new statuses
  • draft, schedule, CMS ID, and canonical URL when available
  • conflicts, skipped duplicates, shortfalls, and required approvals
  • next eligible slot and recommended follow-up

Error Handling

| Condition | Response | |---|---| | Missing or invalid configuration | Stop before mutation and list the exact invalid keys or totals. | | CMS inventory is unavailable | Mark reconciliation unverified; allow local dry-run status but do not claim a slot is free or a post is live. | | Two records match one CMS post | Preserve both records, report the collision, and require an owner decision. | | Downstream drafting fails | Release the reservation or mark it blocked with the failure receipt; do not consume the slot. | | Queue has no eligible topics | Report the shortfall and invoke blog-topic-research only with the approved cluster and count. | | Concurrent update changes the backlog | Re-read, recompute, and require confirmation if the selected item or slot changes. |

Examples

Dry-run the next two selections without publishing:

request: next 2 --draft --dry-run
result: topic-0042 (integrations deficit 0.08), topic-0017 (use-cases deficit 0.05)
mutation: none
next_slot_utc: 2026-09-12T06:00:00Z

Reconcile an already published item:

request: sync
matched: topic-0042 -> cms_id=post_918 by canonical_url
transition: scheduled -> published
conflicts: 0

Verification

  • Re-run status and confirm the recorded counts equal the backlog totals.
  • Confirm no two active records share a CMS ID or canonical URL.
  • Confirm every scheduled timestamp fits a configured slot and no slot is double-booked.
  • Confirm every published record has a CMS-derived ID or owner-approved receipt.
  • Confirm a second dry-run against unchanged inputs returns the same ranking.

Resources

Next Steps

Review target weights monthly against actual business priorities and search performance. Revalidate platform APIs before changing the reconciliation adapter.