Files
wursor/spikes/plugin-catalog.md
SinachPat 6e59a8a36b feat: Phase 0 workspace, spikes, and golden harness
Stand up the monorepo skeleton and land the first Phase 0 artifacts:
pairing threat model, plugin catalog, builder detect, 20-prompt golden
harness, and synthetic 2GB mirror timing.
2026-08-15 09:44:43 +01:00

4.6 KiB

Spike: P0 plugin catalog

Status: done

Question

What may the agent ever install?

Done when

  • ~40 slugs written
  • wp plugin install <url> is forbidden even before an install playbook exists

Result

The agent may install only from the catalog table below, and only from wordpress.org via slug (wp plugin install <slug>). That playbook does not exist in the MVP. The rule still ships in Sprint 3 tool schemas so a heading-change agent cannot install anything.

Forbidden (now and in v1)

  • wp plugin install <url>
  • wp plugin install with a local zip or any path
  • Premium / marketplace URLs (Elementor Pro zip, Woo market, GitHub)
  • Any slug not in the catalog
  • Re-install of a detect-only plugin (table below)

Fail closed. Unknown slug → refuse and say so in chat. Do not search wordpress.org ad hoc.

Reputation, zip SHA, and egress-watch on first activate are Sprint 9. This note is only the allowlist.

Paid services behind a free slug (WooPayments, Site Kit) still hit the no-surprise gate at deploy.

Catalog (40)

wordpress.org slugs. Installable only when the site is install-safe (writable filesystem, DISALLOW_FILE_MODS off).

# Slug Why
1 contact-form-7 Forms. Most common.
2 wpforms-lite Forms. Non-technical default.
3 fluentform Forms.
4 forminator Forms + polls/quizzes.
5 ninja-forms Forms.
6 wordpress-seo Yoast. SEO.
7 seo-by-rank-math SEO.
8 all-in-one-seo-pack SEO.
9 woocommerce Store.
10 woocommerce-payments Checkout. Paid service → no-surprise.
11 woocommerce-gateway-stripe Checkout.
12 woocommerce-paypal-payments Checkout.
13 elementor Builder. Install only if site has no other builder.
14 kadence-blocks Gutenberg blocks.
15 stackable-ultimate-gutenberg-blocks Gutenberg blocks.
16 ultimate-addons-for-gutenberg Spectra. Gutenberg blocks.
17 classic-editor Needed on Classic sites before content edits.
18 simply-schedule-appointments Booking.
19 booking Booking Calendar.
20 easy-appointments Booking.
21 google-site-kit Analytics. Google account → no-surprise.
22 independent-analytics Analytics without Google.
23 fluent-smtp Mail delivery. SMTP secrets stay redacted (R10).
24 wp-mail-smtp Mail delivery.
25 redirection Redirects. Slug changes still hit R12.
26 akismet Comment spam.
27 cookie-law-info CookieYes. Consent.
28 complianz-gdpr Consent.
29 updraftplus Backup.
30 backwpup Backup.
31 autoptimize CSS/JS minify.
32 wp-optimize Cleanup / cache.
33 polylang Languages.
34 translatepress-multilingual Languages.
35 tablepress Tables.
36 duplicate-post Duplicate a page.
37 disable-comments Turn comments off.
38 safe-svg SVG uploads.
39 modula-best-grid-gallery Gallery.
40 foogallery Gallery.

40 slugs. Adding one is a catalog PR, not a prompt change.

Detect-only — never install

These break REST, deploys, or hosts. Site-info reports them. The agent does not install them.

Slug Why not
wordfence Kills REST / pairing.
better-wp-security iThemes. Same.
sucuri-scanner Host / firewall coupling.
litespeed-cache Host-specific.
w3-total-cache Easy to brick a site.
wp-super-cache Same.
jetpack Too large; host-coupled. Configure if already present, later.

Sprint 3 tests (this note is the spec)

api/__tests__/agents/tool-schemas.test.ts

  1. generateToolSchemas() has no tool or enum value matching wp plugin install http
  2. wp plugin install (when it exists) accepts only slugs from this catalog
  3. A tool call with slug evil-plugin is rejected before any sandbox exec
  4. A tool call with a URL or .zip is rejected

Until the install playbook exists, the simpler form is enough: no install tool at all, plus assertion (1).

Decision

  • Context: wordpress.org is not a reviewed-safe catalog. Preview cannot see a plugin phoning home. MVP has no install playbook, but the agent still needs a hard wall.
  • Options: open wordpress.org search vs a written allowlist vs delay any wall until Sprint 9.
  • Chosen: 40-slug allowlist now; no URL/zip; detect-only list for security/cache suites; no install tool in MVP.
  • Rejected: open search (R2). Installing Wordfence/Jetpack/cache suites (they break the product or the site).
  • Reverted later?