<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Fernando Paladini</title>
    <description>The latest articles on DEV Community by Fernando Paladini (@paladini).</description>
    <link>https://dev.to/paladini</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1065831%2F79b4d650-5838-4481-a62f-8f03f4010512.jpeg</url>
      <title>DEV Community: Fernando Paladini</title>
      <link>https://dev.to/paladini</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/paladini"/>
    <language>en</language>
    <item>
      <title>Lancei o harness-score — descubra o nível de harness do seu repositório</title>
      <dc:creator>Fernando Paladini</dc:creator>
      <pubDate>Tue, 14 Jul 2026 03:13:46 +0000</pubDate>
      <link>https://dev.to/paladini/lancei-o-harness-score-descubra-o-nivel-de-harness-do-seu-repositorio-24gk</link>
      <guid>https://dev.to/paladini/lancei-o-harness-score-descubra-o-nivel-de-harness-do-seu-repositorio-24gk</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; — Publiquei o &lt;a href="https://github.com/paladini/harness-score" rel="noopener noreferrer"&gt;&lt;code&gt;harness-score&lt;/code&gt;&lt;/a&gt;: CLI open source que mede a &lt;strong&gt;maturidade do harness&lt;/strong&gt; do repositório para desenvolvimento com IA. Um comando (&lt;code&gt;npx harness-score&lt;/code&gt;), 36 verificações, seis dimensões, nível &lt;strong&gt;L0–L4&lt;/strong&gt;. Sem LLM, sem telemetria. Já tem CLI, guia, GitHub Action e badges para o README.&lt;/p&gt;




&lt;h2&gt;
  
  
  O que é harness e por que medir
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Harness engineering&lt;/strong&gt; é tudo que envolve o agente de código além do modelo: &lt;code&gt;AGENTS.md&lt;/code&gt;, regras, skills, testes, CI, hooks — o que orienta o agente &lt;em&gt;antes&lt;/em&gt; de agir e confere o resultado &lt;em&gt;depois&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Times com Cursor, Claude Code ou qualquer ferramenta agentica já perceberam: o modelo raramente é a variável principal. &lt;strong&gt;O repositório é.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A pergunta prática: &lt;em&gt;quanto disso meu repo já tem — e o que falta?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;O harness-score varre o repositório e checa coisas objetivas: existe &lt;code&gt;AGENTS.md&lt;/code&gt; com conteúdo? Há &lt;code&gt;.cursor/rules/&lt;/code&gt; com frontmatter válido? Tem workflow de CI? O &lt;code&gt;.env&lt;/code&gt; está no &lt;code&gt;.gitignore&lt;/code&gt;? Cada um dos 36 itens passa ou falha — e o relatório lista o que falta, com link para como corrigir.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como descobrir o nível do seu repositório
&lt;/h2&gt;

&lt;p&gt;O fluxo é simples:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Rode localmente&lt;/strong&gt; (sem instalar nada):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx harness-score
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Leia o resultado&lt;/strong&gt; — nível atual, pontuação por dimensão e o que falta para o próximo nível:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;  harness-score v0.3.0  ~/meu-app

  Maturity: L2 · Guided   Score: 66/108 (61%)

  Context &amp;amp; Guides     ████████████████░░░░  80%
  Skills &amp;amp; Commands    █████████████░░░░░░░  67%
  Hooks &amp;amp; Guardrails   ░░░░░░░░░░░░░░░░░░░░   0%
  Sensors &amp;amp; Feedback   ████████████░░░░░░░░  58%
  CI Feedback          ██████████░░░░░░░░░░  50%
  Hygiene &amp;amp; Safety     ██████████████░░░░░░  70%

&lt;/span&gt;&lt;span class="gp"&gt;  To reach L3: sensors ≥ 60%;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ci ≥ 50%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Corrija o que falhou&lt;/strong&gt; — cada verificação reprovada mostra em uma frase o que falta e aponta para a correção no &lt;a href="https://paladini.github.io/harness-score/" rel="noopener noreferrer"&gt;guia&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rode de novo&lt;/strong&gt; até subir de nível.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;São &lt;strong&gt;36 verificações determinísticas&lt;/strong&gt; em &lt;strong&gt;seis dimensões&lt;/strong&gt; (108 pontos no total):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Context &amp;amp; Guides&lt;/strong&gt; (20 pts) — &lt;code&gt;AGENTS.md&lt;/code&gt;, regras com escopo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills &amp;amp; Commands&lt;/strong&gt; (17 pts) — skills, commands, subagents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hooks &amp;amp; Guardrails&lt;/strong&gt; (14 pts) — bloqueios e feedback durante a sessão&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sensors &amp;amp; Feedback&lt;/strong&gt; (20 pts) — testes, linter, types, formatter&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI Feedback&lt;/strong&gt; (14 pts) — pipeline, pre-commit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hygiene &amp;amp; Safety&lt;/strong&gt; (23 pts) — secrets, &lt;code&gt;.env&lt;/code&gt;, lockfile, license&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O nível &lt;strong&gt;não é só porcentagem&lt;/strong&gt;. Um repo com documentação bonita e zero testes não chega em L3 — a rubrica exige requisitos específicos em cada degrau.&lt;/p&gt;

&lt;p&gt;Para relatório em JSON ou markdown (útil em automação):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;harness-score &lt;span class="nt"&gt;--json&lt;/span&gt;
harness-score &lt;span class="nt"&gt;--md&lt;/span&gt; harness-report.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  A escala L0–L4: o que cada nível significa
&lt;/h2&gt;

