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:
| Paso | Qué hace HackerTube |
|---|---|
| 1. Leer todos los comentarios | Recorrer 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 repite | Al 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 comentario | Claude 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ídeo | Con los datos de YouTube y todo lo que dijo HN: resumen, por qué gusta en HN, tipo y si ha envejecido bien |
| 5. Ordenar | Por 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:
| Paso | Cómo | Resultado |
|---|---|---|
| 1. Traer comentarios | Algolia search_by_date, tags=comment, dividido en ventanas de tiempo | data/comments.jsonl |
| 2. Extraer enlaces | Sacar los identificadores de vídeo de 11 caracteres del texto, cubriendo watch?v=, youtu.be/, /shorts/ y otras formas | Vídeos por comentario |
| 3. Quitar duplicados y contar | Menciones, personas distintas y meses distintos por vídeo | Ranking |
| 4. Añadir títulos | oEmbed de YouTube, sin clave | data/videos.json |
| 5. Generar la página | Un HTML estático con una cuadrícula de tarjetas y un buscador en el navegador | site/index.html |
Paso 1: crear una API Key y conectar Claude Code o Codex
- Regístrate en aicodewith.ai, inicia sesión, abre la gestión de claves, crea una clave y copia la cadena completa.
- Claude Code: define la dirección y la clave, crea una carpeta vacía y arráncalo dentro:
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.
- Codex: pon lo siguiente en
~/.codex/config.toml, con la clave escrita directamente enexperimental_bearer_token:
# ~/.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):
# 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.comcoincide con más de 4.000 comentarios y el resto se pierde, así que hay que dividir el periodo en ventanas pequeñas. - Buscar
youtubese deja los enlaces cortos.youtu.be/xxxxno contiene la palabrayoutube. Busca el prefijoyoutuy 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:
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:
# 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.5 | Codex 0.166.0 + GPT-6.1 Sol | |
|---|---|---|
| Tiempo | Unos 555 segundos, 21 turnos | Unos 534 segundos, 30 comandos ejecutados |
| Cómo trajo los datos | Ventanas de un día buscando youtu, partiendo por la mitad las que pasaban de 1000; 61 peticiones | 61 ventanas de un día buscando youtu, comprobando que ninguna llegaba a 1000 |
| Comentarios con enlace de YouTube | 3.624 | 3.619 |
| Vídeos distintos | 3.511 | 3.505 |
| Conservados (2 personas o más) | 193 | 193 |
| Sin título | 2 (oEmbed devolvió 403 y 401) | Igual |
| Comprobaciones propias | Comparó con un recorrido completo de un día: ambos encontraron los mismos 87 comentarios con enlace | Escribió 5 pruebas y abrió la página en Chrome headless para revisar tarjetas y buscador |
| Resultado | build.py de 418 líneas, index.html de unos 258 KB | build.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:
| Puesto | Vídeo | Personas | Menciones | Meses | Máx. en un hilo |
|---|---|---|---|---|---|
| 1 | 216,000,000 Spy TVs – The LG Smart TV Problem | 15 | 18 | 2 | 7 |
| 2 | Kernel Recipes 2026 - Security in the LLM age | 12 | 21 | 1 | 2 |
| 3 | The FLYING Tesla Roadster explained by the man who engineered it | 11 | 12 | 1 | 12 |
| 4 | LG Says We're Fake News | 6 | 7 | 1 | 6 |
| 5 | Reinventing Entropy – Compression is Intelligence Part 1 | 6 | 6 | 2 | 3 |
Cada vídeo de data/videos.json tiene esta forma, con citas que enlazan al comentario original de HN:
{
"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):
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
- 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.
- 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:
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
- 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:
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 /
Algolia devuelve comment_text con escape HTML: / pasa a ser / y & pasa a ser &. 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 →



