---
name: "X impact checker"
repo: https://github.com/manojbajaj95/claude-gtm-plugin
source: https://github.com/manojbajaj95/claude-gtm-plugin/blob/HEAD/skills/x-impact-checker/SKILL.md
license: "MIT"
install: "npx skills add manojbajaj95/claude-gtm-plugin --skill x-impact-checker"
page: https://100xlab.com/resources/agent-skills/manojbajaj95-claude-gtm-plugin--x-impact-checker--oatgwx
---

# X Impact Checker

## Workspace Context

Read bootstrap context before asking questions: `strategy/brand.md` for brand, audience, offer, channels, tools, constraints, and metrics; `about/me.md` for personal voice; `content/ideas.md` and `content/calendar.md` for content planning. Use legacy product-marketing context files only as fallback. Save generated drafts to `content/<platform>/drafts/YYYY-MM-DD_short-topic-slug.md`, and route durable learnings back to `strategy/brand.md`, `about/me.md`, or `content/ideas.md`.

## Operating Contract

This skill is self-contained for its frontmatter scope: use its local instructions, references, scripts, and assets as the playbook; ask only for missing task-specific inputs; hand off to adjacent skills instead of expanding scope; and return an actionable artifact, decision, plan, draft, or diagnostic.



Analyze X posts for viral potential using a 19-element scoring system and heuristics inspired by X's published recommendation architecture.

## When to Use

- Score a tweet draft before publishing
- Understand why a tweet underperformed
- Rewrite tweets to align with Twitter's ranking mechanisms
- Build topical authority in a specific niche
- Debug inconsistent engagement rates

---

## Scoring System (100 points)

### Tier 1: Core Engagement (60 points)

| Factor | Max | Scoring Guide |
|--------|-----|---------------|
| Reply Potential | 22 | 22: Direct question/debatable claim, 12: Invites response, 4: Statement only |
| Retweet Potential | 16 | 16: Actionable insight/surprising fact, 8: Interesting but niche, 0: No share value |
| Favorite Potential | 12 | 12: Emotionally resonant/personal story, 6: Useful reference, 0: Low appeal |
| Quote Potential | 10 | 10: Strong opinion inviting commentary, 5: Thought-provoking, 0: No quote value |

### Tier 2: Extended Engagement (25 points)

| Factor | Max | Scoring Guide |
|--------|-----|---------------|
| Dwell Time | 6 | 6: Long-form/detailed content, 3: Medium depth, 0: Skimmable |
| Continuous Dwell Time | 4 | 4: Thread/story arc requiring sustained attention, 2: Medium complexity, 0: Quick read |
| Click Potential | 5 | 5: Compelling link with clear CTA, 3: Link with context, 1: Bare URL, 0: No link |
| Photo Expand Potential | 4 | 4: Multiple images/visual storytelling, 2: Single image reference, 0: No visual content |
| Video View Potential | 3 | 3: Long-form video with hook (>5s), 2: Short clip, 0: No video |
| Quoted Click Potential | 3 | 3: Bold claim inviting verification, 2: Interesting claim, 0: Self-contained |

### Tier 3: Relationship Building (15 points)

| Factor | Max | Scoring Guide |
|--------|-----|---------------|
| Profile Click | 5 | 5: Creates author curiosity, 3: Shows expertise, 0: Generic voice |
| Follow Potential | 4 | 4: Demonstrates ongoing value, 2: Shows potential, 0: One-off content |
| Share Potential | 2 | 2: General sharing value, 1: Limited appeal, 0: No value |
| Share via DM | 2 | 2: Personal/relatable "send to friend" content, 1: Somewhat relatable, 0: Generic |
| Share via Copy Link | 2 | 2: Reference/bookmark worthy, 1: Useful but not evergreen, 0: Ephemeral |

### Penalties (subtract from total)

