vox-pop

Opinión pública para LLMs — HackerNews, Reddit, 4chan, Stack Exchange, Telegram. Sin claves API.

Documentación


VOX-POP

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

License: MIT Python 3.10+ MCP Compatible No Keys Required

Instalar • Inicio rápido • Plataformas • Cómo funciona el enrutamiento • Servidor MCP • Plugin para Claude Code • Hoja de ruta



¿Por qué?

Sin vox-pop

> How do I debloat my face?

Lymphatic drainage, reduce sodium,
cold compress, drink water,
sleep elevated...

(correct but soulless — same answer
 as every health blog since 2015)

Con vox-pop

★ Searched: Reddit, 4chan /fit/, SE Fitness

Consensus (70%+ of threads):
 → Reduce sodium + 3L water/day
 → Sleep elevated on back

Controversial:
 → Gua sha: loved on Reddit,
   mocked on /fit/ as placebo

What actually worked:
 → "Cut dairy for 2 weeks — face
    visibly deflated" (847↑ r/SCA)
 → "Minox bloat is real, went away
    month 3" (/fit/, recurring)

⚠ Some suggestions are unvetted.

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.

PlataformaEstadoFuenteFiltro de tiempoHilos
HNHackerNewsFuncionandoAlgolia Search APISíSí
RedditRedditBloqueadoPullpush + Arctic Shift + respaldo de RedlibSí—
4chan4chanFuncionandoAPI JSON oficial (desde 2012)—Sí
SEStack ExchangeFuncionandoAPI oficial — más de 180 comunidadesSíSí
TGTelegramSolo recienteVista previa web de canales públicos (t.me/s/)——
LobstersLobstersBloqueadolobste.rs API JSON + scraping de búsquedaSí—
LemmyLemmyFuncionandoAPI REST pública — instancias federadasSíSí
LWLessWrongFuncionandoAPI GraphQLSíSí
ForumsForos XenForoInestableScraping 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íoInicio en calienteSingleton
Tiempo del Nivel 3~7s~1.3sinstantá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
ConsultaSe 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:

HerramientaQué hace
search_opinionsBusca opiniones sobre un tema en todas las plataformas
search_opinions_perspectiveEntonces vs Ahora — opiniones históricas y recientes lado a lado
get_thread_opinionsProfundiza en los comentarios de un hilo específico
list_available_platformsComprueba 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ónEstadoQué
v0.1Enviado5 proveedores (HN, Reddit, 4chan, SE, Telegram), servidor MCP, plugin para Claude Code
v0.2Actual9 proveedores, enrutamiento inteligente de 4 niveles, reescritura de consultas con LLM, enrutamiento semántico con FastEmbed, catálogo dinámico
v0.3En progresoReddit mediante API oficial de OAuth — reemplaza la ruta bloqueada de Redlib
v0.4No iniciadoRegional — 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 datosSolo datos públicos — APIs oficiales y endpoints web públicos. Sin scraping detrás de muros de inicio de sesión.
CredencialesCero almacenadas. Claves LLM opcionales pasadas mediante variables de entorno en tiempo de ejecución, nunca escritas en disco.
Enrutamiento LLMCuando 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 tasaRespetados por plataforma. Protecciones de concurrencia integradas.
User-AgentTransparente: 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.
PIINombres 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