Comment refaire HackerTube de Karpathy avec Claude Code ou Codex : extraire les vidéos des commentaires Hacker News pour un site sans algorithme (testé)

Karpathy a construit HackerTube en deux heures environ avec Claude Code et Opus 5.5, en retenant 6 454 vidéos YouTube que les commentateurs de Hacker News se recommandent depuis 20 ans. Avec notre API Key, nous avons demandé à Claude Code et à Codex de construire chacun une version réduite : récupérer deux mois de commentaires via l'API Algolia officielle de HN, extraire les liens YouTube, dédoublonner, compter et générer une page statique. Prompt complet, durées mesurées, comparaison des deux clients et étapes restantes jusqu'à HackerTube.

12 分钟阅读
Comment refaire HackerTube de Karpathy avec Claude Code ou Codex : extraire les vidéos des commentaires Hacker News pour un site sans algorithme (testé)

En bref : l'idée de HackerTube est simple. Retrouver chaque lien YouTube posté dans un commentaire Hacker News, ne garder que les vidéos recommandées par beaucoup de personnes différentes sur beaucoup de mois différents, et en faire un site vidéo sans compte ni algorithme de recommandation. Avec Claude Code ou Codex, un seul prompt suffit pour obtenir une version réduite qui fonctionne.

  • Selon le post original de Karpathy (1er novembre, UTC), agacé par les recommandations de YouTube, il a demandé à Claude de filtrer environ 43 millions de commentaires publiés sur HN en 20 ans pour garder 6 454 vidéos recommandées encore et encore. Il y a passé environ deux heures, avec l'application de bureau Claude Code et Opus 5.5 en effort Medium. Ses seules actions manuelles : créer une clé Google Cloud pour interroger les métadonnées YouTube, démarrer un VPS et acheter le domaine. L'après-midi du 2 novembre (UTC+8), le post comptait environ 3,3 millions de vues, 39 700 likes et 34 000 signets.
  • Avec notre API Key, Claude Code et Codex ont chacun construit une version réduite à partir de l'API Algolia officielle de HN, sur septembre et octobre 2026. Les deux ont terminé en environ 9 minutes, ont trouvé environ 3 600 commentaires avec un lien YouTube et plus de 3 500 vidéos distinctes, ont gardé 193 vidéos partagées par au moins 2 personnes différentes, avec un top 3 identique.
  • Ce qui sépare la version réduite de HackerTube, c'est de juger si un commentaire recommande vraiment la vidéo. En classant seulement par nombre de liens, les vidéos d'actualité de la semaine passent devant : les 12 mentions de la vidéo n° 3 viennent toutes du même fil. Le prompt qui ajoute cette étape est donné vers la fin.

Créer une API Key et construire votre propre HackerTube dans Claude Code, Codex ou Cursor →

Ce qu'est HackerTube et comment Karpathy l'a construit

HackerTube se présente comme « les vidéos YouTube que Hacker News n'arrête pas de se conseiller ». Selon sa page About, le site compte 6 454 vidéos, tirées de 39 834 commentaires HN qui les mentionnent, rangées en 150 sujets dans 16 domaines, de 2007 à 2026. Les likes, l'historique et « À regarder plus tard » restent dans votre navigateur, il n'y a pas de compte, et la miniature est une image prise au milieu de la vidéo plutôt que la couverture optimisée par l'auteur.

Selon la section « How it was built » de cette page, le processus tient en cinq étapes :

ÉtapeCe que fait HackerTube
1. Lire tous les commentairesParcourir une archive publique complète de HN (le jeu de données open-index/hacker-news) à la recherche de liens YouTube : bien plus de cent mille vidéos
2. Garder les recommandations répétéesAu moins 3 personnes différentes, avec un vrai commentaire, sur au moins 3 mois différents ; il reste environ 7 000 vidéos
3. Faire lire chaque commentaire par un modèleClaude lit le commentaire avec le titre du fil et décide s'il recommande, cite, plaisante ou critique, puis extrait une citation et des sujets
4. Rédiger une fiche par vidéoÀ partir des infos YouTube et de tout ce que HN en a dit : résumé, pourquoi HN l'aime, type, et si elle a bien vieilli
5. ClasserSelon le nombre de mois distincts où elle a été recommandée ; revenir sur plusieurs années compte plus qu'un pic viral

