home / skills / cloudai-x / x-algo-skills / x-algo-engagement

x-algo-engagement skill

/x-algo-engagement

npx playbooks add skill cloudai-x/x-algo-skills --skill x-algo-engagement

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
5.5 KB
---
name: x-algo-engagement
description: Reference for X algorithm engagement types and signals. Use when analyzing engagement metrics, action predictions, or understanding what signals the algorithm tracks.
---

# X Algorithm Engagement Signals

The X recommendation algorithm tracks **18 engagement action types** plus **1 continuous metric**. These are predicted by the Phoenix ML model and used to calculate weighted scores.

## PhoenixScores Struct

Defined in `home-mixer/candidate_pipeline/candidate.rs`:

```rust
pub struct PhoenixScores {
    // Positive engagement signals
    pub favorite_score: Option<f64>,
    pub reply_score: Option<f64>,
    pub retweet_score: Option<f64>,
    pub quote_score: Option<f64>,
    pub share_score: Option<f64>,
    pub share_via_dm_score: Option<f64>,
    pub share_via_copy_link_score: Option<f64>,
    pub follow_author_score: Option<f64>,

    // Engagement metrics
    pub photo_expand_score: Option<f64>,
    pub click_score: Option<f64>,
    pub profile_click_score: Option<f64>,
    pub vqv_score: Option<f64>,              // Video Quality View
    pub dwell_score: Option<f64>,
    pub quoted_click_score: Option<f64>,

    // Negative signals
    pub not_interested_score: Option<f64>,
    pub block_author_score: Option<f64>,
    pub mute_author_score: Option<f64>,
    pub report_score: Option<f64>,

    // Continuous actions
    pub dwell_time: Option<f64>,
}
```

## Action Types by Category

### Positive Engagement (High Value)

| Action            | Proto Name                | Description                         |
| ----------------- | ------------------------- | ----------------------------------- |
| **Favorite**      | `ServerTweetFav`          | User likes the post                 |
| **Reply**         | `ServerTweetReply`        | User replies to the post            |
| **Retweet**       | `ServerTweetRetweet`      | User reposts without comment        |
| **Quote**         | `ServerTweetQuote`        | User reposts with their own comment |
| **Follow Author** | `ClientTweetFollowAuthor` | User follows the post's author      |

### Sharing Actions

| Action                  | Proto Name                             | Description                          |
| ----------------------- | -------------------------------------- | ------------------------------------ |
| **Share**               | `ClientTweetShare`                     | Generic share action                 |
| **Share via DM**        | `ClientTweetClickSendViaDirectMessage` | User shares via direct message       |
| **Share via Copy Link** | `ClientTweetShareViaCopyLink`          | User copies link to share externally |

### Engagement Metrics

| Action            | Proto Name                    | Description                                                     |
| ----------------- | ----------------------------- | --------------------------------------------------------------- |
| **Photo Expand**  | `ClientTweetPhotoExpand`      | User expands photo to view                                      |
| **Click**         | `ClientTweetClick`            | User clicks on the post                                         |
| **Profile Click** | `ClientTweetClickProfile`     | User clicks author's profile                                    |
| **VQV**           | `ClientTweetVideoQualityView` | Video Quality View - user watches video for meaningful duration |
| **Dwell**         | `ClientTweetRecapDwelled`     | User dwells (pauses) on the post                                |
| **Quoted Click**  | `ClientQuotedTweetClick`      | User clicks on a quoted post                                    |

### Negative Signals

| Action             | Proto Name                   | Description                  |
| ------------------ | ---------------------------- | ---------------------------- |
| **Not Interested** | `ClientTweetNotInterestedIn` | User marks as not interested |
| **Block Author**   | `ClientTweetBlockAuthor`     | User blocks the author       |
| **Mute Author**    | `ClientTweetMuteAuthor`      | User mutes the author        |
| **Report**         | `ClientTweetReport`          | User reports the post        |

### Continuous Actions

| Action         | Proto Name  | Description                                  |
| -------------- | ----------- | -------------------------------------------- |
| **Dwell Time** | `DwellTime` | Continuous value: seconds spent viewing post |

## How Scores Are Obtained

The `PhoenixScorer` (`home-mixer/scorers/phoenix_scorer.rs`) calls the Phoenix prediction service:

1. **Input**: User history + candidate posts
2. **Output**: Log probabilities for each action type per candidate
3. **Conversion**: `probability = exp(log_prob)`

```rust
fn extract_phoenix_scores(&self, p: &ActionPredictions) -> PhoenixScores {
    PhoenixScores {
        favorite_score: p.get(ActionName::ServerTweetFav),
        reply_score: p.get(ActionName::ServerTweetReply),
        retweet_score: p.get(ActionName::ServerTweetRetweet),
        // ... maps each action to its probability
    }
}
```

## Signal Interpretation

- **Scores are probabilities** (0.0 to 1.0): P(user takes action | user sees post)
- **Higher = more likely**: A `favorite_score` of 0.15 means 15% predicted chance of like
- **Negative signals have negative weights**: High `report_score` reduces overall ranking
- **VQV requires minimum video duration**: Only applies to videos > `MIN_VIDEO_DURATION_MS`

## Related Skills

- `/x-algo-scoring` - How these signals are combined into a weighted score
- `/x-algo-ml` - How Phoenix model predicts these probabilities