From aaf9738d991da44c811e12f6d6f93b71fce3f284 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20S=C3=B8derlind?= Date: Sat, 8 Aug 2026 01:19:10 +0200 Subject: [PATCH] prepare-wordpress: use WordPress/agent-skills, trim to essential+optional; plugin 1.2.0 --- .well-known/agent-skills/index.json | 2 +- .../agent-skills/prepare-wordpress.tar.gz | Bin 16309 -> 16804 bytes plugins/wordpress-skills/CHANGELOG.md | 7 ++++ plugins/wordpress-skills/plugin.json | 2 +- .../skills/prepare-wordpress/SKILL.md | 31 +++++++++++++----- .../prepare-wordpress/scripts/plan_setup.mjs | 18 ++++++---- scripts/build-agent-plugin.mjs | 10 +++++- skills/prepare-wordpress/SKILL.md | 31 +++++++++++++----- .../prepare-wordpress/scripts/plan_setup.mjs | 18 ++++++---- 9 files changed, 88 insertions(+), 31 deletions(-) diff --git a/.well-known/agent-skills/index.json b/.well-known/agent-skills/index.json index 3005c0d..a08e26c 100644 --- a/.well-known/agent-skills/index.json +++ b/.well-known/agent-skills/index.json @@ -34,7 +34,7 @@ "type": "archive", "description": "Phase-based WordPress project setup workflow with dry-run planning and confirmed apply for predictable scaffolding/standardization.", "url": "https://soderlind.no/.well-known/agent-skills/prepare-wordpress.tar.gz", - "digest": "sha256:c0c7545687f6f8e7cb6e322b2ffde7ea87eface20008592031e7ba47f06d7b1a" + "digest": "sha256:dd7e7b2774f0fe5bf635e39c799840ed1262800dad35a9bdc5a3eeb3bf5c714d" }, { "name": "wp-bump", diff --git a/.well-known/agent-skills/prepare-wordpress.tar.gz b/.well-known/agent-skills/prepare-wordpress.tar.gz index 12f66625d77b46430c0a526d6fdf365391d97bab..f063b472dd8b2101b581bee5906fec4a5b2748c1 100644 GIT binary patch literal 16804 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
  • ==X&?}xW4O{^X^?> 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 X_u=ou--o}y?Z5vEJ6y0$0Qdj^vGF_s literal 16309 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

    K+;$ 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 diff --git a/plugins/wordpress-skills/CHANGELOG.md b/plugins/wordpress-skills/CHANGELOG.md index 43cbf3d..57f0f70 100644 --- a/plugins/wordpress-skills/CHANGELOG.md +++ b/plugins/wordpress-skills/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to `wordpress-skills` are documented here. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.2.0] - 2026-08-08 + +### Changed + +- prepare-wordpress: installs agent skills from WordPress/agent-skills (the former automattic/agent-skills repo is archived). +- prepare-wordpress: default skill install trimmed to essentials (wp-plugin-development, wp-wpcli-and-ops); wp-block-development, wp-performance, and wordpress-router are now optional. + ## [1.1.0] - 2026-08-08 ### Added diff --git a/plugins/wordpress-skills/plugin.json b/plugins/wordpress-skills/plugin.json index 61d225a..7b01687 100644 --- a/plugins/wordpress-skills/plugin.json +++ b/plugins/wordpress-skills/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json", "name": "wordpress-skills", - "version": "1.1.0", + "version": "1.2.0", "description": "WordPress development, testing, and release skills.", "author": { "name": "Per Soderlind", diff --git a/plugins/wordpress-skills/skills/prepare-wordpress/SKILL.md b/plugins/wordpress-skills/skills/prepare-wordpress/SKILL.md index a1bb011..ec093ec 100644 --- a/plugins/wordpress-skills/skills/prepare-wordpress/SKILL.md +++ b/plugins/wordpress-skills/skills/prepare-wordpress/SKILL.md @@ -2,7 +2,7 @@ name: prepare-wordpress description: "Phase-based WordPress project setup workflow with dry-run planning and confirmed apply for predictable scaffolding/standardization." compatibility: "macOS/Linux with Node.js 18+, Composer 2+, PHP 8.3+, git. Optional: WP-CLI for i18n commands, curl for downloading coding instructions." -version: "1.3.0" +version: "1.4.0" --- # Prepare WordPress Project @@ -240,17 +240,32 @@ Completion criterion: Required init artifacts exist (`package.json`, `composer.j ### 2) Install agent skills -Install the following skills. Skip any that already exist under `~/.copilot/skills/` or `~/.agents/skills/`. +Install the **essential** WordPress development skills from +[WordPress/agent-skills](https://github.com/WordPress/agent-skills). Skip any +that already exist under `~/.copilot/skills/` or `~/.agents/skills/`. ```sh -npx skills add https://github.com/automattic/agent-skills --skill wp-plugin-development -npx skills add https://github.com/automattic/agent-skills --skill wp-block-development -npx skills add https://github.com/automattic/agent-skills --skill wordpress-router -npx skills add https://github.com/automattic/agent-skills --skill wp-performance -npx skills add https://github.com/automattic/agent-skills --skill wp-wpcli-and-ops +npx skills add https://github.com/WordPress/agent-skills --skill wp-plugin-development +npx skills add https://github.com/WordPress/agent-skills --skill wp-wpcli-and-ops ``` -Completion criterion: Each listed skill is installed or explicitly skipped because it already exists. +**Optional** — offer these and install only the ones relevant to the project +(do not install by default): + +```sh +# Gutenberg blocks (only if the plugin ships blocks) +npx skills add https://github.com/WordPress/agent-skills --skill wp-block-development +# Profiling / caching / query optimization +npx skills add https://github.com/WordPress/agent-skills --skill wp-performance +# Repo classification / routing to other skills +npx skills add https://github.com/WordPress/agent-skills --skill wordpress-router +``` + +> **Source moved:** these skills are maintained at `WordPress/agent-skills`. The +> former `automattic/agent-skills` repo is archived (read-only), so it no longer +> receives fixes. + +Completion criterion: The essential skills are installed or skipped (already present); optional skills were offered and installed only if the user opted in. ### 3) Composer dependencies and scripts diff --git a/plugins/wordpress-skills/skills/prepare-wordpress/scripts/plan_setup.mjs b/plugins/wordpress-skills/skills/prepare-wordpress/scripts/plan_setup.mjs index 6183070..0ad0be9 100644 --- a/plugins/wordpress-skills/skills/prepare-wordpress/scripts/plan_setup.mjs +++ b/plugins/wordpress-skills/skills/prepare-wordpress/scripts/plan_setup.mjs @@ -3,6 +3,10 @@ import { detectProjectState } from "./detect_project.mjs"; const ALL_PHASES = ["plugin", "readme", "init", "skills", "composer", "config", "vitest", "eslint", "i18n", "instructions", "cleanup"]; +const SKILL_SOURCE = "https://github.com/WordPress/agent-skills"; +const ESSENTIAL_SKILLS = ["wp-plugin-development", "wp-wpcli-and-ops"]; +const OPTIONAL_SKILLS = ["wp-block-development", "wp-performance", "wordpress-router"]; + function parseArgs(argv) { const opts = { dryRun: true, @@ -45,7 +49,8 @@ function parseArgs(argv) { function buildPlan(state, phases) { const items = []; - const skillsToInstall = Object.entries(state.skills).filter(([, installed]) => !installed).map(([name]) => name); + const essentialMissing = ESSENTIAL_SKILLS.filter((name) => !state.skills[name]); + const optionalMissing = OPTIONAL_SKILLS.filter((name) => !state.skills[name]); const missingComposer = Object.values(state.composer).some((installed) => !installed); const add = (phase, title, commands = [], notes = []) => { @@ -82,11 +87,12 @@ function buildPlan(state, phases) { if (state.git && !state.gitRemoteOrigin) initNotes.push("Manual: ask user for git remote URL, then run git remote add origin ."); add("init", initCommands.length > 0 ? "Initialize project files" : "Init phase already satisfied", initCommands, initNotes); - const skillCommands = skillsToInstall.map((name) => { - - return `npx skills add https://github.com/automattic/agent-skills --skill ${name}`; - }); - add("skills", skillCommands.length > 0 ? "Install missing agent skills" : "All agent skills already present", skillCommands, []); + const skillCommands = essentialMissing.map((name) => `npx skills add ${SKILL_SOURCE} --skill ${name}`); + const skillNotes = []; + if (optionalMissing.length > 0) { + skillNotes.push(`Optional (install only if relevant): ${optionalMissing.map((name) => `npx skills add ${SKILL_SOURCE} --skill ${name}`).join(" | ")}`); + } + add("skills", skillCommands.length > 0 || skillNotes.length > 0 ? "Install agent skills" : "All agent skills already present", skillCommands, skillNotes); const composerCommands = []; const composerNotes = []; diff --git a/scripts/build-agent-plugin.mjs b/scripts/build-agent-plugin.mjs index c48ef69..b48da0e 100644 --- a/scripts/build-agent-plugin.mjs +++ b/scripts/build-agent-plugin.mjs @@ -24,7 +24,7 @@ const PLUGINS = [ distRepo: 'https://github.com/soderlind/wordpress-agent-plugin', manifest: { name: 'wordpress-skills', - version: '1.1.0', + version: '1.2.0', description: 'WordPress development, testing, and release skills.', author: { name: 'Per Soderlind', url: 'https://soderlind.no' }, homepage: 'https://github.com/soderlind/wordpress-agent-plugin', @@ -34,6 +34,14 @@ const PLUGINS = [ }, // Newest first. Each entry becomes a section in CHANGELOG.md. changelog: [ + { + version: '1.2.0', + date: '2026-08-08', + changed: [ + 'prepare-wordpress: installs agent skills from WordPress/agent-skills (the former automattic/agent-skills repo is archived).', + 'prepare-wordpress: default skill install trimmed to essentials (wp-plugin-development, wp-wpcli-and-ops); wp-block-development, wp-performance, and wordpress-router are now optional.', + ], + }, { version: '1.1.0', date: '2026-08-08', diff --git a/skills/prepare-wordpress/SKILL.md b/skills/prepare-wordpress/SKILL.md index a1bb011..ec093ec 100644 --- a/skills/prepare-wordpress/SKILL.md +++ b/skills/prepare-wordpress/SKILL.md @@ -2,7 +2,7 @@ name: prepare-wordpress description: "Phase-based WordPress project setup workflow with dry-run planning and confirmed apply for predictable scaffolding/standardization." compatibility: "macOS/Linux with Node.js 18+, Composer 2+, PHP 8.3+, git. Optional: WP-CLI for i18n commands, curl for downloading coding instructions." -version: "1.3.0" +version: "1.4.0" --- # Prepare WordPress Project @@ -240,17 +240,32 @@ Completion criterion: Required init artifacts exist (`package.json`, `composer.j ### 2) Install agent skills -Install the following skills. Skip any that already exist under `~/.copilot/skills/` or `~/.agents/skills/`. +Install the **essential** WordPress development skills from +[WordPress/agent-skills](https://github.com/WordPress/agent-skills). Skip any +that already exist under `~/.copilot/skills/` or `~/.agents/skills/`. ```sh -npx skills add https://github.com/automattic/agent-skills --skill wp-plugin-development -npx skills add https://github.com/automattic/agent-skills --skill wp-block-development -npx skills add https://github.com/automattic/agent-skills --skill wordpress-router -npx skills add https://github.com/automattic/agent-skills --skill wp-performance -npx skills add https://github.com/automattic/agent-skills --skill wp-wpcli-and-ops +npx skills add https://github.com/WordPress/agent-skills --skill wp-plugin-development +npx skills add https://github.com/WordPress/agent-skills --skill wp-wpcli-and-ops ``` -Completion criterion: Each listed skill is installed or explicitly skipped because it already exists. +**Optional** — offer these and install only the ones relevant to the project +(do not install by default): + +```sh +# Gutenberg blocks (only if the plugin ships blocks) +npx skills add https://github.com/WordPress/agent-skills --skill wp-block-development +# Profiling / caching / query optimization +npx skills add https://github.com/WordPress/agent-skills --skill wp-performance +# Repo classification / routing to other skills +npx skills add https://github.com/WordPress/agent-skills --skill wordpress-router +``` + +> **Source moved:** these skills are maintained at `WordPress/agent-skills`. The +> former `automattic/agent-skills` repo is archived (read-only), so it no longer +> receives fixes. + +Completion criterion: The essential skills are installed or skipped (already present); optional skills were offered and installed only if the user opted in. ### 3) Composer dependencies and scripts diff --git a/skills/prepare-wordpress/scripts/plan_setup.mjs b/skills/prepare-wordpress/scripts/plan_setup.mjs index 6183070..0ad0be9 100644 --- a/skills/prepare-wordpress/scripts/plan_setup.mjs +++ b/skills/prepare-wordpress/scripts/plan_setup.mjs @@ -3,6 +3,10 @@ import { detectProjectState } from "./detect_project.mjs"; const ALL_PHASES = ["plugin", "readme", "init", "skills", "composer", "config", "vitest", "eslint", "i18n", "instructions", "cleanup"]; +const SKILL_SOURCE = "https://github.com/WordPress/agent-skills"; +const ESSENTIAL_SKILLS = ["wp-plugin-development", "wp-wpcli-and-ops"]; +const OPTIONAL_SKILLS = ["wp-block-development", "wp-performance", "wordpress-router"]; + function parseArgs(argv) { const opts = { dryRun: true, @@ -45,7 +49,8 @@ function parseArgs(argv) { function buildPlan(state, phases) { const items = []; - const skillsToInstall = Object.entries(state.skills).filter(([, installed]) => !installed).map(([name]) => name); + const essentialMissing = ESSENTIAL_SKILLS.filter((name) => !state.skills[name]); + const optionalMissing = OPTIONAL_SKILLS.filter((name) => !state.skills[name]); const missingComposer = Object.values(state.composer).some((installed) => !installed); const add = (phase, title, commands = [], notes = []) => { @@ -82,11 +87,12 @@ function buildPlan(state, phases) { if (state.git && !state.gitRemoteOrigin) initNotes.push("Manual: ask user for git remote URL, then run git remote add origin ."); add("init", initCommands.length > 0 ? "Initialize project files" : "Init phase already satisfied", initCommands, initNotes); - const skillCommands = skillsToInstall.map((name) => { - - return `npx skills add https://github.com/automattic/agent-skills --skill ${name}`; - }); - add("skills", skillCommands.length > 0 ? "Install missing agent skills" : "All agent skills already present", skillCommands, []); + const skillCommands = essentialMissing.map((name) => `npx skills add ${SKILL_SOURCE} --skill ${name}`); + const skillNotes = []; + if (optionalMissing.length > 0) { + skillNotes.push(`Optional (install only if relevant): ${optionalMissing.map((name) => `npx skills add ${SKILL_SOURCE} --skill ${name}`).join(" | ")}`); + } + add("skills", skillCommands.length > 0 || skillNotes.length > 0 ? "Install agent skills" : "All agent skills already present", skillCommands, skillNotes); const composerCommands = []; const composerNotes = [];