La page About précise aussi que le site, le pipeline de données, la recherche et les recommandations ont été construits par Claude Opus 5.5 dans Claude Code, et que les étiquettes de commentaires et les fiches vidéo ont été rédigées par des agents Claude Sonnet 5.5 coordonnés par Opus. Les données sont publiées : la page Data propose un zip d'environ 17,8 Mo avec videos.jsonl, mentions.jsonl, la liste des sujets, les embeddings et un DATA.md écrit pour les agents, sous licence ODC-By 1.0. Karpathy suggère dans son post de donner ce fichier à votre Claude pour lui demander votre propre version.

Selon les résumés de tendances de X (un, deux), des variantes sont déjà apparues, comme Hacker Papers pour arXiv ou des listes de livres et de blogs.

Ce que fait la version réduite

Reconstruire 20 ans de données implique de télécharger toute l'archive HN, ce qui est trop pour un premier essai. Nous avons limité la période à deux mois et utilisé uniquement l'API de recherche Algolia officielle de HN, qui ne demande aucune clé :

ÉtapeMéthodeRésultat
1. Récupérer les commentairesAlgolia search_by_date, tags=comment, découpé en fenêtres de tempsdata/comments.jsonl
2. Extraire les liensRepérer les identifiants vidéo de 11 caractères, en couvrant watch?v=, youtu.be/, /shorts/ et les autres formesVidéos citées par commentaire
3. Dédoublonner et compterMentions, personnes distinctes et mois distincts par vidéoClassement
4. Ajouter les titresoEmbed de YouTube, sans clédata/videos.json
5. Générer la pageUn fichier HTML statique avec une grille de cartes et un champ de recherche côté clientsite/index.html

Étape 1 : créer une API Key et connecter Claude Code ou Codex

  1. Inscrivez-vous sur aicodewith.ai, connectez-vous, ouvrez la gestion des clés, créez une clé et copiez la chaîne complète.
  2. Claude Code : définissez l'adresse et la clé, créez un dossier vide et lancez-le dedans :
bash
export ANTHROPIC_BASE_URL="https://api.aicodewith.ai"
export ANTHROPIC_AUTH_TOKEN="VOTRE_API_KEY"
mkdir -p ~/hackertube-mini && cd ~/hackertube-mini
claude --model claude-opus-5-5

Pour enregistrer ces réglages durablement ou les définir sous Windows, voir Connecter Claude Code à une API tierce. Karpathy utilisait Opus 5.5 en effort Medium ; pour choisir le niveau, voir Niveaux d'effort de Claude Opus 5.5, et pour comparer les modèles, Quel modèle utiliser dans Claude Code.

  1. Codex : ajoutez ceci dans ~/.codex/config.toml, avec la clé écrite directement dans experimental_bearer_token :
toml
# ~/.codex/config.toml
model = "gpt-6.1-sol"
model_reasoning_effort = "medium"
model_provider = "aicodewith"

[model_providers.aicodewith]
name = "aicodewith"
base_url = "https://api.aicodewith.ai/chatgpt/v1"
wire_api = "responses"
experimental_bearer_token = "VOTRE_API_KEY"

Chaque champ est expliqué dans Le fichier config.toml de Codex. Si vous débutez avec Codex, commencez par Comment utiliser Codex et Installer Codex.

Étape 2 : regarder d'abord l'API Algolia de HN

Lancez une requête avant de commencer pour voir à quoi ressemblent les données. Celle-ci demande les commentaires publiés le 2026-09-01 qui contiennent youtu (cela couvre youtube.com et youtu.be) :

bash
# comments posted on 2026-09-01 (UTC) that contain "youtu"
curl "https://hn.algolia.com/api/v1/search_by_date?query=youtu&tags=comment&hitsPerPage=1000&numericFilters=created_at_i>=1788220800,created_at_i<1788307200"

Dans notre test, HN comptait 10 830 commentaires ce jour-là, dont 197 contenaient youtu. Deux limites comptent :

  • Chaque requête renvoie au plus 1000 résultats. Sur deux mois, youtube.com à lui seul correspond à plus de 4 000 commentaires et le reste est coupé : il faut découper la période en petites fenêtres.
  • Chercher youtube rate les liens courts. youtu.be/xxxx ne contient pas le mot youtube. Cherchez le préfixe youtu, puis filtrez précisément en local avec une expression régulière.

Nous avons mis ces deux points dans le prompt, et Claude Code comme Codex ont tout de même testé les requêtes et vérifié la limite avant d'écrire le pipeline.

Étape 3 : donner le prompt à l'agent

Enregistrez le texte ci-dessous dans prompt.txt et donnez-le à Claude Code ou à Codex. C'est exactement celui de notre test :

