Cómo hacer el HackerTube de Karpathy con Claude Code o Codex: sacar vídeos de los comentarios de Hacker News para un sitio sin algoritmo (probado)

Karpathy hizo HackerTube en unas dos horas con Claude Code y Opus 5.5, eligiendo 6.454 vídeos de YouTube que los comentaristas de Hacker News llevan 20 años recomendándose. Con nuestra API Key, pedimos a Claude Code y a Codex que hicieran cada uno una versión reducida: traer dos meses de comentarios con la API oficial de Algolia de HN, extraer los enlaces de YouTube, quitar duplicados, contar y generar una página estática. Incluye el prompt completo, los tiempos medidos, la comparación de ambos clientes y los pasos que faltan hasta HackerTube.

12 分钟阅读
Cómo hacer el HackerTube de Karpathy con Claude Code o Codex: sacar vídeos de los comentarios de Hacker News para un sitio sin algoritmo (probado)

En resumen: la idea de HackerTube es sencilla. Encontrar cada enlace de YouTube publicado en un comentario de Hacker News, quedarse solo con los vídeos que muchas personas distintas recomendaron en muchos meses distintos y convertirlos en un sitio de vídeos sin cuentas ni algoritmo de recomendación. Con Claude Code o Codex basta un solo prompt para tener una versión reducida que funciona.

  • Según la publicación original de Karpathy (1 de noviembre, UTC), harto de las recomendaciones de YouTube, pidió a Claude que filtrara unos 43 millones de comentarios de 20 años de HN hasta quedarse con 6.454 vídeos que se recomiendan una y otra vez. Le llevó unas dos horas con la app de escritorio de Claude Code y Opus 5.5 en effort Medium. Lo único que hizo a mano: crear una clave de Google Cloud para consultar los metadatos de YouTube, levantar un VPS y comprar el dominio. La tarde del 2 de noviembre (UTC+8) la publicación tenía unos 3,3 millones de visualizaciones, 39.700 me gusta y 34.000 guardados.
  • Con nuestra API Key, Claude Code y Codex hicieron cada uno una versión reducida con la API oficial de Algolia de HN para septiembre y octubre de 2026. Ambos terminaron en unos 9 minutos, encontraron unos 3.600 comentarios con enlaces de YouTube y más de 3.500 vídeos distintos, se quedaron con 193 vídeos enlazados por al menos 2 personas distintas y coincidieron en el top 3.
  • Lo que separa la versión reducida de HackerTube es juzgar si un comentario recomienda de verdad el vídeo. Si solo se ordena por número de enlaces, suben los vídeos de actualidad de la semana: las 12 menciones del vídeo n.º 3 salieron todas del mismo hilo. El prompt para ese paso está casi al final.

Crear una API Key y hacer tu propio HackerTube en Claude Code, Codex o Cursor →

Qué es HackerTube y cómo lo hizo Karpathy

HackerTube se presenta como «los vídeos de YouTube que Hacker News no para de recomendarse». Según su página About, ahora tiene 6.454 vídeos, a partir de 39.834 comentarios de HN que los mencionan, ordenados en 150 temas y 16 áreas, de 2007 a 2026. Los me gusta, el historial y «Ver más tarde» se guardan solo en tu navegador, no hay cuentas, y la miniatura es un fotograma de la mitad del vídeo en lugar de la portada optimizada por el autor.

Según la sección «How it was built» de esa página, el proceso tiene cinco pasos:

PasoQué hace HackerTube
1. Leer todos los comentariosRecorrer un archivo público completo de HN (el conjunto de datos open-index/hacker-news) en busca de enlaces de YouTube: bastante más de cien mil vídeos
2. Quedarse con lo que se repiteAl menos 3 personas distintas, con un comentario real, en al menos 3 meses distintos; quedan unos 7.000 vídeos
3. Que un modelo lea cada comentarioClaude lee el comentario junto al título del hilo y decide si recomienda, cita, bromea o critica, y extrae una cita y temas
4. Escribir una ficha por vídeoCon los datos de YouTube y todo lo que dijo HN: resumen, por qué gusta en HN, tipo y si ha envejecido bien
5. OrdenarPor el número de meses distintos en que se recomendó; que se enlace durante años pesa más que un pico viral

