claude-plugin-wordpress-manager 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/.claude-plugin/plugin.json +2 -2
  2. package/CHANGELOG.md +30 -0
  3. package/agents/wp-content-strategist.md +30 -0
  4. package/agents/wp-monitoring-agent.md +50 -0
  5. package/docs/GUIDE.md +249 -15
  6. package/docs/plans/2026-02-28-wcop-strategic-assessment.md +220 -0
  7. package/hooks/hooks.json +9 -0
  8. package/package.json +6 -3
  9. package/servers/wp-rest-bridge/build/tools/index.d.ts +119 -0
  10. package/servers/wp-rest-bridge/build/tools/index.js +3 -0
  11. package/servers/wp-rest-bridge/build/tools/wc-webhooks.d.ts +129 -0
  12. package/servers/wp-rest-bridge/build/tools/wc-webhooks.js +142 -0
  13. package/servers/wp-rest-bridge/build/types.d.ts +12 -0
  14. package/skills/wordpress-router/references/decision-tree.md +7 -3
  15. package/skills/wp-content/SKILL.md +3 -0
  16. package/skills/wp-content-repurposing/SKILL.md +96 -0
  17. package/skills/wp-content-repurposing/references/content-atomization.md +117 -0
  18. package/skills/wp-content-repurposing/references/email-newsletter.md +136 -0
  19. package/skills/wp-content-repurposing/references/platform-specs.md +80 -0
  20. package/skills/wp-content-repurposing/references/social-formats.md +169 -0
  21. package/skills/wp-content-repurposing/scripts/repurposing_inspect.mjs +140 -0
  22. package/skills/wp-headless/SKILL.md +1 -0
  23. package/skills/wp-monitoring/SKILL.md +12 -2
  24. package/skills/wp-monitoring/references/fleet-monitoring.md +160 -0
  25. package/skills/wp-monitoring/scripts/monitoring_inspect.mjs +54 -1
  26. package/skills/wp-webhooks/SKILL.md +107 -0
  27. package/skills/wp-webhooks/references/integration-recipes.md +176 -0
  28. package/skills/wp-webhooks/references/payload-formats.md +134 -0
  29. package/skills/wp-webhooks/references/webhook-security.md +147 -0
  30. package/skills/wp-webhooks/references/woocommerce-webhooks.md +129 -0
  31. package/skills/wp-webhooks/references/wordpress-core-webhooks.md +162 -0
  32. package/skills/wp-webhooks/scripts/webhook_inspect.mjs +157 -0
  33. package/skills/wp-woocommerce/SKILL.md +1 -0