&lt;p&gt;A escada tem cinco degraus. Cada um exige os anteriores &lt;strong&gt;e&lt;/strong&gt; metas mínimas por dimensão:&lt;/p&gt;

&lt;h3&gt;
  
  
  L0 · Unharnessed
&lt;/h3&gt;

&lt;p&gt;O ponto de partida. Sem &lt;code&gt;AGENTS.md&lt;/code&gt;, sem regras, sem verificações automáticas. O agente funciona — sempre funciona — mas cada sessão redescobre o projeto do zero e cada erro só para se alguém pegar manualmente. A maioria dos repositórios começa aqui.&lt;/p&gt;

&lt;h3&gt;
  
  
  L1 · Documented
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Requer: Context &amp;amp; Guides ≥ 40%.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Existe um &lt;code&gt;AGENTS.md&lt;/code&gt; (ou equivalente) com conteúdo de verdade: o que é o projeto, como buildar e testar, quais convenções seguir. É o passo de maior retorno saindo do zero — orientação para toda sessão futura em um arquivo.&lt;/p&gt;

&lt;h3&gt;
  
  
  L2 · Guided
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Requer: Context ≥ 60% · (Skills ≥ 30% ou Hooks ≥ 30%) · Hygiene ≥ 50%.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A orientação ganha estrutura: regras &lt;code&gt;.cursor/rules/&lt;/code&gt; com frontmatter válido, começo de conhecimento procedural (skill, command ou subagent) ou hooks configurados. Higiene básica segura — &lt;code&gt;.env&lt;/code&gt; no &lt;code&gt;.gitignore&lt;/code&gt;, sem credenciais em arquivos de harness. O harness passa a ser versionado junto com o código.&lt;/p&gt;

&lt;h3&gt;
  
  
  L3 · Sensing
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Requer L2, mais: Sensors ≥ 60% · CI ≥ 50%.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O ciclo de feedback existe. Testes que o agente pode rodar, linter, type checking e CI que revalida a cada push. É aqui que a correção automática começa de verdade: o agente consegue &lt;em&gt;conferir o próprio trabalho&lt;/em&gt; com ferramentas determinísticas, e a pipeline pega o que ele perde. Para muitos times, &lt;strong&gt;L3 é onde desenvolvimento com IA deixa de parecer arriscado&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  L4 · Self-correcting
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Requer L3, mais: Hooks ≥ 70% · score total ≥ 80%.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O ciclo fecha durante a sessão. Hooks de bloqueio impedem ações destrutivas; hooks de feedback rodam lint e formatação a cada edição. As seis dimensões estão cobertas. Um erro agora precisa passar pelas regras, pelos hooks, pelos testes, pelo type checker, pela CI &lt;em&gt;e&lt;/em&gt; pelos bloqueios — na maior parte sem intervenção manual.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nível&lt;/th&gt;
&lt;th&gt;Nome&lt;/th&gt;
&lt;th&gt;Em uma linha&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;L0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unharnessed&lt;/td&gt;
&lt;td&gt;Agente começa do zero a cada sessão&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;L1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Documented&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;AGENTS.md&lt;/code&gt; orienta o trabalho&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;L2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Guided&lt;/td&gt;
&lt;td&gt;Regras, skills, higiene básica&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;L3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sensing&lt;/td&gt;
&lt;td&gt;Testes, linter, types e CI verificam o output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;L4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Self-correcting&lt;/td&gt;
&lt;td&gt;Hooks fecham o ciclo na sessão&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Rubrica completa: &lt;a href="https://paladini.github.io/harness-score/guide/maturity-model" rel="noopener noreferrer"&gt;modelo de maturidade&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que o scanner não usa IA
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;O scanner nunca chama um modelo.&lt;/strong&gt; Só lê arquivos e interpreta configs — se você rodar duas vezes no mesmo commit, a pontuação é idêntica. Por isso dá para usar &lt;code&gt;--min-level&lt;/code&gt; na CI: o pipeline falha se o nível cair, sem surpresa entre uma execução e outra.&lt;/p&gt;

&lt;p&gt;O próprio repositório do projeto usa a ferramenta nele mesmo: &lt;strong&gt;L4 (108/108)&lt;/strong&gt; com &lt;code&gt;--min-level 4&lt;/code&gt; na pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como adicionar na sua pipeline
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Opção 1 — CLI direto no workflow
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;harness&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npx -y harness-score --min-level &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;--min-level 3&lt;/code&gt; faz o job falhar se o repositório estiver abaixo de L3. Use &lt;code&gt;0&lt;/code&gt; se quiser só gerar o relatório, sem bloquear o merge.&lt;/p&gt;

&lt;h3&gt;
  
  
  Opção 2 — GitHub Action (recomendado)
&lt;/h3&gt;

&lt;p&gt;A Action faz o scan, gera o badge SVG e pode falhar o build se o nível estiver abaixo do mínimo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;harness&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;paladini/harness-score/action@main&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;min-level&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;3'&lt;/span&gt;
          &lt;span class="na"&gt;badge&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;harness-badge.svg&lt;/span&gt;
          &lt;span class="na"&gt;report&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;harness-report.md&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O resumo do job mostra nível e tabela de dimensões. Com &lt;code&gt;comment: 'true'&lt;/code&gt; em workflows de PR, a Action posta (e atualiza) um comentário comparando o score com a branch base — útil para ver “subiu de L2 para L3 neste PR”.&lt;/p&gt;

&lt;p&gt;Docs da Action: &lt;a href="https://github.com/paladini/harness-score/tree/main/action" rel="noopener noreferrer"&gt;github.com/paladini/harness-score/tree/main/action&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Quando passar a bloquear o merge
&lt;/h3&gt;

