What's New
Primitives-first scoring
Hooks and shortcodes now score highest as primitive ability candidates. REST routes are capped at medium confidence (score 40) and flagged as orchestrators — they should consume and chain abilities, not become them.
REST-adjacent detection
Hooks found in the same file as register_rest_route() get a +20 bonus, surfacing the primitives that a REST endpoint likely already calls internally.
API-correct generated code
All generated stubs — draft, export, and admin UI templates — now include:
categoryfield (required by the Abilities API)- Correct two-hook pattern:
wp_abilities_api_categories_initfor categories,wp_abilities_api_initfor abilities meta.show_in_rest: truefor MCP discoverabilityarray $inputcallback signature (API convention)
Draft skips orchestrators
abilities-scout/draft now only generates stubs for primitive abilities. REST orchestrators are excluded — they need refactoring, not registration.
Improved descriptions
Generated descriptions strip the plugin namespace prefix from hook names and humanize the remaining words (akismet_submit_nonspam_comment → "Submit nonspam comment.").
MCP output schema
abilities-scout/scan now documents every field in its output schema: role, rest_adjacent, source, confidence, score, source_type, and all source sub-fields.
Bug fixes
scan_time_mswas returning a float; now correctly cast to integer so MCP output schema validation passes- Fixed
abilities_api_init→wp_abilities_api_initin the JS markdown export template
UI
- Orchestrator note shown once as a section banner, not repeated on every card
- New role badges (
primitive/orchestrator) and REST-adjacent indicator on ability cards
Credits
Thanks to David Levine for recommending the primitives-first approach that shaped this release.
Full Changelog: v1.1.0...v1.2.0