Wp Interactivity API
Automattic/agent-skills
A skill your agent uses when building or debugging WordPress Interactivity API features (data-wp- directives, @wordpress/interactivity store/state/actions, block viewScriptModule integration…
Debug PHP.wasm main module crashes including Asyncify errors (unreachable, memory access out of bounds), JSPI errors (SuspendError, trying to suspend JS frames), WASM memory growth bugs, and runtime…
$ npx skills add WordPress/wordpress-playground --skill debug-php-wasm-main-module -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install WordPress/wordpress-playground debug-php-wasm-main-module --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/WordPress/wordpress-playground.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/debug-php-wasm-main-module .claude/skills/debug-php-wasm-main-module && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "debug-php-wasm-main-module" agent skill from https://github.com/WordPress/wordpress-playground/tree/trunk/.agents/skills/debug-php-wasm-main-module into .claude/skills/debug-php-wasm-main-module/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-php-wasm-main-module", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/WordPress/wordpress-playground/tree/trunk/.agents/skills/debug-php-wasm-main-moduleType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add WordPress/wordpress-playground --skill debug-php-wasm-main-module -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install WordPress/wordpress-playground debug-php-wasm-main-module --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/WordPress/wordpress-playground.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/debug-php-wasm-main-module .agents/skills/debug-php-wasm-main-module && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "debug-php-wasm-main-module" agent skill from https://github.com/WordPress/wordpress-playground/tree/trunk/.agents/skills/debug-php-wasm-main-module into .agents/skills/debug-php-wasm-main-module/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-php-wasm-main-module", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add WordPress/wordpress-playground --skill debug-php-wasm-main-module -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install WordPress/wordpress-playground debug-php-wasm-main-module --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/WordPress/wordpress-playground.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/debug-php-wasm-main-module .cursor/skills/debug-php-wasm-main-module && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "debug-php-wasm-main-module" agent skill from https://github.com/WordPress/wordpress-playground/tree/trunk/.agents/skills/debug-php-wasm-main-module into .cursor/skills/debug-php-wasm-main-module/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-php-wasm-main-module", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/WordPress/wordpress-playground.git --path .agents/skills/debug-php-wasm-main-module--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add WordPress/wordpress-playground --skill debug-php-wasm-main-module -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install WordPress/wordpress-playground debug-php-wasm-main-module --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/WordPress/wordpress-playground.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/debug-php-wasm-main-module .gemini/skills/debug-php-wasm-main-module && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "debug-php-wasm-main-module" agent skill from https://github.com/WordPress/wordpress-playground/tree/trunk/.agents/skills/debug-php-wasm-main-module into .gemini/skills/debug-php-wasm-main-module/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-php-wasm-main-module", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install WordPress/wordpress-playground debug-php-wasm-main-moduleInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add WordPress/wordpress-playground --skill debug-php-wasm-main-module -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/WordPress/wordpress-playground.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/debug-php-wasm-main-module .github/skills/debug-php-wasm-main-module && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "debug-php-wasm-main-module" agent skill from https://github.com/WordPress/wordpress-playground/tree/trunk/.agents/skills/debug-php-wasm-main-module into .github/skills/debug-php-wasm-main-module/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-php-wasm-main-module", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add WordPress/wordpress-playground --skill debug-php-wasm-main-module -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install WordPress/wordpress-playground debug-php-wasm-main-module --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/WordPress/wordpress-playground.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/debug-php-wasm-main-module .opencode/skills/debug-php-wasm-main-module && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "debug-php-wasm-main-module" agent skill from https://github.com/WordPress/wordpress-playground/tree/trunk/.agents/skills/debug-php-wasm-main-module into .opencode/skills/debug-php-wasm-main-module/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-php-wasm-main-module", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
debug-php-wasm-main-moduleDebug PHP.wasm main module crashes including Asyncify errors (unreachable, memory access out of bounds), JSPI errors (SuspendError, trying to suspend JS frames), WASM memory growth bugs, and runtime…
Debug Php Wasm Main Module is an agent skill from WordPress/wordpress-playground. Debug PHP.wasm main module crashes including Asyncify errors (unreachable, memory access out of bounds), JSPI errors (SuspendError, trying to suspend JS frames), WASM memory growth bugs, and runtime traps. Use when investigating RuntimeError, null function or signature mismatch, or other WASM-related crashes in the main PHP binary.
Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Debugging. It works with WebAssembly, PHP and WordPress. The repository describes itself as: Run WordPress in the browser via WebAssembly PHP. The licence is GPL-2.0.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit d7a515d. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npxnpmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npx and npm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Debug Php Wasm Main Module loads about 3.1k tokens when it runs. Until then it costs about 90 tokens; SKILL.md has 1,367 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from WordPress/wordpress-playground at commit d7a515d, republished under its GPL-2.0 licence (© WordPress). 1,367 words, ~3,090 tokens.
.claude/skills/debug-php-wasm-main-module/SKILL.md (or your agent's skills folder).Patterns for diagnosing and fixing crashes in the main PHP.wasm binary — Asyncify unwind/rewind failures, JSPI suspension errors, memory growth bugs, and runtime WASM traps.
| Error message | Likely cause |
|---|---|
RuntimeError: unreachable | A function on the call stack is missing from ASYNCIFY_ONLY |
memory access out of bounds | An opcode handler is missing — Asyncify corrupts the stack during rewind |
null function or signature mismatch | Missing ASYNCIFY_ONLY function elsewhere on the stack — corrupted Asyncify state causes this to manifest in a different function than the one actually missing |
table index is out of bounds | Missing opcode handler (variant of the above) |
Secondary errors (undefined variable, corrupted state) after any of these are red herrings caused by the corrupted Asyncify rewind.
| Error message | Likely cause |
|---|---|
SuspendError: trying to suspend JS frames | A JS frame sits between two WASM frames in the call stack. JSPI can only suspend pure WASM stacks. Common causes: (1) JS trampoline in the call chain; (2) C++ side module weak symbol env imports resolved through JS closure stubs |
SuspendError: trying to suspend without WebAssembly.promising | The WASM function calling a suspending JS import is not in JSPI_EXPORTS |
null function or function signature mismatch (after side module load) | Side module loading corrupted the function table — check Emscripten version match between main and side module |
A single missing ASYNCIFY_ONLY function produces different WASM error
types depending on the PHP version:
table index is out of boundsnull function or function signature mismatchmemory access out of boundsunreachable or memory access out of boundsEach PHP version compiles to different WASM code for the same opcode handler. Don't assume different error messages mean different bugs — always check the function at the top of the WASM stack trace.
--stack-trace-limit=200 (default 10 is too
shallow for Asyncify crashes)_emscripten_sleep, _wasm_recv)ASYNCIFY_ONLY. Recompile and
re-test after each addition. This reveals which function was actually
needed and whether deeper functions are now exposed.Every function on the call stack at the moment of the async call needs Asyncify instrumentation. This includes:
ZEND_*_SPEC_*_HANDLER) — always check these firstzend_user_it_get_new_iterator for iterator creation)var_destroy, _efree_large, php_var_unserialize_destroy) —
these are NOT just post-crash artifactsxbuf_format_converter,
php_printf_to_smart_str) that appear because the failed rewind
triggered zend_error — these are red herringsIterator operations (spread, foreach, array unpack):
ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER, ZEND_FE_FETCH_R_SPEC_VAR_HANDLERzend_user_it_get_new_iterator, zend_user_it_move_forwardStream operations:
_php_stream_make_seekable, _php_stream_copy_to_stream_ex_php_stream_flush, _php_stream_cast, zif_stream_selectObject operations:
zend_std_write_property, zend_std_cast_object_tostringzend_objects_clone_obj, zend_objects_clone_membersError/exception handling:
zend_error, zend_error_zstr, zend_throw_exceptionzend_undefined_indexSerialization:
zif_serialize, zif_unserialize, php_var_unserialize_destroy--experimental-wasm-jspiNode.js requires this flag for JSPI. Without it, wasm-feature-detect's
jspi() returns false and getPHPLoaderModule silently loads the
asyncify build. All JSPI bugs become invisible.
Add to vite.config.ts:
poolOptions: {
forks: {
execArgv: ['--expose-gc', '--experimental-wasm-jspi'],
},
},Always verify which build is loaded by adding a console.log to the JS
glue file.
Use wasm-feature-detect's jspi() function to branch between JSPI
(dynamic extensions) and Asyncify (static extensions) code paths — both
in runtime loading and in test files.
When a WASM JS import has isAsync = true, JSPI wraps it with
WebAssembly.Suspending. Even if the implementation never suspends
(returns a value, not a Promise), the wrapper corrupts the WASM call
stack — V8's native stack bookkeeping desynchronizes __stack_pointer,
causing heap corruption that manifests later as zend_mm_panic in
_efree.
Symptoms: crash only during PHP startup (php_module_startup), heap
corruption in unrelated code (zend_hash_destroy, zend_file_handle_dtor).
Debugging strategy: neuter the JS import (return 0 immediately). If
the crash persists, the problem is the JSPI wrapping, not the import's
implementation. Check functionName.isAsync in the compiled JS glue. Fix
by setting functionName__async: false in the Emscripten JS library.
Search the compiled JS glue for:
instrumentWasmImports → importPattern regex (imports wrapped with
WebAssembly.Suspending)instrumentWasmExports → exportPattern regex (exports wrapped with
WebAssembly.promising)A function in the import pattern that shouldn't suspend causes heap corruption. A function that needs to suspend but isn't in the pattern returns immediately instead of waiting.
loadNodeRuntime() / loadWebRuntime() → WASM module loads, FS ready
new PHP(runtime) → initializeRuntime(), writes default php.ini
php.run() → php_wasm_init() → php_module_startup()
→ parses ini, initializes modulesCrashes only during step 3 (startup) but not at runtime point to WASM-JS boundary issues (JSPI wrapping, calling conventions) rather than PHP logic bugs.
memory.grow() detaches the old ArrayBuffer. Emscripten's
updateMemoryViews() replaces module-scoped HEAP variables, but any JS
code that captured a typed array reference (object literal, destructuring,
closure) now points to a detached buffer.
Symptoms: SQLITE_IOERR from file locking, reads return zero, writes
are silent no-ops — all appearing after the WASM module has been running
for a while (memory grew).
Never expose raw typed arrays across module boundaries. Use accessor objects:
memory: {
HEAP16: {
get(offset) { return HEAP16[offset]; },
set(offset, value) { HEAP16[offset] = value; },
}
}This makes stale capture structurally impossible. Property getters
(get HEAP16() { return HEAP16; }) still expose the typed array, which
callers can capture — accessor objects are safer.
Emscripten's handleSleep() calls _malloc() on every async unwind. If
that triggers memory.grow(), Asyncify state corrupts. Fix: cache
allocateData() result, reuse across sleeps. Apply via Dockerfile
replace.sh (Asyncify-only, not JSPI).
INITIAL_MEMORY is baked into the WASM binary (typically 256MB). Force
growth from PHP:
str_repeat('x', 300 * 1024 * 1024);Or set a low INITIAL_MEMORY (64MB) during compilation to force earlier
growth.
When a PHP.wasm feature silently fails (no crash, no error, just doesn't work):
Add console.log to JS functions in the compiled glue file
(php_8_4.js). Search for function ___ (triple underscore) to find
Emscripten's syscall wrappers. Log arguments to see what WASM is passing.
If a C function is called in the source but the corresponding JS wrapper never fires, the symbol resolution is wrong.
const mod = new WebAssembly.Module(fs.readFileSync('path/to/module.wasm'));
console.log(WebAssembly.Module.imports(mod).map(i => i.name));
console.log(WebAssembly.Module.exports(mod).map(e => e.name));A function in the C source but NOT in the module's imports list was inlined, stubbed, or resolved statically — it won't call through to JS.
When the JS glue is not enough, add fprintf(stderr, ...) statements to
the PHP C source code and rebuild. This traces the actual execution path
through the WASM binary. Use this when:
assertNoCrash silently swallows errors when FIX_DOCKERFILE is
not set. Always add a re-throw after the catch block.php.exit() = unhandled rejections. Always
return or await calls to assertNoCrash().expect(result.text).toBe('').
Fix: add proper return types or wrap with ob_start()/ob_end_clean().sapi_send_headers as uncaught
exceptions (not promise rejections). Tests must handle both
unhandledRejection and uncaughtException.openssl.cafile via setPhpIniEntries.# Run tests for specific PHP version + mode
PHP=8.0 npm run test-group-3-asyncify
# Filter tests by name
npx nx test php-wasm-node --testFile=php.spec.ts -- --test-name-pattern='Magic Methods'
# Increase stack trace depth (critical for Asyncify crashes)
NODE_OPTIONS='--stack-trace-limit=200' npx nx test php-wasm-node
# Verbose output
npx nx test php-wasm-node -- --reporter=verbose| Situation | Action |
|---|---|
unreachable / memory access out of bounds | Asyncify crash — find missing ASYNCIFY_ONLY function |
SuspendError: trying to suspend JS frames | JS frame in WASM call stack — eliminate JS trampoline |
SuspendError: ... without WebAssembly.promising | Add function to JSPI_EXPORTS |
zend_mm_panic in _efree | Check for wrongly-async JS imports (JSPI wrapping issue) |
| Startup hang (all tests time out) | JSPI syscall wrapper gained JS frame — remove from JSPI lists |
SQLITE_IOERR after running a while | Stale HEAP reference after memory.grow() |
| Different errors across PHP versions | Same root cause — check function at top of WASM stack |
| Silent failure (no crash, no error) | Trace WASM-JS boundary — instrument glue file |
| Test passes but shouldn't | Check for assertNoCrash swallowing errors |
© WordPress, GPL-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/debug-php-wasm-main-module of WordPress/wordpress-playground.
Open the folder on GitHubat commit d7a515d
Debug Php Wasm Main Module next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Debug Php Wasm Main Module this skillWordPress/wordpress-playground | 2k | — | ~3.1k | Automated safety check: Pass | GPL-2.0 | |
| Wp Interactivity APIAutomattic/agent-skills | 211 | 2 repos | ~1.5k | Automated safety check: Pass | None | |
| Wp PlaygroundAutomattic/agent-skills | 211 | 1 repos | ~1.2k | Automated safety check: Pass | None | |
| WooCommerce Code Reviewwoocommerce/woocommerce | 11k | 3 repos | ~1.1k | Automated safety check: Pass | Custom licence | |
| WooCommerce Dev Cyclewoocommerce/woocommerce | 11k | 3 repos | ~431 | Automated safety check: Pass | Custom licence | |
| Staticphp Documentation Synccrazywhalecc/static-php-cli | 1.9k | — | ~2.2k | Automated safety check: Pass | MIT |
Automattic/agent-skills
A skill your agent uses when building or debugging WordPress Interactivity API features (data-wp- directives, @wordpress/interactivity store/state/actions, block viewScriptModule integration…
Automattic/agent-skills
A skill your agent uses for WordPress Playground workflows: fast disposable WP instances in the browser or locally via @wp-playground/cli (server, run-blueprint, build-snapshot), auto-mounting…
woocommerce/woocommerce
Reviews WooCommerce code changes against the project's standards, flagging backend PHP architecture, naming, documentation, data integrity and testing violations.
woocommerce/woocommerce
Workflow for WooCommerce development: run PHP and JavaScript tests, lint and fix code style on the current branch, and follow guides for i18n and markdown.
crazywhalecc/static-php-cli
Synchronize bilingual documentation when StaticPHP v3 user-facing or developer-facing documentation must change.
bonny/WordPress-Simple-History
A skill your agent uses when the deliverable is WordPress Playground Blueprint JSON or a Blueprint bundle, including creating, editing, reviewing, validating schema keys, choosing steps/resources…
WordPress/wordpress-playground
Annotate UI screenshots with documentation callouts in Fellyph's established visual style — uniform-width orange arrows with white halos, double-stroke target outlines, numbered callout cards, dim…
WordPress/wordpress-playground
Compile PHP.wasm main modules and side modules (dynamic extensions) for Node.js and web platforms.
WordPress/wordpress-playground
Debug WASM side modules (dynamic PHP extensions) including dlopen failures, SIDEMODULE loading, JSPI suspension crashes in extensions, C++ weak symbol issues, and extension runtime errors.
WordPress/wordpress-playground
Debug the WordPress Playground website by running the dev server from source and interacting with it via Playwright MCP.
Works with
Categories
Debug PHP.wasm main module crashes including Asyncify errors (unreachable, memory access out of bounds), JSPI errors (SuspendError, trying to suspend JS frames), WASM memory growth bugs, and runtime…. Debug Php Wasm Main Module is an agent skill from WordPress/wordpress-playground.wasm main module crashes including Asyncify errors (unreachable, memory access out of bounds), JSPI errors (SuspendError, trying to suspend JS frames), WASM memory growth bugs, and runtime traps.
Debug Php Wasm Main Module fits situations like: investigating RuntimeError; signature mismatch; other WASM-related crashes in the main PHP binary.
Run `npx skills add WordPress/wordpress-playground --skill debug-php-wasm-main-module -a claude-code`. Or copy the skill folder (.agents/skills/debug-php-wasm-main-module in WordPress/wordpress-playground) into .claude/skills/debug-php-wasm-main-module in your project. Claude Code loads it when a task matches its description.
Run `npx skills add WordPress/wordpress-playground --skill debug-php-wasm-main-module -a codex`. Or copy the skill folder (.agents/skills/debug-php-wasm-main-module in WordPress/wordpress-playground) into .agents/skills/debug-php-wasm-main-module in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add WordPress/wordpress-playground --skill debug-php-wasm-main-module -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/debug-php-wasm-main-module, .gemini/skills/debug-php-wasm-main-module, .github/skills/debug-php-wasm-main-module and .opencode/skills/debug-php-wasm-main-module in your project.
Going by SKILL.md and its folder, Debug Php Wasm Main Module needs the command-line tools its instructions call (npx and npm). Our summary lists: Node.js.
SKILL.md contains no URLs. Its commands use npx and npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Debug Php Wasm Main Module is published under the GPL-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.1k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Debug Php Wasm Main Module: Wp Interactivity API (Automattic/agent-skills, 211 stars), Wp Playground (Automattic/agent-skills, 211 stars), WooCommerce Code Review (woocommerce/woocommerce, 11k stars) and WooCommerce Dev Cycle (woocommerce/woocommerce, 11k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
WordPress (a GitHub organization) maintains it in WordPress/wordpress-playground, which has 1,973 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on October 9, 2026.
Source: WordPress/wordpress-playground on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.