@fontdata/ai-harness 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +9 -2
- package/LICENSE +21 -0
- package/README.md +174 -140
- package/{src → dist}/catalog.js +5 -12
- package/dist/cli.js +174 -0
- package/dist/comentarios/command.js +74 -0
- package/dist/comentarios/instalar.js +33 -0
- package/dist/config/config.js +98 -0
- package/dist/contratos/artefatos.js +284 -0
- package/dist/contratos/eventos.js +103 -0
- package/dist/doctor/checks.js +424 -0
- package/dist/init.js +240 -0
- package/dist/install/atomic.js +51 -0
- package/dist/install/flags.js +99 -0
- package/dist/install/hooks.js +47 -0
- package/dist/install/lock.js +39 -0
- package/dist/install/plan.js +209 -0
- package/dist/install/selection.js +77 -0
- package/dist/install/settings.js +108 -0
- package/dist/memoria/indice.js +195 -0
- package/dist/migrar/migrar.js +426 -0
- package/dist/rastro/command.js +46 -0
- package/dist/run.js +86 -0
- package/dist/types.js +1 -0
- package/dist/update/legado.js +74 -0
- package/dist/update/update.js +284 -0
- package/package.json +17 -8
- package/templates/CLAUDE.md +59 -30
- package/templates/agents/auditor-plano.md +42 -0
- package/templates/agents/investigador.md +32 -0
- package/templates/agents/qa.md +44 -0
- package/templates/agents/revisor-testes.md +40 -0
- package/templates/catalog.json +24 -61
- package/templates/commands/atualizar-deps.md +43 -9
- package/templates/commands/diagrama.md +35 -10
- package/templates/commands/gerar-env.md +39 -10
- package/templates/commands/gerar-testes.md +42 -10
- package/templates/commands/git-commit-push.md +0 -0
- package/templates/commands/onboarding.md +44 -15
- package/templates/commands/refatorar.md +50 -10
- package/templates/commands/revisar-pr.md +56 -12
- package/templates/commands/sincronizar-claude-md.md +177 -9
- package/templates/commands/versao.md +0 -0
- package/templates/hooks/comentarios/check.mjs +210 -0
- package/templates/hooks/hooks.json +34 -0
- package/templates/hooks/lembrete.mjs +29 -0
- package/templates/hooks/lib/config.mjs +40 -0
- package/templates/hooks/lib/hook.mjs +85 -0
- package/templates/hooks/lib/rastro.mjs +130 -0
- package/templates/hooks/lib/segredos.mjs +91 -0
- package/templates/hooks/lib/temas.mjs +111 -0
- package/templates/hooks/lib/trabalho.mjs +94 -0
- package/templates/hooks/proteger-contratos.mjs +56 -0
- package/templates/hooks/segredo-no-commit.mjs +76 -0
- package/templates/hooks/sem-jargao.mjs +58 -0
- package/templates/hooks/task-so-fecha-verde.mjs +33 -0
- package/templates/legado/manifesto.json +1267 -0
- package/templates/rules/comentarios.md +166 -0
- package/templates/rules/harness-projeto.md +41 -0
- package/templates/skills/auditar-performance/SKILL.md +53 -0
- package/templates/skills/auditar-performance/references/pontos-quentes.md +35 -0
- package/templates/skills/auditar-performance/templates/relatorios/CLIENTE.md +26 -0
- package/templates/skills/auditar-performance/templates/relatorios/TECNICO.md +27 -0
- package/templates/skills/auditar-seguranca/SKILL.md +67 -0
- package/templates/skills/auditar-seguranca/references/seguranca-tecnica.md +23 -0
- package/templates/skills/auditar-seguranca/templates/relatorios/CLIENTE.md +30 -0
- package/templates/skills/auditar-seguranca/templates/relatorios/TECNICO.md +38 -0
- package/templates/skills/auditar-ui/SKILL.md +64 -0
- package/templates/skills/auditar-ui/references/lentes.md +33 -0
- package/templates/skills/auditar-ui/templates/relatorios/CLIENTE.md +26 -0
- package/templates/skills/auditar-ui/templates/relatorios/TECNICO.md +31 -0
- package/templates/skills/evoluir-harness/SKILL.md +81 -0
- package/templates/skills/evoluir-harness/references/agent.md +83 -0
- package/templates/skills/evoluir-harness/references/auditoria.md +107 -0
- package/templates/skills/evoluir-harness/references/code-reviewer.md +68 -0
- package/templates/skills/evoluir-harness/references/design-system.md +56 -0
- package/templates/skills/evoluir-harness/references/hook.md +95 -0
- package/templates/skills/evoluir-harness/references/rule.md +67 -0
- package/templates/skills/evoluir-harness/references/skill.md +63 -0
- package/templates/skills/executar-plan/SKILL.md +114 -0
- package/templates/skills/executar-plan/references/delegacao.md +43 -0
- package/templates/skills/executar-plan/references/retomada.md +33 -0
- package/templates/skills/executar-plan/templates/BLOQUEIOS.md +30 -0
- package/templates/skills/harness/SKILL.md +75 -0
- package/templates/skills/harness/references/auto-tag.md +118 -0
- package/templates/skills/harness/references/ignores.md +40 -0
- package/templates/skills/harness/references/scaffold.md +29 -0
- package/templates/skills/harness/references/validar-ideia.md +42 -0
- package/templates/skills/memoria/SKILL.md +52 -0
- package/templates/skills/nova-tarefa/SKILL.md +97 -0
- package/templates/skills/nova-tarefa/references/isso-ja-existe.md +24 -0
- package/templates/skills/nova-tarefa/references/regras-do-plano.md +33 -0
- package/templates/skills/nova-tarefa/templates/DECISOES.md +20 -0
- package/templates/skills/nova-tarefa/templates/PLAN.md +58 -0
- package/templates/skills/nova-tarefa/templates/SPEC.md +37 -0
- package/templates/skills/resolver-bug/SKILL.md +104 -0
- package/templates/skills/resolver-bug/references/relatorio-para-cliente.md +26 -0
- package/templates/skills/resolver-bug/templates/PLAN.md +62 -0
- package/templates/skills/resolver-bug/templates/relatorios/CLIENTE.md +29 -0
- package/templates/skills/resolver-bug/templates/relatorios/TECNICO.md +32 -0
- package/bin/cli.js +0 -122
- package/src/init.js +0 -317
- package/src/installer.js +0 -92
- package/src/run.js +0 -99
- package/templates/commands/auditar-performance.md +0 -27
- package/templates/commands/auditar-seguranca.md +0 -64
- package/templates/commands/auditar-ui.md +0 -38
- package/templates/commands/codigo-morto.md +0 -22
- package/templates/commands/configurar-auto-tag.md +0 -185
- package/templates/commands/configurar-comentarios.md +0 -543
- package/templates/commands/configurar-orquestrador.md +0 -13
- package/templates/commands/corrigir-review.md +0 -11
- package/templates/commands/criar-agents.md +0 -42
- package/templates/commands/criar-code-reviewer.md +0 -30
- package/templates/commands/criar-hooks.md +0 -32
- package/templates/commands/criar-rag.md +0 -25
- package/templates/commands/criar-rules.md +0 -31
- package/templates/commands/criar-skill.md +0 -22
- package/templates/commands/design-system.md +0 -27
- package/templates/commands/executar-plan.md +0 -36
- package/templates/commands/gerar-claude-md.md +0 -66
- package/templates/commands/gerar-ignore.md +0 -37
- package/templates/commands/gerar-spec.md +0 -33
- package/templates/commands/harness.md +0 -34
- package/templates/commands/nova-tarefa.md +0 -60
- package/templates/commands/resolver-bug.md +0 -25
- package/templates/commands/review-por-task.md +0 -16
- package/templates/commands/scaffold.md +0 -25
- package/templates/commands/validar-commands.md +0 -24
- package/templates/commands/validar-ideia.md +0 -36
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
{
|
|
12
12
|
"name": "fontdata",
|
|
13
13
|
"source": "./",
|
|
14
|
-
"description": "
|
|
14
|
+
"description": "19 slash commands para conduzir spec, contexto, harness, revisão e manutenção de projetos com Claude Code."
|
|
15
15
|
}
|
|
16
16
|
]
|
|
17
17
|
}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fontdata",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Harness de engenharia com IA da Fontdata para Claude Code",
|
|
5
5
|
"author": { "name": "Fontdata" },
|
|
6
6
|
"commands": ["./templates/commands"],
|
|
7
|
-
"skills": ["./templates/skills"]
|
|
7
|
+
"skills": ["./templates/skills"],
|
|
8
|
+
"hooks": "./templates/hooks/hooks.json",
|
|
9
|
+
"agents": [
|
|
10
|
+
"./templates/agents/auditor-plano.md",
|
|
11
|
+
"./templates/agents/investigador.md",
|
|
12
|
+
"./templates/agents/qa.md",
|
|
13
|
+
"./templates/agents/revisor-testes.md"
|
|
14
|
+
]
|
|
8
15
|
}
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Fontdata Tecnologia
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,12 +1,32 @@
|
|
|
1
1
|
# @fontdata/ai-harness
|
|
2
2
|
|
|
3
|
-
O **harness de engenharia com IA da Fontdata**
|
|
3
|
+
O **harness de engenharia com IA da Fontdata** para o [Claude Code](https://claude.com/claude-code): fluxos de
|
|
4
|
+
trabalho, agents, hooks e contratos de documentação que fazem o agente planejar antes de implementar, provar com
|
|
5
|
+
testes o que entregou e deixar rastro do que fez — em qualquer stack, inclusive Delphi/Pascal e .NET.
|
|
4
6
|
|
|
5
7
|
> Foco exclusivo em **Claude Code**.
|
|
6
8
|
|
|
9
|
+
## Por que um harness
|
|
10
|
+
|
|
11
|
+
Um agente de IA sem restrições toma decisões sozinho no meio da implementação, entrega diffs grandes fora do padrão
|
|
12
|
+
do projeto e escreve testes que passariam com o código errado. As regras escritas num prompt ajudam, mas nada
|
|
13
|
+
garante que sejam seguidas. O harness se apoia em cinco apostas:
|
|
14
|
+
|
|
15
|
+
1. **Planejar antes de executar.** Uma pergunta durante a execução é falha do plano: dúvida vira bloqueio
|
|
16
|
+
registrado, não improviso.
|
|
17
|
+
2. **Nada avança sem critério verificável.** TDD com pelo menos 2 testes críticos por task; a task só fecha com a
|
|
18
|
+
suíte verde registrada.
|
|
19
|
+
3. **Documentação como contrato.** Cada trabalho tem a sua pasta, com spec, plano, decisões, bloqueios e relatórios
|
|
20
|
+
num formato que ferramentas conseguem ler e validar.
|
|
21
|
+
4. **Quem implementa não aprova.** Agents somente leitura revisam os testes, validam os critérios de aceite e
|
|
22
|
+
auditam o plano.
|
|
23
|
+
5. **Garantias fora do prompt.** Hooks avisam ou bloqueiam de forma determinística, e o rastro de eventos mostra o
|
|
24
|
+
que aconteceu — inclusive quando um aviso já pode virar bloqueio.
|
|
25
|
+
|
|
7
26
|
## Modo 1 — rodar sem instalar (recomendado)
|
|
8
27
|
|
|
9
|
-
Na pasta do projeto, chame o comando pelo nome. O Claude Code abre já executando aquele
|
|
28
|
+
Na pasta do projeto, chame o comando pelo nome. O Claude Code abre já executando aquele fluxo, com o pacote
|
|
29
|
+
carregado como plugin **só daquela sessão** — nenhum arquivo do harness é escrito no repositório.
|
|
10
30
|
|
|
11
31
|
```bash
|
|
12
32
|
# npm / npx
|
|
@@ -21,219 +41,233 @@ yarn dlx @fontdata/ai-harness harness
|
|
|
21
41
|
pnpm dlx @fontdata/ai-harness harness
|
|
22
42
|
```
|
|
23
43
|
|
|
24
|
-
Durante a sessão, todos os
|
|
44
|
+
Durante a sessão, todos os 19 comandos ficam disponíveis com o prefixo do plugin — `/fontdata:nova-tarefa`,
|
|
45
|
+
`/fontdata:resolver-bug` etc. —, junto com os hooks e os agents do harness.
|
|
46
|
+
É isso que faz o `/harness`, que encadeia 4 comandos, funcionar sem instalação prévia.
|
|
25
47
|
|
|
26
|
-
O texto depois do nome do comando vira o
|
|
48
|
+
O texto depois do nome do comando vira o argumento do fluxo. Tudo depois de `--` é repassado ao Claude Code:
|
|
27
49
|
|
|
28
50
|
```bash
|
|
29
51
|
npx @fontdata/ai-harness harness -- --model claude-opus-5
|
|
30
52
|
npx @fontdata/ai-harness auditar-seguranca -- -p # headless, para CI
|
|
31
53
|
```
|
|
32
54
|
|
|
33
|
-
Use `run <comando>` quando o nome
|
|
55
|
+
Use `run <comando>` quando o nome colidir com um subcomando do CLI:
|
|
34
56
|
|
|
35
57
|
```bash
|
|
36
58
|
npx @fontdata/ai-harness run git-commit-push
|
|
37
59
|
```
|
|
38
60
|
|
|
39
|
-
**Requisito:** o
|
|
61
|
+
**Requisito:** o Claude Code no `PATH` (`npm i -g @anthropic-ai/claude-code`) e Node.js 22 ou superior.
|
|
40
62
|
|
|
41
63
|
## Modo 2 — instalar como plugin global
|
|
42
64
|
|
|
43
|
-
Se você usa os comandos com frequência e não quer o `npx` a cada vez, registre o marketplace uma vez:
|
|
44
|
-
|
|
45
65
|
```bash
|
|
46
66
|
claude plugin marketplace add fontdata-tecnologia/ai-harness
|
|
47
67
|
claude plugin install fontdata@ai-harness
|
|
48
68
|
```
|
|
49
69
|
|
|
50
|
-
Os comandos passam a existir em qualquer sessão
|
|
70
|
+
Os comandos passam a existir em qualquer sessão como `/fontdata:<comando>`, os agents como `fontdata:<agent>` e os
|
|
71
|
+
hooks ficam ativos em todos os projetos.
|
|
51
72
|
|
|
52
73
|
## Modo 3 — instalar no projeto (`init`)
|
|
53
74
|
|
|
54
|
-
|
|
75
|
+
Para versionar comandos, skills, agents e hooks junto com o código:
|
|
55
76
|
|
|
56
77
|
```bash
|
|
57
|
-
# npm / npx
|
|
58
78
|
npx @fontdata/ai-harness init
|
|
59
|
-
|
|
60
|
-
# yarn
|
|
61
|
-
yarn dlx @fontdata/ai-harness init
|
|
62
|
-
|
|
63
|
-
# pnpm
|
|
64
|
-
pnpm dlx @fontdata/ai-harness init
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
Ou instale o CLI globalmente uma vez:
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
npm i -g @fontdata/ai-harness
|
|
71
|
-
fontdata-ai-harness init
|
|
72
79
|
```
|
|
73
80
|
|
|
74
|
-
|
|
81
|
+
O `init` interativo detecta se o projeto é novo ou existente, pergunta o que instalar e grava um lock com o hash de
|
|
82
|
+
cada arquivo em `.ai-harness/lock.json`. Instalados assim, os comandos são invocados sem prefixo: `/harness`,
|
|
83
|
+
`/resolver-bug`...
|
|
75
84
|
|
|
76
|
-
|
|
85
|
+
Sem terminal interativo (em CI, por exemplo), o `init` só simula; `--yes` aplica:
|
|
77
86
|
|
|
78
87
|
```bash
|
|
79
|
-
npx @fontdata/ai-harness
|
|
80
|
-
npx @fontdata/ai-harness --
|
|
88
|
+
npx @fontdata/ai-harness init --escopo recomendado --yes
|
|
89
|
+
npx @fontdata/ai-harness init --comandos resolver-bug,nova-tarefa --sem-harness --yes
|
|
81
90
|
```
|
|
82
91
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
O pacote foi renomeado de `@fontdata/ai-commands` para `@fontdata/ai-harness` na versão 2.0.0. Os comandos continuam os mesmos; muda o nome do pacote, o nome do plugin e o prefixo.
|
|
86
|
-
|
|
87
|
-
| Você usava | Passe a usar |
|
|
92
|
+
| Flag | Efeito |
|
|
88
93
|
|---|---|
|
|
89
|
-
| `
|
|
90
|
-
|
|
|
91
|
-
|
|
|
92
|
-
| `
|
|
93
|
-
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
```bash
|
|
98
|
-
claude plugin uninstall ai-commands@fontdata
|
|
99
|
-
claude plugin marketplace remove fontdata
|
|
100
|
-
claude plugin marketplace add fontdata-tecnologia/ai-harness
|
|
101
|
-
claude plugin install fontdata@ai-harness
|
|
102
|
-
```
|
|
94
|
+
| `--escopo recomendado\|tudo` | Conjunto de comandos |
|
|
95
|
+
| `--comandos a,b,c` | Seleção manual |
|
|
96
|
+
| `--sem-harness` | Não inclui o comando-mestre `/harness` |
|
|
97
|
+
| `--sem-hooks` / `--sem-agents` | Não instala hooks / agents |
|
|
98
|
+
| `--sem-comentarios` | Não instala a rule de comentários, o hook e a catraca do legado |
|
|
99
|
+
| `--claude-md criar\|manter\|backup\|sobrescrever` | O que fazer com o `CLAUDE.md` (padrão: `criar`) |
|
|
100
|
+
| `--conflito sobrescrever\|pular` | Arquivos que já existem (padrão: `pular`) |
|
|
101
|
+
| `--yes` | Aplica; sem ele, só simula |
|
|
103
102
|
|
|
104
|
-
|
|
103
|
+
Com o plugin `fontdata@ai-harness` habilitado, o `init` não instala os hooks no projeto, para eles não rodarem
|
|
104
|
+
duas vezes.
|
|
105
105
|
|
|
106
|
-
##
|
|
106
|
+
## Subcomandos do CLI
|
|
107
107
|
|
|
108
|
-
|
|
108
|
+
| Subcomando | O que faz |
|
|
109
|
+
|---|---|
|
|
110
|
+
| `init [caminho]` | Instala comandos, skills, agents e hooks no projeto |
|
|
111
|
+
| `doctor [caminho]` | Diagnostica instalação, contrato dos documentos, rastro, bloqueios antigos e versão do Node |
|
|
112
|
+
| `update [caminho]` | Atualiza o que foi instalado sem sobrescrever alterações locais (`--check`, `--yes`, `--forcar`) |
|
|
113
|
+
| `migrar [caminho]` | Move os documentos do layout anterior para `docs/trabalhos/<id>/` (`--yes`) |
|
|
114
|
+
| `memoria [caminho]` | Índice de quem mexeu em cada arquivo (`--arquivo <caminho>`, `--regressao <id>`) |
|
|
115
|
+
| `evento <evento>` | Grava no rastro do trabalho (usado por fluxos e agents) |
|
|
116
|
+
| `comentarios [caminho]` | Instala o hook do padrão de comentários com a catraca do legado (`--yes`) |
|
|
117
|
+
| `list` | Lista o catálogo |
|
|
118
|
+
|
|
119
|
+
## Modelo de arquivos
|
|
120
|
+
|
|
121
|
+
| Arquivo | Papel |
|
|
122
|
+
|---|---|
|
|
123
|
+
| `SPEC.md` (raiz) | Definição **principal** do projeto |
|
|
124
|
+
| `CLAUDE.md` (raiz) | Context file lido em toda sessão |
|
|
125
|
+
| `docs/trabalhos/AAAA-MM-DD-<slug>/SPEC.md` | Spec do trabalho |
|
|
126
|
+
| `docs/trabalhos/<id>/PLAN.md` | Plano: sprints, fases e tasks (as tasks também no frontmatter) |
|
|
127
|
+
| `docs/trabalhos/<id>/DECISOES.md` | Decisões tomadas no planejamento e na execução |
|
|
128
|
+
| `docs/trabalhos/<id>/BLOQUEIOS.md` | Dúvidas que pararam uma task |
|
|
129
|
+
| `docs/trabalhos/<id>/relatorios/TECNICO.md` e `CLIENTE.md` | Relatório para engenharia e para cliente ou gestão |
|
|
130
|
+
| `docs/eventos/<id>.jsonl` | Rastro de eventos (não versionado por padrão) |
|
|
131
|
+
| `.ai-harness/lock.json` e `config.json` | Lock da instalação e configuração dos hooks (versionar) |
|
|
109
132
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
3. Pergunta **o que instalar**: _Conjunto recomendado_, _Tudo_ ou _Escolher manualmente_ (seleção por categoria).
|
|
113
|
-
- Em _Escolher manualmente_, **projeto novo** já vem com os comandos recomendados marcados; **projeto existente** vem vazio (ideal para cadastrar comandos avulsos).
|
|
114
|
-
4. Pergunta se quer o **comando-mestre `/harness`** (conduz a sequência de setup em ordem). Se escolhido, o init **inclui automaticamente** os comandos que o `/harness` depende, mesmo que não tenham sido marcados. O mesmo vale para **dependências entre comandos** (campo `requires` no catálogo): ao instalar um comando que depende de outro, o dependente entra junto automaticamente.
|
|
115
|
-
5. Pergunta se deve criar/atualizar o **`CLAUDE.md` base** na raiz (com opção de `.bak` se já existir).
|
|
116
|
-
6. Copia os comandos para `.claude/commands/` e mostra um resumo. Em caso de conflito, pergunta se sobrescreve ou pula.
|
|
117
|
-
7. Instala em `.claude/skills/` as **skills exigidas** pelos comandos escolhidos (campo `requiresSkills` no catálogo) — hoje, `/auditar-seguranca` puxa a skill `lgpd-checker`.
|
|
133
|
+
Os formatos estão em [`docs/contratos/ARTEFATOS.md`](docs/contratos/ARTEFATOS.md) e
|
|
134
|
+
[`docs/contratos/EVENTOS.md`](docs/contratos/EVENTOS.md); o `doctor` valida os dois.
|
|
118
135
|
|
|
119
|
-
##
|
|
136
|
+
## Garantias
|
|
120
137
|
|
|
121
|
-
|
|
138
|
+
### Hooks
|
|
122
139
|
|
|
123
|
-
|
|
|
140
|
+
| Hook | Quando | Modo inicial |
|
|
124
141
|
|---|---|---|
|
|
125
|
-
| `
|
|
142
|
+
| `lembrete` | O pedido parece bug, funcionalidade nova, risco de segurança ou problema de performance: sugere o fluxo certo | aviso |
|
|
143
|
+
| `segredo-no-commit` | `git commit` com chave de acesso, token, chave privada ou senha no diff | **bloqueio** |
|
|
144
|
+
| `proteger-contratos` | SPEC, PLAN ou CLAUDE.md reescritos durante a execução de um trabalho | aviso |
|
|
145
|
+
| `task-so-fecha-verde` | Task marcada como concluída sem suíte verde no rastro | aviso |
|
|
146
|
+
| `sem-jargao` | Termo técnico no relatório para o cliente | aviso |
|
|
126
147
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
`templates/skills/lgpd-checker/ORIGEM.md` para créditos e instruções de atualização.
|
|
130
|
-
|
|
131
|
-
## Modelo de arquivos do harness
|
|
148
|
+
O modo de cada hook (`aviso`, `bloqueio` ou `desligado`) fica em `.ai-harness/config.json`. Hook que falha
|
|
149
|
+
internamente não atrapalha o trabalho — exceto o de segurança em modo bloqueio.
|
|
132
150
|
|
|
133
|
-
|
|
134
|
-
|--------|-------|-------|
|
|
135
|
-
| `SPEC.md` | raiz | Definição **principal** e completa do projeto (única). |
|
|
136
|
-
| `CLAUDE.md` | raiz | Context file lido em toda sessão. |
|
|
137
|
-
| `docs/specs/AAAA-MM-DD-*.md` | `docs/specs/` | Specs **complementares**: o start inicial e cada nova tarefa. |
|
|
138
|
-
| `docs/plans/AAAA-MM-DD-*.md` | `docs/plans/` | Plano de implementação de cada spec complementar. |
|
|
139
|
-
| `docs/bugs/AAAA-MM-DD-<slug>.md` | `docs/bugs/` | Plano de correção de bugs (via `/resolver-bug`). |
|
|
151
|
+
### Agents somente leitura
|
|
140
152
|
|
|
141
|
-
|
|
153
|
+
| Agent | Papel |
|
|
154
|
+
|---|---|
|
|
155
|
+
| `revisor-testes` | Os testes da task falhariam com a implementação errada? |
|
|
156
|
+
| `qa` | Critérios de aceite com evidência e suíte completa antes do gate |
|
|
157
|
+
| `investigador` | Causa raiz de um bug, comprovada ou marcada como hipótese |
|
|
158
|
+
| `auditor-plano` | O plano pode ser executado sem ninguém perguntar nada no meio? |
|
|
142
159
|
|
|
143
|
-
|
|
160
|
+
## Catálogo
|
|
144
161
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
- `/gerar-spec` ⭐ — entrevista e gera o `SPEC.md` principal na raiz
|
|
148
|
-
- `/gerar-claude-md` ⭐ — gera o `CLAUDE.md` a partir do SPEC
|
|
149
|
-
- `/gerar-ignore` — gera `.claudeignore` e `.gitignore`
|
|
150
|
-
- `/scaffold` ⭐ — estrutura inicial, rota `/health` e testes de smoke
|
|
162
|
+
`⭐` = incluído no conjunto recomendado. **(skill)** = fluxo publicado como skill: invocado pelo mesmo nome e
|
|
163
|
+
também acionado pelo modelo quando o pedido combina.
|
|
151
164
|
|
|
152
|
-
|
|
165
|
+
### Setup e contexto
|
|
166
|
+
- `/sincronizar-claude-md` ⭐ — gera o `SPEC.md` e o `CLAUDE.md` que faltam e reconcilia os existentes com o código e os agents, inclusive a seção de orquestração
|
|
167
|
+
- `/evoluir-harness` ⭐ **(skill)** — audita a pasta `.claude` e cria agents, skills, rules, hooks, code-reviewer e design system do projeto
|
|
153
168
|
|
|
154
169
|
### Orquestração & implementação
|
|
155
|
-
- `/executar-plan` ⭐ —
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
- `/
|
|
159
|
-
|
|
160
|
-
### Harness (agents/skills/hooks/rules)
|
|
161
|
-
- `/criar-skill` — cria skills do projeto em `.claude/skills/`
|
|
162
|
-
- `/criar-agents` — cria agents especializados em `.claude/agents/`
|
|
163
|
-
- `/criar-hooks` — cria hooks por agent em `.claude/hooks/`
|
|
164
|
-
- `/criar-rules` — cria rules em `.claude/rules/`
|
|
165
|
-
- `/configurar-comentarios` ⭐ — instala o padrão de comentários em três camadas: a rule `.claude/rules/comentarios.md` (orçamento duro e contra-exemplos), o bloco autossuficiente no `CLAUDE.md` e o hook `PostToolUse` bloqueante com **catraca** sobre o código legado — em qualquer linguagem, inclusive Delphi/Pascal
|
|
166
|
-
- `/criar-code-reviewer` ⭐ — cria o agent `code-reviewer` (somente leitura)
|
|
167
|
-
|
|
168
|
-
### Slash commands & dia a dia
|
|
169
|
-
- `/resolver-bug` ⭐ — investiga, planeja em `docs/bugs` e corrige um bug
|
|
170
|
-
- `/nova-tarefa` ⭐ — gera spec+plano em `docs/` (start inicial ou nova tarefa) e, se confirmado, dispara o orquestrador
|
|
170
|
+
- `/executar-plan` ⭐ **(skill)** — executa o plano com sub-agents, gates de `revisor-testes` e `qa`, portões extras do projeto, bloqueios e retomada
|
|
171
|
+
|
|
172
|
+
### Dia a dia
|
|
173
|
+
- `/resolver-bug` ⭐ **(skill)** — investiga a causa raiz, corrige com teste de regressão e entrega relatório técnico e para o cliente
|
|
174
|
+
- `/nova-tarefa` ⭐ **(skill)** — verifica se já existe, gera SPEC e PLAN do trabalho, audita o plano e dispara a execução
|
|
171
175
|
|
|
172
176
|
### Qualidade & manutenção de código
|
|
173
|
-
- `/gerar-testes` —
|
|
174
|
-
- `/refatorar` — refatora
|
|
175
|
-
- `/codigo-morto` — varre o projeto em busca de código morto e propõe remoção segura
|
|
177
|
+
- `/gerar-testes` — escreve testes para o que não está coberto, sem alterar o código de produção
|
|
178
|
+
- `/refatorar` — refatora em passos pequenos com os testes como rede de segurança, inclusive a remoção de código morto
|
|
176
179
|
- `/atualizar-deps` — atualiza dependências em lotes, testando a cada passo
|
|
177
180
|
|
|
178
181
|
### Documentação & onboarding
|
|
179
|
-
- `/
|
|
180
|
-
- `/
|
|
181
|
-
- `/onboarding` — gera um guia de onboarding (rodar, entender e contribuir) em `docs/`
|
|
182
|
+
- `/diagrama` — gera diagramas Mermaid fiéis ao código
|
|
183
|
+
- `/onboarding` — gera um guia verificado para quem chega no projeto
|
|
182
184
|
- `/gerar-env` — monta o `.env.example` a partir das variáveis lidas no código
|
|
183
185
|
|
|
184
186
|
### Avançado
|
|
185
|
-
- `/
|
|
186
|
-
- `/auditar-ui` — navega a
|
|
187
|
-
- `/
|
|
188
|
-
- `/auditar-
|
|
189
|
-
- `/auditar-seguranca` — auditoria defensiva (segredos, deps, inputs, configs) **+ conformidade LGPD** via skill `lgpd-checker`
|
|
190
|
-
|
|
191
|
-
### Manutenção & validação
|
|
192
|
-
- `/validar-commands` — audita `.claude`: valida models dos agents, aponta redundâncias e sugere novos commands
|
|
187
|
+
- `/memoria` **(skill)** — mostra quem já mexeu num arquivo e por quê e aponta regressões candidatas de um bug
|
|
188
|
+
- `/auditar-ui` **(skill)** — navega a aplicação via Playwright MCP e audita UX/UI e acessibilidade
|
|
189
|
+
- `/auditar-performance` **(skill)** — mede e audita gargalos de performance
|
|
190
|
+
- `/auditar-seguranca` **(skill)** — auditoria defensiva de segurança e conformidade com a LGPD
|
|
193
191
|
|
|
194
192
|
### Utilitário
|
|
195
|
-
- `/git-commit-push` ⭐ — gera mensagem (PT-BR, Conventional Commits) e faz add
|
|
196
|
-
- `/versao` ⭐ — detecta o versionamento da stack
|
|
197
|
-
- `/
|
|
198
|
-
- `/revisar-pr` — revisa um PR ou o diff atual, classificando os achados
|
|
193
|
+
- `/git-commit-push` ⭐ — gera a mensagem (PT-BR, Conventional Commits) e faz add, commit e push
|
|
194
|
+
- `/versao` ⭐ — detecta o versionamento da stack e aplica bump e changelog, com aprovação e sem push
|
|
195
|
+
- `/revisar-pr` — revisa um PR ou o diff atual, classifica os achados e, se pedido, organiza as correções num trabalho
|
|
199
196
|
|
|
200
|
-
###
|
|
201
|
-
- `/harness` — conduz
|
|
197
|
+
### Setup guiado
|
|
198
|
+
- `/harness` **(skill)** — conduz o setup em etapas (ideia, contexto, ignores, plano do start, scaffold, peças do harness, auto-tag e execução); `/harness <etapa>` roda uma etapa isolada
|
|
202
199
|
|
|
203
|
-
|
|
200
|
+
O padrão de comentários não é um comando: a rule, o hook e a catraca do legado vêm do `init` e do `update`.
|
|
201
|
+
|
|
202
|
+
A skill `lgpd-checker`, usada pela auditoria de segurança, é uma cópia vendorizada de
|
|
203
|
+
[bittencourtthulio/lgpd-checker](https://github.com/bittencourtthulio/lgpd-checker); veja
|
|
204
|
+
`templates/skills/lgpd-checker/ORIGEM.md`.
|
|
204
205
|
|
|
205
|
-
|
|
206
|
+
## Fluxo recomendado
|
|
206
207
|
|
|
207
|
-
|
|
208
|
+
O jeito mais simples é rodar **`/harness`**, que pergunta se o projeto é novo ou existente e conduz as etapas:
|
|
208
209
|
|
|
209
210
|
```
|
|
210
|
-
|
|
211
|
-
→ /
|
|
212
|
-
→ /configurar-comentarios → /criar-skill → /criar-agents → /criar-code-reviewer → /criar-rules → /criar-hooks → /configurar-orquestrador
|
|
211
|
+
ideia → /sincronizar-claude-md → ignores → /nova-tarefa (start) → scaffold
|
|
212
|
+
→ /evoluir-harness (skills, agents, code-reviewer, rules, hooks e rule de projeto) → auto-tag
|
|
213
213
|
→ /executar-plan
|
|
214
214
|
```
|
|
215
215
|
|
|
216
|
-
|
|
216
|
+
Em projeto existente, o `/harness` pula a ideia, o scaffold e a execução, e começa pelo `npx @fontdata/ai-harness doctor`.
|
|
217
217
|
|
|
218
|
-
|
|
218
|
+
No dia a dia: `/nova-tarefa` → `/executar-plan` para funcionalidades, `/resolver-bug` para defeitos,
|
|
219
|
+
`/git-commit-push` e `/versao`. De vez em quando: `/sincronizar-claude-md` e `/evoluir-harness`.
|
|
219
220
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
221
|
+
## Exemplos
|
|
222
|
+
|
|
223
|
+
A pasta [`exemplos/`](exemplos/) traz trabalhos gerados em sessões reais do Claude Code sobre um projeto demo: uma
|
|
224
|
+
funcionalidade nova, uma correção de bug e uma auditoria de segurança, com os documentos de cada um.
|
|
225
|
+
|
|
226
|
+
## Migrando da 2.0 (ou da 1.x) para a 2.1
|
|
227
|
+
|
|
228
|
+
**Node.js 22** ou superior passa a ser exigido. Num branch do projeto, siga esta ordem:
|
|
229
|
+
|
|
230
|
+
1. `npx @fontdata/ai-harness update --check` e depois `update --yes`. O `update` faz o seguinte:
|
|
231
|
+
- reconhece a instalação de qualquer versão anterior, mesmo sem lock;
|
|
232
|
+
- troca os comandos que viraram skill ou saíram do catálogo, e renomeia para `<id>-legado.md` os que você editou;
|
|
233
|
+
- instala agents, hooks, o padrão de comentários e a rule de projeto.
|
|
234
|
+
2. Leve o que for do projeto nos arquivos `-legado` para `.claude/rules/harness-projeto.md`, ou para skills do projeto
|
|
235
|
+
com `/evoluir-harness`, e apague os arquivos.
|
|
236
|
+
3. `npx @fontdata/ai-harness migrar`, que só simula, e depois `migrar --yes`: move os documentos do layout anterior
|
|
237
|
+
para `docs/trabalhos/<id>/`.
|
|
238
|
+
4. `npx @fontdata/ai-harness doctor` até não sobrar erro.
|
|
239
|
+
|
|
240
|
+
O que quebra: os fluxos viraram **skills**, o `/criar-rag` foi substituído pela `/memoria`, o catálogo passou de 36
|
|
241
|
+
para 19 comandos e o `/configurar-comentarios` saiu (veja o `CHANGELOG.md`). O
|
|
242
|
+
[guia de migração](docs/guias/migracao-2.1.md) explica cada aviso do `doctor` e a ordem sugerida para vários
|
|
243
|
+
projetos.
|
|
224
244
|
|
|
225
|
-
|
|
245
|
+
## Migrando do `@fontdata/ai-commands`
|
|
246
|
+
|
|
247
|
+
O pacote foi renomeado de `@fontdata/ai-commands` para `@fontdata/ai-harness` na versão 2.0.0.
|
|
248
|
+
|
|
249
|
+
| Você usava | Passe a usar |
|
|
250
|
+
|---|---|
|
|
251
|
+
| `npx @fontdata/ai-commands <comando>` | `npx @fontdata/ai-harness <comando>` |
|
|
252
|
+
| `/ai-commands:<comando>` | `/fontdata:<comando>` |
|
|
253
|
+
| Plugin `ai-commands@fontdata` | Plugin `fontdata@ai-harness` (veja abaixo) |
|
|
254
|
+
| `npm i -g @fontdata/ai-commands` + `fontdata-ai-commands init` | `npm uninstall -g @fontdata/ai-commands && npm i -g @fontdata/ai-harness` + `fontdata-ai-harness init` |
|
|
255
|
+
| Comandos instalados via `init` | Nada muda no nome — rode `update` para receber a 2.1 |
|
|
226
256
|
|
|
227
|
-
|
|
257
|
+
Para trocar o plugin global:
|
|
228
258
|
|
|
229
259
|
```bash
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
claude plugin validate . # valida o manifesto do plugin
|
|
260
|
+
claude plugin uninstall ai-commands@fontdata
|
|
261
|
+
claude plugin marketplace remove fontdata
|
|
262
|
+
claude plugin marketplace add fontdata-tecnologia/ai-harness
|
|
263
|
+
claude plugin install fontdata@ai-harness
|
|
235
264
|
```
|
|
236
265
|
|
|
237
|
-
|
|
266
|
+
## Contribuindo
|
|
267
|
+
|
|
268
|
+
Veja o [`CONTRIBUTING.md`](CONTRIBUTING.md): ambiente, estrutura do repositório e como criar comando, skill, hook e
|
|
269
|
+
agent. As mudanças de cada versão estão no [`CHANGELOG.md`](CHANGELOG.md).
|
|
270
|
+
|
|
271
|
+
## Licença
|
|
238
272
|
|
|
239
|
-
|
|
273
|
+
MIT — veja [`LICENSE`](LICENSE).
|
package/{src → dist}/catalog.js
RENAMED
|
@@ -1,26 +1,19 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
|
-
import { fileURLToPath } from 'node:url';
|
|
3
2
|
import { dirname, join } from 'node:path';
|
|
4
|
-
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
5
4
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
6
|
-
|
|
7
5
|
/** Raiz da pasta de templates do pacote. */
|
|
8
6
|
export const templatesDir = join(__dirname, '..', 'templates');
|
|
9
|
-
|
|
10
7
|
/** Carrega e retorna o catálogo de comandos (templates/catalog.json). */
|
|
11
8
|
export function loadCatalog() {
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
const raw = readFileSync(join(templatesDir, 'catalog.json'), 'utf8');
|
|
10
|
+
return JSON.parse(raw);
|
|
14
11
|
}
|
|
15
|
-
|
|
16
12
|
/** Lista achatada de todos os comandos do catálogo, com o grupo anexado. */
|
|
17
13
|
export function allCommands(catalog) {
|
|
18
|
-
|
|
19
|
-
group.commands.map((cmd) => ({ ...cmd, group: group.title }))
|
|
20
|
-
);
|
|
14
|
+
return catalog.groups.flatMap((group) => group.commands.map((cmd) => ({ ...cmd, group: group.title })));
|
|
21
15
|
}
|
|
22
|
-
|
|
23
16
|
/** Apenas os comandos marcados como recomendados (conjunto núcleo). */
|
|
24
17
|
export function recommendedCommands(catalog) {
|
|
25
|
-
|
|
18
|
+
return allCommands(catalog).filter((cmd) => cmd.recommended);
|
|
26
19
|
}
|