&lt;p&gt;Comece só medindo (&lt;code&gt;min-level: '0'&lt;/code&gt;), acompanhe o nível do time por algumas semanas, e só então suba o mínimo — L2 para times começando com IA, L3 como alvo razoável para a maioria, L4 para quem já usa hooks de verdade no dia a dia.&lt;/p&gt;

&lt;h2&gt;
  
  
  Badges no README
&lt;/h2&gt;

&lt;p&gt;Há &lt;strong&gt;dois formatos de badge&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Formato&lt;/th&gt;
&lt;th&gt;Tamanho&lt;/th&gt;
&lt;th&gt;O que mostra&lt;/th&gt;
&lt;th&gt;Quando usar&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Badge pill&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;112×20&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;harness&lt;/code&gt; · &lt;code&gt;L4&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Linha de shields no README&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Share card&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;860×240&lt;/td&gt;
&lt;td&gt;Nome completo do nível&lt;/td&gt;
&lt;td&gt;Posts, docs, landing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Badge que atualiza automaticamente
&lt;/h3&gt;

&lt;p&gt;A CI regenera o SVG a cada execução com o nível detectado. Gere com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;harness-score &lt;span class="nt"&gt;--badge&lt;/span&gt; harness-badge.svg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Publique o arquivo (commit em branch &lt;code&gt;badges&lt;/code&gt;, artifact, ou direto no repo) e referencie no README:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Harness Score"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://raw.githubusercontent.com/&amp;lt;você&amp;gt;&lt;/span&gt;/&lt;span class="s"&gt;&amp;lt;repo&amp;gt;&lt;/span&gt;/badges/harness-badge.svg" height="20"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use sempre &lt;code&gt;height="20"&lt;/code&gt; para alinhar com badges shields.io na mesma linha.&lt;/p&gt;

&lt;h3&gt;
  
  
  Badge fixo por nível
&lt;/h3&gt;

&lt;p&gt;Se preferir não depender de CI, use os SVGs estáticos por nível (&lt;code&gt;badge-l0.svg&lt;/code&gt; … &lt;code&gt;badge-l4.svg&lt;/code&gt;), hospedados no guia ou copiados para o seu repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Harness Score L3"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://paladini.github.io/harness-score/maturity/badge-l3.svg"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"20"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Atualize manualmente quando subir de nível — ou migre para o badge automático quando a pipeline estiver rodando.&lt;/p&gt;

&lt;h3&gt;
  
  
  Share card
&lt;/h3&gt;

&lt;p&gt;Para um visual maior (com o nome completo do nível), use &lt;code&gt;card-l0.svg&lt;/code&gt; … &lt;code&gt;card-l4.svg&lt;/code&gt;. Galeria e exemplos de embed (Markdown, HTML, iframe, JSX): &lt;a href="https://paladini.github.io/harness-score/guide/measure-and-improve#embed-snippets" rel="noopener noreferrer"&gt;embed snippets&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  O que já está publicado
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CLI&lt;/strong&gt; — &lt;code&gt;npx harness-score&lt;/code&gt;, &lt;code&gt;--json&lt;/code&gt;, &lt;code&gt;--md&lt;/code&gt;, &lt;code&gt;--badge&lt;/code&gt;, &lt;code&gt;--min-level&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guia&lt;/strong&gt; — 8 capítulos: &lt;a href="https://paladini.github.io/harness-score/" rel="noopener noreferrer"&gt;paladini.github.io/harness-score&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Action&lt;/strong&gt; — scan, badge, bloqueio por nível mínimo, comentário opcional em PR&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Badges&lt;/strong&gt; — pill automático + estáticos L0–L4 + share cards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ainda não no Marketplace:&lt;/strong&gt; plugin Cursor (&lt;code&gt;/harness-audit&lt;/code&gt;) existe no repo, mas ainda não está listado. Hoje o caminho suportado é CLI + guia.&lt;/p&gt;

&lt;h2&gt;
  
  
  Experimente
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx harness-score
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rode no seu repositório, veja o nível, coloque o badge no README e, quando fizer sentido para o time, configure a CI para reprovar o build se o nível ficar abaixo do mínimo.&lt;/p&gt;