@@ -0,0 +1,140 @@
1
+ /**
2
+ * repurposing_inspect.mjs — Detect content repurposing readiness for WordPress projects.
3
+ *
4
+ * Scans for existing content volume, social media plugins, and email marketing
5
+ * integrations to assess repurposing potential.
6
+ *
7
+ * Usage:
8
+ * node repurposing_inspect.mjs [--cwd=/path/to/project]
9
+ *
10
+ * Exit codes:
11
+ * 0 — repurposing-relevant configuration found
12
+ * 1 — no relevant configuration found
13
+ */
14
+
15
+ import { readFileSync, existsSync, readdirSync } from 'node:fs';
16
+ import { join, resolve } from 'node:path';
17
+ import { argv, stdout, exit } from 'node:process';
18
+
19
+ // ---------------------------------------------------------------------------
20
+ // Helpers
21
+ // ---------------------------------------------------------------------------
22
+
23
+ function readFileSafe(filePath) {
24
+ try { return readFileSync(filePath, 'utf-8'); } catch { return null; }
25
+ }
26
+
27
+ function existsSafe(filePath) {
28
+ try { return existsSync(filePath); } catch { return false; }
29
+ }
30
+
31
+ function globDir(dirPath) {
32
+ try { return readdirSync(dirPath); } catch { return []; }
33
+ }
34
+
35
+ // ---------------------------------------------------------------------------
36
+ // Detectors
37
+ // ---------------------------------------------------------------------------
38
+
39
+ function detectSocialPlugins(cwd) {
40
+ const indicators = [];
41
+ const plugins = globDir(join(cwd, 'wp-content', 'plugins'));
42
+ const socialPlugins = [
43
+ 'jetpack', 'blog2social', 'social-auto-poster', 'nextscripts-social',
44
+ 'revive-old-posts', 'social-warfare', 'monarch', 'shareaholic',
45
+ 'add-to-any', 'social-snap', 'novashare',
46
+ ];
47
+
48
+ for (const plugin of plugins) {
49
+ if (socialPlugins.some(sp => plugin.toLowerCase().includes(sp))) {
50
+ indicators.push(`social_plugin: ${plugin}`);
51
+ }
52
+ }
53
+
54
+ return { found: indicators.length > 0, indicators };
55
+ }
56
+
57
+ function detectEmailPlugins(cwd) {
58
+ const indicators = [];
59
+ const plugins = globDir(join(cwd, 'wp-content', 'plugins'));
60
+ const emailPlugins = [
61
+ 'mailchimp', 'newsletter', 'mailpoet', 'convertkit', 'sendinblue',
62
+ 'brevo', 'constant-contact', 'hubspot', 'activecampaign', 'fluentcrm',
63
+ ];
64
+
65
+ for (const plugin of plugins) {
66
+ if (emailPlugins.some(ep => plugin.toLowerCase().includes(ep))) {
67
+ indicators.push(`email_plugin: ${plugin}`);
68
+ }
69
+ }
70
+
71
+ return { found: indicators.length > 0, indicators };
72
+ }
73
+
74
+ function detectContentVolume(cwd) {
75
+ const indicators = [];
76
+
77
+ // Check for wp-content/themes (WordPress presence indicator)
78
+ if (existsSafe(join(cwd, 'wp-content', 'themes'))) {
79
+ indicators.push('wordpress_detected');
80
+ }
81
+
82
+ // Check for XML export files (content volume indicator)
83
+ const rootFiles = globDir(cwd);
84
+ for (const file of rootFiles) {
85
+ if (/\.xml$/i.test(file) && /export|wordpress/i.test(file)) {
86
+ indicators.push(`xml_export: ${file}`);
87
+ }
88
+ }
89
+
90
+ return { found: indicators.length > 0, indicators };
91
+ }
92
+
93
+ // ---------------------------------------------------------------------------
94
+ // Main
95
+ // ---------------------------------------------------------------------------
96
+
97
+ function main() {
98
+ const cwdArg = argv.find(a => a.startsWith('--cwd='));
99
+ const cwd = cwdArg ? resolve(cwdArg.split('=')[1]) : process.cwd();
100
+
101
+ const social = detectSocialPlugins(cwd);
102
+ const email = detectEmailPlugins(cwd);
103
+ const content = detectContentVolume(cwd);
104
+
105
+ const hasRelevantSetup = social.found || email.found || content.found;
106
+
107
+ const recommendations = [];
108
+
109
+ if (!social.found) {
110
+ recommendations.push('No social media plugins detected — consider Blog2Social or Jetpack Social for automated sharing');
111
+ }
112
+ if (!email.found) {
113
+ recommendations.push('No email marketing plugins detected — consider MailPoet or FluentCRM for newsletter integration');
114
+ }
115
+ if (content.found) {
116
+ recommendations.push('WordPress content detected — use wp-content-strategist agent to select and repurpose existing content');
117
+ }
118
+ if (social.found && email.found) {
119
+ recommendations.push('Social + email plugins detected — ideal setup for multi-channel content repurposing');
120
+ }
121
+
122
+ const report = {
123
+ tool: 'repurposing_inspect',
124
+ version: '1.0.0',
125
+ timestamp: new Date().toISOString(),
126
+ cwd,
127
+ found: hasRelevantSetup,
128
+ areas: {
129
+ social_plugins: social,
130
+ email_plugins: email,
131
+ content_volume: content,
132
+ },
133
+ recommendations,
134
+ };
135
+
136
+ stdout.write(JSON.stringify(report, null, 2) + '\n');
137
+ exit(hasRelevantSetup ? 0 : 1);
138
+ }
139
+
140
+ main();
@@ -166,3 +166,4 @@ Read: `references/webhooks.md`
166
166
  - Astro WordPress integration: https://docs.astro.build/en/guides/cms/wordpress/
