Conversation
…in-all-the-ai-enhancement
…eate-a-folder-structure-to-contain-all-the-ai-enhancement
epeicher
left a comment
There was a problem hiding this comment.
Thanks @sejas for iterating on this! I have early reviewed the changes, and they look great. I much prefer to have the AI files as external resources that can be updated easily; this will help with maintenance and quick updates. I have tested the installation, and I can see the files generated as expected (thanks for adding the diagram!).
| Installation script | Created site |
|---|---|
![]() |
![]() |
I have left a couple of minor comments, but overall changes look good to me, please ping once the PR is Ready to review, and I will be happy to have another 👀
…eate-a-folder-structure-to-contain-all-the-ai-enhancement
…eate-a-folder-structure-to-contain-all-the-ai-enhancement
|
@epeicher , this PR is ready for a review! 🤞 |
On Windows, path.join() normalizes forward slashes to backslashes, but the BUNDLED_PATH constant keeps forward slashes. Using path.normalize() ensures the pathExists mock matches paths regardless of separator style. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The scripts/download-agent-skills.ts file was not covered by any tsconfig, causing eslint to fail with a parsing error during pre-push. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
📊 Performance Test ResultsComparing 8856b6e vs trunk app-size
site-editor
site-startup
Results are median values from multiple test runs. Legend: 🟢 Improvement (faster) | 🔴 Regression (slower) | ⚪ No change (<50ms diff) |
There was a problem hiding this comment.
Thanks Antonio for adding this! I have tested it, and it works great! I have created a site and confirmed the skills are copied as expected. I have also removed and edited, and confirmed that Reinstall works fine too. I have reviewed the code and it LGTM! I have left a couple of minor comments, but approving this, as it can progress as is.
| After creating a site | Install skills modal |
|---|---|
![]() |
![]() |
| const tasks = BUNDLED_SKILLS.map( ( skill ) => | ||
| installSkillToSite( sitePath, bundledPath, skill.id, overwrite ) | ||
| ); | ||
| const results = await Promise.allSettled( tasks ); |
|
@sejas Overall, this looks awesome 👍 One thing I’d like to discuss is the root directory name |
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Install skills/CLAUDE.md into sites on creation and keep it updated on server start alongside STUDIO.md. Renames updateStudioMdIfExists to updateManagedInstructionFiles to handle both files generically. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…eate-a-folder-structure-to-contain-all-the-ai-enhancement
This is a good point, and thought about that when creating the folder. The main reason to have the skills under a root top folder is to expose them to https://skills.sh/ , so users will be able to install them by running a similar command to |
|
Example of installing a Studio skill using studio-cli-skill.mp4 |








Related issues
Proposed Changes
Create a folder under the
skillsroot directory containing the staticAGENTS.md,CLAUDE.md,STUDIO.md, and custom Studio skills folders.It unifies the logic to bundle these files inside the binary and then copy them on site creation
Having the skills folder it opens the door to install them using
npx skillscommand. E.gnpx skills add https://github.com/Automattic/studio --skill studio-cliIt also adds getWpFilesPath function which points to the correct
wp-filesroot folder. That was broken becuase Studio was moved to a subdirectory when we created the mono repo.graph TD subgraph "Source (repo)" S1["skills/<br/>├── AGENTS.md<br/>├── CLAUDE.md<br/>├── STUDIO.md<br/>└── studio-cli/SKILL.md"] S2["GitHub: WordPress/agent-skills<br/>├── wp-plugin-development/<br/>├── wp-block-development/<br/>├── wp-block-themes/<br/>├── wp-rest-api/<br/>└── wp-wpcli-and-ops/"] end subgraph "Build Time (npm install)" WP["wp-files/skills/<br/>├── AGENTS.md<br/>├── CLAUDE.md<br/>├── STUDIO.md<br/>├── studio-cli/<br/>├── wp-plugin-development/<br/>├── wp-block-development/<br/>├── wp-block-themes/<br/>├── wp-rest-api/<br/>└── wp-wpcli-and-ops/"] end subgraph "App Startup" SF["server-files/skills/<br/>(app data directory)"] end subgraph "Site Creation" ROOT["~/Studio/my-site/<br/>├── AGENTS.md<br/>├── CLAUDE.md<br/>└── STUDIO.md"] AGENTS["~/Studio/my-site/.agents/skills/<br/>├── studio-cli/<br/>├── wp-plugin-development/<br/>└── ..."] CLAUDE["~/Studio/my-site/.claude/skills/<br/>├── studio-cli → ../../.agents/skills/studio-cli<br/>└── ... (symlinks)"] end S1 -->|"copyLocalContent()"| WP S2 -->|"downloadRemoteSkills()"| WP WP -->|"copyBundledAiInstructions()<br/>setup-wp-server-files.ts"| SF SF -->|"installAiInstructionsToSite()<br/>.md files → copyFile"| ROOT SF -->|"installSkillToSite()<br/>directories → copyDir"| AGENTS AGENTS -->|"ensureSkillSymlink()<br/>symlink"| CLAUDETesting Instructions
nvm use && npm ito download and merge remote and local skillsENABLE_AGENT_SUITE=true npm startagents-skills.mp4
Pre-merge Checklist