| Risk | Range | Trigger |
|------|-------|---------|
| Not Interested | -5 to -15 | Clickbait, irrelevant content |
| Mute Risk | -5 to -15 | Repetitive, annoying patterns |
| Block Risk | -10 to -25 | Offensive, aggressive tone |
| Report Risk | -15 to -30 | Policy violations, spam signals |

### Grades

| Score | Grade |
|-------|-------|
| 90-100 | S (Exceptional) |
| 75-89 | A (Strong) |
| 60-74 | B (Good) |
| 45-59 | C (Average) |
| 30-44 | D (Below average) |
| 0-29 | F (Low potential) |

---

## Output Format

### Progress Tracking

Show analysis progress when the host environment supports task tracking:
1. **Analyzing post content** (in_progress → completed)
2. **Calculating scores across all elements** (in_progress → completed)
3. **Generating top 5 priority improvements** (in_progress → completed)
4. **Creating optimized version** (in_progress → completed)

### Report Structure

1. **Score**: `🎯 XX/100 (Grade: X)`

2. **Breakdown Table**:
```
| Category | Factor | Score | Max | Assessment |
|----------|--------|-------|-----|------------|
| **💬 Core Engagement** | | | 60 | |
| | 💭 Reply Potential | X/22 | 22 | [reason] |
| | 🔄 Retweet Potential | X/16 | 16 | [reason] |
| | ❤️ Favorite Potential | X/12 | 12 | [reason] |
| | 💬 Quote Potential | X/10 | 10 | [reason] |
| **⏱️ Extended Engagement** | | | 25 | |
| | 👀 Dwell Time | X/6 | 6 | [reason] |
| | ⏳ Continuous Dwell Time | X/4 | 4 | [reason] |
| | 🔗 Click Potential | X/5 | 5 | [reason] |
| | 🖼️ Photo Expand | X/4 | 4 | [reason] |
| | 🎥 Video View | X/3 | 3 | [reason] |
| | 🔍 Quoted Click | X/3 | 3 | [reason] |
| **🤝 Relationship Building** | | | 15 | |
| | 👤 Profile Click | X/5 | 5 | [reason] |
| | ➕ Follow Potential | X/4 | 4 | [reason] |
| | 📤 Share Potential | X/2 | 2 | [reason] |
| | 💌 Share via DM | X/2 | 2 | [reason] |
| | 📋 Share via Link | X/2 | 2 | [reason] |
| **⚠️ Negative Signals** | | | | |
| | 😐 Not Interested Risk | -X | 0 to -15 | [reason] |
| | 🔇 Mute Risk | -X | 0 to -15 | [reason] |
| | 🚫 Block Risk | -X | 0 to -25 | [reason] |
| | 🚨 Report Risk | -X | 0 to -30 | [reason] |
| **🏆 TOTAL** | | **XX/100** | | **Grade: X** |
```

3. **📈 Top 5 Priority Improvements**: Specific, actionable suggestions across different categories

4. **✨ Optimized Version**: Rewritten post with improvements applied (in original language)

---

## Algorithm Architecture

Understanding the underlying models helps explain *why* the scoring works.

### Core Ranking Models

**Real-graph** — Predicts interaction likelihood between users
- Determines if your followers will engage with your content
- Strategy: Make content your specific follower segment will engage with

**SimClusters** — Community detection with sparse embeddings
- Identifies communities with similar interests; your tweet resonates within these clusters
- Strategy: Pick ONE clear topic and serve tight communities deeply

**TwHIN** — Knowledge graph embeddings mapping users and content topics
- Helps Twitter understand if your tweet fits your established identity
- Strategy: Stay in your niche or clearly signal topic shifts

**Tweepcred** — User reputation/authority scoring
- Your past engagement history affects current tweet reach
- Strategy: Build through consistent quality, not engagement bait

### Engagement Signals

**Explicit (high weight):** Likes, replies, retweets, quote tweets

**Implicit (also weighted):** Profile visits, link clicks, dwell time, saves/bookmarks

**Negative:** Block/report (heavily penalized), mute/unfollow, quick scroll-past