167
167
  - For REST endpoint development, use the `wp-rest-api` skill
168
168
  - For authentication security, use the `wp-security` skill
169
+ - For webhook configuration and management, use the `wp-webhooks` skill
@@ -3,8 +3,9 @@ name: wp-monitoring
3
3
  description: This skill should be used when the user asks to "monitor my site", "set up
4
4
  uptime checks", "performance baseline", "health report", "security scanning schedule",
5
5
  "content integrity check", "alerting", "reporting", "trend analysis", "is my site up",
6
- "site health over time", or mentions any form of ongoing WordPress monitoring and
7
- observability. Orchestrates uptime, performance, security, and content monitoring.
6
+ "site health over time", "fleet monitoring", "all sites", "cross-site comparison",
7
+ "network health", or mentions any form of ongoing WordPress monitoring and
8
+ observability. Orchestrates uptime, performance, security, content, and fleet monitoring.
8
9
  version: 1.0.0
9
10
  ---
10
11
 
@@ -40,6 +41,7 @@ Provides strategies and procedures for continuous WordPress monitoring across fi
40
41
  - "content changed" / "broken links" / "spam" → Content integrity (Section 4)
41
42
  - "alert me" / "notify" / "threshold" → Alerting strategies (Section 5)
42
43
  - "report" / "weekly summary" / "dashboard" → Reporting templates (Section 6)
44
+ - "fleet" / "all sites" / "network health" / "cross-site" → Fleet monitoring (Section 7)
43
45
  - "full monitoring" / "set up everything" → All sections, start with detection
44
46
 
45
47
  2. **Run detection first:**
@@ -98,6 +100,13 @@ See `references/reporting-templates.md`
98
100
  - Quarterly trend analysis
99
101
  - Executive dashboard format
100
102
 
103
+ ### Section 7: Fleet Monitoring
104
+ See `references/fleet-monitoring.md`
105
+ - Cross-site health iteration using `list_sites` + `switch_site`
106
+ - Fleet-wide pattern detection (correlated issues)
107
+ - Fleet comparison reports
108
+ - Site grouping and fleet baselines
109
+
101
110
  ## Reference Files
102
111
 
103
112
  | File | Content |
@@ -108,6 +117,7 @@ See `references/reporting-templates.md`
108
117
  | `references/content-integrity.md` | Change detection, link checking, spam |
109
118
  | `references/alerting-strategies.md` | Thresholds, escalation, notification channels |
110
119
  | `references/reporting-templates.md` | Daily/weekly/monthly report templates |
120
+ | `references/fleet-monitoring.md` | Fleet iteration, cross-site comparison, fleet reports |
111
121
 
112
122
  ## Recommended Agent
113
123
 
