wp-security

wp-security is an agent for Claude Code from stuartshields/claude-setup. It costs 58 tokens per session (2,885 once invoked), scanned A, original, MIT.

A security audit for WordPress, a system for building and managing websites. It checks how the site handles user input, permissions, login-related actions, database queries, API requests, and uploaded files.

In plain words
What is it for?
Use it to inspect WordPress plugins, themes, forms, APIs, AJAX handlers, webhooks, uploads, and other places where outside data enters the site.
Why use it?
It helps find exploitable weaknesses such as unsafe input handling, missing access checks, SQL injection, and insecure REST or form endpoints.

Agent for Claude Code

Written for Claude Code: a Claude Code subagent (agents/*.md). Also seen: model in frontmatter; reads .claude/ paths; mentions CLAUDE.md.

Good fit Use it to inspect WordPress plugins, themes, forms, APIs, AJAX handlers, webhooks, uploads, and other places where outside data enters the site.

Compare 6 agents from other repositories ↓
Install with agentmods
npx agentmods add agents/stuartshields/claude-setup/wp-security
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Clone the repo
git clone --depth 1 https://github.com/stuartshields/claude-setup

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for wp-security

README.md
[![agentmods](https://agentmods.dev/badge/agents/stuartshields/claude-setup/wp-security/github.svg)](https://agentmods.dev/agents/stuartshields/claude-setup/wp-security)
Your own site
<a href="https://agentmods.dev/agents/stuartshields/claude-setup/wp-security"><img src="https://agentmods.dev/badge/agents/stuartshields/claude-setup/wp-security/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for wp-security

Your own site · 80×15
<a href="https://agentmods.dev/agents/stuartshields/claude-setup/wp-security"><img src="https://agentmods.dev/badge/agents/stuartshields/claude-setup/wp-security.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 58 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 2,885 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00058 $0.02885
Opus 5.5 $0.00023 $0.01154
Sonnet 5.5 $0.00012 $0.00577
Haiku 4.5 $0.00006 $0.00288

Measured 1mo ago against content hash 18ec1e94e7f0, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

wp-security scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

agents/wp-security.md · 181 lines

How it starts

The opening of the file, as written. The whole thing — 181 lines — stays where its author put it; the contents beside it link to each section on GitHub.

You are a WordPress security engineer at Human Made. You audit WordPress applications following the Human Made Engineering Handbook and 10up Engineering Best Practices.

Core principle from HM: "Never trust user input" - user input is anything not written into the code itself, including external HTTP requests and translations.

Always read the project's CLAUDE.md first.

Process

Phase 0: Recon

  1. Read CLAUDE.md, composer.json, plugin/theme headers, wp-config.php, wp-content/, content/
  2. Detect hosting platform - read ~/.claude/agents/references/wp-hosting.md for detection markers and platform details. Check CLAUDE.md first (authoritative), fall back to auto-detection.
  3. Identify:
    • Custom REST endpoints, form handlers, AJAX handlers, admin pages, CLI commands, webhook receivers, file upload handlers
    • Code origin: HM-authored, inherited from another agency, or mixed. Check for HM namespaces, humanmade/coding-standards in composer.
    • Editor: Gutenberg or Classic Editor (affects which attack surfaces exist)
  4. Map trust boundaries: where does user data enter the application?
  5. Check for existing security tooling (PHPCS with WordPress security sniffs, etc.)
  6. Note platform-specific security features already in place (see Platform Security Notes below)

Legacy code strategy: Inherited codebases may have hundreds of escaping/sanitisation gaps. Do NOT produce an overwhelming wall of findings. Instead:

  • Phase 1: Find exploitable vulnerabilities first (SQL injection, unescaped user input reaching output, missing auth on sensitive endpoints)
  • Phase 2: Then report defence-in-depth issues (missing nonces on low-risk forms, inconsistent escaping on admin-only screens)
  • Group legacy findings separately so the team can triage proportionally

Phase 1: Input Sanitisation (Sanitise on Input)

Principle: Sanitise data before storing in the database to ensure safe values.

Check What to Look For
Raw superglobals Direct $_GET, $_POST, $_REQUEST, $_SERVER, $_COOKIE access without sanitisation. Every access must go through a sanitisation function.
Missing sanitisation functions User input stored without sanitize_text_field(), absint(), sanitize_email(), sanitize_url(), wp_kses(), wp_kses_post(), etc.
Validation vs sanitisation Validation (checking against allowed values) is preferred over sanitisation (modifying data). Use in_array() safelisting for enumerated options.
filter_input() misuse FILTER_VALIDATE_URL alone allows javascript: URLs. Must also verify protocol safety.
Type coercion Expecting integers but not using absint() or intval(). Expecting booleans but accepting truthy strings.

Read the full file on GitHub · 181 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 1mo ago First seen · 181 lines · 58 tokens per session scan A 18ec1e94e7f0

Subscribe to this mod's changes

wp-security is an agent published in the GitHub repository stuartshields/claude-setup (2 stars, last pushed 4mo ago), licensed MIT. It adds 58 tokens to every session and 2,885 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other agents, from other repositories

cover-letter-writer

Writes a tailored LaTeX cover letter using job analysis and resume summary. Follows strict anti-echo rules — no mirroring the job post, no filler, plain English at the user's configured level. Saves {fileprefix}coverletter.tex to the output folder.

saifwarraich/claude-job-applications · 59 tokens

resume-tailor

Tailors the candidate's resume LaTeX file to a specific job using masterdata.yaml and job analysis output. Selects relevant bullets, reorders skills, and weaves in ATS keywords. Saves {fileprefix}resume.tex to the output folder.

saifwarraich/claude-job-applications · 55 tokens

job-analyzer

Extracts structured info from a job post — company name, job title, job type, key skills, ATS keywords, responsibilities, and address. Always run this first before resume or cover letter agents.

saifwarraich/claude-job-applications · 44 tokens

pdf-compiler

Compiles {fileprefix}resume.tex and {fileprefix}coverletter.tex into PDFs with local pdflatex when it is installed (data stays on the machine), falling back to the free LaTeX-On-HTTP API (latex.ytotech.com) only when no local LaTeX is available. Cleans aux files but never deletes .tex sources. Reports errors with log…

saifwarraich/claude-job-applications · 87 tokens

doc-writer

Use this agent to write or improve technical documentation: README files, API docs, inline code comments, architectural decision records (ADRs), or when the user says "write docs", "document this", "update README", "create API documentation".

Imran-ml/claude-skills · 53 tokens

security-auditor

Use this agent for security-focused analysis: finding vulnerabilities, checking authentication flows, auditing dependencies, reviewing security configurations. Triggered by "security review", "find vulnerabilities", "is this secure", "check for XSS/SQL injection".

Imran-ml/claude-skills · 56 tokens