[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M79R9CMWXSWXB4SMRYFFPQJD":3,"skill-same:01M79R9CMWXSWXB4SMRYFFPQJD":84},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":25,"commitSha":26,"skillDirectory":27,"forksCount":14,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":30,"ownerDescription":6,"updatedAt":31,"install":32,"resources":45},"01M79R9CMWXSWXB4SMRYFFPQJD","wp-abilities-api",null,"Use when working with the WordPress Abilities API (wp_register_ability, wp_register_ability_category, \u002Fwp-json\u002Fwp-abilities\u002Fv1\u002F*, @wordpress\u002Fabilities) including defining abilities, categories, meta, REST exposure, and permissions checks for clients.","gambitph\u002FAhentic","gambitph","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F3227089?v=4","01M6C1ZD8129MTRC23K53VJ45E","Gambit Technologies","01M79R7A85NS2N9JAK7AC0NE1X",0,"GPL-3.0","https:\u002F\u002Fgithub.com\u002Fgambitph\u002FAhentic\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fwp-abilities-api\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: wp-abilities-api\ndescription: \"Use when working with the WordPress Abilities API (wp_register_ability, wp_register_ability_category, \u002Fwp-json\u002Fwp-abilities\u002Fv1\u002F*, @wordpress\u002Fabilities) including defining abilities, categories, meta, REST exposure, and permissions checks for clients.\"\ncompatibility: \"Targets WordPress 7.0+ (PHP 7.4.0+). Filesystem-based agent with bash + node. Some workflows require WP-CLI.\"\n---\n\n# WP Abilities API\n\n## When to use\n\nUse this skill when the task involves:\n\n- registering abilities or ability categories in PHP,\n- exposing abilities to clients via REST (`wp-abilities\u002Fv1`),\n- consuming abilities in JS (notably `@wordpress\u002Fabilities`),\n- diagnosing “ability doesn’t show up” \u002F “client can’t see ability” \u002F “REST returns empty”.\n\n## Inputs required\n\n- Repo root (run `wp-project-triage` first if you haven’t).\n- Target WordPress version(s) and whether this is WP core or a plugin\u002Ftheme.\n- Where the change should live (plugin vs theme vs mu-plugin).\n\n## Procedure\n\nBefore deciding what to register, read `references\u002Fdomain-vs-projection.md` — abilities live at the domain capability layer; MCP \u002F Command Palette \u002F REST exposure is a projection. Registration shape and exposure shape are different decisions, and conflating them forces re-registration every time a consumer's constraints change.\n\n### 1) Confirm availability and version constraints\n\n- If this is WP core work, check `signals.isWpCoreCheckout` and `versions.wordpress.core`.\n- If the project targets WP \u003C 6.9, you may need the Abilities API plugin\u002Fpackage rather than relying on core.\n\n### 2) Find existing Abilities usage\n\nSearch for these in the repo:\n\n- `wp_register_ability(`\n- `wp_register_ability_category(`\n- `wp_abilities_api_init`\n- `wp_abilities_api_categories_init`\n- `wp-abilities\u002Fv1`\n- `@wordpress\u002Fabilities`\n\nIf none exist, decide whether you’re introducing Abilities API fresh (new registrations + client consumption) or only consuming.\n\n### 3) Register categories (optional)\n\nIf you need a logical grouping, register an ability category early (see `references\u002Fphp-registration.md`).\n\n### 4) Register abilities (PHP)\n\nFor grouping decisions (how many abilities to register, and where to put filters vs. new ability names), read `references\u002Fgrouping-heuristic.md` first — it keeps you from shipping one atomic ability per REST operation.\n\nTo avoid drift between the ability and the existing UI \u002F REST code path, see `references\u002Fshared-core-service.md` — abilities, REST handlers, CLI commands, and UI controllers should be thin adapters over a shared service. The reference also covers the metric trap (REST handlers that emit usage telemetry) and the `AGENTS.md` rule for keeping registrations in sync when underlying code paths change.\n\nFor shared helper patterns when multiple execute callbacks delegate to existing REST controllers, see `references\u002Fplugin-family-patterns.md` (identify the shared-API-client vs zero-arg-controllers shape) and `references\u002Fdelegate-helper-pattern.md` (one helper shape that works, and when not to use it).\n\nFor standardized `WP_Error` codes that let agents reason about retry vs. escalation, see `references\u002Ferror-code-vocabulary.md`.\n\nImplement the ability in PHP registration with:\n\n- stable `id` (namespaced),\n- `label`\u002F`description`,\n- `category`,\n- `meta`:\n  - add `readonly: true` when the ability is informational,\n  - set `show_in_rest: true` for abilities you want visible to clients.\n\nUse the documented init hooks for Abilities API registration so they load at the right time (see `references\u002Fphp-registration.md`).\n\n### 5) Confirm REST exposure\n\n- Verify the REST endpoints exist and return expected results (see `references\u002Frest-api.md`).\n- If the client still can’t see the ability, confirm `meta.show_in_rest` is enabled and you’re querying the right endpoint.\n\n### 6) Consume from JS (if needed)\n\n- Prefer `@wordpress\u002Fabilities` APIs for client-side access and checks.\n- Ensure build tooling includes the dependency and the project’s build pipeline bundles it.\n\n## Verification\n\n- `wp-project-triage` indicates `signals.usesAbilitiesApi: true` after your change (if applicable).\n- REST check (in a WP environment): endpoints under `wp-abilities\u002Fv1` return your ability and category when expected.\n- If the repo has tests, add\u002Fupdate coverage near:\n  - PHP: ability registration and meta exposure\n  - JS: ability consumption and UI gating\n\n## Failure modes \u002F debugging\n\n- Ability never appears:\n  - registration code not running (wrong hook \u002F file not loaded),\n  - missing `meta.show_in_rest`,\n  - incorrect category\u002FID mismatch.\n- REST shows ability but JS doesn’t:\n  - wrong REST base\u002Fnamespace,\n  - JS dependency not bundled,\n  - caching (object\u002Fpage caches) masking changes.\n- Execute callback returns unexpected errors or silently ignores input:\n  - `input_schema` defaults aren't being applied, pagination key drift between the ability and the backing, or `empty()`-based ID validation — see `references\u002Finput-schema-gotchas.md`.\n\n## Escalation\n\n- If you’re uncertain about version support, confirm target WP core versions and whether Abilities API is expected from core or as a plugin.\n- For canonical details, consult:\n  - `references\u002Frest-api.md`\n  - `references\u002Fphp-registration.md`\n","# WP Abilities API\n\n## When to use\n\nUse this skill when the task involves:\n\n- registering abilities or ability categories in PHP,\n- exposing abilities to clients via REST (`wp-abilities\u002Fv1`),\n- consuming abilities in JS (notably `@wordpress\u002Fabilities`),\n- diagnosing “ability doesn’t show up” \u002F “client can’t see ability” \u002F “REST returns empty”.\n\n## Inputs required\n\n- Repo root (run `wp-project-triage` first if you haven’t).\n- Target WordPress version(s) and whether this is WP core or a plugin\u002Ftheme.\n- Where the change should live (plugin vs theme vs mu-plugin).\n\n## Procedure\n\nBefore deciding what to register, read `references\u002Fdomain-vs-projection.md` — abilities live at the domain capability layer; MCP \u002F Command Palette \u002F REST exposure is a projection. Registration shape and exposure shape are different decisions, and conflating them forces re-registration every time a consumer's constraints change.\n\n### 1) Confirm availability and version constraints\n\n- If this is WP core work, check `signals.isWpCoreCheckout` and `versions.wordpress.core`.\n- If the project targets WP \u003C 6.9, you may need the Abilities API plugin\u002Fpackage rather than relying on core.\n\n### 2) Find existing Abilities usage\n\nSearch for these in the repo:\n\n- `wp_register_ability(`\n- `wp_register_ability_category(`\n- `wp_abilities_api_init`\n- `wp_abilities_api_categories_init`\n- `wp-abilities\u002Fv1`\n- `@wordpress\u002Fabilities`\n\nIf none exist, decide whether you’re introducing Abilities API fresh (new registrations + client consumption) or only consuming.\n\n### 3) Register categories (optional)\n\nIf you need a logical grouping, register an ability category early (see `references\u002Fphp-registration.md`).\n\n### 4) Register abilities (PHP)\n\nFor grouping decisions (how many abilities to register, and where to put filters vs. new ability names), read `references\u002Fgrouping-heuristic.md` first — it keeps you from shipping one atomic ability per REST operation.\n\nTo avoid drift between the ability and the existing UI \u002F REST code path, see `references\u002Fshared-core-service.md` — abilities, REST handlers, CLI commands, and UI controllers should be thin adapters over a shared service. The reference also covers the metric trap (REST handlers that emit usage telemetry) and the `AGENTS.md` rule for keeping registrations in sync when underlying code paths change.\n\nFor shared helper patterns when multiple execute callbacks delegate to existing REST controllers, see `references\u002Fplugin-family-patterns.md` (identify the shared-API-client vs zero-arg-controllers shape) and `references\u002Fdelegate-helper-pattern.md` (one helper shape that works, and when not to use it).\n\nFor standardized `WP_Error` codes that let agents reason about retry vs. escalation, see `references\u002Ferror-code-vocabulary.md`.\n\nImplement the ability in PHP registration with:\n\n- stable `id` (namespaced),\n- `label`\u002F`description`,\n- `category`,\n- `meta`:\n  - add `readonly: true` when the ability is informational,\n  - set `show_in_rest: true` for abilities you want visible to clients.\n\nUse the documented init hooks for Abilities API registration so they load at the right time (see `references\u002Fphp-registration.md`).\n\n### 5) Confirm REST exposure\n\n- Verify the REST endpoints exist and return expected results (see `references\u002Frest-api.md`).\n- If the client still can’t see the ability, confirm `meta.show_in_rest` is enabled and you’re querying the right endpoint.\n\n### 6) Consume from JS (if needed)\n\n- Prefer `@wordpress\u002Fabilities` APIs for client-side access and checks.\n- Ensure build tooling includes the dependency and the project’s build pipeline bundles it.\n\n## Verification\n\n- `wp-project-triage` indicates `signals.usesAbilitiesApi: true` after your change (if applicable).\n- REST check (in a WP environment): endpoints under `wp-abilities\u002Fv1` return your ability and category when expected.\n- If the repo has tests, add\u002Fupdate coverage near:\n  - PHP: ability registration and meta exposure\n  - JS: ability consumption and UI gating\n\n## Failure modes \u002F debugging\n\n- Ability never appears:\n  - registration code not running (wrong hook \u002F file not loaded),\n  - missing `meta.show_in_rest`,\n  - incorrect category\u002FID mismatch.\n- REST shows ability but JS doesn’t:\n  - wrong REST base\u002Fnamespace,\n  - JS dependency not bundled,\n  - caching (object\u002Fpage caches) masking changes.\n- Execute callback returns unexpected errors or silently ignores input:\n  - `input_schema` defaults aren't being applied, pagination key drift between the ability and the backing, or `empty()`-based ID validation — see `references\u002Finput-schema-gotchas.md`.\n\n## Escalation\n\n- If you’re uncertain about version support, confirm target WP core versions and whether Abilities API is expected from core or as a plugin.\n- For canonical details, consult:\n  - `references\u002Frest-api.md`\n  - `references\u002Fphp-registration.md`\n",{"name":5,"description":7,"compatibility":24},"Targets WordPress 7.0+ (PHP 7.4.0+). Filesystem-based agent with bash + node. Some workflows require WP-CLI.","main","c4de8c3c2dcdca2892337cdc47c05dcb1cea8562",".cursor\u002Fskills\u002Fwp-abilities-api","https:\u002F\u002Fgithub.com\u002Fgambitph\u002FAhentic","https:\u002F\u002Fgithub.com\u002Fgambitph","https:\u002F\u002Fwpstackable.com","2026-08-15 14:40:10",{"source":8,"skillName":5,"commands":33,"prompt":43,"zipAvailable":44},[34,37,40],{"tool":35,"command":36},"npx","npx skills add gambitph\u002FAhentic --skill wp-abilities-api",{"tool":38,"command":39},"bunx","bunx skills add gambitph\u002FAhentic --skill wp-abilities-api",{"tool":41,"command":42},"pnpm","pnpm dlx skills add gambitph\u002FAhentic --skill wp-abilities-api","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgambitph\u002FAhentic\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fwp-abilities-api\u002FSKILL.md",true,[46,52,56,60,64,68,72,76,80],{"path":47,"resourceType":48,"resourceTypeDesc":49,"sizeBytes":50,"sourceHtmlUrl":51},"references\u002Fdelegate-helper-pattern.md","REFERENCE","参考文档",12516,"https:\u002F\u002Fgithub.com\u002Fgambitph\u002FAhentic\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fwp-abilities-api\u002Freferences\u002Fdelegate-helper-pattern.md",{"path":53,"resourceType":48,"resourceTypeDesc":49,"sizeBytes":54,"sourceHtmlUrl":55},"references\u002Fdomain-vs-projection.md",9073,"https:\u002F\u002Fgithub.com\u002Fgambitph\u002FAhentic\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fwp-abilities-api\u002Freferences\u002Fdomain-vs-projection.md",{"path":57,"resourceType":48,"resourceTypeDesc":49,"sizeBytes":58,"sourceHtmlUrl":59},"references\u002Ferror-code-vocabulary.md",7153,"https:\u002F\u002Fgithub.com\u002Fgambitph\u002FAhentic\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fwp-abilities-api\u002Freferences\u002Ferror-code-vocabulary.md",{"path":61,"resourceType":48,"resourceTypeDesc":49,"sizeBytes":62,"sourceHtmlUrl":63},"references\u002Fgrouping-heuristic.md",8683,"https:\u002F\u002Fgithub.com\u002Fgambitph\u002FAhentic\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fwp-abilities-api\u002Freferences\u002Fgrouping-heuristic.md",{"path":65,"resourceType":48,"resourceTypeDesc":49,"sizeBytes":66,"sourceHtmlUrl":67},"references\u002Finput-schema-gotchas.md",13213,"https:\u002F\u002Fgithub.com\u002Fgambitph\u002FAhentic\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fwp-abilities-api\u002Freferences\u002Finput-schema-gotchas.md",{"path":69,"resourceType":48,"resourceTypeDesc":49,"sizeBytes":70,"sourceHtmlUrl":71},"references\u002Fphp-registration.md",6535,"https:\u002F\u002Fgithub.com\u002Fgambitph\u002FAhentic\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fwp-abilities-api\u002Freferences\u002Fphp-registration.md",{"path":73,"resourceType":48,"resourceTypeDesc":49,"sizeBytes":74,"sourceHtmlUrl":75},"references\u002Fplugin-family-patterns.md",11977,"https:\u002F\u002Fgithub.com\u002Fgambitph\u002FAhentic\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fwp-abilities-api\u002Freferences\u002Fplugin-family-patterns.md",{"path":77,"resourceType":48,"resourceTypeDesc":49,"sizeBytes":78,"sourceHtmlUrl":79},"references\u002Frest-api.md",378,"https:\u002F\u002Fgithub.com\u002Fgambitph\u002FAhentic\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fwp-abilities-api\u002Freferences\u002Frest-api.md",{"path":81,"resourceType":48,"resourceTypeDesc":49,"sizeBytes":82,"sourceHtmlUrl":83},"references\u002Fshared-core-service.md",15132,"https:\u002F\u002Fgithub.com\u002Fgambitph\u002FAhentic\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fwp-abilities-api\u002Freferences\u002Fshared-core-service.md",[85,92,99,106,113,120],{"skillNo":86,"name":87,"nameZh":6,"description":88,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":91,"publishedAt":19},"01M79RB5GMQX62XBSR4XMJ3758","writing-for-agents","Writing documents for agents. Use when creating or editing skills, or modifying AGENTS.md or CLAUDE.md.","https:\u002F\u002Fgithub.com\u002Fgambitph\u002FAhentic\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fwriting-for-agents\u002FSKILL.md",[],[],{"skillNo":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":19},"01M79RB0ET331AVRW6W4JAW30C","wp-rest-api","Use when building, extending, or debugging WordPress REST API endpoints\u002Froutes: register_rest_route, WP_REST_Controller\u002Fcontroller classes, schema\u002Fargument validation, permission_callback\u002Fauthentication, response shaping, register_rest_field\u002Fregister_meta, or exposing CPTs\u002Ftaxonomies via show_in_rest.","https:\u002F\u002Fgithub.com\u002Fgambitph\u002FAhentic\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fwp-rest-api\u002FSKILL.md",[],[],{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":19},"01M79RAX0CGSMDWJ7F5DATG4WF","wp-project-triage","Use when you need a deterministic inspection of a WordPress repository (plugin\u002Ftheme\u002Fblock theme\u002FWP core\u002FGutenberg\u002Ffull site) including tooling\u002Ftests\u002Fversion hints, and a structured JSON report to guide workflows and guardrails.","https:\u002F\u002Fgithub.com\u002Fgambitph\u002FAhentic\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fwp-project-triage\u002FSKILL.md",[],[],{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":112,"publishedAt":19},"01M79RAQ5Q24QC2W4M3XDM2195","wp-plugin-directory-guidelines","Use when reviewing WordPress plugins for GPL compliance, checking license headers or compatibility, evaluating upsell\u002Ffreemium\u002Ftrialware patterns, validating plugin naming or trademark rules, checking plugin slugs, understanding why a plugin was rejected from WordPress.org, or answering any question about the 18 WordPress.org Plugin Directory guidelines — even if the user doesn't mention 'guidelines' explicitly.","https:\u002F\u002Fgithub.com\u002Fgambitph\u002FAhentic\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fwp-plugin-directory-guidelines\u002FSKILL.md",[],[],{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":19},"01M79RAJ56J66CKG54B0SBK8PX","wp-plugin-development","Use when developing WordPress plugins: architecture and hooks, activation\u002Fdeactivation\u002Funinstall, admin UI and Settings API, data storage, cron\u002Ftasks, security (nonces\u002Fcapabilities\u002Fsanitization\u002Fescaping), and release packaging.","https:\u002F\u002Fgithub.com\u002Fgambitph\u002FAhentic\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fwp-plugin-development\u002FSKILL.md",[],[],{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":19},"01M79RACN5F4BJYC0QX4MBFV0P","wp-performance","Use when investigating or improving WordPress performance (backend-only agent): profiling and measurement (WP-CLI profile\u002Fdoctor, Server-Timing, Query Monitor via REST headers), database\u002Fquery optimization, autoloaded options, object caching, cron, HTTP API calls, and safe verification.","https:\u002F\u002Fgithub.com\u002Fgambitph\u002FAhentic\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fwp-performance\u002FSKILL.md",[],[]]