@@ -0,0 +1,160 @@
1
+ # Fleet Monitoring
2
+
3
+ ## Overview
4
+
5
+ Fleet monitoring extends single-site health checks to multiple WordPress installations. Instead of monitoring one site at a time, fleet monitoring iterates over all configured sites, collects per-site metrics, and aggregates them into a unified fleet view for cross-site comparison and pattern detection.
6
+
7
+ ## Core Concept
8
+
9
+ ```
10
+ # Fleet iteration pattern using MCP tools
11
+ for site in $(list_sites); do
12
+ switch_site $site
13
+ # run monitoring procedures...
14
+ done
15
+ ```
16
+
17
+ The fleet approach enables:
18
+ - **Aggregate visibility** — see all sites' health at a glance
19
+ - **Cross-site comparison** — identify outliers and common issues
20
+ - **Pattern detection** — spot correlated problems across the fleet
21
+ - **Fleet baselines** — track fleet-wide averages over time
22
+
23
+ ## Fleet Health Report Template
24
+
25
+ ```
26
+ ## Fleet Health Report
27
+ **Date:** [date] | **Sites:** [count] | **Scope:** [full / quick]
28
+
29
+ ### Fleet Overview
30
+ | Site | Uptime | Performance | Security | Content | Overall |
31
+ |------|--------|-------------|----------|---------|---------|
32
+ | [site-1] | [pass/warn/fail] | [pass/warn/fail] | [pass/warn/fail] | [pass/warn/fail] | [pass/warn/fail] |
33
+ | [site-2] | [pass/warn/fail] | [pass/warn/fail] | [pass/warn/fail] | [pass/warn/fail] | [pass/warn/fail] |
34
+
35
+ ### Fleet Summary
36
+ - **Healthy sites:** X/N
37
+ - **Degraded sites:** X/N (list)
38
+ - **Critical sites:** X/N (list)
39
+
40
+ ### Cross-Site Patterns
41
+ [findings or "No cross-site patterns detected"]
42
+
43
+ ### Fleet Recommendations (Priority Order)
44
+ 1. [Fleet-wide action]
45
+ 2. [Site-specific action]
46
+ ```
47
+
48
+ ## Cross-Site Pattern Detection
49
+
50
+ Fleet monitoring's key advantage is detecting patterns invisible at the single-site level:
51
+
52
+ ### Same Plugin Vulnerability Across Sites
53
+ - If a vulnerable plugin version appears on multiple sites, escalate as a fleet-wide P0
54
+ - Prioritize patching by exposure (public-facing sites first)
55
+
56
+ ### Fleet-Wide Performance Regression
57
+ - Correlated TTFB spikes across sites on the same host suggest a hosting or CDN issue
58
+ - Compare performance deltas: if all sites regress simultaneously, root cause is likely shared infrastructure
59
+
60
+ ### Identical Outdated WordPress Core Versions
61
+ - Track core version across the fleet
62
+ - Flag sites running the same outdated version for batch updates
63
+
64
+ ### Common Configuration Drift
65
+ - Compare wp-config.php settings across sites
66
+ - Detect inconsistencies in debug settings, cron configuration, or security constants
67
+ - Flag sites that have drifted from the fleet baseline
68
+
69
+ ## Fleet Baseline
70
+
71
+ ### Capturing Baselines
72
+
73
+ Establish a baseline for each site individually, then compute fleet averages:
74
+
75
+ 1. **Per-site baseline**: Run Procedures 3-6 for each site, recording all metrics with timestamps
76
+ 2. **Fleet averages**: Calculate mean/median for key metrics (TTFB, LCP, plugin count, admin users)
77
+ 3. **Fleet thresholds**: Set fleet-wide thresholds based on averages + acceptable deviation
78
+
79
+ ### Tracking Fleet Averages
80
+
81
+ | Metric | Fleet Avg | Fleet Median | Best | Worst | Threshold |
82
+ |--------|-----------|--------------|------|-------|-----------|
83
+ | TTFB | Xms | Xms | [site] Xms | [site] Xms | < 600ms |
84
+ | LCP | X.Xs | X.Xs | [site] X.Xs | [site] X.Xs | < 2.5s |
85
+ | Active Plugins | X | X | [site] X | [site] X | < 20 |
86
+ | Admin Users | X | X | [site] X | [site] X | varies |
87
+
88
+ ### Baseline Refresh
89
+
90
+ - Refresh individual site baselines monthly
91
+ - Recalculate fleet averages after each refresh
92
+ - Flag sites that deviate > 20% from fleet average
93
+
94
+ ## Site Grouping Strategies
95
+
96
+ Organize fleet sites into logical groups for targeted monitoring and reporting:
97
+
98
+ ### By Environment
99
+ | Group | Description | Monitoring Frequency |
100
+ |-------|-------------|---------------------|
101
+ | Production | Live customer-facing sites | Every 5 minutes (uptime), daily (full) |
102
+ | Staging | Pre-production testing | Hourly (uptime), weekly (full) |
103
+ | Development | Local/dev environments | On-demand only |
104
+
105
+ ### By Purpose
106
+ | Group | Description | Focus Areas |
107
+ |-------|-------------|-------------|
108
+ | Blog | Content-heavy editorial sites | Content integrity, SEO health |
109
+ | Shop | WooCommerce e-commerce sites | Uptime, performance, security |
110
+ | Landing | Marketing landing pages | Uptime, performance |
111
+ | Corporate | Company information sites | Content integrity, security |
112
+
113
+ ### By Hosting
114
+ | Group | Description | Pattern Detection |
115
+ |-------|-------------|-------------------|
116
+ | Shared Host A | Sites on same shared hosting | Correlated performance issues |
117
+ | VPS Cluster | Sites on same VPS | Resource contention detection |
118
+ | Managed WP | Sites on managed WordPress hosting | Provider-specific issue detection |
119
+
120
+ ## Scheduling: Fleet Scan Frequency
121
+
122
+ | Scan Type | Frequency | Scope | Duration Estimate |
123
+ |-----------|-----------|-------|-------------------|
124
+ | Quick uptime | Every 5 min | HTTP status + response time | ~2s per site |
125
+ | Standard health | Daily | Uptime + performance + security | ~30s per site |
126
+ | Full fleet audit | Weekly | All procedures (3-6) per site | ~2min per site |
127
+ | Baseline refresh | Monthly | Full audit + baseline update | ~3min per site |
128
+
129
+ ### Scheduling Recommendations
130
+ - Stagger scans to avoid overwhelming shared infrastructure
131
+ - Run quick uptime checks in parallel; full audits sequentially
132
+ - Schedule full audits during low-traffic windows
133
+ - Allow 10% buffer time for network delays
134
+
135
+ ## Escalation: Fleet-Wide P0
136
+
137
+ A fleet-wide P0 is triggered when multiple sites are affected simultaneously:
138
+
139
+ ### P0 Criteria
140
+ - **3+ production sites** with the same critical issue
141
+ - **All sites on a host** showing performance degradation > 50%
142
+ - **Known exploited vulnerability** present on any production site
143
+ - **Data breach indicators** on any site
144
+
145
+ ### P0 Response Procedure
146
+ 1. **Immediate**: Alert all stakeholders (do not wait for full fleet scan to complete)
147
+ 2. **Triage**: Identify affected sites and group by root cause
148
+ 3. **Isolate**: If security incident, recommend isolating affected sites
149
+ 4. **Delegate**: Hand off to `wp-security-auditor` (security) or `wp-site-manager` (infrastructure)
150
+ 5. **Track**: Monitor remediation progress across all affected sites
151
+ 6. **Post-mortem**: After resolution, update fleet baselines and document findings
152
+
153
+ ### Severity Matrix
154
+ | Affected Sites | Impact | Severity |
155
+ |----------------|--------|----------|
156
+ | 1 site, non-production | Low | P3 |
157
+ | 1 production site | Medium | P2 |
158
+ | 2 production sites | High | P1 |
159
+ | 3+ production sites | Critical | P0 |
160
+ | All sites (any env) | Critical | P0 |
@@ -193,6 +193,52 @@ function detectContentIntegrity(cwd) {
193
193
  return indicators.length > 0 ? { found: true, indicators } : { found: false };
194
194
  }