La página About también dice que el sitio, el pipeline de datos, la búsqueda y las recomendaciones los hizo Claude Opus 5.5 en Claude Code, y que las etiquetas de comentarios y las fichas de vídeo las escribieron agentes Claude Sonnet 5.5 coordinados por Opus. Los datos están publicados: en la página Data hay un zip de unos 17,8 MB con videos.jsonl, mentions.jsonl, la lista de temas, embeddings y un DATA.md escrito para agentes, bajo licencia ODC-By 1.0. Karpathy sugiere en su publicación dárselo a tu Claude y pedirle tu propia versión.

Según los resúmenes de tendencias de X (uno, dos), ya han salido derivados como Hacker Papers para arXiv y listas de libros y blogs.

Qué hace la versión reducida

Rehacer 20 años de datos obliga a descargar todo el archivo de HN, demasiado para un primer intento. Limitamos el periodo a dos meses y usamos solo la API de búsqueda de Algolia oficial de HN, que no pide ninguna clave:

PasoCómoResultado
1. Traer comentariosAlgolia search_by_date, tags=comment, dividido en ventanas de tiempodata/comments.jsonl
2. Extraer enlacesSacar los identificadores de vídeo de 11 caracteres del texto, cubriendo watch?v=, youtu.be/, /shorts/ y otras formasVídeos por comentario
3. Quitar duplicados y contarMenciones, personas distintas y meses distintos por vídeoRanking
4. Añadir títulosoEmbed de YouTube, sin clavedata/videos.json
5. Generar la páginaUn HTML estático con una cuadrícula de tarjetas y un buscador en el navegadorsite/index.html

Paso 1: crear una API Key y conectar Claude Code o Codex

  1. Regístrate en aicodewith.ai, inicia sesión, abre la gestión de claves, crea una clave y copia la cadena completa.
  2. Claude Code: define la dirección y la clave, crea una carpeta vacía y arráncalo dentro:
bash
export ANTHROPIC_BASE_URL="https://api.aicodewith.ai"
export ANTHROPIC_AUTH_TOKEN="TU_API_KEY"
mkdir -p ~/hackertube-mini && cd ~/hackertube-mini
claude --model claude-opus-5-5

Para guardar la configuración de forma permanente o hacerlo en Windows, mira Cómo conectar Claude Code a una API de terceros. Karpathy usó Opus 5.5 en effort Medium; para elegir el nivel, mira Niveles de effort de Claude Opus 5.5, y para comparar modelos, Qué modelo usar en Claude Code.

  1. Codex: pon lo siguiente en ~/.codex/config.toml, con la clave escrita directamente en 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 = "TU_API_KEY"

Cada campo se explica en El config.toml de Codex. Si es tu primera vez con Codex, empieza por Cómo usar Codex e Instalar Codex.

Paso 2: mira primero la API de Algolia de HN

