vox-pop
Opinión pública para LLMs — HackerNews, Reddit, 4chan, Stack Exchange, Telegram. Sin claves API.
Documentación
Tu LLM sabe lo que dicen los libros de texto.
Esto le dice lo que la gente realmente piensa.
9 plataformas • Enrutamiento semántico • Capa de inteligencia LLM • Funciona sin claves API
Instalar • Inicio rápido • Plataformas • Cómo funciona el enrutamiento • Servidor MCP • Plugin para Claude Code • Hoja de ruta
¿Por qué?
|
Sin vox-pop
|
Con vox-pop
|
Instalación
pip install vox-pop
Eso es todo. Las 9 plataformas funcionan sin claves API. Una clave LLM opcional desbloquea un enrutamiento más inteligente (consulta Cómo funciona el enrutamiento).
Inicio rápido
CLI — busca en las 9 plataformas con un solo comando:
vox-pop search "should I learn Rust or Go"
Modo perspectiva — observa cómo evolucionaron las opiniones con el tiempo:
vox-pop search "rust vs go" --perspective --platforms hackernews,reddit
## hackernews — Then vs Now
Historical (1+ year ago):
> "Rust vs. Go"
— hackernews | +481 points | 580 replies | 2017-01-18
Recent (last 6 months):
> "Rust vs. Go: Memory Management"
— hackernews | +2 points | 2025-11-15
## reddit — Then vs Now
Historical:
> "Experienced developer but total beginner in Rust..."
— reddit | +124 points | 34 replies | 2025-03-14
Recent:
> "I rebuilt the same API in Java, Go, Kotlin, and Rust — here are the numbers"
— reddit | +174 points | 59 replies | 2026-03-19
El cambio cuenta una historia: 2017 fue una guerra de insultos. 2026 es pragmatismo específico de dominio.
Búsqueda estándar — resultados planos de todas las plataformas:
vox-pop search "should I learn Rust or Go" --limit 3
### hackernews (45 found)
> "I am a full stack TypeScript dev looking to broaden my skill set..."
— hackernews | +78 points | 42 replies | by throwaway_dev
Source: https://news.ycombinator.com/item?id=41907717
### 4chan /g/ (12 found)
> "Rust is a mass psychosis. Go is boring but you'll actually ship..."
— 4chan /g/ | 129 replies | by Anonymous
### reddit (8 found)
> "After 2 years with both: Rust for systems, Go for services..."
— reddit | +234 points | 87 replies | by senior_dev_42
Python — intégralo en tus propias herramientas:
import asyncio
from vox_pop.core import search_multiple, format_context, get_default_providers
async def main():
results = await search_multiple(
"best laptop for programming",
providers=get_default_providers(),
)
print(format_context(results))
asyncio.run(main())
Plataformas
Sin tokens, sin OAuth, sin dolores de cabeza por límites de tasa. El estado se mide, no se aspira a él —
vox-pop platforms --check lo re-ejecuta contra endpoints en vivo.
Reddit y Lobsters están actualmente bloqueados. Ambos están detrás de intersticiales de prueba de trabajo de Anubis que sirven una página de desafío en lugar de contenido. Esto no es un problema de configuración y ningún cambio de cabecera lo resuelve. El soporte de Reddit se está moviendo a la API oficial de OAuth; Lobsters ahora reporta el bloqueo explícitamente en lugar de devolver un resultado vacío.
| Plataforma | Estado | Fuente | Filtro de tiempo | Hilos | |
|---|---|---|---|---|---|
| HackerNews | Funcionando | Algolia Search API | Sí | Sí | |
| Bloqueado | Pullpush + Arctic Shift + respaldo de Redlib | Sí | — | ||
| 4chan | Funcionando | API JSON oficial (desde 2012) | — | Sí | |
| Stack Exchange | Funcionando | API oficial — más de 180 comunidades | Sí | Sí | |
| Telegram | Solo reciente | Vista previa web de canales públicos (t.me/s/) | — | — | |
| Lobsters | Bloqueado | lobste.rs API JSON + scraping de búsqueda | Sí | — | |
| Lemmy | Funcionando | API REST pública — instancias federadas | Sí | Sí | |
| LessWrong | Funcionando | API GraphQL | Sí | Sí | |
| Foros XenForo | Inestable | Scraping HTML (Head-Fi, AnandTech, etc.) | — | — |
Cómo funciona el enrutamiento
Las consultas pueden ser cualquier cosa — una sola palabra, un párrafo, una pregunta de reglas de D&D del tamaño de un ensayo. vox-pop las entiende todas a través de un sistema de enrutamiento de cuatro niveles:
User query: "i was looking into a solid laptop for linux
something from hp, what would a savvy person pick"
│
┌───────────────────────────────▼──────────────────────────────┐
│ Tier 1: MCP Hints │
│ Calling LLM provides routing_hints directly │
│ (skips all other tiers) │
├──────────────────────────────────────────────────────────────┤
│ Tier 2: LLM Query Rewrite ← like Perplexity │
│ Cheap LLM call rewrites query to search-optimized form │
│ "hp laptop linux compatibility" + routes to communities │
│ Supports: Anthropic, OpenAI, Ollama (local/free) │
├──────────────────────────────────────────────────────────────┤
│ Tier 3: Semantic Embeddings ← free, no API key │
│ FastEmbed (33MB model) understands meaning, not keywords │
│ Dynamic catalog: 77 4chan boards + 180 SE sites + static │
│ "contradictory spell behaviour" → SE:rpg, r/DnD, /tg/ │
├──────────────────────────────────────────────────────────────┤
│ Tier 4: Broad Defaults │
│ Search popular destinations everywhere │
└──────────────────────────────────────────────────────────────┘
│
▼
Routes to: r/buildapc, r/linux, r/hardware │ /g/
SE:hardwarerecs, SE:askubuntu │ lemmy:linux@lemmy.ml
Nivel 2 funciona como Perplexity/ChatGPT Search — el LLM reescribe tu consulta conversacional en una cadena de búsqueda limpia y elige las comunidades adecuadas. Configura cualquiera de estas variables de entorno para habilitarlo:
ANTHROPIC_API_KEY=... # Uses Claude Haiku (~$0.0003/query)
OPENAI_API_KEY=... # Uses GPT-4o Mini
OLLAMA_HOST=... # Uses local Ollama (free)
Nivel 3 se ejecuta completamente en local sin claves API. Un modelo de embeddings de 33MB entiende que "comportamiento de hechizos contradictorio en una criatura" significa reglas de RPG de mesa — sin necesidad de palabras clave compartidas. En la primera ejecución, obtiene todos los tableros de 4chan y sitios de Stack Exchange dinámicamente, los embebe todo y lo guarda en caché en disco.
| Inicio en frío | Inicio en caliente | Singleton | |
|---|---|---|---|
| Tiempo del Nivel 3 | ~7s | ~1.3s | instantáneo |
No se necesita configuración. Si hay una clave LLM configurada, se usa el Nivel 2. De lo contrario, el Nivel 3 lo maneja. Si fastembed no está instalado, el Nivel 4 (búsqueda amplia) aún funciona.
Ejemplos de enrutamiento
| Consulta | Se enruta a |
|---|---|
| "mejor laptop hp para linux" | r/buildapc, r/linux, r/hardware, /g/, SE:hardwarerecs, SE:askubuntu |
| "efectos de hechizos contradictorios en una criatura" | r/dndnext, r/DnD, /tg/, SE:rpg |
| "mejor teclado mecánico para programar" | r/MechanicalKeyboards, /g/, SE:hardwarerecs |
| "cuáles son los riesgos del yield farming" | r/CryptoCurrency, SE:tezos, telegram:ethereum |
| "cómo hacer kimchi jjigae auténtico" | r/Cooking, /ck/ |
Servidor MCP
Funciona con Claude Code, Cursor, Windsurf y cualquier cliente compatible con MCP.
{
"mcpServers": {
"vox-pop": {
"command": "python",
"args": ["-m", "vox_pop.server"]
}
}
}
Tu LLM obtiene cuatro herramientas:
| Herramienta | Qué hace |
|---|---|
search_opinions | Busca opiniones sobre un tema en todas las plataformas |
search_opinions_perspective | Entonces vs Ahora — opiniones históricas y recientes lado a lado |
get_thread_opinions | Profundiza en los comentarios de un hilo específico |
list_available_platforms | Comprueba qué está disponible y saludable |
El parámetro routing_hints permite que el LLM que llama especifique exactamente dónde buscar:
routing_hints: "reddit:MechanicalKeyboards,4chan:g,stackexchange:hardwarerecs"
Cuando no se proporcionan pistas, el sistema de enrutamiento lo maneja automáticamente.
Plugin para Claude Code
claude plugin add /path/to/vox-pop
La habilidad se auto-activa cuando tu pregunta se beneficiaría de opiniones reales. Solo pregunta de forma natural:
> "What do people think about living in Berlin?" → activates
> "Should I use Next.js or Remix?" → activates
> "Best gym routine for beginners?" → activates
> "What's the capital of France?" → does not activate
Búsqueda manual: /vox-search "your query"
Arquitectura
┌──────────────────────────────────────────────────────────┐
│ Layer 3: Claude Code / MCP Client │
│ Auto-triggering skill + /vox-search │
├──────────────────────────────────────────────────────────┤
│ Layer 2: MCP Server │
│ search_opinions · perspectives · threads · list │
├──────────────────────────────────────────────────────────┤
│ Layer 1: Python Library │
│ ┌────────────────────────────────────────────────────┐ │
│ │ Smart Router (4-tier) │ │
│ │ MCP hints → LLM rewrite → FastEmbed → broad │ │
│ └────────────────────────────────────────────────────┘ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ 9 Providers with fallback chains │ │
│ │ HN · Reddit · 4chan · SE · Telegram │ │
│ │ Lobsters · Lemmy · LessWrong · XenForo Forums │ │
│ └────────────────────────────────────────────────────┘ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ Dynamic Catalog │ │
│ │ 77 4chan boards + 180 SE sites fetched from APIs │ │
│ │ + 120 static destinations · cached to disk │ │
│ └────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────┘
Cada proveedor implementa respaldo automático — si una fuente está caída, se prueba la siguiente. Reddit solo tiene tres fuentes de respaldo (Pullpush → Arctic Shift → Redlib).
Hoja de ruta
| Versión | Estado | Qué |
|---|---|---|
| v0.1 | Enviado | 5 proveedores (HN, Reddit, 4chan, SE, Telegram), servidor MCP, plugin para Claude Code |
| v0.2 | Actual | 9 proveedores, enrutamiento inteligente de 4 niveles, reescritura de consultas con LLM, enrutamiento semántico con FastEmbed, catálogo dinámico |
| v0.3 | En progreso | Reddit mediante API oficial de OAuth — reemplaza la ruta bloqueada de Redlib |
| v0.4 | No iniciado | Regional — DC Inside (Corea), Naver, 5ch (Japón) |
Contribuciones
New provider? → Subclass Provider in src/vox_pop/providers/base.py
New routing destination → Add to DESTINATIONS in router.py (one line)
Dynamic catalog source → Add a _fetch_*_destinations() function in router.py
Better LLM prompt? → Improve _LLM_SYSTEM in router.py
Multilingual support? → Swap FastEmbed model to bge-m3 in SemanticRouter
Dead instance? → Open an issue with the instance URL
Regional platform? → DC Inside, Naver, 5ch, VK, Bilibili — all welcome
Seguridad
| Acceso a datos | Solo datos públicos — APIs oficiales y endpoints web públicos. Sin scraping detrás de muros de inicio de sesión. |
| Credenciales | Cero almacenadas. Claves LLM opcionales pasadas mediante variables de entorno en tiempo de ejecución, nunca escritas en disco. |
| Enrutamiento LLM | Cuando ANTHROPIC_API_KEY o OPENAI_API_KEY está configurado, el texto de tu consulta (hasta 4000 caracteres) se envía a la API LLM respectiva solo para enrutamiento. No se envían consultas externamente sin una clave API explícita. Sin claves, el enrutamiento se ejecuta completamente en local mediante FastEmbed. |
| Límites de tasa | Respetados por plataforma. Protecciones de concurrencia integradas. |
| User-Agent | Transparente: vox-pop/0.2 en todas las solicitudes. |
| Caché | Respuestas de API (7 días) y embeddings almacenados en caché localmente en ~/.cache/vox-pop/. No se envían datos a terceros. Los embeddings se almacenan como JSON, sin dependencias de serialización. |
| PII | Nombres de autores de publicaciones públicas incluidos solo para atribución. Nunca almacenados más allá de la respuesta. |
vox populi, vox dei
la voz del pueblo es la voz de dios
Licencia MIT