195
195
 
196
+ function detectFleetConfiguration() {
197
+ const indicators = [];
198
+
199
+ // Check WP_SITES_CONFIG environment variable
200
+ const sitesConfig = process.env.WP_SITES_CONFIG;
201
+ if (sitesConfig) {
202
+ try {
203
+ const sites = JSON.parse(sitesConfig);
204
+ if (Array.isArray(sites) && sites.length > 1) {
205
+ indicators.push(`multi_site_config: ${sites.length} sites`);
206
+ } else if (Array.isArray(sites) && sites.length === 1) {
207
+ indicators.push('single_site_config');
208
+ }
209
+ } catch {
210
+ // Not valid JSON, might be a file path
211
+ indicators.push('sites_config_present');
212
+ }
213
+ }
214
+
215
+ // Check for sites.json file
216
+ if (existsSafe(join(process.cwd(), 'sites.json'))) {
217
+ const content = readFileSafe(join(process.cwd(), 'sites.json'));
218
+ if (content) {
219
+ try {
220
+ const sites = JSON.parse(content);
221
+ if (Array.isArray(sites) && sites.length > 1) {
222
+ indicators.push(`sites_json: ${sites.length} sites`);
223
+ }
224
+ } catch { /* ignore */ }
225
+ }
226
+ }
227
+
228
+ const siteCount = indicators.find(i => i.startsWith('multi_site_config'))
229
+ ? parseInt(indicators.find(i => i.startsWith('multi_site_config')).split(': ')[1])
230
+ : indicators.find(i => i.startsWith('sites_json'))
231
+ ? parseInt(indicators.find(i => i.startsWith('sites_json')).split(': ')[1])
232
+ : 0;
233
+
234
+ return {
235
+ found: indicators.length > 0,
236
+ indicators,
237
+ site_count: siteCount,
238
+ fleet_monitoring_possible: siteCount > 1,
239
+ };
240
+ }
241
+
196
242
  // ---------------------------------------------------------------------------
