Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/ericmann/masthead/archive/refs/heads/main.zipMasthead
The editorial calendar that knows your rhythm.
Plan a month of posts in WordPress on a weekly rhythm, with a Desk that tells you what belongs on every open day, and why.
Quick start · Features · Honest by design · MCP · FAQ

Why Masthead
Publishing on a schedule is easy to promise and hard to keep. The posts that slip are rarely the hard ones: they are the Tuesday you forgot was empty, the series part that drifted a week, the good post from last spring nobody has seen since.
Masthead puts your whole publishing plan on one screen in wp-admin and gives every weekday a job. Mondays are for business, Saturdays for fiction, whatever your rhythm is. Then it looks at the gaps and tells you, in plain language, what could fill them: a draft you already wrote, the next part of a series, a post worth sharing again, a category you have neglected, or (if you want it) a fresh AI idea with an outline.
You stay the editor. Masthead never publishes, moves or shares anything without your click.
What you get
📅 A calendar of everything you publish. Month, week and list views of published, scheduled and planned posts, coloured by category. Drag a post, or use the keyboard, to move it to another day; Masthead keeps its status exactly as it was.
🎼 A weekly rhythm. Give each weekday a lane, with its categories and a default publishing time. Every day on the calendar shows its lane, and every empty slot shows what it is for.
🗞️ The Desk. Pick a day and the Desk suggests what could go there, in a fixed order: your own unscheduled drafts first, then the next part of a series, then posts worth re-sharing, then quiet categories, then AI ideas. Each one says why it is there, and apart from AI ideas, which carry the AI's suggested angle, that reason is built from your real data ("Nothing has been published under Security since Sept 17").
📝 Day plans that become real drafts. Turn a suggestion into a dated draft in one step, optionally with an AI outline to start from. Plans are ordinary WordPress drafts, so the block editor, other plugins and your AI assistant all see them.
🔁 Series that keep their cadence. Masthead knows each series' rhythm (every four weeks on a Saturday, say) and puts the next part where it belongs. Ask the Desk for "a 4-part security series starting in January" and it proposes titles while Masthead picks the dates.
🔍 A nightly swap check. Every night Masthead reviews the upcoming schedule and flags lane mismatches, two posts on one day, series parts that break their cadence and better-fitting candidates. Each finding explains itself and offers a fix you can apply with one click, or dismiss.
📣 Re-shares through Jetpack Social. Bring an evergreen post back to your social accounts now or on a chosen date, with share copy the Desk can draft for you.
🤖 AI that knows its place. Ideas, outlines, share copy and series proposals come from the provider plugin you set up under Settings › Connectors (which ones work). A monthly request cap keeps costs predictable; set it to 0 and the AI is off.
See it in action
https://github.com/user-attachments/assets/555f18d7-ff33-484e-ad18-ac3a82e094c7
The three-minute demo: the calendar, the weekly rhythm, the Desk, day plans, series and the nightly swap check, on a demo site with sample data.
| Turn a suggestion into a dated draft | Fix a schedule the swap check flagged |
|---|---|
![]() |
![]() |

