Skip to main content
Retour aux billets
Nov. 20267 min de lecture

Call It : une IA gère mes prédictions Twitch pendant que je joue, et 10 paiements sur 12 concordaient avec le registre de chess.com

Les Prédictions Twitch sont réservées aux affiliés, et quelqu'un doit encore ouvrir chaque pari et annoncer le résultat à la main. Call It regarde la partie par OBS et s'en charge : il ouvre le pari, le verrouille, paie et crée un clip du moment, sur n'importe quelle chaîne. Sur une diffusion d'échecs inédite, 10 paiements sur 12 concordaient avec chess.com.

TwitchConOpenAI CodexTwitch APIEventSubOBSAI AgentTypeScriptHackathon
J'ai écrit ce billet pour le Codex x TwitchCon Hackathon (Devpost, novembre 2026), et j'ai bâti Call It pour la même soumission. Code source sur github.com/JonathanSolvesProblems/call-it; il tourne sur votre propre machine avec votre propre connexion Twitch et votre propre clé d'API, alors il n'y a pas de version hébergée à essayer. La diffusion en direct où il a été filmé et un clip qu'il a créé sont liés plus bas.
La revendication en une phrase : sur une diffusion d'échecs de 2,4 heures que Call It n'avait jamais vue, 10 paiements de résultat sur 12 concordaient avec les registres publics des parties de chess.com, corrigés par un script sans aucun modèle, et il a remboursé 8 paris au lieu de deviner. La mesure porte sur les vidéos d'échecs d'un seul diffuseur, donc l'essai mis de côté teste des parties inédites, pas une mise en page inédite, et sur la diffusion qui m'a servi à l'ajuster, il partait de 4 sur 10.
Carte titre sur une grille violet foncé : une photo de profil ronde au-dessus des mots Codex x TwitchCon Hackathon, Call It en grosses lettres, et la ligne It watches your game and runs the bets.
Call It regarde votre partie par OBS et gère les paris de prédiction dans votre clavardage Twitch. N'importe quelle chaîne, sans statut d'affilié.

En plein combat, le clavardage ne peut que regarder

Je diffusais du WoW sur une petite chaîne. En plein combat, les deux mains sur le clavier, mon clavardage ne pouvait que regarder. Twitch a un jeu de paris pour exactement ce moment-là, les Prédictions, mais il est réservé aux affiliés, et même avec ce statut, quelqu'un doit lancer chaque pari et annoncer le résultat à la main. Call It fait ce travail. Il regarde la partie par OBS et gère les paris de prédiction dans le clavardage : il les ouvre quand un combat va commencer, les verrouille vers la fin, les règle quand le résultat est à l'écran, et publie un clip et un marqueur de diffusion. N'importe quelle chaîne peut l'utiliser, sans statut d'affilié, sans modérateurs et sans serveur à héberger.

Une vidéo Twitch de mon jeu Orvandel pendant un combat de boss contre The Bellows, avec la superposition de Call It qui affiche Will The Bellows be defeated? et Bellows down à 300 points d'un parieur, une webcam dans le coin, et le clavardage qui montre les messages BET, LOCKED et Refunded du robot à côté de mises comme !1 300.
En direct sur Twitch : un boss apparaît et Call It ouvre le pari de lui-même. Le clavardage parie avec !1 ou !2; ici, mon compte principal joue le spectateur.

Ce qui s'est passé en direct

Sur mon propre jeu, Orvandel, un MMO que j'ai bâti, en direct sur Twitch : la carte titre d'un boss apparaît et Call It ouvre « Will The Bellows be defeated? » dans le clavardage. Un spectateur parie !1 300 (mon compte principal, qui joue le spectateur). La carte de la superposition se remplit à mesure que les points arrivent, et vers la fin du combat, elle se verrouille. Quand la bannière de victoire s'affiche, un modèle rapide propose le résultat et un deuxième modèle, plus fort, vérifie les images avant que quiconque soit payé. Le paiement arrive dans le clavardage avec un lien vers un clip, et un marqueur s'ajoute à la vidéo. L'agent fait lui-même les trois appels à Twitch.

La carte de superposition de Call It à l'écran pendant le combat, qui se remplit à mesure que les spectateurs misent des points sur chaque issue avant le verrouillage.
La carte de superposition se remplit à mesure que les points arrivent, puis se verrouille vers la fin du combat.
Le clavardage Twitch après la victoire : Call It annonce le paiement au camp gagnant, publie un lien vers un clip, et un marqueur est ajouté à la vidéo.
Le paiement arrive dans le clavardage avec un lien vers un clip, et un marqueur s'ajoute à la vidéo. L'agent fait lui-même les trois appels à Twitch.

Comment il décide

Toutes les 4 secondes, gpt-5.4-mini voit les trois dernières images d'OBS, l'état du pari et les décisions récentes, et doit appeler exactement un outil : wait, open_bet, lock_bet, resolve_bet ou cancel_bet. Le code ne choisit jamais l'action; il ne fait qu'imposer des limites : un pari à la fois, un délai entre les paris, la longueur de la question et des issues, un remboursement après expiration, et des plafonds de dépenses. Un paiement proposé passe par un deuxième regard de gpt-6.1-sol, qui voit les images de la proposition et les images plus récentes, et retient l'issue que les images prouvent, ou la rejette. Chaque décision, avec les images qu'elle a vues, est dans le journal des décisions.

