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:
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:
- Input: User history + candidate posts
- Output: Log probabilities for each action type per candidate
- Conversion:
probability = exp(log_prob)
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_scoreof 0.15 means 15% predicted chance of like - Negative signals have negative weights: High
report_scorereduces 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
You Might Also Like
Related Skills

summarize
Summarize or extract text/transcripts from URLs, podcasts, and local files (great fallback for “transcribe this YouTube/video”).
openclaw
prompt-lookup
Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use for discovering, retrieving, and improving prompts.
f
skill-lookup
Activates when the user asks about Agent Skills, wants to find reusable AI capabilities, needs to install skills, or mentions skills for Claude. Use for discovering, retrieving, and installing skills.
f
seo-review
Perform a focused SEO audit on JavaScript concept pages to maximize search visibility, featured snippet optimization, and ranking potential
leonardomso

