| name | wp-abilities-api |
| description | Intelligent documentation system for the WordPress Abilities API. Activate automatically when working with WordPress plugins, ability registration, or when WordPress Abilities API terms are mentioned (wp_register_ability, ability categories, REST API, etc.). Provides context-aware documentation retrieval - fetches implementation guides for coding queries, API references for parameter lookups, and smart multi-page fetching for complex integrations. |
WordPress Abilities API Documentation
Overview
Provide intelligent documentation retrieval for the WordPress Abilities API when building WordPress plugins and applications. The WordPress Abilities API provides a standardized framework for registering, discovering, and executing discrete units of functionality (abilities) in WordPress, with built-in support for REST API exposure, JavaScript client integration, permissions, validation, and extensibility.
This skill automatically fetches relevant documentation from bundled markdown files and provides context-aware routing to ensure users get the right information format for their query.
Activation
Automatically Activate When:
WordPress Abilities API Functions Mentioned:
- Registration: wp_register_ability, wp_register_ability_category
- Retrieval: wp_get_ability, wp_get_abilities, wp_get_ability_category, wp_get_ability_categories
- Execution: execute, execute_callback, check_permissions
- Validation: wp_has_ability, input_schema, output_schema
WordPress Abilities API Terms:
- "Abilities API", "WordPress Abilities", "WP Abilities"
- "ability registration", "ability categories"
- "@wordpress/abilities" (JavaScript package)
- "wp-abilities/v1" (REST API namespace)
- Ability-related classes, callbacks, schemas
File Context Detection:
- Files with wp_register_ability or wp_register_ability_category calls
- Imports from @wordpress/abilities
- REST API calls to /wp-abilities/v1/
- WordPress plugin files mentioning abilities
Implementation Queries:
- Building WordPress plugins with abilities
- Registering custom abilities or categories
- Creating JavaScript clients for abilities
- Implementing permission callbacks or validation
- Exposing abilities via REST API
Do NOT Activate For:
- Generic WordPress plugin development without abilities context
- Other WordPress APIs (REST API, Settings API, etc.) unless specifically abilities-related
- Generic JavaScript/REST API discussions without WordPress Abilities context
- WordPress hooks unless specifically ability action/filter hooks
Core Capabilities
1. Context-Aware Documentation Routing
Route queries intelligently based on intent to provide the most useful documentation format:
Route 1: Implementation Queries → Getting Started + Relevant API
Triggers:
- "how to...", "how do I...", "how can I..."
- "build a...", "create a...", "implement..."
- "register an ability", "execute an ability"
- "example of...", "show me how..."
Action:
- Identify the relevant API area from INDEX.md
- Read getting-started guide:
references/getting-started/[guide].md - Read related API documentation:
references/[api-type]/[topic].md - Include overview context if needed:
references/overview/intro.md - Present with implementation pattern and code examples
Example Query: "How do I register an ability with input validation?" Fetch:
references/getting-started/basic-usage.mdreferences/php-api/registering-abilities.mdreferences/php-api/error-handling.md
Route 2: API Reference Queries → Specific API Documentation
Triggers:
- "what is...", "what does... do"
- "what parameters...", "what arguments..."
- "how does... work"
- "wp_register_ability parameters", "ability schema..."
Action:
- Look up function/feature in INDEX.md
- Read single API documentation file:
references/[api-type]/[topic].md - Suggest 2-3 related functions/features from same category
Example Query: "What parameters does wp_register_ability accept?" Fetch:
references/php-api/registering-abilities.mdSuggest: Using abilities, Categories, Error handling (same category)
Route 3: Getting Started Queries → Installation + Basic Usage
Triggers:
- "getting started with Abilities API"
- "how to install...", "setup..."
- "first ability", "quick start..."
- "new to Abilities API"
Action:
- Read getting started documentation:
references/getting-started/installation.mdreferences/getting-started/basic-usage.md
- Optionally read
references/overview/intro.mdfor context
Example Query: "I'm new to the Abilities API, how do I get started?" Fetch:
references/getting-started/installation.mdreferences/getting-started/basic-usage.mdreferences/overview/intro.md
Route 4: Category/API Type Queries → README + Specific Docs
Triggers:
- "PHP functions for abilities"
- "JavaScript client methods"
- "REST API endpoints"
- "what hooks are available"
- "show me all... functions"
Action:
- Read
references/README.md(contains categorized function/endpoint lists) - Read 1-2 key documentation files in that category
- List all relevant functions/endpoints with brief descriptions from INDEX.md
Example Query: "What JavaScript functions are available for abilities?" Fetch:
references/README.mdreferences/javascript-client/overview.mdreferences/javascript-client/abilities.md
Route 5: Integration Queries → Multiple API Types
Triggers:
- "use abilities from JavaScript"
- "REST API and PHP together"
- "client-side and server-side"
- "integrate with..."
Action:
- Identify relevant API types (PHP, JavaScript, REST)
- Read overview for each type
- Read specific implementation guides
- Show integration pattern
Example Query: "How do I register a PHP ability and execute it from JavaScript?" Fetch:
references/php-api/registering-abilities.mdreferences/javascript-client/abilities.mdreferences/rest-api/execution.md
Route 6: Troubleshooting Queries → Error Handling + Relevant Feature
Triggers:
- "error...", "not working...", "failing..."
- "WP_Error...", "validation error..."
- "permission denied", "ability not found"
- "troubleshoot...", "debug..."
Action:
- Read error handling documentation for relevant API
- Read specific feature documentation if applicable
- Reference hooks if extensibility needed
Example Query: "Why am I getting a permission denied error?" Fetch:
references/php-api/error-handling.mdreferences/php-api/using-abilities.mdreferences/rest-api/execution.md
2. Smart Multi-Page Fetching
Fetch Multiple Pages (2-4 total) When:
- Implementation queries requiring multiple concepts
- Query mentions multiple APIs (e.g., "PHP and JavaScript")
- Complex workflows (e.g., "register, validate, and execute")
- Related feature sets (registration + execution, categories + abilities)
Fetch Single Page When:
- Simple reference queries
- Troubleshooting lookups
- Single function explanations
- Hook documentation
Stop Fetching When:
- Already fetched 3-4 pages
- Query is answered sufficiently
- Additional pages would be tangential
3. Category-Aware Suggestions
After fetching documentation, always suggest 2-3 related topics using these category groupings:
Overview:
- Introduction, Core concepts, Goals and benefits, Use cases
Getting Started:
- Installation, Basic usage, First ability
PHP API:
- Categories (register, unregister, retrieve)
- Registering Abilities (wp_register_ability, parameters, conventions)
- Using Abilities (retrieve, execute, check permissions, inspect)
- Error Handling (WP_Error, validation, permissions)
JavaScript Client:
- Overview
- Working with Abilities (getAbilities, getAbility, executeAbility)
- Working with Categories (getAbilityCategories, getAbilityCategory)
- Registration (registerAbility, client-side abilities)
- Error Handling (JavaScript errors, error codes)
REST API:
- Overview (authentication, schema, show_in_rest)
- Abilities Endpoints (list, retrieve)
- Categories Endpoints (list, retrieve)
- Execution (run endpoint, HTTP methods, errors)
Hooks:
- Action Hooks (init, before/after execute)
- Filter Hooks (modify registration args)
Common Feature Pairings:
- wp_register_ability → Using abilities, Categories, Error handling
- Execute → Permissions, Error handling, REST execution
- Categories → Registering abilities, Organization
- JavaScript client → REST API, PHP registration
- Input/output schema → Validation, Error handling
- Permissions → Error handling, REST API authentication
- Hooks → Extensibility, Custom behavior
Suggest topics from:
- Same category (highest priority)
- Commonly used together
- Prerequisites or next steps
4. Code Example Generation
Always include relevant code examples in responses:
PHP Registration:
wp_register_ability( 'my-plugin/get-site-info', array(
'label' => 'Get Site Information',
'description' => 'Returns basic site information',
'category' => 'my-plugin-site-management', // Dashes only
'execute_callback' => function( $input ) {
return array(
'name' => get_bloginfo( 'name' ),
'url' => get_site_url(),
);
},
'permission_callback' => function() {
return current_user_can( 'manage_options' );
},
'meta' => array(
'show_in_rest' => true, // Inside meta array
'mcp' => array(
'public' => true, // Required for MCP discovery
'type' => 'tool',
),
),
) );
JavaScript Execution:
import { executeAbility } from '@wordpress/abilities';
const result = await executeAbility( 'my-plugin/get-site-info', {
// input parameters
} );
REST API Call:
GET /wp-json/wp-abilities/v1/my-plugin/get-site-info/run
Prerequisites:
- WordPress 5.0 or later
- PHP 7.4 or later
- Abilities API plugin installed and activated
- Check
references/getting-started/installation.mdfor setup
Response Formats
Single-Page Response Format
I've fetched the [Topic Name] documentation from the WordPress Abilities API.
**Quick Setup:**
[Include installation/setup if relevant to query]
[Full documentation content from file]
---
**Related Topics:**
- **[Topic 1]** - [Brief description of relationship]
- **[Topic 2]** - [Brief description of relationship]
- **[Topic 3]** - [Brief description of relationship]
**Code Example:**
[Include relevant code snippet if applicable]
Multi-Page Response Format
This requires understanding multiple aspects of the Abilities API. I've fetched:
---
## [Topic 1 Name]
**Quick Setup:**
[Include setup code if relevant]
[Full content from file]
---
## [Topic 2 Name]
[Full content from file]
---
## [Topic 3 Name] (if needed)
[Full content from file]
---
**Integration Pattern:**
[2-3 sentences explaining how these concepts work together, referencing examples from the documentation]
**Related Topics:**
- **[Additional Topic]** - [Description]
- **[Tutorial/Guide]** - [Description]
**Complete Example:**
[Include comprehensive code example showing integration]
Implementation Guidance Scope
✅ DO Provide:
Code Examples from Documentation
- Show registration patterns from the docs
- Reference execution examples
- Demonstrate permission callbacks
Feature Integration Patterns
- "Categories help organize related abilities"
- "Use input_schema for automatic validation"
- "Set show_in_rest: true inside meta array to expose via REST API"
- "Add mcp.public: true for AI assistant discoverability"
- "Check external plugin availability with class_exists()"
Best Practices from Docs
- "Follow namespace conventions: plugin-name/ability-name for abilities, plugin-name-category for categories"
- "Always implement permission_callback for security"
- "Use WP_Error for error handling with appropriate status codes"
- "Place show_in_rest and mcp settings inside meta array, not top-level"
- "Category slugs must use dashes only, never slashes"
Setup and Configuration
- Plugin installation methods
- Availability checking
- Hook timing (when to register)
Common Patterns
- Registration during init hooks
- Error handling with WP_Error
- Schema validation with JSON Schema
- Permission checking patterns
API Integration Guidance
- PHP to JavaScript integration
- REST API authentication
- Client-side vs server-side execution
❌ DON'T Provide:
- Custom Implementations Beyond Docs - Only show documented patterns
- Undocumented Features - Stick to documented capabilities only
- Complex Plugin Development - Focus on Abilities API usage
- Debugging Complex User Code - Can reference error handling docs only
- WordPress Core Development - Only Abilities API specific features
Documentation Access
File Structure
All documentation is bundled in the skill at:
.claude/skills/wp-abilities-api/
├── SKILL.md (this file)
└── references/
├── INDEX.md (searchable keyword reference)
├── README.md (overview and quick reference)
├── overview/
│ └── intro.md
├── getting-started/
│ ├── installation.md
│ └── basic-usage.md
├── php-api/
│ ├── categories.md
│ ├── registering-abilities.md
│ ├── using-abilities.md
│ └── error-handling.md
├── javascript-client/
│ ├── overview.md
│ ├── abilities.md
│ ├── categories.md
│ ├── registration.md
│ └── error-handling.md
├── rest-api/
│ ├── overview.md
│ ├── abilities-endpoints.md
│ ├── categories-endpoints.md
│ └── execution.md
└── hooks/
├── actions.md
└── filters.md
How to Access Documentation
- Search INDEX.md for function names, keywords, or categories
- Read files using the Read tool with absolute paths:
- PHP API:
.claude/skills/wp-abilities-api/references/php-api/[topic].md - JavaScript:
.claude/skills/wp-abilities-api/references/javascript-client/[topic].md - REST API:
.claude/skills/wp-abilities-api/references/rest-api/[topic].md - Getting Started:
.claude/skills/wp-abilities-api/references/getting-started/[topic].md - Hooks:
.claude/skills/wp-abilities-api/references/hooks/[type].md
- PHP API:
- Extract metadata from INDEX.md entries (keywords, categories)
- Generate suggestions using category groupings and common pairings
Query Interpretation Examples
Example 1: Implementation Query
Query: "How do I register an ability with input validation?"
Routing: Implementation query → Getting Started + PHP API
Process:
- Search INDEX.md for "register", "validation", "input_schema"
- Read
references/getting-started/basic-usage.md - Read
references/php-api/registering-abilities.md - Include schema example
Response includes:
- Basic registration pattern
- input_schema parameter with JSON Schema
- Validation error handling
- Related: Error handling, Using abilities
Example 2: API Reference Query
Query: "What parameters does wp_register_ability accept?"
Routing: API reference query → PHP API only
Process:
- Look up "wp_register_ability" in INDEX.md
- Read
references/php-api/registering-abilities.md - Find related: Using abilities, Categories, Error handling
Response includes:
- Complete parameter list and descriptions
- Code examples
- Naming conventions
- Suggestions: Using abilities, Categories, Error handling
Example 3: Getting Started Query
Query: "I'm new to the Abilities API, how do I get started?"
Routing: General guidance → Getting started docs
Process:
- Read
references/overview/intro.md - Read
references/getting-started/installation.md - Read
references/getting-started/basic-usage.md
Response includes:
- What the Abilities API is
- Installation instructions
- First ability example
- Next steps
Example 4: Integration Query
Query: "How do I execute a PHP ability from JavaScript?"
Routing: Integration query → Multiple APIs
Process:
- Read
references/php-api/registering-abilities.md(show_in_rest) - Read
references/javascript-client/abilities.md(executeAbility) - Read
references/rest-api/execution.md
Response includes:
- PHP registration with show_in_rest: true
- JavaScript executeAbility example
- REST API authentication
- Error handling on both sides
Example 5: Troubleshooting Query
Query: "Why am I getting a WP_Error when executing an ability?"
Routing: Troubleshooting → Error handling + Execution
Process:
- Read
references/php-api/error-handling.md - Read
references/php-api/using-abilities.md - Identify common error patterns
Response includes:
- WP_Error handling patterns
- Common error scenarios (permissions, validation, execution)
- Checking for errors with is_wp_error()
- Related: Permissions, Validation
Common Issues & Quick Fixes
Registration Failures
Issue: Ability not found / "category must contain only lowercase alphanumeric characters and dashes"
Fix: Category slug uses slashes → Change to dashes only (my-plugin-content not my-plugin/content)
Issue: "Property 'show_in_rest' is not a valid property"
Fix: Move show_in_rest inside meta array, not top-level
Issue: Ability not discoverable via MCP
Fix: Add 'mcp' => array('public' => true) inside meta array
Schema Validation Failures
Issue: Output validation fails with "field is not of type X" when field is null
Fix: Use array type syntax to allow null: 'type' => array('object', 'null')
Issue: Enum validation fails when field value is empty string
Fix: Include empty string in enum: 'enum' => array('option1', 'option2', '')
REST API Issues
Issue: GET request input param not being parsed correctly
Fix: Use array-style params (input[post_id]=1) instead of JSON string. POST with JSON body works normally.
WP-CLI Testing
Issue: ability_invalid_permissions error when testing via WP-CLI
Fix: Pass --user=admin flag to provide user context for permission checks
External Plugin Integration
When integrating with external plugins, always check availability first:
'execute_callback' => function( $input ) {
if ( ! class_exists( 'PluginNamespace\Class' ) ) {
return new WP_Error( 'plugin_not_active', 'Required plugin not active', array( 'status' => 503 ) );
}
// Use plugin functionality
},
Correct Meta Structure
'meta' => array(
'show_in_rest' => true, // REST API exposure
'mcp' => array(
'public' => true, // MCP discoverability
'type' => 'tool', // 'tool', 'resource', or 'prompt'
),
),
Important Notes
Naming Conventions
Always mention:
- Ability names:
plugin-name/ability-name(forward slash after prefix) - Category slugs:
plugin-name-category-name(dashes only, NO slashes) - Use lowercase with hyphens throughout
- Include plugin/theme prefix for uniqueness
CRITICAL: Category slugs must use dashes only. Forward slashes cause validation errors.
Security
Reference security when appropriate:
- Always implement permission_callback
- Validate and sanitize input
- Use WordPress nonce for AJAX requests
- Follow WordPress security best practices
WordPress Integration
- Register abilities on
wp_abilities_api_initorinithooks - Use
wp_abilities_api_categories_initfor categories - Check availability with
class_exists( 'WP_Abilities_Registry' ) - Follow WordPress coding standards
REST API & MCP Exposure
REST API:
- Set
show_in_rest: true(insidemetaarray) to expose via REST API - Consider authentication requirements
- Use readonly annotation for safe GET execution
- Destructive operations require POST
MCP (Model Context Protocol):
- Set
mcp.public: true(insidemetaarray) to make discoverable by AI assistants - Type options:
'tool'(default),'resource','prompt' - Only abilities with
mcp.public = trueare exposed via MCP adapter
Workflow Summary
For every query:
- Identify intent → Implementation, API reference, getting started, integration, or troubleshooting
- Route appropriately → Determine which files to fetch
- Search INDEX.md → Find relevant functions, keywords, categories
- Read files → Use Read tool to access documentation
- Format response → Include code examples, content, integration patterns, suggestions
- Suggest related → Use category groupings and common pairings
Keep responses:
- Focused on documented information
- Formatted with clear code examples
- Enriched with relevant topic suggestions
- Practical with setup and usage guidance
- Security-conscious with permission reminders