Analyze
Phoenix-powered X/Twitter content engine for Claude Code: draft, optimize, score, post, engage, and analyze using real 2026 algorithm weights. No APIs needed.
npx -y skills add Epistates/sparX --skill analyzeAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Read real engagement analytics from X via browser automation. Use when the user wants to check how their posts are performing, review analytics, or get real engagement data without manual entry. Requires claude-in-chrome.
SKILL.md
7.6 KB, as published. Nobody here has run it
Analyze X Post Performance via Browser
Read real engagement data directly from X's interface and run Phoenix scoring analysis — no manual data entry needed.
Input
The user provides one of:
- A post URL — analyze that specific post
- "recent" — analyze the most recent posts from their profile
- Their X username — navigate to their profile to analyze recent posts
- Nothing — ask what they want to analyze
Process
Step 1 — Get Browser Context
mcp__claude-in-chrome__tabs_context_mcp(createIfEmpty: true)
Create a new tab or reuse an existing x.com tab.
Step 2 — Navigate to the Content
For a specific post URL:
mcp__claude-in-chrome__navigate(url: "<post_url>", tabId: <tab>)
mcp__claude-in-chrome__computer(action: "wait", duration: 3, tabId: <tab>)
For recent posts (navigate to profile):
mcp__claude-in-chrome__navigate(url: "https://x.com", tabId: <tab>)
mcp__claude-in-chrome__computer(action: "wait", duration: 2, tabId: <tab>)
Find and click on the user's profile:
mcp__claude-in-chrome__find(query: "profile link or avatar in sidebar", tabId: <tab>)
Verify logged-in state — take a screenshot:
mcp__claude-in-chrome__computer(action: "screenshot", tabId: <tab>)
If not logged in, stop and tell the user to log in first.
Step 3 — Read Post Metrics
For a specific post:
Navigate to the post and read its engagement metrics. X shows metrics below each post (replies, reposts, likes, bookmarks, views).
- Read the page to find metric elements:
mcp__claude-in-chrome__read_page(tabId: <tab>, filter: "all", depth: 10)
- Or use JavaScript to extract metrics from the post detail page:
mcp__claude-in-chrome__javascript_tool(action: "javascript_exec", text: "
// Extract metrics from post detail page
const metrics = {};
const groups = document.querySelectorAll('[role=\"group\"]');
const ariaLabels = Array.from(document.querySelectorAll('[aria-label]'))
.map(el => el.getAttribute('aria-label'))
.filter(label => label && (
label.includes('repl') || label.includes('repost') ||
label.includes('like') || label.includes('bookmark') ||
label.includes('view') || label.includes('impression')
));
JSON.stringify(ariaLabels);
", tabId: <tab>)
- If metrics aren't visible or parseable, try clicking the post's analytics/stats icon:
mcp__claude-in-chrome__find(query: "view post analytics or post stats icon", tabId: <tab>)
- Take a screenshot of the metrics for reference:
mcp__claude-in-chrome__computer(action: "screenshot", tabId: <tab>)
For recent posts on profile:
- Read the profile timeline to get recent posts:
mcp__claude-in-chrome__get_page_text(tabId: <tab>)
-
For each of the last 3-5 posts, extract visible metrics (views, replies, reposts, likes, bookmarks).
-
Use JavaScript to collect metrics from timeline items:
mcp__claude-in-chrome__javascript_tool(action: "javascript_exec", text: "
const articles = document.querySelectorAll('article');
const posts = Array.from(articles).slice(0, 5).map((article, i) => {
const text = article.innerText.substring(0, 100);
const ariaLabels = Array.from(article.querySelectorAll('[aria-label]'))
.map(el => el.getAttribute('aria-label'))
.filter(label => label && /\\d/.test(label));
return { index: i, preview: text, metrics: ariaLabels };
});
JSON.stringify(posts, null, 2);
", tabId: <tab>)
- Scroll down if needed to load more posts:
mcp__claude-in-chrome__computer(action: "scroll", coordinate: [640, 400], scroll_direction: "down", scroll_amount: 3, tabId: <tab>)
Step 4 — Access Post Analytics Detail (if available)
X Premium users have detailed analytics. Try navigating to the analytics dashboard:
mcp__claude-in-chrome__navigate(url: "https://x.com/analytics", tabId: <tab>)
mcp__claude-in-chrome__computer(action: "wait", duration: 3, tabId: <tab>)
mcp__claude-in-chrome__computer(action: "screenshot", tabId: <tab>)
If analytics is available, extract:
- Impressions over time
- Engagement rate
- Top performing posts
- Follower growth
If not available (not Premium), work with the per-post metrics gathered in Step 3.
Step 5 — Phoenix Score Analysis
With the collected metrics, run the full analysis from the /review skill framework:
Read reference material:
For each post analyzed, produce:
Performance Table:
| Metric | Value | Algorithm Interpretation |
|---|---|---|
| Views/Impressions | ? | Distribution reach |
| Replies | ? | 13–27× weight |
| Reposts | ? | ~20× weight |
| Likes | ? | 1× baseline |
| Bookmarks | ? | ~10× weight |
| Engagement rate | ? | (total engagements / impressions) × 100 |
Key Ratios:
- Impressions / followers: >2× means algorithm is amplifying
- Reply-to-like ratio: >0.15 = strong conversation driver
- Bookmark-to-like ratio: >0.10 = high-quality content signal
Conversation Velocity Assessment:
- Did the author reply to comments? (check reply threads on the post)
- How many author reply threads exist?
- Were replies substantive or just "thanks"?
Diagnosis:
- Why did this post perform as it did?
- What specific elements drove engagement (or didn't)?
- What would you change for next time?
Step 6 — Comparative Analysis (if multiple posts)
If analyzing multiple recent posts, produce:
- Ranked performance table — posts sorted by engagement rate
- Pattern identification — what formats/topics/times performed best
- Trend line — are things improving, declining, or flat?
- Top recommendation — one specific action to improve the next post
Step 7 — Output
Present:
- Raw metrics collected from X (with screenshot reference)
- Phoenix score analysis per post
- Key ratios with benchmarks
- Diagnosis — why each post performed as it did
- Recommendations — specific actions for the next post
- Suggested next content — based on what's working, suggest the next post topic/format
Offer to run /compose on the suggested next content.
Tips
- X shows different metric granularity based on Premium status
- The analytics page (x.com/analytics) requires Premium
- Per-post metrics (reply/repost/like/bookmark counts) are visible to everyone
- View counts are visible on most posts
- For the most accurate data, analyze posts that are at least 24 hours old (let the distribution curve complete)
Troubleshooting
- Metrics not loading: Wait longer (3-5 seconds), X lazy-loads engagement counts
- Can't find metrics: Take a screenshot and visually identify where numbers appear
- Analytics page redirects: User may not have Premium — fall back to per-post metrics
- JavaScript extraction fails: Fall back to
read_pagewithfilter: "all"and search for numeric elements - Rate limiting: If X shows "something went wrong", wait 30 seconds and retry once