vox-pop

Opinião pública para LLMs — HackerNews, Reddit, 4chan, Stack Exchange, Telegram. Zero chaves de API.

Documentação


VOX-POP

Seu LLM sabe o que os livros dizem.
Isto diz a ele o que as pessoas realmente pensam.

9 plataformas • Roteamento semântico • Camada de inteligência LLM • Funciona sem chaves de API

License: MIT Python 3.10+ MCP Compatible No Keys Required

Instalar • Início Rápido • Plataformas • Como o Roteamento Funciona • Servidor MCP • Plugin Claude Code • Roteiro



Por quê?

Sem 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)

Com 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.

Instalação

pip install vox-pop

É isso. Todas as 9 plataformas funcionam sem chaves de API. Uma chave LLM opcional desbloqueia roteamento mais inteligente (veja Como o Roteamento Funciona).


Início Rápido

CLI — pesquise em todas as 9 plataformas em um único comando:

vox-pop search "should I learn Rust or Go"

Modo perspectiva — veja como as opiniões evoluíram ao longo do tempo:

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

A mudança conta uma história: 2017 foi uma guerra de comentários. 2026 é pragmatismo específico de domínio.


Pesquisa padrão — resultados planos de todas as 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 — incorpore em suas próprias ferramentas:

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

Sem tokens, sem OAuth, sem dores de cabeça com limites de taxa. O status é medido, não aspiracional — vox-pop platforms --check reexecuta isso contra endpoints ao vivo.

Reddit e Lobsters estão atualmente bloqueados. Ambos estão atrás de intersticiais de prova-de-trabalho Anubis que servem uma página de desafio em vez de conteúdo. Isso não é um problema de configuração e nenhuma mudança de cabeçalho o resolve. O suporte ao Reddit está sendo migrado para a API OAuth oficial; Lobsters agora relata o bloqueio explicitamente em vez de retornar um resultado vazio.

PlataformaStatusFonteFiltro de TempoTópicos
HNHackerNewsFuncionandoAlgolia Search APISimSim
RedditRedditBloqueadoPullpush + Arctic Shift + fallback RedlibSim—
4chan4chanFuncionandoAPI JSON oficial (desde 2012)—Sim
SEStack ExchangeFuncionandoAPI oficial — mais de 180 comunidadesSimSim
TGTelegramSomente recentesPré-visualização web de canais públicos (t.me/s/)——
LobstersLobstersBloqueadolobste.rs API JSON + raspagem de buscaSim—
LemmyLemmyFuncionandoAPI REST pública — instâncias federadasSimSim
LWLessWrongFuncionandoAPI GraphQLSimSim
ForumsFóruns XenForoInstávelRaspagem de HTML (Head-Fi, AnandTech, etc.)——

Como o Roteamento Funciona

As consultas podem ser qualquer coisa — uma única palavra, um parágrafo, uma pergunta de regras de D&D do tamanho de um ensaio. vox-pop entende todas elas através de um sistema de roteamento em quatro níveis:

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

Nível 2 funciona como Perplexity/ChatGPT Search — o LLM reescreve sua consulta conversacional em uma string de busca limpa e escolhe as comunidades certas. Defina qualquer uma dessas variáveis de ambiente para ativar:

ANTHROPIC_API_KEY=...   # Uses Claude Haiku (~$0.0003/query)
OPENAI_API_KEY=...      # Uses GPT-4o Mini
OLLAMA_HOST=...         # Uses local Ollama (free)

Nível 3 roda inteiramente localmente com zero chaves de API. Um modelo de embeddings de 33MB entende que "comportamento contraditório de feitiços em uma criatura" significa regras de RPG de mesa — zero palavras-chave compartilhadas necessárias. Na primeira execução, ele busca todos os boards do 4chan e sites do Stack Exchange dinamicamente, incorpora tudo e armazena em cache no disco.

Início frioInício quenteSingleton
Tempo do Nível 3~7s~1.3sinstantâneo

