Visão geral
O que o OpencodeView é, o que ele deliberadamente não é, e como se relaciona com o OpenCode.
O OpencodeView é um companheiro local e somente leitura do OpenCode. Ele não implementa agentes, não escreve no banco do OpenCode e não hospeda analytics multi-tenant. Ele lê o histórico de sessões que já está no seu disco, deriva agregados para um cache próprio e serve um dashboard preso ao loopback.
Fonte canônica ↗Onde ele se encaixa
O OpencodeView fica a jusante de dois projetos que não são dele. Um é obrigatório, o outro é opcional, e ele não tem vínculo com nenhum dos dois.
OpenCode
ObrigatórioO OpenCode é dono do runtime dos agentes e do banco em disco que o OpencodeView lê. A evolução do schema pertence a eles, então o adaptador SQLite daqui é best-effort e pode ficar atrás de migrações upstream. Quando o dado de origem parece errado, é lá que se investiga — as sinalizações deste lado são heurísticas locais do operador, não afirmações sobre o OpenCode.
oh-my-openagent
OpcionalUm harness de agentes para o OpenCode, também chamado de omo. Quando o log de atividade dele está legível, o servidor sobrepõe telemetria de polling por sessão na lente Ao vivo: o estado de saúde suspeita e eventos terminais como poll_timeout, max_turns, aborted_by_user e terminal_error. A sinalização omo_metadata_bug também nasce aí. Todo o resto funciona sem ele.
Ambos são projetos de terceiros. O OpencodeView não tem vínculo, endosso ou manutenção compartilhada com nenhum dos dois.
Cinco invariantes, garantidas em código
Não é página de política. São afirmações que o processo faz no startup e em cada requisição.
Local-first
O bind padrão é loopback. A aplicação não abre socket de saída e não envia telemetria. Seu histórico de sessões nunca sai da máquina que o produziu.
OPENCODEVIEW_HOST=127.0.0.1Fonte somente leitura
O banco do OpenCode é aberto em modo somente leitura no nível do engine e fixado com o pragma query_only. O OpencodeView é estruturalmente incapaz de escrever nele.
readonly: true · PRAGMA query_only = 1Cache separado
Toda métrica derivada vai para um arquivo SQLite próprio. O caminho do cache é verificado para nunca ser o mesmo arquivo, symlink ou hardlink da fonte.
.cache/analytics.sqliteRedigir antes de sair
Payloads de transcrição e ao vivo passam por redação server-side antes de o JSON deixar o processo: chaves com cara de segredo, tokens bearer, prefixos de provedores, userinfo de URL e caminhos absolutos do home.
sk-… ghp-… → [REDACTED]Falha fechada
Fazer bind fora do loopback sem token de autenticação não gera aviso — o servidor se recusa a iniciar. Exposição é sempre decisão deliberada do operador.
sem token + bind público → exit
Não-objetivos
Coisas que este projeto decidiu não ser.
- Substituir o OpenCode ou entregar uma UI oficial do OpenCode
- Alegar vínculo com ou endosso do time do OpenCode
- Analytics hospedado em nuvem ou multi-tenant
- Distribuição em npm/registries ou instalador — só execução via código-fonte
- Um contrato de integração estável e versionado contra o opencode.db antes do 1.0.0
Limitações conhecidas
Documentadas de cara, porque você vai esbarrar nelas.
- opencode.db é detalhe interno de implementação do OpenCode — o adaptador é best-effort e pode ficar atrás de mudanças de schema upstream
- cost só é comparável dentro do mesmo regime de cobrança; alguns modos de autenticação reportam zero
- Sessões de 2026-06 e 2026-07 têm cobertura incompleta de summary_additions e recebem a sinalização data_quality_gap
- Sessões que usaram as ferramentas legadas edit/write em vez de apply_patch não populam os contadores de apply_patch
- Espere mudanças incompatíveis no schema do cache, na API e na CLI antes do 1.0.0