### Optimization by Algorithm Layer

| Layer | Strategy |
|-------|----------|
| Real-graph | Ask questions; create debate; post when followers are active |
| SimClusters | One clear topic; use community language; provide niche value |
| TwHIN | Lead with domain expertise; stay consistent; build topical authority |
| Tweepcred | Reply to quality accounts; avoid engagement bait; engage deeply |

---

## Detailed Scoring Criteria

### Reply Potential (22 pts)
- Direct questions, debatable claims, opinion invitations
- ❌ "Just shipped a new feature." → ✅ "Should features ship fast but buggy, or slow but stable? We chose speed—was it the right call?"

### Retweet Potential (16 pts)
- Actionable insights, surprising facts, numbered lists, data-driven content
- ❌ "I learned something today." → ✅ "🧵 3 React patterns that cut my bundle size by 30%: 1. Lazy loading hooks 2. Code splitting by route 3. Tree-shaking unused exports"

### Favorite Potential (12 pts)
- Emotional resonance, personal stories, relatable moments, vulnerability
- ❌ "Debugging is hard." → ✅ "Spent 3 hours debugging a production issue. The fix? A missing semicolon I added during 'quick cleanup' at 2am. Never touching working code past midnight again 😅"

### Quote Potential (10 pts)
- Strong opinions, challenges conventional wisdom, clear stances
- ❌ "TypeScript is useful." → ✅ "TypeScript's biggest value isn't catching bugs—it's documentation. The type errors are just a bonus. Fight me."

### Dwell Time (6 pts)
- Long-form content requiring reading time; detailed explanations; technical depth

### Continuous Dwell Time (4 pts)
- Thread indicators (🧵, "1/"), narrative structure, complexity requiring re-reading
- ❌ "Here's how I built X." → ✅ "🧵 How I went from idea to $10k MRR in 30 days (1/8)\n\nDay 1-7: Validation..."

### Profile Click (5 pts)
- Creates author curiosity; demonstrates expertise; credibility signals
- ❌ "I think React is good." → ✅ "After architecting React apps for Airbnb, Netflix, and 50+ startups, here's what I wish I knew on day one:"

### Follow Potential (4 pts)
- Demonstrates ongoing value; establishes content cadence
- ❌ "Here's a React tip." → ✅ "React tip #47: [insight]\n\nI break down advanced React patterns every Monday."

---

## Score Normalization

```
Final Score = Base Score (0-100) + Penalties (-75 to 0)
Normalized Score = max(0, min(100, Final Score))
```

Penalty capping: total penalties > -20 causes gradual dampening; hard cap at -75.

---

## Text Analysis Limitations

This skill performs heuristic text-based analysis, not ML prediction. It cannot detect actual media presence, real engagement metrics, author follower count, or network graph relationships. Best used for **pre-publishing optimization**, not post-hoc analytics.

---

## Language Handling

Detect input language. Respond in same language. Keep optimized version in original language.

**When input is in Japanese**, display Category and Factor names as: `日本語訳（English Original）`

Japanese translations:
- 💬 Core Engagement → コアエンゲージメント
- ⏱️ Extended Engagement → 拡張エンゲージメント
- 🤝 Relationship Building → 関係構築
- ⚠️ Negative Signals → ネガティブシグナル
- 💭 Reply Potential → 返信潜在力
- 🔄 Retweet Potential → リツイート潜在力
- ❤️ Favorite Potential → いいね潜在力
- 💬 Quote Potential → 引用潜在力
- 👀 Dwell Time → 滞在時間
- ⏳ Continuous Dwell Time → 継続滞在時間
- 🔗 Click Potential → クリック潜在力
- 🖼️ Photo Expand → 写真展開潜在力
- 🎥 Video View → 動画視聴潜在力
- 🔍 Quoted Click → 引用クリック潜在力
- 👤 Profile Click → プロフィールクリック
- ➕ Follow Potential → フォロー潜在力
- 📤 Share Potential → 共有潜在力
- 💌 Share via DM → DM経由共有
- 📋 Share via Link → リンクコピー共有
- 😐 Not Interested Risk → 興味なしリスク
- 🔇 Mute Risk → ミュートリスク
- 🚫 Block Risk → ブロックリスク
- 🚨 Report Risk → 報告リスク