&lt;p&gt;Se testarem, me contem em que nível ficaram — e se a rubrica faz sentido para o dia a dia de vocês. Feedback e PRs são bem-vindos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repo: &lt;a href="https://github.com/paladini/harness-score" rel="noopener noreferrer"&gt;github.com/paladini/harness-score&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Guia: &lt;a href="https://paladini.github.io/harness-score/" rel="noopener noreferrer"&gt;paladini.github.io/harness-score&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Verificações: &lt;a href="https://paladini.github.io/harness-score/guide/measure-and-improve" rel="noopener noreferrer"&gt;Measure &amp;amp; Improve&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Badges: &lt;a href="https://paladini.github.io/harness-score/guide/measure-and-improve#embed-snippets" rel="noopener noreferrer"&gt;embed snippets&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Fernando Paladini</dc:creator>
      <pubDate>Sun, 12 Jul 2026 03:25:27 +0000</pubDate>
      <link>https://dev.to/paladini/-584m</link>
      <guid>https://dev.to/paladini/-584m</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/paladini/how-harnessed-is-your-repository-measure-ai-harness-maturity-with-one-command-4g5k" class="crayons-story__hidden-navigation-link"&gt;How Harnessed Is Your Repository? Measure AI Harness Maturity With One&amp;nbsp;Command&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/paladini" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1065831%2F79b4d650-5838-4481-a62f-8f03f4010512.jpeg" alt="paladini profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/paladini" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Fernando Paladini
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Fernando Paladini
                
              
              &lt;div id="story-author-preview-content-4123188" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/paladini" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1065831%2F79b4d650-5838-4481-a62f-8f03f4010512.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Fernando Paladini&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/paladini/how-harnessed-is-your-repository-measure-ai-harness-maturity-with-one-command-4g5k" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 12&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/paladini/how-harnessed-is-your-repository-measure-ai-harness-maturity-with-one-command-4g5k" id="article-link-4123188"&gt;
          How Harnessed Is Your Repository? Measure AI Harness Maturity With One&amp;nbsp;Command
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/aiops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;aiops&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/maturity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;maturity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/paladini/how-harnessed-is-your-repository-measure-ai-harness-maturity-with-one-command-4g5k#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            5 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>How Harnessed Is Your Repository? Measure AI Harness Maturity With One Command</title>
      <dc:creator>Fernando Paladini</dc:creator>
      <pubDate>Sun, 12 Jul 2026 03:25:20 +0000</pubDate>
      <link>https://dev.to/paladini/how-harnessed-is-your-repository-measure-ai-harness-maturity-with-one-command-4g5k</link>
      <guid>https://dev.to/paladini/how-harnessed-is-your-repository-measure-ai-harness-maturity-with-one-command-4g5k</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; — An AI coding agent is only as reliable as the harness around it: the rules, hooks, tests, and guardrails that steer and verify its work. &lt;a href="https://github.com/paladini/harness-score" rel="noopener noreferrer"&gt;&lt;code&gt;harness-score&lt;/code&gt;&lt;/a&gt; is a free, open-source, &lt;strong&gt;100% deterministic&lt;/strong&gt; CLI (&lt;code&gt;npx harness-score&lt;/code&gt;) that scans any repository, scores it across 6 dimensions, and reports a maturity level from &lt;strong&gt;L0 (Unharnessed)&lt;/strong&gt; to &lt;strong&gt;L4 (Self-correcting)&lt;/strong&gt;. It ships with a full guide, a Cursor Marketplace plugin, and a GitHub Action — no model calls, no network, no telemetry.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The part of "AI coding" nobody measures
&lt;/h2&gt;

&lt;p&gt;Every team using Cursor, Claude Code, or any agentic coding tool has quietly discovered the same thing: the model isn't the variable that determines whether an agent's output is trustworthy. The repository is.&lt;/p&gt;

&lt;p&gt;Two engineers can point the same model at two different codebases and get wildly different results — not because one model tried harder, but because one repo told the agent what "correct" looks like (a real &lt;code&gt;AGENTS.md&lt;/code&gt;, scoped rules, a fast test suite) and the other left it guessing.&lt;/p&gt;

&lt;p&gt;In early 2026, Martin Fowler's site gave this practice a name: &lt;strong&gt;harness engineering&lt;/strong&gt; — &lt;a href="https://martinfowler.com/articles/harness-engineering.html" rel="noopener noreferrer"&gt;"building feedforward guides and feedback sensors"&lt;/a&gt; around a coding agent to make its output trustworthy. Around the same time, LangChain published a concrete case study: by improving &lt;em&gt;only&lt;/em&gt; the harness around their coding agent — never touching the underlying model — they moved from outside the &lt;a href="https://www.langchain.com/blog/improving-deep-agents-with-harness-engineering" rel="noopener noreferrer"&gt;top 30 to the top 5&lt;/a&gt; on Terminal Bench 2.0.&lt;/p&gt;

&lt;p&gt;The conclusion both arrive at: &lt;strong&gt;reliability is a property of the model + harness + environment system, not of the model alone.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That raises an obvious question nobody had a straight answer to: &lt;em&gt;how harnessed is my repository, actually?&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What "harness engineering" means, concretely
&lt;/h2&gt;

