claude-plugin-wordpress-manager 2.9.0 → 2.12.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 (37) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/agents/wp-content-strategist.md +58 -1
  3. package/agents/wp-distribution-manager.md +39 -6
  4. package/docs/GUIDE.md +145 -14
  5. package/docs/plans/2026-03-01-tier6-7-design.md +246 -0
  6. package/docs/plans/2026-03-01-tier6-7-implementation.md +1629 -0
  7. package/hooks/hooks.json +18 -0
  8. package/package.json +6 -3
  9. package/servers/wp-rest-bridge/build/tools/index.js +9 -0
  10. package/servers/wp-rest-bridge/build/tools/linkedin.js +203 -0
  11. package/servers/wp-rest-bridge/build/tools/schema.js +159 -0
  12. package/servers/wp-rest-bridge/build/tools/twitter.js +183 -0
  13. package/servers/wp-rest-bridge/build/wordpress.js +94 -0
  14. package/skills/wordpress-router/references/decision-tree.md +10 -2
  15. package/skills/wp-content-generation/SKILL.md +128 -0
  16. package/skills/wp-content-generation/references/brief-templates.md +151 -0
  17. package/skills/wp-content-generation/references/generation-workflow.md +132 -0
  18. package/skills/wp-content-generation/references/outline-patterns.md +188 -0
  19. package/skills/wp-content-generation/scripts/content_gen_inspect.mjs +90 -0
  20. package/skills/wp-content-repurposing/SKILL.md +13 -0
  21. package/skills/wp-content-repurposing/references/auto-transform-pipeline.md +128 -0
  22. package/skills/wp-content-repurposing/references/transform-templates.md +304 -0
  23. package/skills/wp-linkedin/SKILL.md +96 -0
  24. package/skills/wp-linkedin/references/linkedin-analytics.md +58 -0
  25. package/skills/wp-linkedin/references/linkedin-posting.md +53 -0
  26. package/skills/wp-linkedin/references/linkedin-setup.md +59 -0
  27. package/skills/wp-linkedin/scripts/linkedin_inspect.mjs +55 -0
  28. package/skills/wp-structured-data/SKILL.md +94 -0
  29. package/skills/wp-structured-data/references/injection-patterns.md +160 -0
  30. package/skills/wp-structured-data/references/schema-types.md +127 -0
  31. package/skills/wp-structured-data/references/validation-guide.md +89 -0
  32. package/skills/wp-structured-data/scripts/schema_inspect.mjs +88 -0
  33. package/skills/wp-twitter/SKILL.md +101 -0
  34. package/skills/wp-twitter/references/twitter-analytics.md +60 -0
  35. package/skills/wp-twitter/references/twitter-posting.md +66 -0
  36. package/skills/wp-twitter/references/twitter-setup.md +62 -0
  37. package/skills/wp-twitter/scripts/twitter_inspect.mjs +58 -0
