Déclencheurs
- x post
- twitter post
- twitter reply
- x reply
- x engagement
- web3 reply
- x growth
- viral
- engagement bait detection
- post quality
Pourquoi c'existe
Le fil For You de X est classé par un transformateur basé sur Grok (Phoenix) qui prédit des probabilités pour 22 actions utilisateur distinctes sur chaque post, puis calcule une somme pondérée. Les poids sont ajustés à l'exécution via des tests A/B — ils ne figurent pas dans la version open source — mais la liste des signaux qui comptent est publique, tout comme les filtres qui suppriment le contenu avant même que le classement commence.
Cette skill mappe chaque signal à des choix d'écriture concrets que l'agent peut faire. Traite-la comme une référence, pas comme une checklist — mais les patterns sont mécaniquement réels, pas juste des intuitions.
Source : https://github.com/xai-org/x-algorithm (Apache 2.0).
Comment l'algorithme évalue
final_score = Σ (weight_i × P(action_i))
Il n'existe pas de « score d'engagement » que le modèle optimise. Il y a 17 probabilités d'action pondérées positivement et 5 pondérées négativement. Un post qui reçoit un like rapide et un scroll-past est médiocre ; un post qui retient l'attention, génère des réponses et gagne des followers est or pur. Le modèle pénalise le contenu ignoré aussi durement que le contenu signalé.
Signaux positifs — ce à quoi concevoir
| Signal | Signification | Comment l'obtenir |
|---|---|---|
dwell + cont_dwell_time |
Temps passé à lire le post dans le fil (continu, pas juste un coup d'œil) | Signal le plus sous-estimé. Écris du contenu qui retient l'attention. Une punchline de 2 lignes obtient un like-et-scroll ; une lecture concrète de 3-4 phrases retient le regard. Ouvre avec le hook ; la deuxième ligne les garde en train de lire. |
favorite |
Like | Concret, spécifique, parfois drôle, actuel. Évite le générique. |
reply |
Réponse | Provoque les réponses volontairement : prends parti, légère contradiction, pose une vraie question (pas « qu'en penses-tu »). Les réponses sont pondérées indépendamment ; un post avec 5 réponses > un post avec 50 likes et 0 réponses. |
retweet |
Repost | Posts avec une seule idée quotable. L'idée est portable : quelqu'un la reposte comme unité autonome. |
quote + quoted_click |
Quote tweet + clic sur le contenu cité | Signal fort parce que l'utilisateur a FAIT UN EFFORT SUPPLÉMENTAIRE pour ajouter sa propre framing. Les posts qui invitent le quote-tweeting sont des revendications directes auxquelles les gens veulent réagir. |
share + share_via_dm + share_via_copy_link |
Partage | Les posts qui sont partagés en DM ou avec un lien copié sont généralement informatifs (« regarde ça ») ou assez drôles pour envoyer à un ami. Les données concrètes > l'opinion pour share_via_dm. |
profile_click |
L'utilisateur tape sur ton nom/handle | Fais que le post pose une question sur qui écrit ça. Les revendications fortes, la voix distinctive, l'info utile → « qui est ce compte ? » → profile_click. Signal difficile, pondéré haut. |
follow_author |
Nouveau follow gagné depuis ce post | Le plus grand positif unique. Les posts qui gagnent des follows font généralement un de ces trucs : livrer l'info utile que le lecteur veut plus de, prendre une position contre-courant-mais-défendable, ou montrer une trajectoire spécifique (nombres, preuve on-chain, travail répétable). |
click |
Clic sur lien (URL externe ou thread) | Ne se déclenche que s'il y a un lien/expander. Sois sélectif avec les liens ; un lien non pertinent traîne not_dwelled. |
photo_expand |
Tap-to-expand sur image | Utilise des images qui récompensent l'expansion : graphique avec détails, capture d'écran avec texte lisible, image qui vaut la peine d'être vue en grand. Les images décoratives n'obtiennent pas ça. |
vqv (Video Quality View) |
Regarder vidéo ≥ durée min (typiquement 6+ secondes, configurable) | Si tu postes une vidéo : mets le hook en avant dans les 3 premières secondes. Temps de visionnage < 6s = pas de signal. |
Signaux négatifs — ce qui tue un post
| Signal | Ce qui le déclenche | Conséquence |
|---|---|---|
not_dwelled |
L'utilisateur a scrollé rapidement sans lire | Le tueur invisible. Poster du bait vide ou des one-liners bas-signal qui ne retiennent pas l'attention baisse activement ton score — pire que de ne pas poster du tout. |
not_interested |
Clic « Montrer moins de ça » | Souvent déclenché par : bait pump/promo, ragebait, sludge générique IA, off-topic pour l'audience. |
block_author |
Bloquer | Engagement-baiting agressif, posts proches de la dox, framing arnaque. |
mute_author |
Silence | Poster trop fréquemment sur le même sujet ; cadence de spam ; ratio-baiting. |
report |
Signaler | Bans évidents. Aussi : framing token-pump, « envoie-moi ton adresse », fausses giveaways. |
Filtres durs — contenu SUPPRIMÉ avant le classement
Même un post parfait obtient zéro portée si l'un d'eux se déclenche. L'algorithme pré-filtre avant le classement :
AgeFilter— les posts plus vieux que le seuil sont supprimés. La fraîcheur compte. Réagis vite ou saute.DropDuplicatesFilter— le même contenu posté de nouveau = supprimé. Ne recycle pas la formulation exacte.RepostDeduplicationFilter— les reposts multiples du même post source sont dédupliqués.SelfpostFilter— tes propres posts n'apparaissent pas dans ton propre fil (non pertinent pour poster, mais : ne écris pas pour toi, écris pour l'audience).MutedKeywordFilter— mots mis en silence par les utilisateurs individuels. Moins actionnable mais : utilise le jargon de niche plutôt que les termes génériques quand les deux marchent.AuthorSocialgraphFilter— auteurs bloqués/mis en silence filtrés. Ne gagne pas de blocks/mutes.PreviouslySeenPostsFilter+PreviouslyServedPostsFilter— un utilisateur ne verra pas le même post deux fois. Implication : poster deux takes similaires dos-à-dos signifie que le deuxième ne réussira probablement pas auprès de la même audience.VFFilter(post-selection) — spam/violence/gore/supprimé. N'écris rien de classable comme spam.DedupConversationFilter— les branches multiples d'un arbre de conversation sont dédupliquées. Poster 5 réponses sur le même thread à différentes sous-réponses → la plupart n'apparaîtront pas.
Multiplicateur de diversité auteur
Après le classement, les posts du même auteur pour le même spectateur ont leurs scores atténués par un facteur de décadence. Implication : burst 5 posts en 10 minutes signifie que les posts 2-5 sont fortement sous-pondérés vs le premier. Échelonne les posts. Le calendrier de boucle engagement actif (b3bb7508) qui se déclenche à :25 et le calendrier post-original (7412d4eb) qui se déclenche à :00 intègrent déjà un espacement de 25 minutes — préserve ça. Si tu postes ad-hoc, laisse au moins 20 minutes entre, idéalement 30+.
Classifieurs de contenu (couche Grok)
L'algorithme EXÉCUTE AUSSI des classifieurs de contenu basés sur LLM sur chaque post avant le classement. Spécifiquement :
-
BangerInitialScreenClassifier— évaluequality_score,slop_score, et des tags de catégorie de contenu. Il y a littéralement un détecteur de slop. Les posts qui ressemblent à de la prose low-effort / assistant IA / phraséologie consultant obtiennent un high slop_score et se classent moins bien. -
PostSafetyDeluxeClassifier— flags booléens de sécurité. Se déclenche sur les violations de politique, contenu sensible. -
SpamEapiLowFollowerClassifier— check spam séparé spécifiquement pour les comptes bas-follower (on en est un). Sois conscient : les seuils sont plus stricts sur nous que sur les comptes établis. Le bait pump/promo, la structure identique répétée, les patterns de spam-link vont déclencher ça. -
ReplyRankingClassifier— les réponses obtiennent leur propre modèle de classement. La réponse n'a pas besoin d'être un post autonome brillant ; elle doit être une bonne réponse au parent. Reste attaché au sujet réel du parent.
Règles pratiques pour notre agent
Ce sont les règles d'écriture concrètes dérivées de ce qui précède. Applique-les dans l'ordre avant de poster.
1. Ouvre avec un hook dans les 3-8 premiers mots
Le signal dwell est porté sur la première impression. Si la première ligne n'obtient pas l'œil, l'utilisateur scroll et tu manges une pénalité not_dwelled. Les hooks qui marchent :
- Nombre concret : "btc etf flows finally coughed up a real number: ~$635m out on may 13"
- Counter-claim : "nature is healing"
- Contradiction spécifique : "wrong layer to blame"
- Question qui est vraiment une question : "show me the bid after the easy part"
Les hooks qui NE MARCHENT PAS :
- Abstrait générique : "thoughts on the future of"
- Framing rassurant : "interesting development today"
- Voix assistant IA : "as an ai, i find this"
- Setup listicle : "5 things to know about"
2. Fais arrêter les gens et lire (dwell, pas juste un coup d'œil)
Les posts de 2 lignes obtiennent des likes mais perdent sur dwell et cont_dwell_time. Une lecture concrète de 3-4 phrases avec une vraie idée surpasse un one-liner clevr à moins que le one-liner soit exceptionnellement punchy.
Bonne forme : hook → fait/nombre concret → conséquence ou implication. Trois unités, total sous 280 caractères.
btc etf flows finally coughed up a real number: ~$635m out on may 13, worst day in months.
price near 80k while funding is still muted is not panic. it looks more like big money taking chips off without retail getting the memo.
Trois unités. L'œil du lecteur arrive au début, est tiré vers le milieu (données), sort avec l'implication. Ce post a obtenu un dwell.
3. Provoque les réponses, ne les supplie pas
reply est pondéré indépendamment. Les posts qui obtiennent des réponses font généralement un de ces trucs :
- Prends parti : "privacy before pmf sounds like homework." Défendable mais contestable → les gens argumentent.
- Pose une vraie question : "show me the bid after the easy part" — implique une réponse manquante, pas « qu'en penses-tu ? »
- Légère contradiction d'une take populaire : "leverage is a feature, not a bug, until it isn't" — invite l'autre côté à riposter.
Ne demande PAS « RT si tu es d'accord » — déclenche not_interested.
4. Gagne le profile click + follow
Ce sont les poids positifs les plus lourds. L'utilisateur choisit d'en savoir plus sur la source. Gagne ça par :
- Voix distinctive (forme CT minuscule, cadence spécifique — ne sonne pas comme chaque autre compte crypto).
- Bilan concret visible dans le post lui-même : nombres du travail réel, preuve on-chain, position spécifique prise.
- Quelque chose qu'ils veulent PLUS : info utile, takes défendables, une worldview spécifique.
Si chaque post est du commentaire de news générique, les profile clicks restent plats. Si les posts montrent voix consistante et edge, profile_click + follow_author se déclenchent tous deux.
5. Ne fais jamais quelque chose pour not_dwelled
La pénalité la plus sous-estimée unique. Exemples de ce qui obtient not_dwelled :
- Hype vide : "huge week ahead 🚀🚀🚀"
- Platitudes génériques : "build > talk"
- Engagement bait : "follow for more alpha"
- Demi-pensées : "interesting if true"
Chacune de ces choses obtient l'œil pour une demi-seconde, échoue à retenir l'attention, et baisse activement ton futur score avec cet utilisateur. Mieux vaut ne pas poster que poster un de ceux-ci.
6. Reste frais — réagis vite ou ne réagis pas
AgeFilter supprime les vieux posts. Si tu réponds à un thread, fais-le dans la première heure ou deux. Répondre à des threads vieux de 8 heures obtient presque zéro portée parce que le post est filtré de la plupart des fils avant le classement.
Pour les originals : connecte-toi au signal d'aujourd'hui (mouvement de prix, news, produit just-shipped) quand possible. Les takes evergreen c'est bien mais elles rivalisent contre toute l'histoire du contenu evergreen.
7. Évite le détecteur de slop
Le BangerInitialScreenClassifier évalue slop_score. High slop_score = classé moins bien. Ce qui lit comme slop :
- Prose assistant IA ("as an ai", "i can help", "i'd recommend")
- Cadence consultant ("the future of", "is the part that matters", "under the hood")
- Louanges génériques / ton support client
- Setups listicle ("5 reasons why")
- Anything qui pourrait apparaître dans un SaaS product critique blog sans modification
L'outil x_style_preflight (appelle-le avant chaque post) attrape la liste explicite de phrases. Le détecteur de slop attrape la forme. Lis ton brouillon à haute voix — si ça sonne comme un communiqué de presse ou un blog fintech, c'est slop. Réécris.
8. Sois prudent avec les images et vidéos
photo_expand est positif SEULEMENT si l'image récompense l'expansion. Les images décoratives stock ne font rien.
vqv nécessite de rencontrer la durée vidéo minimale (~6s par défaut). Ne poste pas de vidéos sub-6s — le watch compte comme not_dwelled, pas vqv.
Si tu postes un graphique ou une capture d'écran : assure-toi que c'est lisible quand agrandi et porte la revendication du post. Ne poste pas un graphique qui ne soutient pas directement les mots.
9. Ne pile pas les posts sur toi-même
La décadence de diversité auteur atténue les posts rapides du même auteur. Échelonne :
- Le calendrier de réponse se déclenche à
:25, le calendrier original à:00→ gap de 25 minutes intégré. - Posts ad-hoc : au moins 20 minutes entre, idéalement 30+.
- Ne burst jamais 3 posts en 10 minutes — les posts 2 et 3 atteindront près de zéro.
10. Regarde les déclencheurs spam-bas-follower
Le SpamEapiLowFollowerClassifier est plus strict sur les comptes bas-follower. On le déclenche plus facilement que @verified-bigaccount. Spécifiquement évite :
- Répéter la même structure post 5+ fois en une journée.
- Posts avec plusieurs liens externes vers des domaines non-majeurs.
- Anything qui lit comme crypto-token-shill, même si c'est notre propre
$ELO. - Patterns « envoie-moi un DM » / « me follow ».
Arbre de décision avant de poster
x_style_preflighta-t-il passé ? (check mécanique, phrases bannies) → si non, réécris.- Lis le brouillon à haute voix — est-ce que ça sonne comme une personne ou comme un communiqué de presse ? → si communiqué de presse, réécris.
- La PREMIÈRE LIGNE obtient-elle l'œil en 3-8 mots ? → si non, remplace le lead.
- Y a-t-il au moins UNE CHOSE CONCRÈTE (nombre, entité nommée, événement spécifique, revendication tranchante) ? → si non, abandonne ou réécris.
- Une personne raisonnable pourrait-elle être en désaccord avec ceci ? → si non (incontroversé), ça obtiendra des likes mais pas de réponses. Considère d'affûter.
- Serait-ce embarrassant sur le profil dans 6 mois ? → si oui, saute.
- L'agent a-t-il posté dans les 20 dernières minutes ? → si oui, queue-le pour plus tard.
Si les 7 passent, poste. Après posting, vérifie l'URL en direct et enregistre-la.
Ce que cette skill ne couvre PAS
- Ads / contenu promu — l'algorithme gère les ads via un module séparé
home-mixer/ads/. On ne promeut pas. - Engagement DM / messaging — surface différente, classement différent.
- Twitter Spaces — géré par un composant séparé.
- Community Notes — couche de modération séparée.
- Classement de réponse spécifiquement — il y a un
ReplyRankingClassifierdont on n'a pas accès aux internals. Meilleure guidance générale : reste attaché au sujet du parent, sois concret, ne pivote pas sur ton propre agenda.
Carte de référence rapide
Maximise : dwell, reply, follow_author, profile_click, share. Hook dans les 3-8 premiers mots. Prends un parti défendable. Une unité concrète (nombre / chose nommée / revendication spécifique). Échelonne de 20+ min.
Évite : not_dwelled (bait vide), not_interested (sludge), mute (over-posting), slop_score (cadence consultant + voix assistant IA). Frais > générique. Voix CT > corporate.
Toujours : lance x_style_preflight avant de poster. Vérifie l'URL en direct après.
Vérifier
Après avoir lancé cette skill, le post doit satisfaire ces checks mécaniques :
- [ ]
x_style_preflighta retournépass=True - [ ] Les 3-8 premiers mots contiennent un hook concret
- [ ] Au moins un élément spécifique : nombre, entité nommée, ou revendication tranchante
- [ ] Lit à haute voix comme une personne, pas un communiqué de presse
- [ ] Posté au moins 20 minutes après le post précédent de ce compte
- [ ] URL en direct vérifiée via browser_extract montrant le texte exact et l'horodatage