Lanza una petición antes de empezar para ver cómo son los datos. Esta pide los comentarios publicados el 2026-09-01 que contienen youtu (cubre tanto youtube.com como 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"

En nuestra prueba, HN tuvo 10.830 comentarios ese día y 197 contenían youtu. Hay dos límites importantes:

  • Cada consulta devuelve como mucho 1000 resultados. En dos meses, solo youtube.com coincide con más de 4.000 comentarios y el resto se pierde, así que hay que dividir el periodo en ventanas pequeñas.
  • Buscar youtube se deja los enlaces cortos. youtu.be/xxxx no contiene la palabra youtube. Busca el prefijo youtu y filtra con exactitud en local con una expresión regular.

Pusimos las dos cosas en el prompt, y aun así Claude Code y Codex probaron las peticiones y confirmaron el límite antes de escribir el pipeline.

Paso 3: dale el prompt al agente

Guarda el texto de abajo como prompt.txt y dáselo a Claude Code o a Codex. Es exactamente el que usamos:

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.

Hay tres claves en este prompt: nombrar la API oficial como única fuente evita que el agente se ponga a extraer páginas web; avisar desde el principio del límite de 1000 resultados y del ritmo de peticiones evita que descubra huecos a mitad de camino; y pedir un build.py que se pueda volver a ejecutar permite cambiar de periodo o de umbral sin abrir otra conversación.

Para ejecutarlo en segundo plano, usa el modo no interactivo. En Claude Code, --allowedTools solo permite los comandos necesarios. El sandbox por defecto de Codex no tiene red, así que usamos --sandbox danger-full-access en una carpeta vacía dedicada; es un permiso amplio, no lo uses en carpetas con archivos importantes. Las opciones están en Permisos de automatización 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

Prueba: Claude Code y Codex con nuestra API Key

Los dos clientes recibieron el mismo prompt y se ejecutaron a la vez en la misma máquina Linux, la tarde del 2 de noviembre de 2026:

Claude Code 2.1.316 + Opus 5.5Codex 0.166.0 + GPT-6.1 Sol
TiempoUnos 555 segundos, 21 turnosUnos 534 segundos, 30 comandos ejecutados
Cómo trajo los datosVentanas de un día buscando youtu, partiendo por la mitad las que pasaban de 1000; 61 peticiones61 ventanas de un día buscando youtu, comprobando que ninguna llegaba a 1000
Comentarios con enlace de YouTube3.6243.619
Vídeos distintos3.5113.505
Conservados (2 personas o más)193193
Sin título2 (oEmbed devolvió 403 y 401)Igual
Comprobaciones propiasComparó con un recorrido completo de un día: ambos encontraron los mismos 87 comentarios con enlaceEscribió 5 pruebas y abrió la página en Chrome headless para revisar tarjetas y buscador
Resultadobuild.py de 418 líneas, index.html de unos 258 KBbuild.py de 258 líneas, index.html de unos 210 KB

Los dos clientes eligieron por su cuenta el mismo enfoque: en vez de recorrer todos los comentarios (unos 600.000 en dos meses), buscaron youtu día a día y filtraron con exactitud en local. Claude Code además verificó ese atajo: un recorrido completo del 1 de septiembre dio exactamente el mismo resultado, y señaló que buscar youtube se habría dejado 20 comentarios con enlaces cortos.

El top 10 fue casi igual en ambos lados y el top 3, idéntico. También contamos cuántas menciones de cada vídeo venían de un mismo hilo:

PuestoVídeoPersonasMencionesMesesMáx. en un hilo
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

Cada vídeo de data/videos.json tiene esta forma, con citas que enlazan al comentario original de HN:

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"}
  ]
}

El build.py generado se puede volver a ejecutar con otro periodo u otro umbral (versión 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)

Tres problemas que destapó la prueba

  1. Ordenar por número de enlaces confunde la noticia de la semana con un clásico. Las 12 menciones del vídeo n.º 3 salieron de un hilo dedicado a ese vídeo, y 6 menciones del n.º 4 también. Por eso HackerTube exige al menos 3 meses distintos y hace que un modelo juzgue cada comentario. En nuestros dos meses, solo 22 vídeos tenían al menos 3 personas y al menos 2 meses.
  2. La gente pega URL mal escritas a menudo, y los dos clientes las tratan distinto. Claude Code se quedó con 5 comentarios más que Codex, todos con URL como estas. Claude Code toma los 11 primeros caracteres y las acepta; Codex las analiza como URL estándar y las descarta. La tercera en realidad tiene dos caracteres de más, así que cortar en 11 puede apuntar al vídeo equivocado:
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 no devuelve título para todos los vídeos. 2 de los 193 conservados devolvieron 403 o 401, probablemente privados o con la inserción desactivada; ambos clientes los marcaron como no disponibles y mostraron solo el identificador. Para duración, visualizaciones y datos así hace falta una clave de YouTube Data API de Google Cloud, como hizo Karpathy.

De la versión reducida a HackerTube

Primero, que un modelo juzgue cada comentario. Es lo que más cambia el resultado. En la carpeta de la versión reducida, dile al agente:

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.

Juzgar miles de comentarios uno a uno lleva tiempo, así que deja que el agente los reparta en lotes paralelos. Lanzar demasiadas tareas de Codex a la vez puede provocar errores 429; para controlar la concurrencia, mira Cómo resolver Codex 429 Too Many Requests.

Segundo, usar más datos. Algolia sirve para traer datos por periodo; para cubrir de 2007 a hoy encaja mejor el archivo open-index/hacker-news que cita la página About de HackerTube. Lo más cómodo es descargar el zip de HackerTube, hacer que el agente lea primero DATA.md y luego cambiar la interfaz o el ranking a tu gusto.

Tercero, publicarlo. La versión reducida es una página estática que se abre en cualquier alojamiento estático. Según la publicación de Karpathy, le dio a Claude la IP del VPS y le pidió actualizar, asegurar, reforzar, desplegar y optimizar, y Claude lo hizo todo.

Preguntas frecuentes

Algolia devuelve menos resultados que nbHits

