4

Pitch: Harness Score 1.5: medindo a maturidade do harness de agentes de código (sem LLM no scan)

Dois times. Mesmo modelo. Mesmo prompt.

Resultados completamente diferentes.

Na prática, a diferença quase nunca é só o modelo. É o que existe ao redor dele no repositório.

Um repo entrega instruções de verdade, rules com escopo, testes, linter, CI e hooks que barram comando perigoso. O outro entrega um README e torce.

Esse conjunto — guides, sensors, guardrails — é o que a galera de harness engineering chama de harness.

Eu construí o Harness Score pra medir isso de forma objetiva.

É um scanner open source, gratuito e determinístico: olha evidência no filesystem (não “vibe”), funciona com Cursor, Claude Code, Windsurf, Cline, Continue, Codex, Copilot e afins, e devolve:

  • nível de maturidade L0 → L4
  • score em 6 dimensões (até 108 pontos)
  • lista ranqueada do que consertar primeiro

Sem chamar LLM. Sem telemetria. Sem rede no scan. Mesmo commit = mesmo resultado. Dá pra gatear CI com isso.

A 1.0 fechou o modelo. A série 1.5 é o momento em que isso virou um ecossistema de verdade: config no repo, score dual, Action no Marketplace, docs em 5 idiomas, showcase público e um repo de pesquisa rodando o scanner em projetos reais.

TL;DR

Do 1.0 pro 1.5.1 entrou:

  • guia completo em EN, pt-BR, ES, zh-CN e hi-IN
  • .harness-score.json como contrato do repositório
  • scores maturity (só o que está no git) e effective (repo + harness local)
  • presets e regras por check — sem “desligar” check de secret vazado
  • Action no GitHub Marketplace
  • Showcase com evidência pública
  • Analysis reproduzível
  • vários bugs resolvidos

Pra rodar agora:

npx harness-score@1.5.1

Qual dor isso resolve

Modelo bom não sabe sozinho sua arquitetura, o que é release, o que é comando proibido, nem o que conta como “pronto”.

Times vão montando isso aos poucos:

  • AGENTS.md / CLAUDE.md
  • rules e skills
  • teste, typecheck, lint, format
  • CI
  • hooks de gate / feedback
  • MCP e secrets sem vazar key no repo

O problema é que ninguém enxerga o mapa inteiro. Sem medição, fica difícil saber o que falta — e pior: um PR pode apagar uma guardrail crítica e ninguém percebe.

O Harness Score transforma arquivo em diagnóstico:

Maturity: L3 · Sensing
Score: 86/108
To reach L4: add a gate hook and feedback hook

Importante: não julga se o código é bom, nem se a rule está certa. Mede se a infraestrutura que guia e verifica o agente existe. Escopo estreito de propósito — é o que torna o número confiável o bastante pra CI.

O que mudou de 1.0 pra 1.5

1. O guia fala a língua do time

Na 1.1: inglês, pt-BR e espanhol.

Na 1.2: chinês simplificado e hindi.

Não foi “traduziu a home e pronto”. Foi maturity model, catálogo de checks, multi-harness, sensors, guardrails e receita de remediação nos cinco locales.

Check que falha só ajuda se quem vai corrigir entende o porquê.

👉 Guia

2. .harness-score.json responde uma pergunta chata (e real)

Score só do repositório não responde:

O que o time commitou — e o que o agente nesta máquina realmente enxerga?

Agora tem duas leituras:

ScoreO que contaPra quê
maturitySó arquivos do repoCI, badge, maturidade do time
effectiveRepo + scopes user/system/extraDiagnóstico local

Dá pra ligar o overlay local sem bagunçar o gate de CI:

{
  "scopes": {
    "user": true,
    "system": false
  },
  "gate": "maturity"
}

A 1.3.1 ainda expandiu os paths globais reais de Cursor, Claude Code, Windsurf, Cline, Continue, Codex, OpenCode, Zed etc.

3. Customização sem trapacear o score

Nem todo check serve pra toda empresa.

Exemplo clássico: política interna proíbe hooks locais no repo. Antes era aceitar penalidade eterna ou forkar o modelo. Agora o repo declara a decisão:

{
  "extends": ["no-hooks"],
  "rules": {
    "HYG-05": "off",
    "CI-01": "error"
  }
}