text
Build a mini "HackerTube" in this folder: a static site of the YouTube videos that Hacker News commenters keep recommending to each other.
1. Fetch data only from the official HN Algolia API (https://hn.algolia.com/api/v1/search_by_date, tags=comment). Take every comment created from 2026-09-01 00:00 UTC to 2026-10-31 23:59 UTC that contains a YouTube link (youtube.com/watch, youtu.be/, /embed/, /shorts/, m.youtube.com, music.youtube.com). Note the API returns at most 1000 hits per query, so split the time range into small enough windows. Be polite: at most 2 requests per second. Save raw hits to data/comments.jsonl.
2. Extract and normalize the 11-character video ids (HTML-unescape the comment text first), and drop the commenter's own repeated links within the same comment.
3. For each video count: mentions, distinct commenters, distinct months, first and last mention, and keep up to 3 short quotes with links to the HN comment (https://news.ycombinator.com/item?id=...). Keep a video only if at least 2 different people linked it. Rank by distinct commenters, then mentions.
4. Get titles for the kept videos from YouTube oEmbed (https://www.youtube.com/oembed?url=...&format=json, no API key); if oEmbed fails keep the id and mark it unavailable. Save data/videos.json.
5. Generate site/index.html: a single static page, no login and no tracking, with a grid of cards (thumbnail from https://i.ytimg.com/vi/<id>/hqdefault.jpg, title, channel, "N people / M mentions", one quote) and a client-side text filter.
6. Write the whole pipeline as a reusable script build.py (stdlib only, with a --since/--until option) and run it. Finally reply with: total comments fetched, unique videos found, videos kept, the top 10 videos (id, title, people, mentions), and any problems you hit.

Trois points comptent dans ce prompt : désigner l'API officielle comme seule source évite que l'agent aille aspirer des pages web ; annoncer d'emblée la limite de 1000 résultats et le rythme des requêtes lui évite de découvrir des trous à mi-chemin ; demander un build.py relançable permet de changer de période ou de seuil sans nouvelle conversation.

Pour l'exécuter en arrière-plan, utilisez le mode non interactif. Avec Claude Code, --allowedTools n'autorise que les commandes nécessaires. Le bac à sable par défaut de Codex n'a pas d'accès réseau : nous avons donc utilisé --sandbox danger-full-access dans un dossier vide dédié. Cette permission est large, ne l'utilisez pas dans un dossier contenant des fichiers importants ; les options sont détaillées dans Permissions d'automatisation de Codex :

bash
# Claude Code, non-interactive: only allow the commands this job needs
cat prompt.txt | claude -p --model claude-opus-5-5 \
  --permission-mode acceptEdits \
  --allowedTools "Bash(python3:*)" "Bash(curl:*)" "Bash(ls:*)" "Bash(mkdir:*)" "Bash(head:*)" "Bash(wc:*)"

# Codex, non-interactive (reads the prompt from stdin)
codex exec --skip-git-repo-check --sandbox danger-full-access - < prompt.txt

Test : Claude Code et Codex avec notre API Key

Les deux clients ont reçu le même prompt et ont tourné en même temps sur la même machine Linux, l'après-midi du 2 novembre 2026 :

Claude Code 2.1.316 + Opus 5.5Codex 0.166.0 + GPT-6.1 Sol
DuréeEnviron 555 secondes, 21 toursEnviron 534 secondes, 30 commandes exécutées
RécupérationFenêtres d'un jour sur youtu, toute fenêtre au-delà de 1000 résultats coupée en deux ; 61 requêtes61 fenêtres d'un jour sur youtu, en vérifiant qu'aucune n'atteint 1000
Commentaires avec lien YouTube3 6243 619
Vidéos distinctes3 5113 505
Gardées (au moins 2 personnes)193193
Sans titre2 (oEmbed a renvoyé 403 et 401)Idem
VérificationsComparaison avec un parcours complet d'une journée : les deux trouvent les mêmes 87 commentaires avec lien5 tests écrits, page ouverte dans Chrome headless pour contrôler les cartes et la recherche
Résultatbuild.py de 418 lignes, index.html d'environ 258 Kobuild.py de 258 lignes, index.html d'environ 210 Ko

Les deux clients ont choisi d'eux-mêmes la même approche : au lieu de parcourir tous les commentaires (environ 600 000 en deux mois), ils ont cherché youtu jour par jour, puis filtré précisément en local. Claude Code a aussi vérifié ce raccourci : un parcours complet du 1er septembre a donné exactement le même résultat, et il a noté que chercher youtube aurait raté 20 commentaires avec des liens courts.

Le top 10 était presque identique des deux côtés, et le top 3 strictement identique. Nous avons aussi compté combien de mentions de chaque vidéo venaient d'un même fil :

RangVidéoPersonnesMentionsMoisMax dans un seul fil
1216,000,000 Spy TVs – The LG Smart TV Problem151827
2Kernel Recipes 2026 - Security in the LLM age122112
3The FLYING Tesla Roadster explained by the man who engineered it1112112
4LG Says We're Fake News6716
5Reinventing Entropy – Compression is Intelligence Part 16623

Chaque vidéo de data/videos.json ressemble à ceci, avec des citations qui renvoient au commentaire HN d'origine :

json
{
  "id": "6IFVTcM28KA",
  "title": "216,000,000 Spy TVs | The LG Smart TV Problem",
  "people": 15, "mentions": 18, "months": 2,
  "first_mention": "2026-09-07T10:52:26Z",
  "last_mention": "2026-10-13T16:41:11Z",
  "quotes": [
    {"author": "wavesplash", "date": "2026-09-07",
     "url": "https://news.ycombinator.com/item?id=49597752",
     "text": "... Worth a watch to see how bad this is"}
  ]
}

Le build.py généré peut être relancé avec une autre période ou un autre seuil (version de Claude Code) :

bash
python3 build.py --since 2026-09-01 --until 2026-10-31   # full run
python3 build.py --skip-fetch --min-people 3              # rebuild from saved comments with a stricter rule
python3 build.py --full-scan                              # scan every comment instead of the "youtu" prefilter (slow)

Trois problèmes révélés par le test

  1. Classer par nombre de liens confond l'actualité de la semaine avec un classique. Les 12 mentions de la vidéo n° 3 viennent toutes d'un fil consacré à cette vidéo, et 6 mentions de la n° 4 aussi. C'est précisément pour cela que HackerTube exige au moins 3 mois différents et fait juger chaque commentaire par un modèle. Sur nos deux mois, seules 22 vidéos réunissent au moins 3 personnes et au moins 2 mois.
  2. Les gens collent souvent des URL mal formées, et les deux clients ne les traitent pas pareil. Claude Code a gardé 5 commentaires de plus que Codex, tous avec des URL comme celles-ci. Claude Code prend les 11 premiers caractères et les garde ; Codex les analyse comme des URL standard et les écarte. La troisième a en réalité deux caractères de trop, donc couper à 11 peut désigner la mauvaise vidéo :
text
https://www.youtube.com/watch?v=sCr_gb8rdEI?t=11m     <- "?" instead of "&"
https://youtu.be/69o-8Mtd3Kc&t=330                    <- "&" instead of "?"
https://www.youtube.com/watch?v=909o_kbCdFgll         <- 13 characters, not 11
  1. oEmbed ne renvoie pas un titre pour chaque vidéo. 2 des 193 vidéos gardées ont renvoyé 403 ou 401, probablement privées ou avec l'intégration désactivée ; les deux clients les ont marquées indisponibles avec seulement l'identifiant. Pour la durée, les vues et ce genre d'informations, il faut une clé YouTube Data API créée dans Google Cloud, comme l'a fait Karpathy.

De la version réduite à HackerTube

D'abord, faire juger chaque commentaire par un modèle. C'est ce qui change le plus le résultat. Dans le dossier de la version réduite, dites à l'agent :

text
For each comment in data/comments.jsonl, read the comment text and the HN story title,
and label what the commenter does with the video: strong_rec, rec, reference, joke or critical.
Write the labels to data/stance.jsonl. Then only count strong_rec and rec,
keep a video if at least 3 different people recommended it in at least 3 different months,
and rank by the number of distinct months. Rebuild site/index.html.

Juger des milliers de commentaires un par un prend du temps : laissez l'agent les répartir en lots parallèles. Lancer trop de tâches Codex en même temps peut provoquer des erreurs 429 ; pour régler la concurrence, voir Résoudre l'erreur Codex 429 Too Many Requests.

Ensuite, utiliser plus de données. Algolia convient pour récupérer par période ; pour couvrir de 2007 à aujourd'hui, l'archive open-index/hacker-news citée sur la page About de HackerTube est plus adaptée. Le plus simple est de télécharger le zip de HackerTube, de faire lire DATA.md à l'agent, puis d'adapter l'interface ou le classement à votre goût.

Enfin, mettre en ligne. La version réduite est une page statique qui s'ouvre sur n'importe quel hébergement statique. Selon le post de Karpathy, il a donné l'IP du VPS à Claude en lui demandant de mettre à jour, sécuriser, renforcer, déployer et optimiser, et Claude a tout fait.

Questions fréquentes

Algolia renvoie moins de résultats que nbHits

Chaque requête renvoie au plus 1000 résultats ; nbHits n'est que le total. Réduisez les fenêtres de temps jusqu'à ce que chacune ait moins de 1000 résultats. Des fenêtres d'un jour nous ont suffi, et les jours chargés peuvent être recoupés en deux.

Pourquoi chercher youtube ne trouve pas tout

Les liens courts youtu.be ne contiennent pas youtube. Cherchez youtu, puis filtrez en local avec une expression régulière pour watch?v=, youtu.be/, /embed/, /shorts/ et les formes voisines.

Les liens des commentaires ressemblent à &#x2F;

Algolia renvoie comment_text échappé en HTML : / devient &#x2F; et & devient &amp;. Décodez le HTML avant d'extraire les liens, sinon l'expression régulière ne trouvera rien. Le point 2 de notre prompt le précise.

Faire pareil pour des articles, des livres ou des podcasts

Remplacez YouTube dans le prompt par arxiv.org/abs/, amazon.com/dp/ ou des liens de podcasts ; le comptage et la page restent identiques. Pour lire les articles ensuite, voir Chercher et lire des articles arXiv avec Claude Code.

Faire suivre les mêmes règles à l'agent à chaque fois

Écrivez la source de données, les seuils et les exigences de la page dans le CLAUDE.md ou l'AGENTS.md du projet ; voir Rédiger le CLAUDE.md de Claude Code.

En résumé

HackerTube montre que les petits produits qui « filtrent le contenu selon le goût des autres » sont désormais à la portée d'une seule personne avec un agent de code. Dans notre test, récupérer les commentaires Hacker News avec Claude Code ou Codex, en extraire les liens YouTube et produire un site vidéo statique utilisable a pris environ 9 minutes. Ce qui fait vraiment la qualité, c'est la règle qui définit une recommandation, et une période assez longue.

Créer une API Key et commencer dans Claude Code, Codex ou Cursor →

相关文章

DeepSeek Harness Creator Mode : installation, connexion d'une API tierce et premier plugin testé

DeepSeek Harness Creator Mode : installation, connexion d'une API tierce et premier plugin testé

Le 2 novembre, le compte officiel DeepSeek Harness a présenté Creator Mode : vous décrivez un outil en une phrase, et l'agent écrit le plugin, l'installe dans Harness et vérifie qu'il est chargé. Ce guide explique ce qu'est Creator Mode, comment lancer Harness avec npx, comment brancher une API tierce compatible OpenAI (URL de base + clé aicodewith) pour utiliser les modèles Claude, GPT et DeepSeek, puis construit un plugin todo_scan avec Creator Mode, avec les sorties réelles, les erreurs courantes et les équivalents Claude Code / Codex.

Claude Code auto mode échoue à chaque tour derrière une passerelle ? La 2.1.317 corrige les 403/422 (mise à jour et tests)

Claude Code auto mode échoue à chaque tour derrière une passerelle ? La 2.1.317 corrige les 403/422 (mise à jour et tests)

Claude Code 2.1.317 (publié le 3 novembre) corrige l'échec du mode auto à chaque tour lorsque ANTHROPIC_BASE_URL pointe vers une passerelle LLM qui répond 403 ou 422 à la vérification de sécurité côté serveur. Ce guide explique ce qui change, qui est concerné, comment mettre à jour et vérifier la version, comment configurer la Base URL et la clé puis activer le mode auto, avec des tests comparés de 2.1.316 et 2.1.317, un tableau des erreurs et une FAQ.

Claude Message Threads : comment les utiliser ? Bêta des threads de l'API Messages, n'envoyer que les nouveaux messages, premier token ~35 % plus rapide (test Claude Code / API)

Claude Message Threads : comment les utiliser ? Bêta des threads de l'API Messages, n'envoyer que les nouveaux messages, premier token ~35 % plus rapide (test Claude Code / API)

Le 2 novembre, Anthropic a ouvert en bêta publique les Message Threads de l'API Messages. La première requête envoie toute la conversation et crée un thread ; ensuite, chaque tour n'envoie que les nouveaux messages et l'id de la réponse précédente. Le premier token arrive plus tôt dans les longues conversations, mais la consommation de tokens et la facturation ne changent pas. Ce guide explique le paramètre thread, l'en-tête bêta, l'expiration de 5 minutes et la relance après une 404 d'après la documentation officielle, donne des exemples curl, Python et TypeScript, et présente notre test avec une clé aicodewith : via aicodewith, le champ thread est actuellement ignoré et le tour de continuation perd le contexte, Claude Code n'est pas concerné, avec la solution de rechange et les erreurs courantes.