Cada consulta devuelve como mucho 1000 resultados; nbHits es solo el total. Reduce las ventanas de tiempo hasta que cada una tenga menos de 1000. A nosotros nos bastó con ventanas de un día, y los días con mucho movimiento se pueden volver a partir por la mitad.

Por qué buscar youtube no lo encuentra todo

Los enlaces cortos youtu.be no contienen youtube. Busca youtu y filtra en local con una expresión regular para watch?v=, youtu.be/, /embed/, /shorts/ y formas parecidas.

Los enlaces de los comentarios salen como &#x2F;

Algolia devuelve comment_text con escape HTML: / pasa a ser &#x2F; y & pasa a ser &amp;. Decodifica el HTML antes de extraer enlaces o la expresión regular no encontrará nada. El punto 2 de nuestro prompt lo dice expresamente.

Hacer lo mismo con artículos, libros o pódcasts

Cambia YouTube en el prompt por arxiv.org/abs/, amazon.com/dp/ o enlaces de pódcasts; el recuento y la página se mantienen. Para leer los artículos después, mira Buscar y leer artículos de arXiv con Claude Code.

Que el agente siga las mismas reglas cada vez

Escribe la fuente de datos, los umbrales y los requisitos de la página en el CLAUDE.md o el AGENTS.md del proyecto; mira Cómo escribir el CLAUDE.md de Claude Code.

Conclusión

HackerTube demuestra que los productos pequeños que «filtran contenido según el gusto de otros» ya los puede hacer una sola persona con un agente de código. En nuestra prueba, traer comentarios de Hacker News con Claude Code o Codex, extraer los enlaces de YouTube y generar un sitio de vídeos estático usable llevó unos 9 minutos. Lo que de verdad decide la calidad es la regla de qué cuenta como recomendación y que el periodo sea lo bastante largo.

Crear una API Key y empezar en Claude Code, Codex o Cursor →

相关文章

Cómo usar DeepSeek Harness Creator Mode: instalación, conexión de una API de terceros y primer plugin probado

Cómo usar DeepSeek Harness Creator Mode: instalación, conexión de una API de terceros y primer plugin probado

El 2 de noviembre la cuenta oficial de DeepSeek Harness presentó Creator Mode: describes una herramienta en una frase y el agente escribe el plugin, lo instala en Harness y comprueba que se cargó. Esta guía explica qué es Creator Mode, cómo arrancar Harness con npx, cómo conectar una API de terceros compatible con OpenAI (base URL + clave de aicodewith) para usar modelos Claude, GPT y DeepSeek, y construye un plugin todo_scan con Creator Mode, con salidas reales, errores comunes y los equivalentes en Claude Code / Codex.

¿Claude Code auto mode falla en cada turno detrás de un gateway? La 2.1.317 corrige los 403/422 (actualización y pruebas)

¿Claude Code auto mode falla en cada turno detrás de un gateway? La 2.1.317 corrige los 403/422 (actualización y pruebas)

Claude Code 2.1.317 (publicado el 3 de noviembre) corrige que el modo auto falle en cada turno cuando ANTHROPIC_BASE_URL apunta a un gateway LLM que responde 403 o 422 a la comprobación de seguridad del servidor. Esta guía explica qué cambia, a quién afecta, cómo actualizar y comprobar la versión, cómo configurar la Base URL y la clave y activar el modo auto, con pruebas comparadas de 2.1.316 y 2.1.317, una tabla de errores y FAQ.

Cómo usar Claude Message Threads: beta de hilos en la Messages API, enviar solo los mensajes nuevos y primer token ~35 % más rápido (prueba en Claude Code / API)

Cómo usar Claude Message Threads: beta de hilos en la Messages API, enviar solo los mensajes nuevos y primer token ~35 % más rápido (prueba en Claude Code / API)

El 2 de noviembre Anthropic abrió en beta pública los Message Threads (hilos de mensajes) de la Messages API. La primera petición envía la conversación completa y crea un hilo; después, cada turno envía solo los mensajes nuevos y el id de la respuesta anterior. En conversaciones largas el primer token llega antes, pero el uso de tokens y la facturación no cambian. Esta guía explica, según la documentación oficial, el parámetro thread, la cabecera beta, la caducidad de 5 minutos y el reenvío tras un 404, da ejemplos en curl, Python y TypeScript y cuenta nuestra prueba con una clave de aicodewith: a través de aicodewith el campo thread se ignora por ahora y el turno de continuación pierde el contexto, Claude Code no se ve afectado, con la alternativa y los errores frecuentes.