4

Lançado harness-score v1.0: scanner de harness para IA agora multi-ferramenta

Lançado harness-score v1.0: um scan, qualquer ferramenta agentica

Desde o primeiro release, a pergunta que mais apareceu - issues, DMs, outros fóruns - foi variante de: "legal, mas vai estender para Claude Code, OpenCode, Windsurf…?"

A resposta honesta até então era parcialmente. O harness-score já media o que é universal — testes, CI, AGENTS.md, higiene - mas grande parte de regras, skills, hooks e subagents passava pela lente do Cursor. Quem trabalhava só com Claude Code ou Windsurf tinha harness de verdade no repositório e o scan não refletia.

Isso ficou para trás.

A v1.0 fecha essa limitação. A novidade central: um scan, qualquer ferramenta agentica.

O que a 1.0 entrega

O scanner reconhece artefatos equivalentes entre ferramentas, com semântica OR - basta uma delas provê o check. Não precisa existir pasta .cursor/ para pontuar.

Cursor, Claude Code, Windsurf, Cline, Continue, Codex, Copilot, OpenCode e equivalentes entram no mesmo relatório. O output mostra quais foram detectadas:

  harness-score v1.0.0  ~/meu-app

  Maturity: L2 · Guided   Score: 70/108 (65%)
  Detected: Cursor, Claude Code

  Context & Guides     ████████████████░░░░  80%
  Skills & Commands    █████████████░░░░░░░  65%
  Hooks & Guardrails   ░░░░░░░░░░░░░░░░░░░░   0%
  Sensors & Feedback   ████████████████░░░░  80%
  CI Feedback          ██████████████░░░░░░  71%
  Hygiene & Safety     ███████████████░░░░░  74%

  To reach L3: sensors ≥ 60%; ci ≥ 50%

Exemplos do que conta (qualquer um basta):

  • Regras: .cursor/rules/*.mdc, .windsurf/rules/*.md, .clinerules/*.md, CLAUDE.md aninhado
  • Hooks: .cursor/hooks.json ou .claude/settings.json com hooks
  • Skills: .cursor/skills/*/SKILL.md ou .claude/skills/*/SKILL.md
  • Contexto: AGENTS.md, CLAUDE.md, GEMINI.md
  • Copilot: .github/instructions/*.instructions.md

Testes, CI, linter, types, .gitignore, lockfile - universais, valem para qualquer stack.

Adicionar uma segunda ferramenta não reduz a pontuação.

A bump para 1.0 formaliza API estável sob semver (check IDs, JSON do --json, flags, exit codes). Quem já usava a v0.6.0 vê a mesma pontuação - major marca contrato, não ruptura.

Como rodar

npx harness-score
harness-score --json
harness-score --md harness-report.md
harness-score --min-level 3

36 checks determinísticos · 108 pontos · L0–L4 · sem LLM no scanner. Cada falha aponta para como corrigir no guia.

Publicado em npm, GitHub Packages e JSR. GitHub Action, badges SVG, capítulo de multi-harness — tudo no ar.

O que vem depois

~1.5.0 — suporte e navegação do guia em outros idiomas; melhorias nas medições de harness; plugins para mais IDEs/agentes.

~2.0 — recalibração do modelo de maturidade após análise de 100+ repositórios open source (pesos, limiares, checks revisados com evidência; achados publicados).

Product Hunt — publicação planejada em breve.

Sem datas fechadas — prefiro shippar com rigor do que prometer calendário.

Se você usa Claude Code, Windsurf ou Copilot sem .cursor/ — testa e comenta o nível que saiu. Curioso se a linha Detected: bate com a realidade do repo.

Issues e PRs bem-vindos.

Carregando publicação patrocinada...
1

Cara muito legal a ideia, estou avaliando a possibilidade de incluir ele em um CI num repo central de Harness para os projetos da empresa que estou trabalhando, acho que será bem legal ter ele como métrica pra trazer essa visão. Obrigado por compartilhar.

1

Que bom que vai servir. E por favor, @henriquetavares, sinta-se à vontade pra compartilhar seus achados. É um projeto comunitário, a ideia é todos irem contribuindo com seus conhecimentos em harness de IA para ir criando um padrão que faça sentido pra todos.

1
1

Achei interessante a escolha de manter o scanner determinístico e sem LLM. Para esse tipo de ferramenta, isso provavelmente ajuda bastante na confiança do resultado e na possibilidade de rodar em CI.

Uma dúvida que fiquei: como você pretende lidar com pesos diferentes entre projetos pequenos e monorepos maiores?

Por exemplo, em um repo pequeno, a ausência de hooks pode ser um sinal fraco. Já em um monorepo com vários agentes ou times, talvez a mesma ausência indique um risco bem maior.

Talvez além da pontuação absoluta, uma visão de evolução ao longo do tempo também ajude: o repo está ficando mais guiado, mais observável e mais seguro a cada mudança, mesmo que ainda não chegue no nível ideal.

1