Security
Built so a mistake, or a bad prompt, has a small blast radius.
Agent Warden assumes an agent will eventually be asked to do the wrong thing. This page describes where decisions are enforced, what leaves a site, and what the hub can and cannot do.
In the plugin
- Enforced in core, not in one client
- Agent Warden wraps each ability’s permission and execute callbacks through the Abilities API, so the same checks apply to the MCP server, the REST API, WP-CLI, and direct PHP calls.
- Deny by default
- A new agent can do nothing until its policy allows it. Abilities installed later stay denied. Unknown policy keys are refused rather than ignored.
- Tokens shown once
- Agent tokens are stored hashed and never shown again. Each can be limited by expiry, IP allowlist, client type, and schedule, and revoked at once.
- Your own checks still run
- Every plugin’s permission_callback runs as usual, even when a policy allows an ability. The agent only holds the capabilities its policy grants for that call.
- Sealed approvals
- A held request’s input is sealed when it is made, so what a person approves is exactly what runs. Emailed decision links work once, for one approver.
- Automatic pause
- An agent that keeps hitting refusals or tries blocked actions is paused automatically, and the Agents screen says why.
In the agency hub
- Sites call the hub; the hub never calls sites
- The hub has no way to reach into a site, run code on it, or read its database. Instructions go through the site’s own checks, as the administrator who connected it.
- Every message signed
- Each site creates its own Ed25519 key pair. Requests and answers are signed, timestamped, carry a single-use nonce, and are bound to the request they answer.
- Pairing without a shared secret on the wire
- The pairing code travels in the link’s fragment, which browsers never send to servers, and the hub stores only its SHA-256. Both sides show the same fingerprint.
- Counts, not content
- Sites send versions, agent names and statuses, waiting approvals, and daily counts. Posts, orders, customers, and agent input are never sent.
- Accounts
- Passwords are hashed with scrypt. Session and invitation tokens are stored only as hashes. Every action checks the member’s role in one permissions table.
- Browser protections
- Pages that hold approve, deny, and connect buttons cannot be framed by other sites, and send strict transport, content-type, and referrer headers.
Report a vulnerability
Email hello@agentwarden.com with the steps to reproduce it. Please do not open a public issue. We reply to every report.