Nenhuma configuração necessária. Se uma chave LLM estiver definida, o Nível 2 é usado. Caso contrário, o Nível 3 cuida disso. Se o fastembed não estiver instalado, o Nível 4 (busca ampla) ainda funciona.

Exemplos de roteamento
ConsultaRoteia para
"melhor notebook hp para linux"r/buildapc, r/linux, r/hardware, /g/, SE:hardwarerecs, SE:askubuntu
"efeitos contraditórios de feitiços em uma criatura"r/dndnext, r/DnD, /tg/, SE:rpg
"melhor teclado mecânico para programação"r/MechanicalKeyboards, /g/, SE:hardwarerecs
"quais são os riscos de yield farming"r/CryptoCurrency, SE:tezos, telegram:ethereum
"como fazer kimchi jjigae autêntico"r/Cooking, /ck/

Servidor MCP

Funciona com Claude Code, Cursor, Windsurf e qualquer cliente compatível com MCP.

{
  "mcpServers": {
    "vox-pop": {
      "command": "python",
      "args": ["-m", "vox_pop.server"]
    }
  }
}

Seu LLM recebe quatro ferramentas:

FerramentaO que faz
search_opinionsPesquisa em todas as plataformas por opiniões sobre um tópico
search_opinions_perspectiveEntão vs Agora — opiniões históricas + recentes lado a lado
get_thread_opinionsMergulha nos comentários de um tópico específico
list_available_platformsVerifica o que está disponível e saudável

O parâmetro routing_hints permite que o LLM chamador especifique exatamente onde pesquisar:

routing_hints: "reddit:MechanicalKeyboards,4chan:g,stackexchange:hardwarerecs"

Quando nenhuma dica é fornecida, o sistema de roteamento cuida disso automaticamente.


Plugin Claude Code

claude plugin add /path/to/vox-pop

A habilidade dispara automaticamente quando sua pergunta se beneficiaria de opiniões reais. Basta perguntar naturalmente:

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

Pesquisa manual: /vox-search "your query"


Arquitetura

┌──────────────────────────────────────────────────────────┐
│  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 provedor implementa fallback automático — se uma fonte estiver fora do ar, a próxima é tentada. Só o Reddit tem três fontes de fallback (Pullpush → Arctic Shift → Redlib).


Roteiro

VersãoStatusO quê
v0.1Lançado5 provedores (HN, Reddit, 4chan, SE, Telegram), servidor MCP, plugin Claude Code
v0.2Atual9 provedores, roteamento inteligente em 4 níveis, reescrita de consultas via LLM, roteamento semântico FastEmbed, catálogo dinâmico
v0.3Em andamentoReddit via API OAuth oficial — substitui o caminho bloqueado do Redlib
v0.4Não iniciadoRegional — DC Inside (Coreia), Naver, 5ch (Japão)

Contribuindo

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

Segurança

Acesso a dadosSomente dados públicos — APIs oficiais e endpoints web públicos. Sem raspagem atrás de login.
CredenciaisZero armazenadas. Chaves LLM opcionais passadas via variáveis de ambiente em tempo de execução, nunca gravadas em disco.
Roteamento LLMQuando ANTHROPIC_API_KEY ou OPENAI_API_KEY está definido, o texto da sua consulta (até 4000 caracteres) é enviado à respectiva API LLM apenas para roteamento. Nenhuma consulta é enviada externamente sem uma chave de API explícita. Sem chaves, o roteamento roda inteiramente localmente via FastEmbed.
Limites de taxaRespeitados por plataforma. Guardas de concorrência integradas.
User-AgentTransparente: vox-pop/0.2 em todas as requisições.
CacheRespostas de API (7 dias) e embeddings armazenados em cache localmente em ~/.cache/vox-pop/. Nenhum dado enviado a terceiros. Embeddings armazenados como JSON, sem dependências de serialização.
PIINomes de autores de postagens públicas incluídos apenas para atribuição. Nunca armazenados além da resposta.


vox populi, vox dei
a voz do povo é a voz de deus


Licença MIT