Honest by design
Masthead is built on a few rules it does not bend. Most of them are enforced by automated checks on every commit.
- No surprise writes. Nothing is published, rescheduled or shared without a click or an explicit ability call. The nightly job only reads.
- No invented numbers. Traffic figures come from Jetpack Stats and nowhere else. When Stats isn't connected, Masthead says "Unavailable" and ranks suggestions without traffic.
- No made-up reasons. The "why" behind every draft, series, re-share and gap suggestion, and every swap-check finding, is built from your own posts, dates and stats. The AI writes idea titles, angles, outlines and share copy, never claims about your traffic or history.
- AI output is checked before use. Every response is validated against a schema, and ideas outside the day's categories are dropped, not bent to fit.
- Nothing on your public site. No front-end output, no tracking scripts, no extra REST data for your theme. Admin assets load only on Masthead's two screens.
- No keys, no phoning home. Masthead stores no API keys and makes no network requests of its own; it talks only through Jetpack and the WordPress AI Client.
- Your plan is plain WordPress. Planned posts are dated drafts and settings are ordinary options and term meta. Uninstall Masthead and your drafts are still there.
Works with your AI assistant
Every action in Masthead is a WordPress Ability under masthead/*. The calendar screens, WP-CLI and AI assistants all call the same code with the same permission checks.
Install the MCP Adapter, turn on Expose calendar abilities to MCP clients under Settings › Calendar, and an MCP client such as Claude can work with your plan directly:
"What's on my calendar for the next two weeks, and where are the gaps?"
"Which drafts would fit next Wednesday's lane?"
"Create a dated draft for Friday called 'Build log: shipping the new front page', with an outline."
"Did last night's swap check flag anything?"
Sharing to social accounts has its own switch and stays off for MCP clients unless you turn it on.
Quick start
- Download
masthead.zipfrom the latest release, and check it against the published checksum:sha256sum -c masthead.zip.sha256 - In wp-admin, go to Plugins › Add New › Upload Plugin, upload the zip and activate it.
- Open Settings › Calendar and set your weekly rhythm: a lane, its categories and a default time for each weekday.
- Open Posts › Calendar and click any day.
Optional extras:
- Jetpack with Stats and Social connected adds traffic numbers, re-share suggestions and sharing.
- An AI provider under Settings › Connectors (for example AI Provider for Anthropic; see AI providers) adds ideas, outlines, share copy and series proposals. Users who can publish posts get access by default.
Requirements
| WordPress | 7.1 or later |
| PHP | 8.3 or later |
| Jetpack | Optional, for Stats and Social |
| AI provider | Optional, a provider plugin whose models return JSON that matches a schema (AI providers) |
AI providers
Masthead talks to AI only through the WordPress AI Client, and every request asks for JSON that matches a schema. So a provider plugin works only if its models offer schema-checked JSON output. Masthead checks this itself: a provider that can't do it shows as Provider: none Masthead can use under Settings › Calendar, and the AI buttons stay off.
| Provider plugin | Checked | Status |
|---|---|---|
| AI Provider for Anthropic | 1.0.5 | ✅ Works. Masthead's default models (claude-haiku-5-5 for quick jobs, claude-sonnet-5-5 for outlines and series) are Anthropic's. |
| AI Provider for OpenAI | 1.2.0 | ✅ Declares schema output for its models. Set your own model ids. |
| AI Provider for Google | 1.2.1 | ✅ Declares schema output for its models. Set your own model ids. |
| AI Provider for Mistral, AI Provider for Ollama | 1.3.1, 1.4.0 | ✅ Both declare schema output for their models. Set your own model ids. |
| AI Provider for OpenRouter | 1.0.0 | ❌ Its models don't declare schema output, so the AI Client finds no model for Masthead's requests. A fix is open upstream (#9, #12). |
| AI Provider for DeepSeek | 1.0.3 | ❌ JSON mode only, without a schema. |
"Checked" is the plugin version whose declared capabilities were read. Only the Anthropic plugin has been run end to end with Masthead.
Model ids. Masthead prefers the ids under Settings › Calendar › AI (Fast model ids and Strong model ids). With a provider other than Anthropic, enter that provider's ids there. If none of them is offered, the WordPress AI Client uses the first suitable model the provider lists, which you may not want. After a request, Settings shows the model that actually answered.
Cost. AI runs only when someone clicks an AI action or asks the Desk, and the monthly request cap (300 by default; 0 turns AI off) is checked before every call. An idea or outline request sends a few thousand tokens of post titles and excerpts and gets about a thousand back.
FAQ
Does Masthead work without Jetpack or AI?Yes. The calendar, rhythm, Desk, series and swap check all work on a plain WordPress site. Jetpack adds traffic numbers and sharing, and an AI provider adds ideas and outlines. Without them, those parts of the screen say they are unavailable and explain why.
Will it ever publish or move a post on its own?No. Every change is a click, or an ability call you or your assistant made on purpose. The nightly swap check is read-only: it records findings for you to review.
Which AI providers can it use, and what does it cost?Any provider plugin for the WordPress AI Client whose models return JSON that matches a schema: Anthropic, OpenAI, Google, Mistral and Ollama do; OpenRouter 1.0.0 and DeepSeek 1.0.3 don't yet. The table under AI providers has the details. A monthly request cap (300 by default) limits spending, and 0 turns the AI off. AI runs only when someone asks for it.
Who on my site can use the AI features?Anyone who can publish posts, unless a role or plugin explicitly grants or denies WordPress's prompt_ai capability, in which case that decision wins.
If your site already has a series taxonomy, Masthead uses it; otherwise it adds its own. Each series can have a cadence (every N weeks, on a weekday, at a time) and can be marked as an exception to the weekly lanes.
Masthead is designed for an individual writer or a small team publishing on a steady rhythm. It has no assignments, approval chains or custom editorial statuses; it works with WordPress's own.
Does it slow down my site?No. Masthead adds nothing to public pages and loads its scripts only on its own admin screens. Its queries are bounded, and the nightly check runs on WP-Cron.
Is it on WordPress.org?Not yet. Releases are published here on GitHub as a zip with a SHA-256 checksum.
Reference
AbilitiesRegistered in the masthead category and run through /wp-abilities/v1/abilities/<name>/run (GET for read-only abilities, POST for the rest).
| Ability | What it does | Capability |
|---|---|---|
masthead/get-plan |
Days in a range with their lane, posts and open slots | edit_posts |
masthead/suggest-for-date |
Desk suggestions for a date, optionally with AI ideas | edit_posts (+ prompt_ai for ideas) |
masthead/dismiss-suggestion |
Hides a suggestion for the current user | edit_posts |
masthead/create-planned-draft |
Creates a dated draft, optionally with an outline | edit_posts |
masthead/reschedule |
Moves a scheduled post or dated draft | edit_post on that post |
masthead/swap-check |
Returns the latest swap-check findings | edit_posts |
masthead/stats-summary |
Jetpack Stats summary, or why it is unavailable | edit_posts |
masthead/share-connections |
Lists Jetpack Social connections | publish_posts |
masthead/share-post |
Shares a published post now or at a date | publish_posts |
masthead/draft-outline |
AI outline for a post title | edit_posts + prompt_ai |
masthead/draft-share-copy |
AI share message for a published post | edit_posts + prompt_ai |
masthead/propose-series |
AI series proposal with dates chosen by Masthead | edit_posts + prompt_ai |
masthead/accept-series |
Creates a proposed series and its dated drafts | edit_posts |
| Command | What it does |
|---|---|
wp masthead plan <from> <to> |
Prints the plan for a date range |
wp masthead suggest <date> [--ideas] |
Prints the Desk suggestions for a date |
wp masthead swap-check [--write] |
Runs the swap check; --write stores the findings |
wp masthead ai:status |
Shows whether an AI provider is available, the budget left and the model lists |
wp masthead stats:probe |
Prints scrubbed Jetpack Stats payload shapes |
wp masthead social:probe |
Prints scrubbed Jetpack Social payload shapes |
wp masthead seed --fixture=<file> [--now=<datetime>] [--reset] |
Loads the acceptance fixture (development) |
You need PHP 8.3+, Composer, Node.js 24 and Docker (for wp-env). Run composer install and npm install once.
| Purpose | Command |
|---|---|
| PHP lint | composer lint |
| PHP unit tests | composer test:unit |
| JS and CSS lint | npm run lint |
| JS unit tests | npm run test:unit |
| Build | npm run build |
| Structural checks | bash scripts/forbidden-patterns.sh |
| Integration tests | npm run test:integration (wp-env) |
| End-to-end tests | npm run test:e2e (wp-env and Playwright) |
| README screenshots | npm run screenshots |
| Release zip | npm run release:pack |
docs/SPEC.md is the specification and CLAUDE.md lists the rules the code follows. Releases are built by the release workflow from a v* tag.
License
Masthead is free software, licensed under the GPL-2.0-or-later.

