↩ Comparativo · Benchmark — avaliações

HARNESS_EVAL — opencode

Metadados

  • Repositório / versão avaliada: github.com/anomalyco/opencode · v1.18.4 (V2 em transição, documentada em CONTEXT.md)
  • Linguagem / stack: TypeScript + Effect-TS, runtime Bun, monorepo ~34 pacotes
  • Licença: MIT
  • Data da avaliação: 2026-07-24 (rodada 1, exploratória)
  • Posicionamento declarado: produto — agente de código open source, provider-agnostic
  • Arquétipo observado: produto cliente-servidor multi-superfície, com o desenho de contexto/estado mais formal da coorte

Dimensões

1. Loop do agente — Nota: 3

Loop em packages/opencode/src/session/processor.ts: resposta do LLM consumida como Stream do Effect (Stream.tap(handleEvent)Stream.takeUntil(needsCompaction)Stream.runDrain), veredito explícito continue | stop | compact, retry por provedor (SessionRetry.policy), limite de passos. V2 formaliza durabilidade: inbox de prompts, eventos replayáveis com cursores.

2. Entrega de contexto — Nota: 3

session/system.ts monta environment + skills + instruções MCP. ~10 prompts por família de modelo (session/prompt/*.txt: anthropic, gpt, gemini, kimi...). AGENTS.md globais/ascendentes agregados por session/instruction.ts. V2: contexto como álgebra de "Context Sources" tipadas com snapshots e Context Epochs (cache-awareness formal) — único da coorte.

3. Compactação — Nota: 3

session/compaction.ts + overflow.ts: (a) sumarização automática em overflow com agente dedicado compaction e tail preservado (2k–8k tokens); (b) prune de tool outputs além de 40k tokens (PRUNE_PROTECT); (c) truncamento na origem com conteúdo integral movido para "Managed Tool Output Files" (nada se perde).

4. Design de ferramentas — Nota: 2

~14 tools + 3 experimentais (tool/), definidas com Effect Schema, descrições em .txt separados. Seleção por modelo (GPT recebe apply_patch em vez de edit/writeregistry.ts:293). Ripgrep embutido. Arsenal enxuto e bem construído; menos categorias que os pares.

5. MCP — Nota: 3

mcp/ (~1.000 linhas): stdio + Streamable HTTP + SSE com fallback, OAuth completo (PKCE, callback server, opencode mcp auth), reconexão, ToolListChanged, roots, prompts, resources e templates. Instruções do servidor entram no system prompt. A superfície de protocolo mais completa da coorte.

6. Permissões e sandboxing — Nota: 2

Rulesets com wildcards (permission/): allow | ask | deny last-match-wins, default ask, aprovação via Deferred + evento para a UI. Agentes com rulesets próprios; subagentes derivam permissões restritas (agent/subagent-permissions.ts). Porém sem sandbox de SO no core (containers só nos pacotes enterprise) — política sem contenção.

7. Memória e estado — Nota: 3

SQLite via Drizzle (core/database, core/session/sql.ts): sessões/mensagens/partes tipadas, hierarquia parentID, revert (session/revert.ts), compartilhamento (share/). V2: eventos duráveis replayáveis (sessions.events), snapshots entre reinícios. Sem memória de longo prazo dedicada (regras ficam em AGENTS.md).

8. Planejamento — Nota: 2

Plan mode como agente plan read-only; plan_exit (tool/plan.ts) escreve o plano em arquivo e transiciona para o agente build com aprovação do usuário. todowrite por sessão. Sem decomposição com dependências.

9. Subagentes / orquestração — Nota: 2

Tool task → sessão-filha com permissões derivadas, profundidade máxima 1, agentes definíveis em markdown (primary|subagent|all). Background experimental com retomada por task_id. Contido por design; sem comunicação inter-agente nem delegação remota.

10. Verificação / evals — Nota: 2

LSP em runtime (lsp/): edições disparam diagnósticos realimentados ao modelo — verificação do trabalho durante a tarefa, único da coorte. Política anti-mock explícita nos testes, http-recorder para provedores, typecheck obrigatório. Sem evals comportamentais nem baselines de regressão.

11. Extensibilidade — Nota: 3

Plugins = funções → Hooks com ~15 pontos, incluindo raros (transform de mensagens/system prompt, interceptar permissões, customizar compactação, auth providers custom). Tools do usuário auto-carregadas. ~26 loaders de provedor + centenas de modelos via models.dev — o mais agnóstico de modelo em produção.

12. Interfaces — Nota: 3

Sete superfícies sobre a API HTTP tipada: TUI (SolidJS), desktop Electron, VS Code, GitHub Action, Slack, web/console, ACP (Zed). Sessões compartilháveis por link.

13. Aprendizado / auto-melhoria (suplementar; retro 2026-07-24) — Nota: 0

Ausente: o sistema de skills é puramente consumo/distribuição (skill/index.ts, discovery.ts:pull); nenhum código escreve SKILL.md; sem tool de memória (só TodoWrite, efêmero). O /init gera AGENTS.md a pedido do usuário, a partir do código — não da experiência.

Síntese

# Dimensão Nota
1 Loop do agente 3
2 Entrega de contexto 3
3 Compactação 3
4 Ferramentas 2
5 MCP 3
6 Permissões/sandbox 2
7 Memória/estado 3
8 Planejamento 2
9 Subagentes 2
10 Verificação/evals 2
11 Extensibilidade 3
12 Interfaces 3
Total 31/36
  • Perfil/arquétipo: produto multi-superfície com fundação formal — o harness que trata contexto e estado como problemas de sistemas distribuídos.
  • Pontos mais fortes: álgebra de contexto com Context Epochs (CONTEXT.md); agnosticismo de provedor (~26 loaders); estado durável com eventos replayáveis.
  • Pontos mais fracos: ausência de sandbox de SO no core; sem evals comportamentais.
  • Recurso distintivo: Context Epochs — cache-awareness como conceito de primeira classe da arquitetura.
  • "O que roubar": prompts por família de modelo; hooks profundos (transform de mensagens); truncamento que move conteúdo para arquivos em vez de descartar.
  • Cláusula de expiração: prompts por família (expira com convergência de instruction-following); compactação em três camadas (expira com contexto longo barato).