Skills
Skill 8 of 19
Use when setting up, configuring, or troubleshooting local WordPress development environments with @wordpress/env (wp-env).
3 minutes · 657 words · 18 sections
Install
npx skills add WordPress/agent-skills --skill wp-envnpx skills add WordPress/agent-skillsThe first command installs just this skill, by the name in its SKILL.md; the second installs the whole repository.
Zero-config, Docker-based local WordPress development environment for plugins, themes, and core.
.wp-env.json filewp-env, @wordpress/env, or Docker-based WordPress developmentwp-env or wp-playground? For a quick local WordPress, prefer the wp-playground skill by default — it’s faster, disposable, and needs no Docker. Use wp-env when the task actually requires it:
.wp-env.jsonwp db commands, data that survives restarts)wp-env run)wp-env can also run without Docker by using Playground as its runtime (npx @wordpress/env start --runtime=playground, experimental). That is still wp-env, driven by the same .wp-env.json, so treat it as a Docker-free fallback for a project that already carries wp-env config, not as a third option. It swaps MySQL for SQLite and drops wp-env run and the separate tests environment, which are most of the reasons to pick wp-env in the first place. For a quick Docker-free WordPress with no wp-env config, use the wp-playground skill directly.
docker infonode -v.wp-env.json, plugin headers, or style.css theme headers).wp-env.json and .wp-env.override.json if present# Global (recommended)
npm -g install @wordpress/env
# Or project-local
npm i @wordpress/env --save-dev
# Then use: npx wp-env startwp-env startDefault credentials:
adminpasswordCommon start options:
wp-env start --update – pull latest sources and reconfigurewp-env start --xdebug – enable Xdebug (debug mode)wp-env start --xdebug=profile,trace – multiple Xdebug modeswp-env start --auto-port – find available ports when defaults are busyWhen no .wp-env.json exists, wp-env scans the current directory:
| Detected type | How detected | Auto-config |
|---|---|---|
| Plugin | Plugin Name: header in a root .php file | { "plugins": ["."] } |
| Theme | Theme Name: header in style.css | { "themes": ["."] } |
| Core | wp-includes/version.php exists | { "core": "." } |
.wp-env.jsonPlace at the project root. All fields are optional.
{
"core": null,
"phpVersion": "8.1",
"plugins": [
".",
"https://downloads.wordpress.org/plugin/akismet.zip",
"WordPress/classic-editor"
],
"themes": [],
"port": 8888,
"multisite": false,
"phpmyadmin": false,
"config": {
"WP_DEBUG": true,
"SCRIPT_DEBUG": true
},
"mappings": {
"wp-content/mu-plugins": "./mu-plugins"
},
"lifecycleScripts": {
"afterStart": "wp-env run cli wp rewrite structure /%postname%/"
}
}core, plugins, themes, mappings)| Format | Example |
|---|---|
| Local path | ".", "./path", "../path" |
| GitHub shorthand | "WordPress/classic-editor", "owner/repo#branch" |
| ZIP URL | "https://downloads.wordpress.org/plugin/akismet.zip" |
| Git SSH | "ssh://user@host/repo.git#ref" |
GOTCHA: WordPress.org plugin/theme slugs (bare names like "akismet") do NOT work. Use the full ZIP URL.
.wp-env.override.jsonCreate .wp-env.override.json next to .wp-env.json for personal settings (gitignored). Only config and mappings are merged – all other fields (including plugins and themes arrays) fully replace the base.
# WP-CLI commands
wp-env run cli wp user list
wp-env run cli wp plugin list
wp-env run cli wp option update blogname "My Site"
wp-env run cli "wp rewrite structure /%postname%/"
# Run commands in a specific directory
wp-env run cli --env-cwd=wp-content/plugins/my-plugin composer install
# PHPUnit tests
wp-env run cli --env-cwd=wp-content/plugins/my-plugin vendor/bin/phpunit
# Pass flags with -- separator
wp-env run cli php -- --version
# MySQL access
wp-env run mysql mysql -- --user=root --password=password wordpressAvailable containers: mysql, wordpress, cli, composer, phpmyadmin.
wp-env stop # Stop and free ports
wp-env reset development # Reset dev database (keeps test)
wp-env reset all # Reset all databases
wp-env logs # Stream PHP/Docker logs
wp-env logs --no-watch # Print logs and exit
wp-env status # Show URLs, ports, config
wp-env status --json # Machine-readable status
wp-env cleanup # Remove containers/volumes (keep images)
wp-env destroy # Remove everything including imageswp-env start --xdebug # Enable debug mode
wp-env start --xdebug=coverage # For code coverage
wp-env start # Disable Xdebug (restart without flag)Modes: debug, profile, trace, develop, coverage.
IDE listens on port 9003. VS Code launch.json needs:
{
"type": "php",
"request": "launch",
"name": "Listen for Xdebug",
"port": 9003,
"pathMappings": {
"/var/www/html/wp-content/plugins/your-plugin": "${workspaceFolder}"
}
}{ "multisite": true, "plugins": ["."] }wp-env status shows running containers with correct portshttp://localhost:8888/wp-admin/ loads the WordPress adminwp-env run cli wp plugin list shows expected pluginswp-env reset development| Symptom | Cause | Fix |
|---|---|---|
| “Cannot connect to Docker daemon” | Docker not running | Start Docker Desktop |
| “Port 8888 already in use” | Port conflict | Use --auto-port or set custom port in .wp-env.json |
| Plugin not appearing | Missing Plugin Name: header in main PHP file | Add standard plugin header comment |
| “Could not find a valid source” | Invalid source string in config | Use full ZIP URL for wp.org plugins, not bare slugs |
| Stale environment after source changes | Cached Docker volumes | wp-env start --update or wp-env destroy && wp-env start |
| White screen / PHP errors | Corrupted database | wp-env reset all && wp-env start |
| Override not taking effect | Wrong merge behavior | plugins/themes in override replace base arrays; only config/mappings merge |
| Tests environment not accessible | Wrong port | Test environment runs on port 8889 by default |
| Xdebug not connecting | IDE not listening or wrong port | Ensure IDE listens on port 9003 with correct pathMappings |
| npm global install permission error | Node installed to a system path | Use nvm, or install locally: npm i -D @wordpress/env and run via npx wp-env |
--runtime=playground) is experimental and has limited feature parityUse when setting up, configuring, or troubleshooting local WordPress development environments with @wordpress/env (wp-env). Triggers on mentions of wp-env, local WordPress development, Docker-based WordPress, or requests to start/stop/configure a local WordPress instance.
The verbatim description from this skill’s front matter — the string an agent matches on to decide whether to load it.
skills/wp-env/SKILL.mdtrunk, last pushed 22 September 2026.SKILL.md, not by matching a directory convention. One layout observed: skills/*/SKILL.md.h1 and no skipped levels:/WordPress/agent-skills.md, and each skill at its own .md URL.