Implements the WordPress Abilities API - registering abilities and categories in PHP, exposing them over REST (wp-abilities/v1), consuming via @wordpress/abilities, and getting permissions and schemas right.
---
name: wp-abilities-api
description: Use when working with the WordPress Abilities API (wp_register_ability, wp_register_ability_category, /wp-json/wp-abilities/v1/*, @wordpress/abilities) - defining abilities, categories, meta, REST exposure, and permission checks. Targets WordPress 6.9+.
---
# WP Abilities API
Register, expose, and consume WordPress abilities, keeping the domain capability layer separate from REST/MCP/Command-Palette projections.
## Workflow
1. Confirm version constraints - for WP < 6.9 use the Abilities API plugin/package rather than core.
2. Search the repo for existing usage: `wp_register_ability(`, `wp_register_ability_category(`, `wp-abilities/v1`, `@wordpress/abilities`.
3. Register categories (optional) and abilities in PHP via the documented init hooks, with a stable namespaced `id`, label/description, `category`, and `meta` (`readonly: true` for informational, `show_in_rest: true` for client-visible).
4. Make registrations thin adapters over a shared core service so REST handlers, CLI, and UI stay in sync; group abilities sensibly instead of one per REST operation.
5. Confirm REST exposure under `wp-abilities/v1`, then consume from JS with `@wordpress/abilities`.
6. Debug "ability doesn't appear" by checking hook timing, `meta.show_in_rest`, and category/ID mismatches.
Full skill & source: https://github.com/WordPress/agent-skills/tree/aa735ea7111c7924ee988306bcef70439e17dec9/skills/wp-abilities-api