## Algorithm Reference

See [references/algorithm-weights.md](references/algorithm-weights.md) for complete weight details from X's open-source algorithm (19-element system).

---

## Supporting file: references/algorithm-weights.md

# X Algorithm Weight Reference

Complete reference for X's open-source recommendation algorithm (2026 version).

## Source

- **Repository**: https://github.com/xai-org/x-algorithm
- **Weighted Scorer**: `home-mixer/scorers/weighted_scorer.rs`
- **ML Model**: Phoenix (Grok-based transformer)
- **Last Updated**: January 2026

## Overview

The X recommendation algorithm uses a two-stage prediction system:
1. **Phoenix ML Model** predicts probabilities for 19+ engagement actions
2. **Weighted Scorer** combines these predictions with algorithm-defined weights to compute final ranking scores

This skill implements the scoring logic in text-based heuristic form for pre-publishing optimization.

---

## Phoenix Engagement Predictions (19 Signals)

Phoenix predicts probabilities for these user actions:

### Positive Engagement Signals (15)
```
P(favorite)              // Like button
P(reply)                 // Reply to post
P(retweet)               // Retweet/share
P(quote)                 // Quote tweet
P(click)                 // Click on any link
P(profile_click)         // Click on author profile
P(video_view)            // Video playback (VQV: Video Quality View)
P(photo_expand)          // Expand photo/media
P(share)                 // Generic share action
P(share_via_dm)          // Share via Direct Message
P(share_via_copy_link)   // Copy link to share elsewhere
P(dwell)                 // Initial reading time
P(continuous_dwell)      // Sustained attention time
P(quoted_click)          // Click on quoted tweet
P(follow_author)         // Follow the author
```

### Negative Engagement Signals (4)
```
P(not_interested)        // "Not interested in this tweet"
P(block)                 // Block author
P(mute)                  // Mute author
P(report)                // Report tweet/author
```

---

## Complete Score Calculation (19 Elements)

From `weighted_scorer.rs`:

```rust
combined_score =
    favorite_score * FAVORITE_WEIGHT                    // ~0.5
  + reply_score * REPLY_WEIGHT                          // ~1.0 (highest)
  + retweet_score * RETWEET_WEIGHT                      // ~0.75
  + quote_score * QUOTE_WEIGHT                          // ~0.45
  + click_score * CLICK_WEIGHT                          // ~0.2
  + profile_click_score * PROFILE_CLICK_WEIGHT          // ~0.2
  + video_view_score * vqv_weight(video)                // ~0.15 (conditional)
  + photo_expand_score * PHOTO_EXPAND_WEIGHT            // ~0.18
  + share_score * SHARE_WEIGHT                          // ~0.1
  + share_dm_score * SHARE_VIA_DM_WEIGHT                // ~0.1
  + share_link_score * SHARE_VIA_COPY_LINK_WEIGHT       // ~0.1
  + dwell_score * DWELL_WEIGHT                          // ~0.25
  + continuous_dwell_score * CONTINUOUS_DWELL_WEIGHT    // ~0.18
  + quoted_click_score * QUOTED_CLICK_WEIGHT            // ~0.15
  + follow_author_score * FOLLOW_AUTHOR_WEIGHT          // ~0.18
  + not_interested_score * NOT_INTERESTED_WEIGHT        // ~-0.6 (negative)
  + block_author_score * BLOCK_AUTHOR_WEIGHT            // ~-1.2 (negative)
  + mute_author_score * MUTE_AUTHOR_WEIGHT              // ~-0.6 (negative)
  + report_score * REPORT_WEIGHT                        // ~-1.5 (negative)
```

