Every site is under fire.Make sure nothing lands.
Guard Forge hardens WordPress, locks out password guessers and gives every account a second factor — then checks your files against the build wordpress.org actually published and chains the audit log so a line cannot be edited quietly. The Avakode build also names the advisories that hit your plugins. All free; Pro adds the firewall, the scanner, alerts with quiet hours and the update that closes them.
Every site is under fire. The difference is whether a shot lands.
10 rules, running inside your WordPress. In this run they stopped 10 attacks and let all 3 ordinary requests through — the login redirect, the search for "union jack", the checkout note. A firewall that blocks your customers is not protection.
0 false positives · 10 rules · 5 tries then locked
Every block is written to the audit log with the rule that fired and the part of the request that tripped it — so a false positive is something you can read, not a mystery 403.
It checks your files against the build wordpress.org published, not against yesterday.
Official hashes with a verdict for the file nobody published, an audit log chained row to row — and, in the Avakode build, the advisories that name your plugins and, on Pro, the update that closes them.
Not “changed” — not in the official build
Every core file is compared with the checksums published for that exact release, and so is every plugin wordpress.org hosts once you tick “Also monitor plugins & themes” in Settings. Five verdicts: official, modified, missing, no reference — and the one a snapshot diff can never reach, a file that is in no published build at all. In the Avakode build a modified core file has a one-click restore, checked against the official hash before it is written, with the old file kept where the web cannot fetch it. The wordpress.org package gives the same verdict and sends you to Dashboard → Updates to put core files back.
An audit log that cannot be quietly edited
Each row is hashed together with the hash of the row before it, and “Verify chain” walks the lot. Change one field on one line and the line reports itself; delete a line and the gap shows, because the next row points at a hash nothing in the table produces.
The advisories, without paying for them (Avakode build)
In the Avakode build (the free zip), once you switch the feed on in Settings, the published advisories for WordPress, your plugins and your themes are matched daily against what is actually installed and at which version. The Avakode build’s feed is served seven days behind and the screen says so; Pro reads the same advisories in real time. The download is one public document, identical for every site, and carries nothing about yours. The wordpress.org package has no feed.
Patch by update (Pro)
Off until you switch it on. It installs the update only when the advisory names a fixed version, WordPress is offering one that reaches it, and that offered version is outside the advisory’s own affected range — “merely newer” is refused. One plugin per cron run, an allow list and a deny list, never on a copy of the site, never on a directory that is a symlink, and an e-mail plus an audit row for each one.
Alerts you can silence at night (Pro)
A card per channel — Telegram, Slack, a signed webhook — with a minimum severity each, a “Send test” that really sends, and a digest you can set to immediate, hourly or daily. Quiet hours hold the ordinary traffic until morning; a lockdown or a malware finding goes straight through them. Tokens and secrets are encrypted on your site and the form never prints them back.
A lockdown that throws itself (Pro)
Off until you switch it on. Then twenty different addresses locked out inside ten minutes — or, if you ask for that one too, a single finding from the malware scanner — shuts registration, comments, XML-RPC and anonymous REST writes without waiting for you. It lifts itself an hour later, writes both ends to the audit log, and never fires on a staging copy.
Guessing costs them. Not you.
5 wrong passwords and the address is locked for 30 minutes, with every attempt written to a log you keep for 30 days. Connect Cloudflare (Pro) and the block goes to the edge, so the next request never reaches your server — and behind a proxy the address comes from the trusted chain, so nobody can spoof somebody else into a lockout.
-
attempt 1user admin · wrong password -
attempt 2user admin · wrong password -
attempt 3user admin · wrong password -
attempt 4user admin · wrong password -
attempt 5user admin · wrong password -
lockoutaddress locked for 30 minutes
Activate, read what the scan found, then add the add-on.
Activate
Sensible defaults are on from the first request, and the hardening score names what is still open, what each row is worth and the screen that fixes it.
Read what it found
Switch the file check on in Settings, or press Run scan now, and the first scan names the files that are not part of the official build. The audit log already shows who changed what, on a chain you can verify. In the Avakode build, with the feed switched on, you also see which of your plugins have a published advisory against them.
Add the add-on
The firewall, the malware scanner, real-time advisories, the update that closes them, alerts with quiet hours, and the lockdown that throws itself.
Send anything you like at the gate. Including the harmless things.
These are the engine’s own 10 rules and its own request corpus. Send an injection and read the rule that caught it. Then send the 3 ordinary requests — a login redirect, a shopper searching for a “union jack” flag poster, a note on a checkout — and watch them go through.
10stopped at the gate
3ordinary requests let through
0false positives
Every block is written to the audit log with the rule that fired and the part of the request that tripped it. That is what makes a false positive something you can read, instead of a mystery 403 your customer reports as “the site is broken”.
Works with your stack
Guard Forge vs what your host already gives you
| What you are comparing | Guard Forge | a host’s WAF |
|---|---|---|
| Where a bad request dies | Early in the request, before WordPress builds the page; a locked-out address stops at Cloudflare’s edge once connected | At the host’s edge, if the plan includes one |
| Login lockout | Five tries, then the address is locked and the attempt is written down | Rarely offered, and rarely visible to you |
| File integrity | Against the hashes wordpress.org published for that exact release, with a verdict for a file that is in no build at all | Not covered |
| Vulnerability advisories | Matched to the versions you actually run — in the Avakode build, free and seven days behind; real time with the add-on | Generic advisories, if any |
| Closing the advisory | With Pro: installs the update that leaves the affected range, on cron, under an allow list and a deny list | Tells you about it, at best |
| Evidence afterwards | A hash-chained audit log on your own site: an edited or deleted line is detectable | Their dashboard, their retention, their export |
| Size of the managed ruleset | Ten rules, chosen and explained | A commercial WAF ships thousands and updates them hourly their win |
| Cleaning up a site that is already compromised | Not its job — it tells you what changed and hands you the evidence | Many hosts will do the cleanup, or sell you one their win |
Guard Forge is prevention, not incident response. If the site is already compromised, buy a cleanup first and install this afterwards.
The scan and the chain are free, and so is the Avakode build’s feed. The licence buys the add-on.
No upsells, no surprises.
What runs where in Guard Forge
Which work happens inside your own install, what leaves it, what needs a paid plan, and what a lapsed licence leaves behind.
What the free tier does inside your own install
- Files judged against the official wordpress.org build
- An audit log chained row to row, and verifiable
- Core checked against the published build, not against yesterday’s snapshot — and wordpress.org plugins too, once you tick “Also monitor plugins & themes”
What leaves your site when a feature is on, and where it goes
- The file check asks api.wordpress.org for the published checksums of your WordPress release, and only while the check runs. What goes out is a WordPress version and a locale, not the site address.
- With “Also monitor plugins & themes” ticked, the file check also asks downloads.wordpress.org for the checksums of each plugin wordpress.org hosts, by plugin name and version. With it off, no plugin is looked up.
- Those checksum lookups are the only requests the wordpress.org package makes. Every request below this one is in the Avakode build or in the Pro add-on.
- In the Avakode build, once you switch the vulnerability feed on in Settings, a daily request downloads the public advisory document from https://api.avakode.com/security/vulndb-public. It carries no licence key and no site address; the matching against your plugins happens on your own server.
- In the Avakode build, pressing “Explain this event” sends that one event to https://api.avakode.com/ai/process, with the site address in a header and a few facts about the site: WordPress version, number of active plugins, theme name and whether it is a multisite. Nothing is sent until you press.
- The first “Explain this event” press on a site with no licence and no trial yet starts the free trial first: https://api.avakode.com/public/trial/activate receives the product name, the site address and the administrator e-mail address.
- In the Avakode build, pressing Restore on a modified or missing core file fetches that one file from core.svn.wordpress.org for your WordPress version. Nothing is fetched until you press.
- In the Avakode build, pressing “Connect Avakode account” on the Settings screen posts the product name, the site address and the return address to https://api.avakode.com/auth/connect/init, then sends you to avakode.com to approve; on the way back the one-time token and the site address go to https://api.avakode.com/auth/exchange. Nothing is sent until you press.
- With an account connected, the Settings screen reads your remaining credits from https://api.avakode.com/ai/usage, with the connection token and the site address in request headers; Disconnect posts to https://api.avakode.com/auth/credits-connection/revoke.
- In the Avakode build, the feedback card POSTs your score, your comment and the plugin and WordPress version numbers to https://api.avakode.com/feedback, and only when you press Send feedback. No e-mail address travels with it.
- In the Avakode build, the Forge Suite screen sends a GET to https://api.avakode.com/health, with no body and no licence key, only when you press Run diagnostics or the repair button beside it; each of those runs the list of checks again. Opening the screen sends nothing.
- The Pro add-on asks https://api.avakode.com/updates/guardforge whenever WordPress checks for plugin updates; the site address, and the licence key if you have one, travel in request headers.
- Pressing Connect in the Pro add-on posts the product name, the site address and the return address to https://api.avakode.com/auth/connect/init, then sends you to avakode.com to approve. Nothing is sent until you press.
- Usage telemetry is off until you switch it on: every send reads the site option `forge_telemetry_consent` first, and stops when it is not "1".
- With telemetry on, batches of events POST to https://api.avakode.com/telemetry/batch.
What needs Pro, credits or an outside service
- Pro is a separate plugin. With no Pro add-on loaded the plan is free, whatever is stored in the database.
- Licence activation and every AI request go to https://api.avakode.com.
- AI actions spend credits from your Avakode balance; the price is decided on the server: “Explain this event” and the hourly AI batch cost 1 credit each.
- A request over 10,000 tokens costs a multiple of the base action price.
What happens when the licence lapses
- Free features keep working. The wp.org base ships no licensing SDK: without the Pro add-on answering "pro" through the `forge_pro_plan` filter the plan reads free.
- When the paid ladder answers "free" in so many words, the stored grace marker `forge_license_last_pro_at` is cleared and Pro gates close on the next admin request.
- Pro keeps working for 6 hours of silence from the licence server — that window covers an outage, not a revoked licence.
- A lapse removes no data. Tables and options go away only when you uninstall the plugin.
How long data is kept, and how you take it out
- Brute-force log rows are kept 30 days by default, the audit log 60; both are settings, 1–365 days.
- The audit-log retention setting is the second of the two, with the same 1–365 bounds.
- A report downloads as a file from the plugin screen; the Pro audit export is a separate download.
- Pro audit export.
Nothing to import, and nothing you cannot undo.
Nothing to migrate
No account to open and no DNS to move. Activate it and the lockout and the log are already running; the file check and, in the Avakode build, the advisory feed start when you switch them on.
It runs alongside a host WAF
Two layers do not conflict: theirs refuses the obvious, this one knows what WordPress is and what your plugins are.
Leaving takes your secrets with it
Deleting the plugin always removes your two-factor enrolments — those are shared secrets and recovery codes, and a database outlives a plugin. Everything else — the login log, the integrity snapshots, the audit trail — is kept unless you tick the box that says otherwise.
What people ask before they trust a security plugin
Close the gate before someone tries it.
The free core hardens the site, watches the files against the official hashes and chains the log; the Avakode build also reads the advisories. Pro adds the firewall, the scanner, the alerts, the patch and priority email support.
One forge. Twelve tools. One fire.
Every tool is forged in the same workshop — one AI engine, one design language, one account. Take more off the wall and the whole set gets cheaper.