For WordPress 6.9 and the Abilities API

Give AI agents a key to your site, not the admin password.

An AI client connected to WordPress acts as a user and can do everything that user can. Agent Warden gives each agent its own token and a policy that says exactly what it may do. Risky actions wait for a person, every action is logged in plain language, and changes can be undone.

WordPress 6.9+ · PHP 8.1+ · The free plugin makes no external requests

ActivityContent editor (drafts only) · policy v4
  1. 09:41:02Created the draft “Spring menu”Claude Code · agentwarden/create-draftAllowed
  2. 09:41:19Changed the title of post #42Claude Code · agentwarden/update-postAllowed
  3. 09:42:07Publish “Spring menu”Claude Code · agentwarden/publish-post · Waiting for approval · rule holdHeld
  4. 09:42:31Permanently delete post #17Claude Code · agentwarden/delete-post · Hard block: deleteRefused
  5. 09:44:10Restored the title of post #42Priya · undoUndone
Example rows from Agent Warden → Activity. Every row names the agent, the ability, and the rule that decided it.

Every request is decided before it runs

MCP, REST, and WP-CLI calls all pass through the same five steps. Nothing reaches your database on the way around them.

  1. 01

    Identify

    The token names one agent. Its policy version, expiry, IP allowlist, schedule, and pause state are loaded before anything else.

  2. 02

    Check

    Is the ability allowed? Is the input inside the agent’s scopes, limits, and hard blocks? The answer is run, simulate, hold, or refuse.

  3. 03

    Journal

    The rows the action is about to change are copied first, so the change can be undone later.

  4. 04

    Run

    The agent gets only the capabilities its policy grants for this call. WordPress’s own permission checks still run.

  5. 05

    Record

    The action is logged in plain language. Refusals and holds return a reason the agent can read and explain.

A policy is short, strict, and versioned

  • Deny by default. An exact rule wins, then a namespace wildcard, then deny. There is no global wildcard.
  • Hard blocks override everything. Publishing, deleting, settings, users, plugins, and irreversible actions are refused until you turn a block off.
  • Typos can’t weaken it. Unknown keys are refused at every level, with the path of each error.
  • Every change is a new version, and every logged action records the version in force.

Start from a template such as Read-only auditor or Content editor (drafts only), then edit it. Policy reference

policy.json
{
  "schema_version": 1,
  "mode": "live",
  "abilities": {
    "default": "deny",
    "rules": {
      "agentwarden/get-post": "allow",
      "agentwarden/create-draft": "allow",
      "agentwarden/publish-post": "hold"
    }
  },
  "hard_blocks": { "delete": true, "plugins_themes": true },
  "limits": { "writes_per_hour": 60 }
}

When an agent gets it wrong, you still have the last word

Held actions wait for a person

A held request returns an approval ID to the agent, which can check back later. Approve runs the exact input the agent sent; it is sealed when the request is made. Deny records your note, and the agent sees it.

Email, Slack with Approve and Deny buttons, Microsoft Teams, and webhooks on Pro.

How approvals work

Undo stops before it overwrites someone

Before an agent changes anything, the rows it touches are journaled. Undo one action, a whole session, or everything an agent did in a time window. If a person edited a row afterwards, you choose which version to keep.

Posts on Free. Posts, meta, comments, users, options, terms, and store data on Pro.

Undo and conflicts

Works with the clients you already use

Agent Warden is a streamable HTTP MCP server on your own site. Each client only sees the tools its agent’s policy allows or holds.

Terminal
claude mcp add --transport http agentwarden \
  https://example.com/wp-json/agentwarden/mcp \
  --header "Authorization: Bearer <YOUR_TOKEN>"

Agency hub

Running agents on client sites?

One inbox for every site’s held actions, one policy applied to many agents with local changes shown as drift, and a weekly report for each client. Sites keep enforcing their own rules; the hub never reaches into them.

See the hub

From $99 a month for 25 sites

What Agent Warden is not

Not an agent
It writes no content, runs no tasks, and makes no calls to AI models.
Not a firewall
It governs agents you authorised. Keep your security plugin for attackers.
Not a role editor
People keep their WordPress roles. Policies apply to agents only.
Not a promise it can’t keep
An action that can’t be undone is labelled, and held or refused, before it runs.

Questions

Does Agent Warden send my site’s content anywhere?

No. The free plugin makes no external requests, and Agent Warden makes no AI calls. A site connected to the agency hub sends metadata and counts only: versions, agent names and statuses, waiting approvals, and daily counts. Posts, orders, customers, and what agents sent are never included.

Do I need the MCP Adapter plugin?

Only for MCP clients such as Claude Desktop, Claude Code, Cursor, or ChatGPT. The REST API and WP-CLI gateways work without it.

What happens to abilities installed after an agent is created?

They stay denied. A policy’s default is always deny, and there is no global wildcard, so a new plugin never widens what an existing agent can do.

Can every action be undone?

No, and Agent Warden says so up front. Each ability has a reversibility class. Irreversible actions, such as a refund or a sent email, are refused while the irreversible hard block is on, or held for a person to approve.

What does it cost?

The plugin is free for two agents. Pro is $24 a month or $199 a year per site. The agency hub starts at $99 a month for 25 sites, with every Pro feature on each connected site.

Create your first agent in five minutes

Install the plugin, pick a template, copy the token into your client. Deactivating the plugin stops every agent at once.