SiteHelm gives an AI agent 79 named WordPress operations and nothing else. No PHP. No shell. No SQL.
Ask the agent to change something and nothing changes yet. The preview comes back with the exact field-level before and after, plus a single-use plan token.
Applying means re-sending the same arguments with that token. If the
arguments moved even slightly, you get a StalePlan
refusal — not a surprise write.
Agents discover the surface at runtime by calling a dispatcher with no operation argument, so they never work from a memorised list.
Illustrative. Nothing is written until this exact plan is re-sent with its token.
Most tools report what they sent. SiteHelm reports what persisted.
Before the write, not after it. This is what rollback restores from.
Through a typed handler whose schema rejects unknown properties.
Not the return value of the write — the site itself, freshly queried.
If a filter, a plugin or the theme quietly altered the value, the report says so instead of claiming success.
These are not features held back for a paid tier, and not items on a backlog. They are recorded as permanently excluded, so nobody on this project can propose them again.
The open-shell approach advertises the opposite of this list — PHP execution, WP-CLI, database queries and file edits on a live site — as the reason to buy. That is the whole disagreement.
A refusal is a first-class outcome with a reason and a remedy, logged in the same register as a success. Never a stack trace, a file path, or a SQL string.
No eval, no snippet store, no theme-file editor. There is no path from an agent to executing code.
No query passthrough. Every read and write goes through a typed operation with a schema.
No arbitrary file writes, and no WP-CLI passthrough.
Nothing is destroyed without a snapshot that can put it back.
Permission comes from the authenticating WordPress user’s real capabilities, and every handler re-checks them itself.
Rollback restores from the snapshot taken before the write. Not a re-edit, and not an undo stack the agent controls — the state that existed a moment earlier, returned by you from the console.
Six tabs in wp-admin do the human half of the job: Home, Connect an app, History, Health, Permissions and Tools, with rollback, a write pause, and credential revoke reachable in one click.
Per-operation and per-module switches mean you can hand over exactly as much as you meant to, and no more.
Synthetic rows, shown to illustrate the log’s shape.
The surface is small on purpose. Everything on it is named, typed, and refuses arguments it does not recognise.
Requires PHP 8.1 or newer and WordPress 6.6 or newer.
Posts, pages, taxonomies and terms — read and write.
Library reads, uploads, and import from a URL behind a guarded fetch.
Navigation structure, items, and ordering.
Page data, global colour and typography tokens, theme-builder display conditions.
ACF and Meta Box field groups and their values.
Titles, descriptions and robots directives across seven providers.
The moderation queue: approve, unapprove, spam, trash.
Roles and accounts, without ever declaring a meta capability.
The options a site owner would otherwise change by hand.
Everything above this line — the two-phase write, read-back verification, the capability model, the activity log, rollback, the write pause, the exclusions — is in the free plugin. Nothing about safety sits behind the paywall.
Pro adds reach: WooCommerce products, deep SEO for Yoast and Rank Math, bulk metadata, per-post schema, audit-driven fixes, and forms across seven more plugins. Every Pro operation inherits the same safety model.
Launch pricing, new customers only, applied at checkout to the first payment and to every renewal — your price does not jump next year. Monthly and lifetime licences are available at the same checkout.
An ordinary WordPress plugin. Nothing to configure first.
It carries you through the whole handshake. You do not need to know what MCP, JSON-RPC, or an application password is.
Claude, Claude Code, Cursor, VS Code, or any other MCP client. The agent discovers what it is allowed to do at runtime.
Download link pending — the plugin listing URL goes here.