&lt;p&gt;A harness is everything around the model: the instructions it loads before acting, and the checks that verify what it did after. Fowler's framework splits this into two families:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;
&lt;strong&gt;Guides&lt;/strong&gt; (feedforward)&lt;/th&gt;
&lt;th&gt;
&lt;strong&gt;Sensors&lt;/strong&gt; (feedback)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;When&lt;/td&gt;
&lt;td&gt;Before the agent acts&lt;/td&gt;
&lt;td&gt;After the agent acts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Purpose&lt;/td&gt;
&lt;td&gt;Steer toward good output&lt;/td&gt;
&lt;td&gt;Catch and correct bad output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;In Cursor&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;AGENTS.md&lt;/code&gt;, &lt;code&gt;.cursor/rules/&lt;/code&gt;, skills, commands&lt;/td&gt;
&lt;td&gt;tests, linters, type checkers, CI, hooks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Cursor, specifically, exposes more of this machinery than any other mainstream AI editor: &lt;code&gt;AGENTS.md&lt;/code&gt; for project context, &lt;code&gt;.cursor/rules/*.mdc&lt;/code&gt; for scoped conventions, &lt;code&gt;.cursor/skills/&lt;/code&gt; for on-demand procedures, &lt;code&gt;.cursor/commands/&lt;/code&gt; for human-triggered workflows, and &lt;code&gt;.cursor/hooks.json&lt;/code&gt; for runtime gates that can literally deny a destructive command before it executes — not just ask the model nicely not to run it.&lt;/p&gt;

&lt;p&gt;The problem is that none of this is &lt;em&gt;measured&lt;/em&gt;. Teams either have all of it, some of it, or none of it, and there was no quick way to know which — until now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing harness-score
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/paladini/harness-score" rel="noopener noreferrer"&gt;&lt;code&gt;harness-score&lt;/code&gt;&lt;/a&gt; is a CLI that answers that question in seconds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx harness-score
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Maturity: L2 · Guided   Score: 61/100 (61%)

  Context &amp;amp; Guides     ████████████████░░░░  80%
  Skills &amp;amp; Commands    █████████████░░░░░░░  67%
  Hooks &amp;amp; Guardrails   ░░░░░░░░░░░░░░░░░░░░   0%
  Sensors &amp;amp; Feedback   ████████████░░░░░░░░  58%
  CI Feedback          ██████████░░░░░░░░░░  50%
  Hygiene &amp;amp; Safety     ██████████████░░░░░░  70%

  To reach L3: sensors ≥ 60%; ci ≥ 50%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It runs &lt;strong&gt;33 checks across 6 dimensions&lt;/strong&gt; — context &amp;amp; guides, skills &amp;amp; commands, hooks &amp;amp; guardrails, sensors &amp;amp; feedback, CI feedback, and hygiene &amp;amp; safety — and reports one of five maturity levels:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Level&lt;/th&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;What it means&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;L0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unharnessed&lt;/td&gt;
&lt;td&gt;Agents rediscover the project every session; mistakes ship unless a human catches them&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;L1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Documented&lt;/td&gt;
&lt;td&gt;A substantive &lt;code&gt;AGENTS.md&lt;/code&gt; orients every session&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;L2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Guided&lt;/td&gt;
&lt;td&gt;Scoped Cursor rules, skills/commands, basic hygiene&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;L3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sensing&lt;/td&gt;
&lt;td&gt;Tests, linter, types, and CI verify everything the agent does&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;L4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Self-correcting&lt;/td&gt;
&lt;td&gt;Gate and feedback hooks close the loop at runtime&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Every failed check comes with a one-sentence fix and a deep link into the &lt;a href="https://paladini.github.io/harness-score/" rel="noopener noreferrer"&gt;full guide&lt;/a&gt; — so the output isn't just a grade, it's a to-do list.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one design decision that matters most
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The scanner never calls a model.&lt;/strong&gt; No LLM, no network request, no telemetry — it reads your filesystem, parses config files, and applies a fixed rubric. Same repository in, same score out, every single time.&lt;/p&gt;

&lt;p&gt;This was a deliberate trade-off. An AI-powered "does this repo look well-configured?" tool would be more flexible but non-reproducible — you couldn't gate CI on it, diff two runs, or trust that a score of 80% today means the same thing next month. A harness maturity score is exactly the kind of check Fowler's own framework calls &lt;em&gt;computational&lt;/em&gt; rather than &lt;em&gt;inferential&lt;/em&gt; — and computational checks are the ones you can actually put in a pipeline.&lt;/p&gt;

&lt;p&gt;That determinism is also what makes it self-hosting: harness-score's own repository scores &lt;strong&gt;L4 · Self-correcting, 100/100&lt;/strong&gt; on itself, gated in its own CI, using the exact rules and hooks the tool checks for.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://paladini.github.io/harness-score/" rel="noopener noreferrer"&gt;The guide&lt;/a&gt;&lt;/strong&gt; — 8 chapters covering the Guides/Sensors framework, the full Cursor harness surface, and the maturity model rubric in detail, free on GitHub Pages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The CLI&lt;/strong&gt; — &lt;code&gt;harness-score&lt;/code&gt;, with JSON/markdown/badge output and a &lt;code&gt;--min-level&lt;/code&gt; flag to gate CI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A Cursor Marketplace plugin&lt;/strong&gt; — a &lt;code&gt;/harness-audit&lt;/code&gt; command plus a skill that fixes the gaps it finds, following the guide's recipes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A GitHub Action&lt;/strong&gt; — run the scan on every push, emit a maturity badge for your README.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx harness-score                          &lt;span class="c"&gt;# no install&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; harness-score               &lt;span class="c"&gt;# or install it&lt;/span&gt;
harness-score &lt;span class="nt"&gt;--min-level&lt;/span&gt; 3                &lt;span class="c"&gt;# gate CI: fail below L3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also published on &lt;a href="https://github.com/paladini/harness-score/pkgs/npm/harness-score" rel="noopener noreferrer"&gt;GitHub Packages&lt;/a&gt; and &lt;a href="https://jsr.io/@paladini/harness-score" rel="noopener noreferrer"&gt;JSR&lt;/a&gt; for Deno/Bun users.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is harness engineering?&lt;/strong&gt;&lt;br&gt;
The discipline of designing everything around an AI coding agent — instructions, tools, tests, and guardrails — so its output is reliable in production. The term was popularized by Martin Fowler's site and LangChain's engineering blog in early 2026.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is a "harness" in Cursor specifically?&lt;/strong&gt;&lt;br&gt;
The combination of &lt;code&gt;AGENTS.md&lt;/code&gt;, &lt;code&gt;.cursor/rules/&lt;/code&gt;, skills, commands, hooks, and MCP configuration that steers and verifies what the Cursor agent does in a given repository.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does harness-score use AI to score my repository?&lt;/strong&gt;&lt;br&gt;
No. It is 100% deterministic — filesystem reads and config parsing only. No LLM calls, no network requests, no telemetry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How is the maturity level calculated?&lt;/strong&gt;&lt;br&gt;
33 checks are grouped into 6 weighted dimensions (context, skills, hooks, sensors, CI, hygiene). Levels L0–L4 gate on which dimensions clear a threshold, not just the total score — so a repo full of documentation but zero tests can't accidentally look "mature."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need to use Cursor to use this?&lt;/strong&gt;&lt;br&gt;
No. The CLI and the underlying practices apply to any AI-assisted repository; Cursor-specific artifacts (rules, skills, hooks) are simply scored alongside universal ones (tests, CI, types) because Cursor currently exposes the richest harness surface of any mainstream AI editor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it free and open source?&lt;/strong&gt;&lt;br&gt;
Yes — MIT licensed, and the analysis runs entirely on your machine or in your CI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it on your own repo
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx harness-score
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Repo: &lt;a href="https://github.com/paladini/harness-score" rel="noopener noreferrer"&gt;github.com/paladini/harness-score&lt;/a&gt;&lt;br&gt;
Guide: &lt;a href="https://paladini.github.io/harness-score/" rel="noopener noreferrer"&gt;paladini.github.io/harness-score&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you find a gap in the rubric or want to add checks for another ecosystem, issues and PRs are open.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>aiops</category>
      <category>maturity</category>
    </item>
    <item>
      <title>Harness Engineering for Cursor: Measure Your AI Coding Maturity With One Command</title>
      <dc:creator>Fernando Paladini</dc:creator>
      <pubDate>Sat, 11 Jul 2026 15:33:26 +0000</pubDate>
      <link>https://dev.to/paladini/harness-engineering-for-cursor-measure-your-ai-coding-maturity-with-one-command-3iif</link>
      <guid>https://dev.to/paladini/harness-engineering-for-cursor-measure-your-ai-coding-maturity-with-one-command-3iif</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F155ysfpkht55zdr7nrmv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F155ysfpkht55zdr7nrmv.png" alt="Harness Engineering Score" width="492" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; — An AI coding agent is only as reliable as the harness around it: the rules, hooks, tests, and guardrails that steer and verify its work. &lt;a href="https://github.com/paladini/harness-score" rel="noopener noreferrer"&gt;&lt;code&gt;harness-score&lt;/code&gt;&lt;/a&gt; is a free, open-source, &lt;strong&gt;100% deterministic&lt;/strong&gt; CLI (&lt;code&gt;npx harness-score&lt;/code&gt;) that scans any repository, scores it across 6 dimensions, and reports a maturity level from &lt;strong&gt;L0 (Unharnessed)&lt;/strong&gt; to &lt;strong&gt;L4 (Self-correcting)&lt;/strong&gt;. It ships with a full guide, a Cursor Marketplace plugin, and a GitHub Action — no model calls, no network, no telemetry.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The part of "AI coding" nobody measures
&lt;/h2&gt;

&lt;p&gt;Every team using Cursor, Claude Code, or any agentic coding tool has quietly discovered the same thing: the model isn't the variable that determines whether an agent's output is trustworthy. The repository is.&lt;/p&gt;

&lt;p&gt;Two engineers can point the same model at two different codebases and get wildly different results — not because one model tried harder, but because one repo told the agent what "correct" looks like (a real &lt;code&gt;AGENTS.md&lt;/code&gt;, scoped rules, a fast test suite) and the other left it guessing.&lt;/p&gt;

&lt;p&gt;In early 2026, Martin Fowler's site gave this practice a name: &lt;strong&gt;harness engineering&lt;/strong&gt; — &lt;a href="https://martinfowler.com/articles/harness-engineering.html" rel="noopener noreferrer"&gt;"building feedforward guides and feedback sensors"&lt;/a&gt; around a coding agent to make its output trustworthy. Around the same time, LangChain published a concrete case study: by improving &lt;em&gt;only&lt;/em&gt; the harness around their coding agent — never touching the underlying model — they moved from outside the &lt;a href="https://www.langchain.com/blog/improving-deep-agents-with-harness-engineering" rel="noopener noreferrer"&gt;top 30 to the top 5&lt;/a&gt; on Terminal Bench 2.0.&lt;/p&gt;

&lt;p&gt;The conclusion both arrive at: &lt;strong&gt;reliability is a property of the model + harness + environment system, not of the model alone.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That raises an obvious question nobody had a straight answer to: &lt;em&gt;how harnessed is my repository, actually?&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What "harness engineering" means, concretely
&lt;/h2&gt;

&lt;p&gt;A harness is everything around the model: the instructions it loads before acting, and the checks that verify what it did after. Fowler's framework splits this into two families:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;
&lt;strong&gt;Guides&lt;/strong&gt; (feedforward)&lt;/th&gt;
&lt;th&gt;
&lt;strong&gt;Sensors&lt;/strong&gt; (feedback)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;When&lt;/td&gt;
&lt;td&gt;Before the agent acts&lt;/td&gt;
&lt;td&gt;After the agent acts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Purpose&lt;/td&gt;
&lt;td&gt;Steer toward good output&lt;/td&gt;
&lt;td&gt;Catch and correct bad output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;In Cursor&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;AGENTS.md&lt;/code&gt;, &lt;code&gt;.cursor/rules/&lt;/code&gt;, skills, commands&lt;/td&gt;
&lt;td&gt;tests, linters, type checkers, CI, hooks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Cursor, specifically, exposes more of this machinery than any other mainstream AI editor: &lt;code&gt;AGENTS.md&lt;/code&gt; for project context, &lt;code&gt;.cursor/rules/*.mdc&lt;/code&gt; for scoped conventions, &lt;code&gt;.cursor/skills/&lt;/code&gt; for on-demand procedures, &lt;code&gt;.cursor/commands/&lt;/code&gt; for human-triggered workflows, and &lt;code&gt;.cursor/hooks.json&lt;/code&gt; for runtime gates that can literally deny a destructive command before it executes — not just ask the model nicely not to run it.&lt;/p&gt;

&lt;p&gt;The problem is that none of this is &lt;em&gt;measured&lt;/em&gt;. Teams either have all of it, some of it, or none of it, and there was no quick way to know which — until now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing harness-score
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/paladini/harness-score" rel="noopener noreferrer"&gt;&lt;code&gt;harness-score&lt;/code&gt;&lt;/a&gt; is a CLI that answers that question in seconds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx harness-score
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Maturity: L2 · Guided   Score: 61/100 (61%)

  Context &amp;amp; Guides     ████████████████░░░░  80%
  Skills &amp;amp; Commands    █████████████░░░░░░░  67%
  Hooks &amp;amp; Guardrails   ░░░░░░░░░░░░░░░░░░░░   0%
  Sensors &amp;amp; Feedback   ████████████░░░░░░░░  58%
  CI Feedback          ██████████░░░░░░░░░░  50%
  Hygiene &amp;amp; Safety     ██████████████░░░░░░  70%

  To reach L3: sensors ≥ 60%; ci ≥ 50%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It runs &lt;strong&gt;33 checks across 6 dimensions&lt;/strong&gt; — context &amp;amp; guides, skills &amp;amp; commands, hooks &amp;amp; guardrails, sensors &amp;amp; feedback, CI feedback, and hygiene &amp;amp; safety — and reports one of five maturity levels:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Level&lt;/th&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;What it means&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;L0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unharnessed&lt;/td&gt;
&lt;td&gt;Agents rediscover the project every session; mistakes ship unless a human catches them&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;L1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Documented&lt;/td&gt;
&lt;td&gt;A substantive &lt;code&gt;AGENTS.md&lt;/code&gt; orients every session&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;L2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Guided&lt;/td&gt;
&lt;td&gt;Scoped Cursor rules, skills/commands, basic hygiene&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;L3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sensing&lt;/td&gt;
&lt;td&gt;Tests, linter, types, and CI verify everything the agent does&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;L4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Self-correcting&lt;/td&gt;
&lt;td&gt;Gate and feedback hooks close the loop at runtime&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Every failed check comes with a one-sentence fix and a deep link into the &lt;a href="https://paladini.github.io/harness-score/" rel="noopener noreferrer"&gt;full guide&lt;/a&gt; — so the output isn't just a grade, it's a to-do list.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one design decision that matters most
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The scanner never calls a model.&lt;/strong&gt; No LLM, no network request, no telemetry — it reads your filesystem, parses config files, and applies a fixed rubric. Same repository in, same score out, every single time.&lt;/p&gt;

&lt;p&gt;This was a deliberate trade-off. An AI-powered "does this repo look well-configured?" tool would be more flexible but non-reproducible — you couldn't gate CI on it, diff two runs, or trust that a score of 80% today means the same thing next month. A harness maturity score is exactly the kind of check Fowler's own framework calls &lt;em&gt;computational&lt;/em&gt; rather than &lt;em&gt;inferential&lt;/em&gt; — and computational checks are the ones you can actually put in a pipeline.&lt;/p&gt;

&lt;p&gt;That determinism is also what makes it self-hosting: harness-score's own repository scores &lt;strong&gt;L4 · Self-correcting, 100/100&lt;/strong&gt; on itself, gated in its own CI, using the exact rules and hooks the tool checks for.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://paladini.github.io/harness-score/" rel="noopener noreferrer"&gt;The guide&lt;/a&gt;&lt;/strong&gt; — 8 chapters covering the Guides/Sensors framework, the full Cursor harness surface, and the maturity model rubric in detail, free on GitHub Pages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The CLI&lt;/strong&gt; — &lt;code&gt;harness-score&lt;/code&gt;, with JSON/markdown/badge output and a &lt;code&gt;--min-level&lt;/code&gt; flag to gate CI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A Cursor Marketplace plugin&lt;/strong&gt; — a &lt;code&gt;/harness-audit&lt;/code&gt; command plus a skill that fixes the gaps it finds, following the guide's recipes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A GitHub Action&lt;/strong&gt; — run the scan on every push, emit a maturity badge for your README.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx harness-score                          &lt;span class="c"&gt;# no install&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; harness-score               &lt;span class="c"&gt;# or install it&lt;/span&gt;
harness-score &lt;span class="nt"&gt;--min-level&lt;/span&gt; 3                &lt;span class="c"&gt;# gate CI: fail below L3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also published on &lt;a href="https://github.com/paladini/harness-score/pkgs/npm/harness-score" rel="noopener noreferrer"&gt;GitHub Packages&lt;/a&gt; and &lt;a href="https://jsr.io/@paladini/harness-score" rel="noopener noreferrer"&gt;JSR&lt;/a&gt; for Deno/Bun users.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is harness engineering?&lt;/strong&gt;&lt;br&gt;
The discipline of designing everything around an AI coding agent — instructions, tools, tests, and guardrails — so its output is reliable in production. The term was popularized by Martin Fowler's site and LangChain's engineering blog in early 2026.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is a "harness" in Cursor specifically?&lt;/strong&gt;&lt;br&gt;
The combination of &lt;code&gt;AGENTS.md&lt;/code&gt;, &lt;code&gt;.cursor/rules/&lt;/code&gt;, skills, commands, hooks, and MCP configuration that steers and verifies what the Cursor agent does in a given repository.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does harness-score use AI to score my repository?&lt;/strong&gt;&lt;br&gt;
No. It is 100% deterministic — filesystem reads and config parsing only. No LLM calls, no network requests, no telemetry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How is the maturity level calculated?&lt;/strong&gt;&lt;br&gt;
33 checks are grouped into 6 weighted dimensions (context, skills, hooks, sensors, CI, hygiene). Levels L0–L4 gate on which dimensions clear a threshold, not just the total score — so a repo full of documentation but zero tests can't accidentally look "mature."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need to use Cursor to use this?&lt;/strong&gt;&lt;br&gt;
No. The CLI and the underlying practices apply to any AI-assisted repository; Cursor-specific artifacts (rules, skills, hooks) are simply scored alongside universal ones (tests, CI, types) because Cursor currently exposes the richest harness surface of any mainstream AI editor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it free and open source?&lt;/strong&gt;&lt;br&gt;
Yes — MIT licensed, and the analysis runs entirely on your machine or in your CI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it on your own repo
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx harness-score
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Repo: &lt;a href="https://github.com/paladini/harness-score" rel="noopener noreferrer"&gt;github.com/paladini/harness-score&lt;/a&gt; · Guide: &lt;a href="https://paladini.github.io/harness-score/" rel="noopener noreferrer"&gt;paladini.github.io/harness-score&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you find a gap in the rubric or want to add checks for another ecosystem, issues and PRs are open.&lt;/p&gt;

</description>
      <category>cursor</category>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>FOSSAI: An Open-Source Manifesto Against Digital Inequality — v0.1</title>
      <dc:creator>Fernando Paladini</dc:creator>
      <pubDate>Wed, 27 Aug 2025 02:44:26 +0000</pubDate>
      <link>https://dev.to/paladini/fossai-an-open-source-manifesto-against-digital-inequality-v01-4jlk</link>
      <guid>https://dev.to/paladini/fossai-an-open-source-manifesto-against-digital-inequality-v01-4jlk</guid>
      <description>&lt;p&gt;Humanity's growth over the last 200 years is undeniable, with advancements that have brought wealth and comfort to countless lives. However, this progress comes hand-in-hand with a growing problem: inequality. The gap between the richest and the poorest widens every day, and the global economic balance tilts further, concentrating power and privilege in the hands of a minority, the 1%. The vast majority, the 99%, are caught in a relentless race for resources and opportunities.&lt;/p&gt;

&lt;p&gt;Facing this, many turn to radical solutions, but I believe true change comes from within the system itself. My vision is to use the system's own tools against it. Not to destroy it, but to reshape it into something more just and accessible. The goal is clear: to make life difficult for the powerful and easier for those who need it most.&lt;/p&gt;

&lt;p&gt;Inequality manifests at every level of our society. It begins with access to basics - water, food, health - and extends to knowledge, our most precious asset. Technology, which should be a force for progress and democratization, has become a new battlefield where knowledge is commoditized. Tech giants like Microsoft, Google, Meta, Anthropic, and OpenAI dominate the development of cutting-edge AI models and solutions. Tools like GitHub Copilot, which boost developer productivity, are becoming privileges for those who can afford them.&lt;/p&gt;

&lt;p&gt;The costs of using AI services worldwide continue to rise, creating a glaring situation of digital inequality in access to information, tools, and technology. Professionals and developers globally face a stark disparity in the cost of accessing the internet and AI services. One dollar in the United States is not the same as one dollar in Brazil, the Congo, South Africa, India, or Pakistan.&lt;br&gt;
And this is the core of this manifesto. Technology, especially AI, must be a common good available to every citizen on the planet, not a commodity.&lt;/p&gt;

&lt;h2&gt;
  
  
  The FOSSAI&amp;nbsp;Vision
&lt;/h2&gt;

&lt;p&gt;FOSSAI  -  Free and Open Source Artificial Intelligence  -  is our answer. It is a call to action for all hackers, developers, and tech thinkers: use your privilege and resources to build a more equitable future.&lt;br&gt;
While we have access to cutting-edge tools through our personal, student, or work accounts, we must channel our energy to create open-source, free, user-friendly, and locally-run AI technologies. The reasons are simple and clear:&lt;br&gt;
Open-Source: So that everyone can audit, understand, and contribute. Knowledge cannot be proprietary. We won't reinvent the wheel; we will share what we create.&lt;br&gt;
Free: So that access is not a barrier. Knowledge must be free.&lt;br&gt;
Local: So that autonomy is in the user's hands. Our creations should not depend on paid services or the cloud, which often force us to surrender our data in exchange for use, or to pay for resources.&lt;/p&gt;

&lt;p&gt;I believe in a world where AI is used to create products that offer an incredible experience without the need for a constant internet connection, subscription plans, or any chains to corporations, institutions, or governments. In a world where dependency on recurring digital services is the rule, this attitude is an act of resistance. It's a path to free ourselves from the control of corporations that use technology to separate us from each other and consolidate power.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Call to&amp;nbsp;Action
&lt;/h2&gt;

&lt;p&gt;I dream of a world where it isn't necessary to pay for essential services. I dream of a world where I have total control over the applications I use and the equipment I own. I dream of a world where AI isn't a sea of subscription plans, and where if you don't have money, you don't lose access to technology.&lt;br&gt;
And this dream becomes a reality with every shared line of code, every free AI tool, and every solution we put into practice.&lt;br&gt;
What can you do to change the scales?&lt;/p&gt;

</description>
      <category>programming</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