@@ -0,0 +1,60 @@
1
+ # Twitter Analytics Guide
2
+
3
+ ## Available Metrics
4
+
5
+ Use `tw_get_metrics` to retrieve tweet performance data.
6
+
7
+ ### Public Metrics (Available to All)
8
+ - **impression_count** — Times the tweet was shown in timelines
9
+ - **like_count** — Number of likes
10
+ - **retweet_count** — Number of retweets
11
+ - **reply_count** — Number of replies
12
+ - **quote_count** — Number of quote tweets
13
+ - **bookmark_count** — Number of bookmarks
14
+
15
+ ## Querying Metrics
16
+
17
+ ### Single Tweet
18
+ ```
19
+ Tool: tw_get_metrics
20
+ Params: { "tweet_id": "1234567890" }
21
+ ```
22
+
23
+ Returns tweet text, creation date, and all public metrics.
24
+
25
+ ### List Recent Tweets with Metrics
26
+ ```
27
+ Tool: tw_list_tweets
28
+ Params: { "count": 20 }
29
+ ```
30
+
31
+ Returns recent tweets with basic metric data.
32
+
33
+ ### Tweets Since Date
34
+ ```
35
+ Tool: tw_list_tweets
36
+ Params: { "count": 50, "since": "2026-01-01T00:00:00Z" }
37
+ ```
38
+
39
+ ## Performance Benchmarks
40
+
41
+ | Metric | Average | Good | Excellent |
42
+ |--------|---------|------|-----------|
43
+ | Engagement rate | 0.5-1% | 1-3% | >3% |
44
+ | Like rate | 0.3-0.5% | 0.5-1% | >1% |
45
+ | Retweet rate | 0.1-0.3% | 0.3-0.5% | >0.5% |
46
+ | Reply rate | 0.05-0.1% | 0.1-0.3% | >0.3% |
47
+
48
+ ## Workflow: Tweet-and-Track
49
+
50
+ 1. Create tweet/thread with `tw_create_tweet` or `tw_create_thread`
51
+ 2. Note the returned tweet ID(s)
52
+ 3. Wait 24-48 hours for meaningful engagement data
53
+ 4. Check metrics with `tw_get_metrics`
54
+ 5. Compare against benchmarks above
55
+ 6. Adjust posting time, content style, and hashtag strategy
56
+
57
+ ## Thread Performance
58
+ - Threads typically get 2-3x more engagement than single tweets
59
+ - The first tweet drives 60-70% of total thread impressions
60
+ - Include a "thread start" indicator to signal more content follows
@@ -0,0 +1,66 @@
1
+ # Twitter Posting Guide
2
+
3
+ ## Single Tweets
4
+
5
+ ### Basic Tweet
6
+ ```
7
+ Tool: tw_create_tweet
8
+ Params: { "text": "Check out our latest blog post on WordPress optimization!" }
9
+ ```
10
+
11
+ ### Tweet with Reply (Thread Start)
12
+ ```
13
+ Tool: tw_create_tweet
14
+ Params: { "text": "First tweet text", "reply_to": "1234567890" }
15
+ ```
16
+
17
+ ### Character Limits
18
+ - **Text**: 280 characters maximum
19
+ - **URLs**: Count as 23 characters regardless of actual length
20
+ - **Mentions**: Count toward character limit
21
+ - **Media**: Does not count toward character limit
22
+
23
+ ### Best Practices
24
+ - Front-load the value proposition in the first tweet
25
+ - Use 1-3 relevant hashtags (not more)
26
+ - Include a clear CTA when linking to blog content
27
+ - Thread the needle: be concise yet compelling
28
+
29
+ ## Thread Creation
30
+
31
+ ### Automatic Thread from Blog Post
32
+ ```
33
+ Tool: tw_create_thread
34
+ Params: {
35
+ "tweets": [
36
+ "Thread: 5 ways to optimize your WordPress site for speed",
37
+ "1/ Enable caching. Use a caching plugin like WP Super Cache or W3 Total Cache.",
38
+ "2/ Optimize images. Compress and lazy-load all images.",
39
+ "3/ Minimize HTTP requests. Combine CSS and JS files where possible.",
40
+ "4/ Use a CDN. Distribute static assets globally for faster loading.",
41
+ "5/ Upgrade hosting. A good host makes all the difference."
42
+ ]
43
+ }
44
+ ```
45
+
46
+ ### Thread Best Practices
47
+ - Start with a hook that makes people want to read more
48
+ - Each tweet should stand on its own while building the narrative
49
+ - Number your tweets (1/, 2/, etc.) for easy reference
50
+ - End with a summary or CTA tweet
51
+ - Optimal thread length: 3-10 tweets
52
+
53
+ ### Blog-to-Thread Workflow
54
+ 1. Fetch WordPress post: `wp_get_post` with post ID
55
+ 2. Extract key points from content (H2 headings, key paragraphs)
56
+ 3. Craft hook tweet from title/excerpt
57
+ 4. Split key points into individual tweets (max 280 chars each)
58
+ 5. Add CTA tweet linking back to the full post
59
+ 6. Publish with `tw_create_thread`
60
+
61
+ ## Content Adaptation Tips
62
+ - WordPress title → Hook tweet
63
+ - H2 headings → Individual tweet topics
64
+ - Key statistics/quotes → Standalone tweets
65
+ - Featured image → First tweet media (via media upload)
66
+ - Blog URL → CTA tweet link
@@ -0,0 +1,62 @@
1
+ # Twitter/X Setup Guide
2
+
3
+ ## Prerequisites
4
+
5
+ - Twitter Developer account (https://developer.twitter.com/)
6
+ - WordPress site with WP REST Bridge configured
7
+ - Twitter account for posting
8
+
9
+ ## 1. Create Twitter Developer App
10
+
11
+ 1. Go to https://developer.twitter.com/en/portal/dashboard
12
+ 2. Create a new Project and App
13
+ 3. Select "Free" or "Basic" tier (Free tier allows 1,500 tweets/month)
14
+ 4. Note your **API Key**, **API Secret**, and **Bearer Token**
15
+
16
+ ## 2. API Access Levels
17
+
18
+ | Tier | Read | Write | Cost |
19
+ |------|------|-------|------|
20
+ | Free | Yes | 1,500 tweets/month | $0 |
21
+ | Basic | Yes | 3,000 tweets/month | $100/month |
22
+ | Pro | Yes | 300,000 tweets/month | $5,000/month |
23
+
24
+ For most WordPress use cases, the Free tier is sufficient.
25
+
26
+ ## 3. Configure WP_SITES_CONFIG
27
+
28
+ Add to your site configuration:
29
+
30
+ ```json
31
+ {
32
+ "id": "mysite",
33
+ "url": "https://mysite.com/wp-json/",
34
+ "username": "admin",
35
+ "password": "app-password",
36
+ "twitter_bearer_token": "AAAA...",
37
+ "twitter_api_key": "abc123...",
38
+ "twitter_api_secret": "xyz789...",
39
+ "twitter_user_id": "1234567890"
40
+ }
41
+ ```
42
+
43
+ ### Finding Your User ID
44
+ 1. Go to https://tweeterid.com/
45
+ 2. Enter your Twitter handle
46
+ 3. Copy the numeric user ID
47
+
48
+ ## 4. Verify Configuration
49
+
50
+ Run the detection script:
51
+ ```bash
52
+ node skills/wp-twitter/scripts/twitter_inspect.mjs
53
+ ```
54
+
55
+ Expected output: `twitter_configured: true` with indicators listing configured credentials.
56
+
57
+ ## 5. Important Notes
58
+
59
+ - Bearer tokens do not expire but can be regenerated
60
+ - The `twitter_user_id` is required for `tw_list_tweets` (listing your tweets)
61
+ - Rate limits apply per 15-minute window (varies by endpoint)
62
+ - Tweet deletion triggers a safety hook requiring explicit confirmation
@@ -0,0 +1,58 @@
1
+ /**
2
+ * twitter_inspect.mjs — Detect Twitter/X configuration readiness.
3
+ *
4
+ * Checks WP_SITES_CONFIG for Twitter API credentials.
5
+ *
6
+ * Usage:
7
+ * node twitter_inspect.mjs [--cwd=/path/to/project]
8
+ *
9
+ * Exit codes:
10
+ * 0 — Twitter configuration found
11
+ * 1 — no Twitter configuration found
12
+ */
13
+
14
+ import { stdout, exit, argv } from 'node:process';
15
+ import { resolve } from 'node:path';
16
+
17
+ function detectTwitterConfig() {
18
+ const tw = { configured: false, indicators: [] };
19
+ const raw = process.env.WP_SITES_CONFIG;
20
+ if (!raw) return tw;
21
+
22
+ let sites;
23
+ try { sites = JSON.parse(raw); } catch { return tw; }
24
+ if (!Array.isArray(sites)) return tw;
25
+
26
+ for (const site of sites) {
27
+ const label = site.id || site.url || 'unknown';
28
+ if (site.twitter_bearer_token) {
29
+ tw.configured = true;
30
+ tw.indicators.push(`twitter_bearer_token configured for ${label}`);
31
+ }
32
+ if (site.twitter_api_key) {
33
+ tw.indicators.push(`twitter_api_key configured for ${label}`);
34
+ }
35
+ if (site.twitter_user_id) {
36
+ tw.indicators.push(`twitter_user_id: ${site.twitter_user_id} for ${label}`);
37
+ }
38
+ }
39
+ return tw;
40
+ }
41
+
42
+ function main() {
43
+ const cwdArg = argv.find(a => a.startsWith('--cwd='));
44
+ const cwd = cwdArg ? resolve(cwdArg.split('=')[1]) : process.cwd();
45
+
46
+ const twitter = detectTwitterConfig();
47
+
48
+ const report = {
49
+ twitter_configured: twitter.configured,
50
+ twitter,
51
+ cwd,
52
+ };
53
+
54
+ stdout.write(JSON.stringify(report, null, 2) + '\n');
55
+ exit(twitter.configured ? 0 : 1);
56
+ }
57
+
58
+ main();