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.
- package/CHANGELOG.md +73 -0
- package/agents/wp-content-strategist.md +58 -1
- package/agents/wp-distribution-manager.md +39 -6
- package/docs/GUIDE.md +145 -14
- package/docs/plans/2026-03-01-tier6-7-design.md +246 -0
- package/docs/plans/2026-03-01-tier6-7-implementation.md +1629 -0
- package/hooks/hooks.json +18 -0
- package/package.json +6 -3
- package/servers/wp-rest-bridge/build/tools/index.js +9 -0
- package/servers/wp-rest-bridge/build/tools/linkedin.js +203 -0
- package/servers/wp-rest-bridge/build/tools/schema.js +159 -0
- package/servers/wp-rest-bridge/build/tools/twitter.js +183 -0
- package/servers/wp-rest-bridge/build/wordpress.js +94 -0
- package/skills/wordpress-router/references/decision-tree.md +10 -2
- package/skills/wp-content-generation/SKILL.md +128 -0
- package/skills/wp-content-generation/references/brief-templates.md +151 -0
- package/skills/wp-content-generation/references/generation-workflow.md +132 -0
- package/skills/wp-content-generation/references/outline-patterns.md +188 -0
- package/skills/wp-content-generation/scripts/content_gen_inspect.mjs +90 -0
- package/skills/wp-content-repurposing/SKILL.md +13 -0
- package/skills/wp-content-repurposing/references/auto-transform-pipeline.md +128 -0
- package/skills/wp-content-repurposing/references/transform-templates.md +304 -0
- package/skills/wp-linkedin/SKILL.md +96 -0
- package/skills/wp-linkedin/references/linkedin-analytics.md +58 -0
- package/skills/wp-linkedin/references/linkedin-posting.md +53 -0
- package/skills/wp-linkedin/references/linkedin-setup.md +59 -0
- package/skills/wp-linkedin/scripts/linkedin_inspect.mjs +55 -0
- package/skills/wp-structured-data/SKILL.md +94 -0
- package/skills/wp-structured-data/references/injection-patterns.md +160 -0
- package/skills/wp-structured-data/references/schema-types.md +127 -0
- package/skills/wp-structured-data/references/validation-guide.md +89 -0
- package/skills/wp-structured-data/scripts/schema_inspect.mjs +88 -0
- package/skills/wp-twitter/SKILL.md +101 -0
- package/skills/wp-twitter/references/twitter-analytics.md +60 -0
- package/skills/wp-twitter/references/twitter-posting.md +66 -0
- package/skills/wp-twitter/references/twitter-setup.md +62 -0
- 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();
|