Then apply normalization:
```rust
final_score = normalize_score(offset_score(combined_score))
```

---

## Skill Weight Mapping (100-Point System)

The skill redistributes algorithm weights proportionally to create a user-friendly 100-point scale:

### Tier 1: Core Engagement (60 points)
Conversation drivers and strong sharing signals.

| Algorithm Signal | Skill Factor | Points | Rationale |
|-----------------|--------------|--------|-----------|
| REPLY_WEIGHT (1.0) | Reply Potential | 22 | Highest algorithm weight - conversations drive visibility |
| RETWEET_WEIGHT (0.75) | Retweet Potential | 16 | Strong amplification signal |
| FAVORITE_WEIGHT (0.5) | Favorite Potential | 12 | Most common action, moderate weight |
| QUOTE_WEIGHT (0.45) | Quote Potential | 10 | Commentary adds value |

### Tier 2: Extended Engagement (25 points)
Media interactions and sustained attention metrics.

| Algorithm Signal | Skill Factor | Points | Rationale |
|-----------------|--------------|--------|-----------|
| DWELL_WEIGHT (0.25) | Dwell Time | 6 | Initial reading/comprehension time |
| CONTINUOUS_DWELL_WEIGHT (0.18) | Continuous Dwell Time | 4 | Sustained attention beyond initial read |
| CLICK_WEIGHT (0.2) | Click Potential | 5 | External link engagement |
| PHOTO_EXPAND_WEIGHT (0.18) | Photo Expand Potential | 4 | Visual content engagement |
| VQV_WEIGHT (0.15) | Video View Potential | 3 | Video engagement (conditional on duration) |
| QUOTED_CLICK_WEIGHT (0.15) | Quoted Click Potential | 3 | Investigation of quoted source |

### Tier 3: Relationship Building (15 points)
Author discovery and long-term value signals.

| Algorithm Signal | Skill Factor | Points | Rationale |
|-----------------|--------------|--------|-----------|
| PROFILE_CLICK_WEIGHT (0.2) | Profile Click | 5 | Author discovery interest |
| FOLLOW_AUTHOR_WEIGHT (0.18) | Follow Potential | 4 | Long-term relationship signal |
| SHARE_WEIGHT (0.1) | Share Potential | 2 | Generic sharing |
| SHARE_VIA_DM_WEIGHT (0.1) | Share via DM | 2 | Personal 1-on-1 sharing |
| SHARE_VIA_COPY_LINK_WEIGHT (0.1) | Share via Copy Link | 2 | Reference/bookmark sharing |

### Negative Signals (Penalties)
Subtract from total score based on risk assessment.

| Algorithm Signal | Skill Factor | Range | Rationale |
|-----------------|--------------|-------|-----------|
| NOT_INTERESTED_WEIGHT (-0.6) | Not Interested Risk | -5 to -15 | Mild negative signal |
| MUTE_AUTHOR_WEIGHT (-0.6) | Mute Risk | -5 to -15 | Author-level negative |
| BLOCK_AUTHOR_WEIGHT (-1.2) | Block Risk | -10 to -25 | Strong negative signal |
| REPORT_WEIGHT (-1.5) | Report Risk | -15 to -30 | Severe policy violation |

---

## Conditional Logic

### VQV Weight Eligibility (Video Quality View)

From `weighted_scorer.rs`:

```rust
fn vqv_weight_eligibility(video_duration_ms: Option<u64>) -> f64 {
    video_duration_ms
        .is_some_and(|dur| dur > MIN_VIDEO_DURATION_MS)
        .then_some(VQV_WEIGHT)
        .unwrap_or(0.0)
}
```

**Logic:**
- VQV weight (0.15) only applies if video duration > ~5000ms (5 seconds)
- Short clips don't receive full video engagement credit
- Encourages long-form, high-quality video content