197
243
  // Main
198
244
  // ---------------------------------------------------------------------------
@@ -206,8 +252,9 @@ function main() {
206
252
  const security = detectSecurityScanning(cwd);
207
253
  const logging = detectLogging(cwd);
208
254
  const contentIntegrity = detectContentIntegrity(cwd);
255
+ const fleet = detectFleetConfiguration();
209
256
 
210
- const hasMonitoring = uptime.found || performance.found || security.found || logging.found || contentIntegrity.found;
257
+ const hasMonitoring = uptime.found || performance.found || security.found || logging.found || contentIntegrity.found || fleet.found;
211
258
 
212
259
  const recommendations = [];
213
260
 
@@ -232,6 +279,11 @@ function main() {
232
279
  if (logging.found && logging.indicators.includes('debug_log_exists')) {
233
280
  recommendations.push('debug.log file exists — ensure it is not publicly accessible');
234
281
  }
282
+ if (fleet.fleet_monitoring_possible) {
283
+ recommendations.push(`Fleet monitoring available — ${fleet.site_count} sites configured. Use Procedure 7 for cross-site health checks.`);
284
+ } else if (!fleet.found) {
285
+ recommendations.push('No multi-site configuration detected — configure WP_SITES_CONFIG with multiple sites for fleet monitoring');
286
+ }
235
287
  if (!hasMonitoring) {
236
288
  recommendations.push('No monitoring setup found — use wp-monitoring skill to establish a baseline');
237
289
  }
@@ -248,6 +300,7 @@ function main() {
248
300
  security,
249
301
  logging,
250
302
  content_integrity: contentIntegrity,
303
+ fleet,
251
304
  },
252
305
  recommendations,
253
306
  };
@@ -0,0 +1,107 @@
1
+ ---
2
+ name: wp-webhooks
3
+ description: This skill should be used when the user asks to "set up webhooks",
4
+ "notify external service on publish", "connect WordPress to Zapier",
5
+ "webhook integration", "event notifications", "content sync webhook",
6
+ "WooCommerce webhook", "outbound notifications", or mentions automating
7
+ WordPress event propagation to external services.
8
+ version: 1.0.0
9
+ ---
10
+
11
+ # WordPress Webhooks Skill
12
+
13
+ ## Overview
14
+
15
+ WordPress webhooks are outbound HTTP notifications triggered by site events. When content is published, an order is placed, or a user registers, WordPress sends a JSON payload to a configured URL. This enables real-time integration with external services without polling.
16
+
17
+ ## When to Use
18
+
19
+ - User wants WordPress to notify external services on content/order/user events
20
+ - User needs to connect WordPress to Zapier, Make (Integromat), or n8n
21
+ - User wants WooCommerce order/product event notifications
22
+ - User needs headless CMS revalidation webhooks
23
+ - User asks about webhook security (secrets, signatures)
24
+
25
+ ## Webhooks vs REST API Polling
26
+
27
+ | Approach | Webhooks | Polling |
28
+ |----------|----------|---------|
29
+ | Trigger | Event-driven (push) | Schedule-driven (pull) |
30
+ | Latency | Near real-time | Depends on interval |
31
+ | Resource usage | Low (only on events) | High (constant requests) |
32
+ | Reliability | Needs retry logic | Simple but wasteful |
33
+ | Best for | Integrations, sync | Batch processing |
34
+
35
+ ## Decision Tree
36
+
37
+ 1. **What kind of webhook?**
38
+ - "WooCommerce webhook" / "order notification" / "product webhook" → WooCommerce webhooks (Section 1)
39
+ - "content published" / "post webhook" / "page updated" → WordPress core webhooks (Section 2)
40
+ - "headless revalidation" / "ISR trigger" / "cache invalidation" → Headless webhooks (Section 3)
41
+ - "Zapier" / "Make" / "n8n" / "Slack notification" → Integration recipes (Section 4)
42
+ - "webhook security" / "secret" / "signature" → Webhook security (Section 5)
43
+
44
+ 2. **Run detection first:**
45
+ ```bash
46
+ node skills/wp-webhooks/scripts/webhook_inspect.mjs [--cwd=/path/to/project]
47
+ ```
48
+ This identifies existing webhook configurations and plugins.
49
+
50
+ ## Webhook Areas
51
+
52
+ ### Section 1: WooCommerce Webhooks
53
+ See `references/woocommerce-webhooks.md`
54
+ - WooCommerce webhook API (wc/v3/webhooks)
55
+ - Available topics: order.created, product.updated, customer.created, etc.
56
+ - MCP tools: `wc_list_webhooks`, `wc_create_webhook`, `wc_update_webhook`, `wc_delete_webhook`
57
+ - Webhook status management and delivery logs
58
+
59
+ ### Section 2: WordPress Core Webhooks
60
+ See `references/wordpress-core-webhooks.md`
61
+ - Action hooks for outbound notifications (mu-plugin approach)
62
+ - Key hooks: `transition_post_status`, `edited_term`, `user_register`
63
+ - `wp_remote_post()` usage patterns
64
+ - wp-config.php constants for webhook URLs
65
+
66
+ ### Section 3: Headless Webhooks
67
+ Cross-reference: `wp-headless` skill → `references/webhooks.md`
68
+ - ISR revalidation triggers
69
+ - Tag-based cache invalidation
70
+ - WPGraphQL Smart Cache integration
71
+
72
+ ### Section 4: Integration Recipes
73
+ See `references/integration-recipes.md`
74
+ - Zapier, Make (Integromat), n8n workflows
75
+ - Slack channel notifications
76
+ - Email service triggers (Mailchimp, SendGrid)
77
+ - CDN purge (Cloudflare, Fastly)
78
+ - Search index updates (Algolia, Meilisearch)
79
+
80
+ ### Section 5: Webhook Security
81
+ See `references/webhook-security.md`
82
+ - HMAC-SHA256 shared secret authentication
83
+ - WooCommerce webhook signature verification
84
+ - HTTPS enforcement and IP allowlisting
85
+ - Rate limiting and timeout configuration
86
+
87
+ ## Payload Formats
88
+ See `references/payload-formats.md`
89
+ - Standard JSON payload structure
90
+ - WooCommerce payload examples
91
+ - Custom payload formatting
92
+
93
+ ## Reference Files
94
+
95
+ | File | Content |
96
+ |------|---------|
97
+ | `references/woocommerce-webhooks.md` | WC webhook API, topics, MCP tools, delivery logs |
98
+ | `references/wordpress-core-webhooks.md` | Action hooks, mu-plugin, wp_remote_post patterns |
99
+ | `references/integration-recipes.md` | Zapier, Make, n8n, Slack, CDN purge recipes |
100
+ | `references/payload-formats.md` | JSON payloads, WC examples, custom formatting |
101
+ | `references/webhook-security.md` | HMAC-SHA256, signatures, HTTPS, rate limiting |
102
+
103
+ ## Related Skills
104
+
105
+ - **`wp-headless`** — headless revalidation webhooks and ISR triggers
106
+ - **`wp-woocommerce`** — WooCommerce store operations (webhook source events)
107
+ - **`wp-cicd`** — CI/CD webhooks for deployment triggers