As regras do jogo:

  • check excluído some dos pontos ganhos e dos pontos possíveis (não ganha ponto de graça)
  • toda exclusão aparece no terminal, Markdown, JSON e na Action
  • se um preset derruba dimensão exigida pro próximo nível, o report marca o nível como capped e explica
  • HYG-03, HYG-04 e HYG-06 (credencial exposta) não dão pra desligar

Isso é política revisável no git — não é modo “inflar badge”.

👉 Release notes da 1.5.0

Action no Marketplace

A 1.5.1 foi a publicação inicial da Action no Marketplace.

Workflow mínimo:

name: Harness maturity
on:
  pull_request:
  push:
    branches: [main]
jobs:
  harness:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: paladini/harness-score@v1
        with:
          min-level: "3"
          badge: "harness-badge.svg"

Dá pra exigir nível mínimo, jogar resumo no job summary, emitir Markdown/badge SVG e (opcional) comentário sticky no PR com o diff do score.

Se for produção séria: pin no SHA do commit.

Evidência pública (não só “confia no meu README”)

Scanner fica bem mais útil quando dá pra ver o resultado fora do repo do autor.

O Harness Maturity Showcase junta:

  • 21 repos pinados com JSON completo gerado por harness-score@1.5.0
  • 20 repos da comunidade só com badge pública

Ranking numérico só entra com report completo. Badge sozinha mostra o nível — não inventa pontuação.

Cada entrada ranqueada linka evidência + commit medido. Score baixo não é vergonha de time: descreve o harness commitado naquele repo, naquele commit.

Analysis: stress test do próprio modelo

O Harness Maturity Analysis é a camada de pesquisa atrás do showcase.

Pina repo + commit + versão do scanner, guarda report cru e gera leaderboard/findings a partir disso. Também caça falso positivo, falso negativo e buraco do modelo.

Phase 1 fechada: os 21 repos foram rescaneados com 1.5.0 e os primeiros findings estão públicos.

Ainda falta a fase de rating humano cego — então não estou vendendo “o nível automático = verdade absoluta”.

Na real, o analysis existe exatamente pra achar onde o modelo precisa mudar.

Bug real veio de repo real

Do 1.0 ao 1.5 teve muita correção “sem glamour”, mas que importa:

  • path de hook do Claude Code ($CLAUDE_PROJECT_DIR/...) não derruba mais HKS-05 à toa
  • binário em node_modules/.bin/ conta como dependência instalada
  • sensor Maven / Spotless passa a contar
  • user-scope acha path real de mais ferramentas (Windsurf, Cline…)
  • publish alinhado entre npm, JSR, CLI e Action
  • reporting honesto com applicable / capped em vez de % mentiroso
  • UI da docs (nav, dark mode, links) alinhada com o showcase

Loop que eu quero manter: escanear → olhar evidência → achar mismatch → corrigir regra determinística → rodar o corpus de novo.

Próximo passo: Product Hunt

Semana que vem pretendo lançar no Product Hunt.

Não é linha de chegada. É colocar a ferramenta na frente de mais gente, juntar evidência de repo real e descobrir onde o maturity model ainda erra.

Se testar antes, o feedback que mais ajuda é concreto:

repo + check ID + path do arquivo + por que é falso positivo/negativo

Roda aí e me conta

npx harness-score@1.5.1

Links:

Qual nível saiu no seu repo — e qual check que falhou te pegou de surpresa? Manda os dois nos comentários.

Carregando publicação patrocinada...
1

Meus 2 cents,

Parabens pelo post !

Bom ver que o projeto esta crescendo - ele esta na lista para testar, mas acho ele bem legal.

Repositorio ja foi starreado e forkeado - obrigado por compartilhar !

Saude e Sucesso !


Este post foi favoritado via extensão TABNEWS FAVORITOS

Tem curiosidade sobre IA ? Da uma olhada no meu LIVRO: IA PARA ENGENHEIROS

1

Desafio rápido pra quem usa Cursor / Claude Code / Windsurf:

Roda npx harness-score@1.5.1 e manda o seu nível aqui (L0–L4).

Menor score ganha o direito de reclamar. Maior score tem que explicar como ahahahha