[wp-trac] [WordPress Trac] #64098: Introduce Abilities API

WordPress Trac noreply at wordpress.org
Tue Oct 28 10:20:17 UTC 2025


#64098: Introduce Abilities API
-------------------------------------------------+-------------------------
 Reporter:  gziolo                               |       Owner:  gziolo
     Type:  feature request                      |      Status:  closed
 Priority:  normal                               |   Milestone:  6.9
Component:  AI                                   |     Version:  trunk
 Severity:  normal                               |  Resolution:  fixed
 Keywords:  has-patch has-unit-tests needs-dev-  |     Focuses:
  note needs-docs                                |
-------------------------------------------------+-------------------------
Description changed by SergeyBiryukov:

Old description:

> Part of [https://make.wordpress.org/ai/2025/07/17/ai-building-blocks/ AI
> Building Blocks for WordPress ].
>
> > The Abilities API transforms WordPress from a collection of isolated
> functions into a unified, discoverable system. By creating a central
> registry of capabilities, it allows AI agents, automation tools, and
> developers to understand and interact with everything WordPress can do –
> from CLI commands and REST API endpoints to custom logic and plugin
> functions.
>
> Full proposal at https://make.wordpress.org/ai/2025/07/17/abilities-api/.
> Handbook page at https://make.wordpress.org/ai/handbook/projects
> /abilities-api/.
> Documentation in https://github.com/WordPress/abilities-
> api/tree/trunk/docs.
> Developed in https://github.com/WordPress/abilities-api.
> Composer package: https://packagist.org/packages/wordpress/abilities-api.
>
> Introduces a new Abilities API that allows WordPress plugins and themes
> to register and execute custom abilities with built-in permission
> checking, input/output validation via JSON Schema, and REST API
> integration.
>
> == Public Functions
>
> === Ability Management
> - `wp_register_ability( string $name, array $args ): ?WP_Ability` -
> Registers a new ability (must be called on `wp_abilities_api_init` hook)
> - `wp_unregister_ability( string $name ): ?WP_Ability` - Unregisters an
> ability
> - `wp_has_ability( string $name ): bool` - Checks if an ability is
> registered
> - `wp_get_ability( string $name ): ?WP_Ability` - Retrieves a registered
> ability
> - `wp_get_abilities(): array` - Retrieves all registered abilities
>
> === Ability Category Management
> - `wp_register_ability_category( string $slug, array $args ):
> ?WP_Ability_Category` - Registers an ability category (must be called on
> `wp_abilities_api_categories_init` hook)
> - `wp_unregister_ability_category( string $slug ): ?WP_Ability_Category`
> - Unregisters an ability category
> - `wp_has_ability_category( string $slug ): bool` - Checks if an ability
> category is registered
> - `wp_get_ability_category( string $slug ): ?WP_Ability_Category` -
> Retrieves a registered ability category
> - `wp_get_ability_categories(): array` - Retrieves all registered ability
> categories
>
> == Public Classes
>
> - `WP_Ability` - Encapsulates ability properties and methods (execute,
> check_permission, validate_input, etc.)
> - `WP_Ability_Category` - Encapsulates ability category properties
> - `WP_Abilities_Registry` - Manages ability registration and lookup
> (private, accessed via functions)
> - `WP_Ability_Categories_Registry` - Manages ability category
> registration (private, accessed via functions)
> - `WP_REST_Abilities_V1_Categories_Controller` - REST controller for
> listing category abilities
> - `WP_REST_Abilities_V1_List_Controller` - REST controller for listing
> abilities
> - `WP_REST_Abilities_V1_Run_Controller` - REST controller for executing
> abilities
>
> == REST API Endpoints
>
> === Namespace: `wp-abilities/v1`
>
> ==== List Category Abilities
> - `GET /wp-abilities/v1/categories` - Retrieve all registered ability
> categories
>   - Query parameters: `page`, `per_page`
>
> ==== Get Single Category Ability
> - `GET /wp-abilities/v1/categories/(?P<slug>[a-z0-9]+(?:-[a-z0-9]+)*)` -
> Retrieve a specific ability category by name
>
> ==== List Abilities
> - `GET /wp-abilities/v1/abilities` - Retrieve all registered abilities
>   - Query parameters: `page`, `per_page`, `category`
>
> ==== Get Single Ability
> - `GET /wp-abilities/v1/abilities/(?P<name>[a-zA-Z0-9\-\/]+)` - Retrieve
> a specific ability by name
>
> ==== Execute Ability
> - `GET|POST|DELETE /wp-
> abilities/v1/abilities/(?P<name>[a-zA-Z0-9\-\/]+)/run` - Execute an
> ability
>   - Supports multiple HTTP methods based on ability annotations
>   - Validates input against ability's input schema
>   - Validates output against ability's output schema
>   - Performs permission checks via ability's permission callback
>
> == Hooks
>
> === Actions
> - `wp_abilities_api_categories_init` - Fired when ability categories
> registry is initialized (register categories here)
> - `wp_abilities_api_init` - Fired when abilities registry is initialized
> (register abilities here)
> - `wp_before_execute_ability` - Fired before an ability gets executed,
> after input validation and permissions check
>
> - `wp_after_execute_ability` - Fires immediately after an ability
> finished executing
>
> === Filters
> - `wp_register_ability_category_args` - Filters ability category
> arguments before registration
> - `wp_register_ability_args` - Filters ability arguments before
> registration