La page de débogage de Call It : le pari en cours Will The Bellows be defeated?, réglé, la dernière image de jeu, et une liste Recent decisions qui montre wait, lock_bet et resolve_bet de gpt-5.4-mini et confirm_resolution de gpt-6.1-sol qui dit The Bellows has been defeated.
Chaque paiement reçoit un deuxième regard : gpt-5.4-mini propose le résultat, gpt-6.1-sol vérifie les images avant que quiconque soit payé.

Quand il ne voit pas le résultat, il rembourse

Une fois, il a ouvert un pari pendant que je parlais à un donneur de quête, n'a vu aucun combat, et a rendu leurs points à tout le monde. Un remboursement est la réponse de l'agent chaque fois que les images ne prouvent pas une issue, et le diffuseur ou un modérateur peut en forcer un en tout temps avec !callit cancel.

La vidéo Twitch sur l'écran de personnages d'Orvandel avec la superposition de Call It qui affiche Refunded, Points returned, The fight ended without a visible defeat or wipe, et le clavardage qui montre le message de remboursement du robot et un lien vers un clip.
Quand il ne voit pas de résultat, il rembourse : le combat s'est terminé sans défaite ni anéantissement visible, alors chaque mise a été rendue.

Mesuré contre quelque chose que je ne contrôle pas

Mon propre jeu ne peut pas corriger un pari, parce que c'est moi qui l'ai écrit. Alors j'ai rejoué de vraies diffusions d'échecs dans la même boucle et corrigé chaque paiement de résultat contre les registres publics des parties de chess.com, avec un script sans aucun modèle. Sur une diffusion de 2,4 heures que Call It n'avait jamais vue, 10 paiements sur 12 concordaient avec le registre et il a remboursé 8 paris au lieu de deviner. Le deuxième regard est intervenu sur 11 des 18 paiements proposés (5 mauvais gagnants corrigés, 6 paiements tirés du résultat d'une autre partie rejetés) et avait raison les 11 fois. Avant ces corrections, sur la diffusion qui m'a servi à l'ajuster, c'était 4 sur 10. Les fichiers d'exécution, les journaux de décisions et les notes sont dans eval/results/, et npm run grade les recorrige sans aucun appel de modèle.

Carte de résultats intitulée Graded against chess.com's official game records, A 2.4-hour stream Call It had never seen : 10 paiements sur 12 concordaient avec le registre, et 8 remboursés au lieu de deviner, avec la référence eval/results/2893451280-heldout/grade-final.json et la mention que le correcteur ne contient aucun modèle.
Corrigé contre les registres de parties de chess.com sur une diffusion de 2,4 heures inédite : 10 paiements sur 12 concordaient, 8 paris remboursés.

Bâti dans un seul fil Codex

Tout le code du produit a été écrit dans OpenAI Codex, dans un seul fil, à partir de SPEC.md et d'AGENTS.md : 18 requêtes, 26 commits, 72 tests. Codex a écrit le client EventSub de Twitch, l'authentification par code d'appareil, la boucle de l'agent et les schémas d'outils, les garde-fous et les plafonds de dépenses, le registre des points et le calcul des paiements, le deuxième regard, les appels de clips et de marqueurs, la superposition, le mode de rejeu et le correcteur d'échecs. Chaque requête que j'ai envoyée est dans CODEX_PROMPTS.md dans l'ordre d'envoi, et l'historique des commits montre la construction étape par étape. J'ai utilisé Claude Code en parallèle de Codex pour la planification, la révision des requêtes, les tests en direct et les essais d'évaluation.

L'application OpenAI Codex sur un fil intitulé Build Twitch auth and chat setup : une requête qui demande les correctifs de la diffusion de démo en direct, le résumé de Codex indiquant que la vérification des types et les 72 tests passent et que le travail est versé, et un panneau de changements qui liste neuf fichiers de code et de tests modifiés.
Bâti dans un seul fil OpenAI Codex à partir de SPEC.md et d'AGENTS.md : 18 requêtes, 26 commits, 72 tests. Chaque requête est dans le dépôt.

Ce qui n'est pas revendiqué

Le 10 sur 12 est corrigé par les registres de chess.com, pas par moi ni par un modèle, mais il vient des vidéos d'échecs d'un seul diffuseur, donc l'essai mis de côté teste des parties inédites dans une mise en page sur laquelle l'agent avait déjà été ajusté, et douze paiements, c'est peu. La démo en direct sur mon propre jeu n'a aucun correcteur externe, c'est pourquoi la mesure porte sur les échecs. L'agent lit des pixels et peut se tromper : le deuxième regard réduit les erreurs de paiement sans les éliminer, et le diffuseur peut rembourser n'importe quel pari avec !callit cancel. Il gère les paris en mode clavardage avec ses propres points; les Prédictions natives avec points de chaîne pour les chaînes affiliées sont la prochaine étape. Les clips et les marqueurs ne sont créés que lorsque la chaîne est vraiment en direct, et le mode en direct est plafonné par défaut à 600 appels de modèle.

Projet associé

Call It: an agent that watches your game through OBS and runs your Twitch chat's prediction bets, opening, locking, paying out and clipping the moment, on any channel with no Affiliate needed

Voir le projet