一键导入
plugin-review
Security review a WordPress plugin by slug, URL, or current directory.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Security review a WordPress plugin by slug, URL, or current directory.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
This skill should be used when the user asks to "build a block theme from this HTML", "turn these designs into a WordPress theme", "convert this Claude Design output to a block theme", "make a WordPress theme from these HTML files", "make this design into a real WordPress site", or otherwise requests turning static HTML/CSS/JS design files into a WordPress block theme on a local WordPress Studio site. Triggers when static HTML/CSS design files (or a directory of them) are supplied alongside any HTML→block-theme conversion intent.
Use when the user wants to extract images, assets, or design context from a Figma selection — e.g. "extract images from my current Figma selection", "pull the assets out of this Figma frame", "download the images from this Figma design", "grab the design context for this node". Connects directly to Figma desktop's local Dev Mode MCP server, downloads every referenced image (PNG/JPG/GIF/WEBP/SVG) plus a screenshot, and saves the design context to a local folder.
This skill should be used when the user asks to "convert this page", "migrate this page to blocks", "convert WPBakery on <URL>", "rewrite this page as Gutenberg", or otherwise requests an in-place WPBakery→Gutenberg conversion of a single post or page on a local WordPress Studio site. Triggers when a page URL is supplied alongside any WPBakery→Gutenberg conversion intent.
Converts an existing local WordPress Studio site's wp-content directory into a fresh clone of a GitHub repo while preserving the site's local runtime data (uploads, SQLite database, db.php drop-in, sqlite-database-integration mu-plugin, and all installed plugins and themes). Use when the user asks to "set up git on an existing site", "make this site's wp-content a git repo", "swap wp-content for <repo> on an existing site", "git-ify my Studio site's wp-content", "back the existing site with this repo", "point my local site at <repo>", "clone <repo> into an existing site without losing my uploads/database/plugins/themes", or describes any variant of converting an already-working local Studio site to be backed by a git repo. For brand-new sites with no local data to preserve, use clone-new-site instead.
Scaffolds a brand-new local WordPress Studio site from a GitHub repo by downloading WordPress, using the cloned repo AS wp-content, and creating a Studio site via the studio CLI. Use when the user asks to "set up a new Studio site", "scaffold a Studio site from <repo>", "spin up a local WordPress for <repo>", "create a Studio site using <github url>", "install WordPress with this repo as wp-content", "clone <repo> into a fresh WordPress install", "get a new Studio site running with <repo>", "bootstrap a WordPress site from <repo>", "stand up a local WP site with wp-content from <repo>", or describes any variant of bootstrapping a new local WP Studio site whose wp-content comes from a specific repo. For converting an existing local site's wp-content into a git clone (preserving uploads/database), use clone-into-existing-site instead.
| name | plugin-review |
| version | 1.0.0 |
| description | Security review a WordPress plugin by slug, URL, or current directory. |
| argument-hint | [slug or URL] |
| allowed-tools | ["Bash","Read","Write","Edit","Grep","Glob","WebFetch","Agent"] |
You are a WordPress security expert performing an automated plugin review. Your job is to assess whether a plugin is safe to install on a client's site, producing a structured report with an approve/conditional/reject recommendation.
There are two modes:
akismet), use it as-ishttps://wordpress.org/plugins/akismet/), extract the slug from the URL pathIf no slug or URL is given, assume we're inside a WordPress plugin directory and should review the local code.
Plugin Name: header comment. Use Glob to find *.php in the root of the working directory, then read each until you find the one with the Plugin Name: header.Plugin Name, Version, Text Domain (or derive the slug from the directory name).Set a LOCAL_MODE=true flag to remember to skip download and cleanup steps.
Store the slug in a variable for use in all subsequent steps.
Determine the directory where this skill's files live. It is the directory containing this skill.md file. Store this as SKILL_DIR.
Run the dependency checker:
bash "$SKILL_DIR/lib/check-deps.sh"
If it reports missing dependencies and the user declines installation, stop and explain what's needed.
Run the fetch script:
bash "$SKILL_DIR/lib/fetch-plugin.sh" <slug>
This creates /tmp/plugin-review-<slug>/ with:
source/ — plugin source codeapi-data.json — WordPress.org API metadatasupport-forum.xml — recent support threadsplugin-meta.txt — extracted key metricsreviews-recent.txt — recent user reviews (from API, sorted by date, mixed ratings)reviews-low-star.txt — 1-star and 2-star review titles with URLsCreate a working directory for output files:
mkdir -p /tmp/plugin-review-<slug>
Try to fetch wp.org metadata for the slug (the plugin may or may not be published):
bash "$SKILL_DIR/lib/fetch-plugin.sh" <slug>
If the fetch succeeds, read the metadata, reviews, and support forum data as normal — but ignore the downloaded source and use the current working directory as the source for all subsequent steps.
If the fetch fails (404 — plugin not on wp.org), this is a private or unreleased plugin. Note this in the report and proceed with code-only review. You won't have: install counts, ratings, reviews, support forum data, or CVE data from NVD (though you should still run the NVD check in case the slug matches something). The report should clearly state that wp.org metadata was unavailable.
Read /tmp/plugin-review-<slug>/plugin-meta.txt (if it exists) to understand the plugin's profile.
Read /tmp/plugin-review-<slug>/support-forum.xml (if it exists) and analyze the recent support threads. Look for:
Read both review files:
/tmp/plugin-review-<slug>/reviews-recent.txt — These are the most recent reviews regardless of rating. They show the current state of the plugin. Give these the most weight for understanding how the plugin is working right now.
/tmp/plugin-review-<slug>/reviews-low-star.txt — These are 1-star and 2-star review titles with URLs, across all time. Scan the titles for patterns and red flags. If any titles suggest serious concerns (security issues, deceptive pricing, data loss, site breakage, etc.), use WebFetch to read the full review at its URL to understand the details.
When analyzing low-star reviews, be fair:
Note anything relevant for the report's Risk Signals section and factor it into your Opinion. A plugin can be technically secure but still a bad recommendation if reviewers consistently report hidden fees, deceptive upselling, or features that don't work as advertised.
Run the static analysis script, pointing it at the correct source directory:
bash "$SKILL_DIR/lib/static-analysis.sh" "/tmp/plugin-review-<slug>/source"bash "$SKILL_DIR/lib/static-analysis.sh" "<current working directory>"In local mode, the output files (phpcs-results.json, grep-findings.txt, analysis-summary.txt) will be written to the parent of the source dir. To keep things clean, pass the working directory as the source and the output will land in its parent. Alternatively, you can copy them to /tmp/plugin-review-<slug>/ after.
After it completes, read these files:
/tmp/plugin-review-<slug>/analysis-summary.txt — overview of findings/tmp/plugin-review-<slug>/grep-findings.txt — detailed grep pattern matches/tmp/plugin-review-<slug>/phpcs-results.json — PHPCS output (read selectively — focus on errors first, then warnings)Run the vulnerability check:
bash "$SKILL_DIR/lib/vuln-check.sh" <slug>
This checks two databases:
WPSCAN_API_TOKEN env var) — best coverage for WordPress plugin vulnerabilities, includes fixed_in version dataRead /tmp/plugin-review-<slug>/cve-summary.txt for combined results.
If WPScan was skipped due to a missing API key, note this in the report's Methodology section so the reader knows coverage was limited. Include the setup instructions:
WPScan was not checked (no API key). For better vulnerability coverage, get a free key at https://wpscan.com/register and set
WPSCAN_API_TOKENin your environment.
For each vulnerability found (from either source):
fixed_in field is especially useful here)Run the GitHub check, pointing it at the right source directory:
bash "$SKILL_DIR/lib/github-check.sh" <slug>bash "$SKILL_DIR/lib/github-check.sh" <slug> /tmp/plugin-review-<slug>
grep -roha --binary-files=without-match 'https\?://github\.com/[a-zA-Z0-9._-]*/[a-zA-Z0-9._-]*' .This script searches the plugin's source files and API data for GitHub URLs. If found, it queries the GitHub API for repo metadata.
/tmp/plugin-review-<slug>/github-summary.txt for details"<slug>" wordpress plugin github and try to find the repo. If you find a candidate, verify it matches by checking if the repo description, file names, or readme mention the same plugin name/slug. Only include it in the report if you're confident it's the right repo.When a GitHub repo is found, note these signals for the report:
This is where you add the most value — contextual analysis that automated tools cannot do.
Read the security patterns guide:
Read: $SKILL_DIR/references/security-patterns.md
Find and read the main plugin file (the PHP file with Plugin Name: in its header, usually in the root of source/). Understand:
For each CRITICAL and HIGH finding from the grep scan:
For PHPCS errors:
Grep the plugin source for these patterns and read the handlers you find:
wp_ajax_nopriv_ — these are the highest riskregister_rest_route — check permission_callbackadmin_post_nopriv_ — unauthenticated form processingadd_shortcode — runs for all visitorswp_handle_upload, move_uploaded_fileFor each handler found:
If the grep scan found JS findings (marked with "(JS)" in the label):
Do NOT try to read every PHP file. Focus on:
Read the rating criteria:
Read: $SKILL_DIR/references/rating-criteria.md
Synthesize all findings into an overall risk rating:
Assign one of: LOW (approve), MEDIUM (conditional approve), HIGH (reject), CRITICAL (reject immediately)
Be conservative — if in doubt, rate higher (more dangerous). False positives are better than missed vulnerabilities.
Read the report template:
Read: $SKILL_DIR/templates/report.md
Fill in the template with your findings. Be specific:
Save the completed report:
Write: /tmp/plugin-review-<slug>-<YYYY-MM-DD>.md
Display a concise summary to the user. Format like this:
## Plugin Review: {Plugin Name} v{version}
**Risk: {LOW/MEDIUM/HIGH/CRITICAL}**
### Key Findings
- {Bullet points of the most important findings}
### Risk Signals
- Active installs: {count, or "N/A (local review)" if not on wp.org}
- Last updated: {date} ({days} days ago) {or "N/A" if local/private plugin}
- Rating: {rating}/100 {or "N/A"}
- Known vulnerabilities: WPScan: {count or "not checked (no API key)"} / NVD: {count}
- GitHub: {URL if found, or "not found"} — {last push date, open issues, archived status}
### Opinion
{Your honest, plain-spoken opinion on whether this plugin should be added to the Approved Plugins list. Write in first person. Consider the full picture — not just the raw findings, but their practical impact given the plugin's scope, attack surface, and how it's actually used. If the automated risk rating feels too harsh or too lenient for this specific plugin, say so and explain why. Be direct: "I'd approve this because..." or "I wouldn't approve this because..." End with any specific caveats or conditions if relevant.}
Full report saved to: /tmp/plugin-review-{slug}-{date}.md
Remote mode only: Clean up the working directory:
rm -rf /tmp/plugin-review-<slug>/
Keep the report file (it's outside the working directory).
Local mode: Do NOT delete anything. The working directory is the user's code. Only clean up the /tmp/plugin-review-<slug>/ output directory (which contains analysis results, not source code).