What problem does this address?
Today, AI agents interact with WordPress exclusively by borrowing a human user's identity. Whether through the MCP Adapter, the Abilities API REST endpoints, or WP-CLI (--user), an agent authenticates with a user's credentials, typically an application password, and every ability's permission_callback runs against that user. This works, but it has a structural gap:
- Agents always run on behalf of users. There is no other option, even for external or autonomous agents where no human is present at execution time.
- Access to abilities is controlled through permission checks (
current_user_can() via permission_callback). That is the right enforcement layer, but it can only answer what a given user may do, never what a given agent may do.
- There is no way to distinguish users from agents. Not in
post_author, not in activity logs, not in the new wp_ability_invoked hook (Abilities API improvements in 7.1). A site owner cannot answer what the agent changed yesterday, or revoke an agent's access without touching a human account.
This has come up repeatedly in recent discussions. The August 5 core AI chat leaned toward representing agents as a type of user, partly because that is where regulation around AI disclosure is heading. The trust ladder framing @JasonTheAdams presented there, with gradual and task-specific autonomy backed by observability and recoverability, requires knowing who the agent is before any of its levels can be enforced. Slack discussions in #core-ai about permission sets for agents point the same way, both as an enterprise requirement and as a trust-building measure for smaller sites. The currently documented workaround of manually creating a dedicated limited user for MCP access demonstrates both the demand and the gap. Those are ordinary users, with a login, full role privileges, and no marker that they are automated.
What is your proposed solution?
Extend the existing user concept rather than inventing a parallel identity system:
- Way to designate a user account as an agent, provisioned deliberately, marked as such, and visible as an agent everywhere attribution matters.
- No interactive login (application passwords or a similar mechanism instead), excluded by default from user listings and author dropdowns, plus other constraints appropriate for automated actors.
- Existing roles adapted where needed. Agents inherit the role system as their capability ceiling, so an "editor agent" is immediately understandable, with adjustments where human role defaults are not appropriate for automated actors.
- Dual usage – the current model stays fully valid, and agents acting interactively on behalf of a logged-in user keep working exactly as today. External and autonomous agents, such as remote MCP clients and scheduled jobs, get explicit agent accounts that can be granted, audited, and revoked independently of any human account.
This builds directly on what has already shipped. The permission_callback remains the enforcement boundary, wp_get_abilities() filtering provides the substrate for exposing only the abilities an agent's role permits, and wp_ability_invoked provides the audit hook that an agent-aware actor model would make meaningful.
Related
Intentionally out of scope for this issue: credential improvements such as expiry and OAuth, trust levels and autonomy tiers, and approval workflows. Each deserves its own discussion once the identity question is settled.
Why is this important to you?
No response
I have searched existing issues and this is not a duplicate.
What problem does this address?
Today, AI agents interact with WordPress exclusively by borrowing a human user's identity. Whether through the MCP Adapter, the Abilities API REST endpoints, or WP-CLI (
--user), an agent authenticates with a user's credentials, typically an application password, and every ability'spermission_callbackruns against that user. This works, but it has a structural gap:current_user_can()viapermission_callback). That is the right enforcement layer, but it can only answer what a given user may do, never what a given agent may do.post_author, not in activity logs, not in the newwp_ability_invokedhook (Abilities API improvements in 7.1). A site owner cannot answer what the agent changed yesterday, or revoke an agent's access without touching a human account.This has come up repeatedly in recent discussions. The August 5 core AI chat leaned toward representing agents as a type of user, partly because that is where regulation around AI disclosure is heading. The trust ladder framing @JasonTheAdams presented there, with gradual and task-specific autonomy backed by observability and recoverability, requires knowing who the agent is before any of its levels can be enforced. Slack discussions in #core-ai about permission sets for agents point the same way, both as an enterprise requirement and as a trust-building measure for smaller sites. The currently documented workaround of manually creating a dedicated limited user for MCP access demonstrates both the demand and the gap. Those are ordinary users, with a login, full role privileges, and no marker that they are automated.
What is your proposed solution?
Extend the existing user concept rather than inventing a parallel identity system:
This builds directly on what has already shipped. The
permission_callbackremains the enforcement boundary,wp_get_abilities()filtering provides the substrate for exposing only the abilities an agent's role permits, andwp_ability_invokedprovides the audit hook that an agent-aware actor model would make meaningful.Related
Intentionally out of scope for this issue: credential improvements such as expiry and OAuth, trust levels and autonomy tiers, and approval workflows. Each deserves its own discussion once the identity question is settled.
Why is this important to you?
No response
I have searched existing issues and this is not a duplicate.