New description:

 Part of [https://make.wordpress.org/ai/2025/07/17/ai-building-blocks/ AI
 Building Blocks for WordPress ].

 > The Abilities API transforms WordPress from a collection of isolated
 functions into a unified, discoverable system. By creating a central
 registry of capabilities, it allows AI agents, automation tools, and
 developers to understand and interact with everything WordPress can do –
 from CLI commands and REST API endpoints to custom logic and plugin
 functions.

 Full proposal at https://make.wordpress.org/ai/2025/07/17/abilities-api/.
 Handbook page at https://make.wordpress.org/ai/handbook/projects
 /abilities-api/.
 Documentation in https://github.com/WordPress/abilities-
 api/tree/trunk/docs.
 Developed in https://github.com/WordPress/abilities-api.
 Composer package: https://packagist.org/packages/wordpress/abilities-api.

 Introduces a new Abilities API that allows WordPress plugins and themes to
 register and execute custom abilities with built-in permission checking,
 input/output validation via JSON Schema, and REST API integration.

 == Public Functions

 === Ability Management
 - `wp_register_ability( string $name, array $args ): ?WP_Ability` -
 Registers a new ability (must be called on `wp_abilities_api_init` hook)
 - `wp_unregister_ability( string $name ): ?WP_Ability` - Unregisters an
 ability
 - `wp_has_ability( string $name ): bool` - Checks if an ability is
 registered
 - `wp_get_ability( string $name ): ?WP_Ability` - Retrieves a registered
 ability
 - `wp_get_abilities(): array` - Retrieves all registered abilities

 === Ability Category Management
 - `wp_register_ability_category( string $slug, array $args ):
 ?WP_Ability_Category` - Registers an ability category (must be called on
 `wp_abilities_api_categories_init` hook)
 - `wp_unregister_ability_category( string $slug ): ?WP_Ability_Category` -
 Unregisters an ability category
 - `wp_has_ability_category( string $slug ): bool` - Checks if an ability
 category is registered
 - `wp_get_ability_category( string $slug ): ?WP_Ability_Category` -
 Retrieves a registered ability category
 - `wp_get_ability_categories(): array` - Retrieves all registered ability
 categories

 == Public Classes

 - `WP_Ability` - Encapsulates ability properties and methods (execute,
 check_permission, validate_input, etc.)
 - `WP_Ability_Category` - Encapsulates ability category properties
 - `WP_Abilities_Registry` - Manages ability registration and lookup
 (private, accessed via functions)
 - `WP_Ability_Categories_Registry` - Manages ability category registration
 (private, accessed via functions)
 - `WP_REST_Abilities_V1_Categories_Controller` - REST controller for
 listing category abilities
 - `WP_REST_Abilities_V1_List_Controller` - REST controller for listing
 abilities
 - `WP_REST_Abilities_V1_Run_Controller` - REST controller for executing
 abilities

 == REST API Endpoints

 === Namespace: `wp-abilities/v1`

 ==== List Ability Categories
 - `GET /wp-abilities/v1/categories` - Retrieve all registered ability
 categories
   - Query parameters: `page`, `per_page`

 ==== Get Single Ability Category
 - `GET /wp-abilities/v1/categories/(?P<slug>[a-z0-9]+(?:-[a-z0-9]+)*)` -
 Retrieve a specific ability category by name

 ==== List Abilities
 - `GET /wp-abilities/v1/abilities` - Retrieve all registered abilities
   - Query parameters: `page`, `per_page`, `category`

 ==== Get Single Ability
 - `GET /wp-abilities/v1/abilities/(?P<name>[a-zA-Z0-9\-\/]+)` - Retrieve a
 specific ability by name

 ==== Execute Ability
 - `GET|POST|DELETE /wp-
 abilities/v1/abilities/(?P<name>[a-zA-Z0-9\-\/]+)/run` - Execute an
 ability
   - Supports multiple HTTP methods based on ability annotations
   - Validates input against ability's input schema
   - Validates output against ability's output schema
   - Performs permission checks via ability's permission callback

 == Hooks

 === Actions
 - `wp_abilities_api_categories_init` - Fired when ability categories
 registry is initialized (register categories here)
 - `wp_abilities_api_init` - Fired when abilities registry is initialized
 (register abilities here)
 - `wp_before_execute_ability` - Fired before an ability gets executed,
 after input validation and permissions check

 - `wp_after_execute_ability` - Fires immediately after an ability finished
 executing

 === Filters
 - `wp_register_ability_category_args` - Filters ability category arguments
 before registration
 - `wp_register_ability_args` - Filters ability arguments before
 registration

--

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/64098#comment:57>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list