**Skill Implementation:**
Since text analysis cannot detect actual video duration, the skill infers from language:
- "Full tutorial", "in-depth", "complete guide" → assumes >5s (full 3 points)
- "Quick clip", "snippet", "short demo" → assumes <5s (reduced scoring)
- No video markers → 0 points

---

## Score Normalization

### Offset Score Function

Balances positive and negative signals differently:

```rust
fn offset_score(raw_score: f64) -> f64 {
    if raw_score < 0.0 {
        raw_score * NEGATIVE_OFFSET_MULTIPLIER  // ~0.3
    } else {
        raw_score + POSITIVE_OFFSET
    }
}
```

**Purpose:**
- Dampens negative signals to prevent single bad signals from dominating
- Adds baseline boost to positive scores
- Creates more balanced final rankings

### Normalize Score Function

Maps to final range:

```rust
fn normalize_score(score: f64) -> f64 {
    score.max(MIN_SCORE).min(MAX_SCORE)
}
```

**Skill Implementation:**
```
Final Score = Base Score (0-100) + Penalties (-75 to 0)
Normalized = max(0, min(100, Final Score))
```

**Penalty Capping:**
- Total penalties ≤ -20: Applied at full weight
- Total penalties > -20: Gradual dampening
- Total penalties > -75: Hard cap at -75

Prevents over-penalization while maintaining signal importance.

---

## Key Algorithm Insights

1. **Conversations Dominate**
   Reply weight (1.0) is 2× retweet (0.75), 4× video view (0.15). Posts that drive replies rank highest.

2. **Share Actions Split**
   Generic share, DM share, and link copy are tracked separately—each indicates different sharing intent and value.

3. **Time-Based Signals**
   Dwell time (initial) and continuous dwell (sustained) are separate signals. Complexity rewards re-reading.

4. **Media Requires Quality**
   Video view scoring is conditional on duration. Low-effort clips don't get full credit.

5. **Negative Weights Matter**
   Block (-1.2) and report (-1.5) have strong negative impact. Content must avoid triggering these.

6. **Author Value Tracked**
   Profile click and follow indicate author-level interest, not just post-level.

7. **Multi-Action Prediction**
   Algorithm doesn't predict "relevance" but predicts 19 specific action probabilities, each weighted differently.

---

## Text Analysis Limitations

### What This Skill Cannot Detect

Since this is **heuristic text analysis**, not ML prediction:

**Missing Metadata:**
- Actual media presence (photos, videos)
- Real video duration or quality
- Actual click-through rates
- True engagement history
- Author reputation/follower count
- Tweet timestamps or virality metrics

**Cannot Access:**
- Phoenix ML model predictions
- User interaction history
- Network graph relationships
- Real-time engagement signals

### What This Skill Infers From

**Text-Based Heuristics:**
- Language patterns and structure
- Content formatting (threads, lists, etc.)
- Emotional tone and style
- Visual indicators (emojis, markdown)
- Call-to-action strength
- Question vs. statement structure

**Scoring Approach:**
- **Conservative**: Unknown elements get baseline scores
- **Pattern-Based**: Detects language cues (e.g., 📸 for photos, 🧵 for threads)
- **Optimization-Focused**: Best used for pre-publishing content improvement

**Best Use Case:**
Pre-publishing optimization to maximize engagement potential, not post-hoc analytics.

---

## Algorithm Version

- **Based on**: X Algorithm open-source release (xai-org/x-algorithm)
- **Reference Date**: January 2026
- **Implementation**: Heuristic skill (not direct code port)
- **Weights**: Approximated from `weighted_scorer.rs`

**Note**: Actual X algorithm may evolve. This skill reflects the publicly documented version as of 2026.

---

## References

- X Algorithm Repository: https://github.com/xai-org/x-algorithm
- Weighted Scorer Implementation: `home-mixer/scorers/weighted_scorer.rs`
- Phoenix ML Model: Grok-based transformer (not publicly released)
- Skill Implementation: [SKILL.md](../SKILL.md)
