@lugom.io/hefesto 0.3.0 → 1.0.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.
Files changed (73) hide show
  1. package/agents/hefesto-argos.md +51 -237
  2. package/agents/hefesto-athena.md +59 -339
  3. package/agents/hefesto-hermes.md +39 -71
  4. package/bin/install.js +105 -69
  5. package/hooks/hefesto-check-update.cjs +32 -11
  6. package/hooks/hefesto-statusline.cjs +8 -17
  7. package/hooks/hefesto-workflow.cjs +68 -0
  8. package/package.json +12 -2
  9. package/skills/hefesto-context/SKILL.md +59 -26
  10. package/skills/hefesto-debug/SKILL.md +54 -0
  11. package/skills/hefesto-design/SKILL.md +133 -143
  12. package/skills/hefesto-execute/SKILL.md +133 -0
  13. package/skills/hefesto-init/SKILL.md +94 -59
  14. package/skills/hefesto-init/references/api.md +116 -0
  15. package/skills/hefesto-init/references/cli.md +91 -0
  16. package/skills/hefesto-init/references/mobile.md +69 -0
  17. package/skills/hefesto-init/references/web.md +246 -0
  18. package/skills/hefesto-new-feature/SKILL.md +75 -41
  19. package/skills/hefesto-security/SKILL.md +89 -0
  20. package/skills/hefesto-security/references/boundaries-and-bypasses.md +152 -0
  21. package/skills/hefesto-security/references/secrets-detection.md +121 -0
  22. package/skills/hefesto-security/references/severity-and-judgment.md +176 -0
  23. package/skills/hefesto-simplify/SKILL.md +82 -0
  24. package/templates/TPL-CLAUDE.md +54 -0
  25. package/templates/TPL-CONFIG.json +19 -0
  26. package/templates/TPL-DESIGN.md +305 -0
  27. package/templates/{FEATURE.md → TPL-FEATURE.md} +13 -6
  28. package/templates/TPL-PROJECT.md +50 -0
  29. package/templates/{RECON.md → TPL-RECON.md} +10 -4
  30. package/templates/{RESEARCH.md → TPL-RESEARCH.md} +15 -15
  31. package/templates/TPL-SECURITY.md +42 -0
  32. package/templates/TPL-SIMPLIFY.md +40 -0
  33. package/templates/{STATE.md → TPL-STATE.md} +0 -6
  34. package/templates/TPL-VERDICT.md +34 -0
  35. package/skills/hefesto-design/data/animations.csv +0 -21
  36. package/skills/hefesto-design/data/anti-patterns.csv +0 -41
  37. package/skills/hefesto-design/data/charts.csv +0 -26
  38. package/skills/hefesto-design/data/colors.csv +0 -108
  39. package/skills/hefesto-design/data/components.csv +0 -31
  40. package/skills/hefesto-design/data/google-fonts.csv +0 -56
  41. package/skills/hefesto-design/data/icons.csv +0 -23
  42. package/skills/hefesto-design/data/landing-pages.csv +0 -28
  43. package/skills/hefesto-design/data/products.csv +0 -46
  44. package/skills/hefesto-design/data/spacing.csv +0 -16
  45. package/skills/hefesto-design/data/styles.csv +0 -53
  46. package/skills/hefesto-design/data/typography.csv +0 -41
  47. package/skills/hefesto-design/data/ux-rules.csv +0 -61
  48. package/skills/hefesto-design/references/accessibility.md +0 -335
  49. package/skills/hefesto-design/references/aesthetics.md +0 -343
  50. package/skills/hefesto-design/references/anti-patterns.md +0 -107
  51. package/skills/hefesto-design/references/checklist.md +0 -66
  52. package/skills/hefesto-design/references/color-psychology.md +0 -203
  53. package/skills/hefesto-design/references/component-specs.md +0 -318
  54. package/skills/hefesto-design/references/polish.md +0 -339
  55. package/skills/hefesto-design/references/token-architecture.md +0 -394
  56. package/skills/hefesto-design/references/ux-rules.md +0 -349
  57. package/skills/hefesto-design/scripts/__pycache__/audit.cpython-314.pyc +0 -0
  58. package/skills/hefesto-design/scripts/__pycache__/contrast.cpython-314.pyc +0 -0
  59. package/skills/hefesto-design/scripts/__pycache__/core.cpython-314.pyc +0 -0
  60. package/skills/hefesto-design/scripts/__pycache__/design_system.cpython-314.pyc +0 -0
  61. package/skills/hefesto-design/scripts/__pycache__/search.cpython-314.pyc +0 -0
  62. package/skills/hefesto-design/scripts/__pycache__/validate_tokens.cpython-314.pyc +0 -0
  63. package/skills/hefesto-design/scripts/audit.py +0 -450
  64. package/skills/hefesto-design/scripts/contrast.py +0 -195
  65. package/skills/hefesto-design/scripts/core.py +0 -155
  66. package/skills/hefesto-design/scripts/design_system.py +0 -311
  67. package/skills/hefesto-design/scripts/search.py +0 -235
  68. package/skills/hefesto-design/scripts/validate_tokens.py +0 -274
  69. package/skills/hefesto-update/SKILL.md +0 -34
  70. package/templates/DESIGN.md +0 -137
  71. package/templates/PROJECT.md +0 -28
  72. package/templates/ROADMAP.md +0 -23
  73. package/templates/VERDICT.md +0 -52
@@ -0,0 +1,121 @@
1
+ # Detecção de Segredos
2
+
3
+ Regex por provider e padrões genéricos para detecção automatizada de segredos hardcoded. Inclui auditoria de `.gitignore`.
4
+
5
+ ## Quick Index
6
+
7
+ - **API keys por provider** → "API Keys by Provider" (linha 12)
8
+ - **Padrões genéricos** → "Generic Patterns" (linha 31)
9
+ - **.env commitado** → ".env Committed" (linha 47)
10
+ - **Auditoria de .gitignore** → "Gitignore Audit" (linha 55)
11
+ - **Regex para grep** → "Grep Patterns" (linha 87)
12
+
13
+ ---
14
+
15
+ ## API Keys by Provider
16
+
17
+ | Provider | Prefixo / Padrão | Regex |
18
+ | ------------- | ---------------------- | -------------------------------------------------------- |
19
+ | **AWS** | `AKIA` (access key) | `AKIA[0-9A-Z]{16}` |
20
+ | **AWS** | Secret key | `['"]\w{40}['"]` proximo de `aws_secret` ou `AWS_SECRET` |
21
+ | **GCP** | Service account JSON | `"type":\s*"service_account"` em `.json` |
22
+ | **GCP** | API key | `AIza[0-9A-Za-z_-]{35}` |
23
+ | **GitHub** | Personal access token | `ghp_[0-9a-zA-Z]{36}` |
24
+ | **GitHub** | OAuth token | `gho_[0-9a-zA-Z]{36}` |
25
+ | **GitHub** | App token | `ghs_[0-9a-zA-Z]{36}` |
26
+ | **Stripe** | Secret key (live) | `sk_live_[0-9a-zA-Z]{24,}` |
27
+ | **Stripe** | Publishable key (live) | `pk_live_[0-9a-zA-Z]{24,}` |
28
+ | **Slack** | Bot token | `xoxb-[0-9]{10,}-[0-9a-zA-Z]{24,}` |
29
+ | **Slack** | User token | `xoxp-[0-9]{10,}-[0-9a-zA-Z]{24,}` |
30
+ | **Anthropic** | API key | `sk-ant-[0-9a-zA-Z_-]{80,}` |
31
+ | **OpenAI** | API key | `sk-[0-9a-zA-Z]{48,}` |
32
+ | **Twilio** | Account SID | `AC[0-9a-f]{32}` |
33
+ | **SendGrid** | API key | `SG\.[0-9A-Za-z_-]{22}\.[0-9A-Za-z_-]{43}` |
34
+ | **Mailgun** | API key | `key-[0-9a-zA-Z]{32}` |
35
+
36
+ ---
37
+
38
+ ## Generic Patterns
39
+
40
+ | Tipo | O que procurar | Regex |
41
+ | ----------------------- | -------------------------------------------------- | ---------------------------------------------------------------------- |
42
+ | **API key generica** | Variavel com nome sugestivo atribuida a string | `(?:api_key\|apikey\|api_secret\|secret_key)\s*=\s*['"][^'"]{10,}['"]` |
43
+ | **Password hardcoded** | Variavel password/senha atribuida a string | `(?:password\|passwd\|pwd\|senha)\s*=\s*['"][^'"]+['"]` |
44
+ | **JWT hardcoded** | String que comeca com `eyJ` (base64 de `{"`) | `['"]eyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]+['"]` |
45
+ | **URL com credentials** | `user:pass@` em URL | `https?://[^/\s:]+:[^/\s@]+@` |
46
+ | **Connection string** | MongoDB, Postgres, MySQL, Redis | `(?:mongodb\|postgres\|mysql\|redis)://[^/\s:]+:[^/\s@]+@` |
47
+ | **SSH private key** | Begin/end markers | `-----BEGIN (?:RSA\|DSA\|EC\|OPENSSH) PRIVATE KEY-----` |
48
+ | **Arquivo de key** | Extensoes de arquivo sensiveis | `\.(pem\|key\|p12\|pfx\|keystore)$` em arquivos tracked |
49
+ | **Base64 longa** | Strings base64 suspeitas (>40 chars) em atribuicao | `['"][A-Za-z0-9+/=]{40,}['"]` proximo de `key\|secret\|token` |
50
+
51
+ ---
52
+
53
+ ## .env Committed
54
+
55
+ Verificar se `.env` esta no git:
56
+
57
+ 1. `git ls-files .env .env.local .env.production .env.staging` — se retorna algo, esta commitado
58
+ 2. Verificar `.gitignore` — se `.env` nao esta listado, qualquer .env futuro sera commitado
59
+
60
+ ---
61
+
62
+ ## Gitignore Audit
63
+
64
+ Verificar que estes padroes estao em `.gitignore`:
65
+
66
+ ```
67
+ # Secrets e credentials
68
+ .env
69
+ .env.local
70
+ .env.production
71
+ .env.staging
72
+ *.pem
73
+ *.key
74
+ *.p12
75
+ *.pfx
76
+ *.keystore
77
+ credentials.json
78
+ service-account*.json
79
+ *-credentials.json
80
+
81
+ # IDE e sistema
82
+ .idea/
83
+ .vscode/settings.json
84
+ *.swp
85
+ .DS_Store
86
+
87
+ # Databases locais
88
+ *.sqlite
89
+ *.sqlite3
90
+ *.db
91
+ ```
92
+
93
+ Se `.gitignore` nao tem estes padroes, reportar como ⚠ warning.
94
+
95
+ Se algum destes arquivos ja esta tracked (`git ls-files`), reportar como 🔴 critical — precisam ser removidos do tracking com `git rm --cached`.
96
+
97
+ ---
98
+
99
+ ## Grep Patterns
100
+
101
+ Regex prontos para busca automatizada com `Grep` tool.
102
+
103
+ ```
104
+ AKIA[0-9A-Z]{16}
105
+ AIza[0-9A-Za-z_-]{35}
106
+ ghp_[0-9a-zA-Z]{36}
107
+ gho_[0-9a-zA-Z]{36}
108
+ sk_live_[0-9a-zA-Z]{24,}
109
+ pk_live_[0-9a-zA-Z]{24,}
110
+ xoxb-[0-9]{10,}
111
+ xoxp-[0-9]{10,}
112
+ sk-ant-[0-9a-zA-Z_-]{80,}
113
+ sk-[0-9a-zA-Z]{48,}
114
+ SG\.[0-9A-Za-z_-]{22}
115
+ -----BEGIN\s+(?:RSA|DSA|EC|OPENSSH)\s+PRIVATE\s+KEY
116
+ eyJ[A-Za-z0-9_-]{10,}\.eyJ
117
+ (?:password|passwd|pwd|senha)\s*=\s*['"][^'"]+['"]
118
+ (?:api_key|apikey|api_secret|secret_key)\s*=\s*['"][^'"]{10,}['"]
119
+ https?://[^/\s:]+:[^/\s@]+@
120
+ (?:mongodb|postgres|mysql|redis)://[^/\s:]+:[^/\s@]+@
121
+ ```
@@ -0,0 +1,176 @@
1
+ # Severidade e Julgamento
2
+
3
+ Critérios universais para classificar findings, evitar falsos positivos e calibrar decisões de fix.
4
+
5
+ ## Quick Index
6
+
7
+ - **Níveis de severidade** → "Severity Levels" (linha 14)
8
+ - **Falhas silenciosas** → "Silent Failures" (linha 50)
9
+ - **Quando NÃO reportar** → "When NOT to Report" (linha 108)
10
+ - **SEMPRE reportar** → "When to ALWAYS Report" (linha 156)
11
+ - **Migrations e schema** → "Migration and Schema Changes" (linha 172)
12
+
13
+ ---
14
+
15
+ ## Severity Levels
16
+
17
+ ### Critical — aplicar fix automaticamente
18
+
19
+ Condições (independente de linguagem):
20
+
21
+ - Erro completamente ignorado (catch vazio, erro descartado, bare except equivalente)
22
+ - Processo pode crashar ou ficar em estado inconsistente
23
+ - Panic/crash engolido sem log
24
+ - Segredos de produção hardcoded
25
+ - Input de usuário direto em code execution, shell commands, ou queries sem sanitização
26
+ - Desserialização de dados não confiáveis usando deserializadores inseguros
27
+ - Permissões excessivas de filesystem (world-writable)
28
+
29
+ ### Warning — aplicar fix se seguro, perguntar se altera comportamento
30
+
31
+ Condições:
32
+
33
+ - Erro logado mas não propagado (pode ser intencional)
34
+ - Valor default pode confundir chamador (retorna `[]` ou `null` em vez de erro)
35
+ - Catch/except muito amplo mas pelo menos trata o erro
36
+ - Validação ausente em trust boundary
37
+ - Configuração permissiva (CORS wildcard, debug mode, crypto fraco)
38
+ - Rate limiting ausente em endpoints sensíveis (login, reset, signup)
39
+ - Queries sem limit/pagination
40
+
41
+ ### Info — apenas reportar
42
+
43
+ Condições:
44
+
45
+ - Optional chaining ou null coalescing que pode ser intencional
46
+ - Error handling via context managers sem except explícito
47
+ - Configuração que pode ser intencional no contexto
48
+ - Minor code smells sem impacto de segurança direto
49
+
50
+ ---
51
+
52
+ ## Silent Failures
53
+
54
+ Falhas silenciosas são um dos riscos mais subestimados em segurança. Quando erros são engolidos, bugs ficam invisíveis em produção — incluindo bugs de segurança.
55
+
56
+ ### Categorias universais
57
+
58
+ Estas categorias se aplicam a **qualquer linguagem** — os mecanismos mudam (try/catch, error returns, Result types, defer, promises), mas os anti-padrões são os mesmos:
59
+
60
+ | Categoria | Definição | Severidade |
61
+ | --------------------------- | --------------------------------------------------------------------------------------------- | ---------- |
62
+ | **Swallowed errors** | Erro capturado/retornado e completamente ignorado. Sem log, sem propagação, sem feedback | critical |
63
+ | **Log-only handling** | Erro logado mas execução continua como se fosse sucesso. Chamador não sabe que houve falha | warning |
64
+ | **Deceptive defaults** | Handler retorna valor indistinguível de sucesso (lista vazia, null, zero) sem indicar erro | warning |
65
+ | **Overly broad catching** | Captura todos os erros quando só específicos eram esperados, escondendo bugs não relacionados | warning |
66
+ | **Abandoned intent** | Handler com TODO/FIXME — intenção de tratar nunca materializada | critical |
67
+ | **Panic/crash suppression** | Mecanismo de recovery (recover, catch-all, global handler) que suprime sem logar | critical |
68
+
69
+ ### O que procurar (por paradigma)
70
+
71
+ | Paradigma | Mecanismos a inspecionar |
72
+ | -------------------------------------------------------- | ------------------------------------------------------------------------------- |
73
+ | **Exception-based** (JS/TS, Python, Java, C#, Ruby, PHP) | try/catch/except blocks, promise .catch(), global exception handlers |
74
+ | **Error-return** (Go, Rust, C) | `_ = err`, `Result` não verificado, errno ignorado |
75
+ | **Event-based** (Node.js, browsers) | EventEmitters sem handler de 'error', unhandled rejection handlers |
76
+ | **Async** (qualquer) | Promises/Futures sem tratamento de rejeição, async sem try/catch em entrypoints |
77
+ | **Deferred cleanup** (Go defer, Python with, C++ RAII) | Erros em cleanup ignorados (ex: close() falha em escrita) |
78
+
79
+ ### Quando silenciamento é aceitável
80
+
81
+ Não reportar como critical se:
82
+
83
+ - **Cleanup code** — tentativa de deletar temp file em finally/defer. Falha não é crítica
84
+ - **Feature detection** — testar se recurso existe, catch para saber que não existe
85
+ - **Documentado** — catch com comentário explicando por que é intencional
86
+ - **Best-effort** — operações explicitamente opcionais (ex: enviar analytics, prefetch de cache)
87
+
88
+ ---
89
+
90
+ ## When NOT to Report
91
+
92
+ ### Test code
93
+
94
+ Arquivos em diretórios ou com padrões de teste:
95
+
96
+ - `*.test.*`, `*.spec.*`, `__tests__/`, `test_*`, `*_test.go`, `*_test.py`, `*_test.rs`, `*Test.java`, `*_test.rb`, `tests/`, `spec/`
97
+ - Exceção: se o teste usa input de PRODUÇÃO ou segredos reais → reportar
98
+
99
+ ### Static/literal input
100
+
101
+ - O valor perigoso é uma string fixa no código, não controlada pelo usuário
102
+ - `eval("2 + 2")` é code smell, não vulnerabilidade
103
+ - Pode ser mencionado como ℹ info, nunca como 🔴 critical
104
+
105
+ ### Sanitization present
106
+
107
+ - Existe validação/sanitização entre a fonte de input e a operação perigosa
108
+ - Procurar: schema validation, type guards, sanitization functions, parameterized queries, middleware de validação
109
+ - Se a sanitização está presente mas é insuficiente → reportar com contexto
110
+
111
+ ### Generated code
112
+
113
+ - Arquivos com header de auto-geração, em diretórios de código gerado (ex: `components/ui/`, migrations geradas por ORM, código de protobuf)
114
+ - Vulnerabilidades devem ser reportadas ao gerador, não corrigidas inline
115
+
116
+ ### Dependencies
117
+
118
+ - Código em diretórios de dependência (`node_modules/`, `vendor/`, `site-packages/`, `.cargo/`, `Pods/`, etc.)
119
+ - Escopo de ferramentas de auditoria de dependências, não desta revisão
120
+
121
+ ### Secret exceptions
122
+
123
+ | Situação | Por quê |
124
+ | -------------------------------------------------------------------- | ---------------------------------------------------------------------- |
125
+ | Valores em `.env.example` / `.env.template` | Placeholders, não segredos reais |
126
+ | Referências a variáveis de ambiente (leitura, não valor) | Estão usando env vars corretamente |
127
+ | Valores em arquivos de teste que são claramente mock | Fixtures intencionais |
128
+ | Keys de modo teste de providers (ex: `sk_test_`, `pk_test_`) | Keys de teste são públicas por design |
129
+ | Keys de exemplo em documentação | Exemplos pedagógicos |
130
+ | Variáveis marcadas como públicas pelo framework (ex: `NEXT_PUBLIC_`) | Intencionalmente públicas — mas verificar que não contêm secrets reais |
131
+
132
+ ---
133
+
134
+ ## When to ALWAYS Report
135
+
136
+ Independente de contexto — estas são sempre vulnerabilidades:
137
+
138
+ | Situação | Por quê |
139
+ | ---------------------------------------------------------------------------------- | --------------------------------------------- |
140
+ | Secrets de produção hardcoded (live API keys, SSH private keys, credentials reais) | Compromisso imediato se repositório é público |
141
+ | `.env` com valores reais commitado no git | Credenciais no git history permanentemente |
142
+ | Desserialização insegura de dados de rede | Arbitrary code execution |
143
+ | Shell execution com input de usuário não sanitizado | Command injection |
144
+ | Permissões excessivas em filesystem (world-writable, 777) | Qualquer processo pode modificar |
145
+ | Private key no repositório | Compromisso criptográfico |
146
+
147
+ ---
148
+
149
+ ## Migration and Schema Changes
150
+
151
+ ### Operações destrutivas
152
+
153
+ | Operação | Risco | Verificação necessária |
154
+ | ---------------------------- | ---------------------------------------- | ---------------------------------------------------------------- |
155
+ | DROP TABLE / DROP COLLECTION | Perda de dados irreversível | Backup confirmado. Dados migrados antes |
156
+ | DROP COLUMN / Remove field | Perda de dados da coluna | Confirmar que campo não é usado. Deploy em fases |
157
+ | TRUNCATE / Delete all | Deleta todos os registros | Nunca em migration de produção sem backup |
158
+ | ALTER TYPE / Change schema | Pode falhar com dados existentes | Testar com dados reais. Considerar nova coluna + migrar + dropar |
159
+ | RENAME | Quebra código que referencia nome antigo | Deploy em fases com período de compatibilidade |
160
+
161
+ ### Seed files
162
+
163
+ - Sem passwords reais em seeds
164
+ - Sem API keys de produção em dados de seed
165
+ - Sem PII real (usar dados fake)
166
+ - Guard de ambiente: seeds não devem ser executáveis em produção
167
+
168
+ ### Permissões
169
+
170
+ | Contexto | Princípio |
171
+ | ------------------------ | ----------------------------------------------------------- |
172
+ | User da aplicação | Apenas CRUD nas tabelas da app. Sem CREATE/DROP/ALTER/GRANT |
173
+ | User de migration | Pode ter DDL. Não deve ser usado pelo app em runtime |
174
+ | Connection string do app | Apontar para user da aplicação, não admin/root |
175
+ | Backups | SELECT apenas |
176
+ | Row-level security | Habilitar em tabelas multi-tenant onde suportado |
@@ -0,0 +1,82 @@
1
+ ---
2
+ name: hefesto-simplify
3
+ description: >
4
+ Revisão de código para reuso, qualidade e eficiência. Corrige issues preservando funcionalidade.
5
+ ATIVAR quando: "simplificar", "refatorar", "code review", "código duplicado", "limpar código",
6
+ "otimizar", "extrair pra lib", "checar qualidade", "código repetido", "performance".
7
+ Também: revisar reuso de utilitários, code smells, leaky abstractions, memory leaks.
8
+ user-invocable: true
9
+ disable-model-invocation: false
10
+ argument-hint: '[arquivos ou escopo opcional]'
11
+ ---
12
+
13
+ # Hefesto Simplify
14
+
15
+ Revisão de código modificado focada em reuso, qualidade e eficiência. Corrige issues encontradas preservando funcionalidade.
16
+
17
+ ## Fase 1 — Identificar Escopo
18
+
19
+ Rodar `git diff` (ou `git diff HEAD` se houver staged changes) para ver o que mudou. Determinar o escopo:
20
+
21
+ 1. Se argumentos foram fornecidos (paths de arquivos), usar esses arquivos como escopo
22
+ 2. Senão, identificar a feature ativa:
23
+ - Ler `.hefesto/STATE.md` → seção "Feature Ativa"
24
+ - Se houver feature ativa, ler o frontmatter do arquivo da feature em `.hefesto/features/`
25
+ - Usar `git diff --name-only` para listar arquivos modificados e não comitados
26
+ 3. Fallback: `git diff --name-only HEAD~1`
27
+ 4. Se nenhuma mudança no git, revisar os arquivos mais recentemente modificados que o usuário mencionou ou que foram editados anteriormente na conversa
28
+ 5. Filtrar: incluir apenas arquivos de código-fonte (`.ts`, `.tsx`, `.js`, `.jsx`, `.py`, `.go`, `.rs`, `.java`, etc.). Excluir: `node_modules/`, `.next/`, `dist/`, `build/`, arquivos de configuração, lockfiles, testes, arquivos gerados
29
+
30
+ ## Fase 2 — Lançar Três Agentes de Revisão em Paralelo
31
+
32
+ Usar a ferramenta Agent para lançar os três agentes concorrentemente em uma única mensagem. Passar para cada agente o diff completo para que tenha o contexto completo.
33
+
34
+ ### Agent 1: Code Reuse Review
35
+
36
+ Para cada mudança:
37
+
38
+ 1. **Buscar utilitários e helpers existentes** que possam substituir código recém-escrito. Procurar padrões similares em outros lugares do codebase — locais comuns são diretórios de utilitários, módulos compartilhados e arquivos adjacentes aos modificados
39
+ 2. **Flaggar qualquer função nova que duplica funcionalidade existente.** Sugerir a função existente para usar no lugar
40
+ 3. **Flaggar lógica inline que poderia usar utilitário existente** — manipulação de string manual, path handling customizado, checks de ambiente ad-hoc, type guards manuais e padrões similares são candidatos comuns
41
+ 4. **Duplicação cross-feature**: para funções exportadas nos arquivos do escopo, grep pelo nome em todo o projeto (excluindo o arquivo de origem). Se encontrar implementação idêntica ou muito similar em outro local, flaggar e sugerir extração para módulo compartilhado
42
+ 5. **Helpers não externalizados**: identificar funções helper definidas dentro de componentes/módulos que não dependem de state/props local e são genéricas o suficiente para compartilhar. Verificar se já existe algo similar nos diretórios compartilhados do projeto
43
+
44
+ ### Agent 2: Code Quality Review
45
+
46
+ Revisar as mesmas mudanças para padrões problemáticos:
47
+
48
+ 1. **Redundant state**: state que duplica state existente, valores cacheados que poderiam ser derivados, observers/effects que poderiam ser chamadas diretas
49
+ 2. **Parameter sprawl**: adicionar novos parâmetros a uma função ao invés de generalizar ou reestruturar os existentes
50
+ 3. **Copy-paste com variação leve**: blocos de código near-duplicate que deveriam ser unificados com uma abstração compartilhada
51
+ 4. **Leaky abstractions**: expor detalhes internos que deveriam ser encapsulados, ou quebrar boundaries de abstração existentes
52
+ 5. **Stringly-typed code**: usar strings raw onde constants, enums (string unions) ou branded types já existem no codebase
53
+ 6. **Unnecessary JSX nesting**: wrapper Boxes/elements que não adicionam valor de layout — verificar se props do componente interno (flexShrink, alignItems, etc.) já fornecem o comportamento necessário
54
+ 7. **Unnecessary comments**: comentários explicando O QUE o código faz (identificadores bem nomeados já fazem isso), narrando a mudança, ou referenciando task/caller — deletar; manter apenas WHY não óbvio (constraints escondidas, invariantes sutis, workarounds)
55
+ 8. **Ternários aninhados**: substituir por `if/else` ou `switch`. Um nível de ternário é ok; dois ou mais precisa simplificar
56
+ 9. **Nesting excessivo**: funções com mais de 3 níveis de indentação. Aplicar early return ou extrair subfunção
57
+ 10. **Código morto**: imports não usados, variáveis declaradas mas não referenciadas, branches de condição inalcançáveis
58
+ 11. **Nomes pouco descritivos**: variáveis de 1-2 letras (exceto iteradores `i`, `j`), nomes genéricos como `data`, `temp`, `result` quando o contexto permite ser mais específico
59
+ 12. **Abstrações prematuras**: wrappers que apenas chamam outra função sem adicionar lógica, abstrações de uso único (classes, interfaces, factories usadas por apenas um consumidor), configurabilidade excessiva (parâmetros que só têm um valor possível)
60
+ 13. **Padrões do projeto**: ler `CLAUDE.md` e `.hefesto/PROJECT.md` (se existir). Comparar código do escopo contra convenções estabelecidas — imports, naming conventions, error handling, estrutura de features. Reportar desvios
61
+
62
+ ### Agent 3: Efficiency Review
63
+
64
+ Revisar as mesmas mudanças para eficiência:
65
+
66
+ 1. **Trabalho desnecessário**: computações redundantes, leituras de arquivo repetidas, chamadas de rede/API duplicadas, padrões N+1
67
+ 2. **Concorrência perdida**: operações independentes executadas sequencialmente quando poderiam ser paralelas
68
+ 3. **Hot-path bloat**: novo trabalho bloqueante adicionado a startup ou hot paths per-request/per-render
69
+ 4. **Updates recorrentes no-op**: updates de state/store dentro de polling loops, intervals, ou event handlers que disparam incondicionalmente — adicionar guard de change-detection para que consumidores downstream não sejam notificados quando nada mudou. Também: se uma função wrapper recebe um callback updater/reducer, verificar que respeita retornos same-reference (ou qualquer que seja o sinal de "sem mudança") — senão, early-return no-ops dos callers são silenciosamente derrotados
70
+ 5. **Checks de existência desnecessários**: verificar existência de arquivo/recurso antes de operar (anti-pattern TOCTOU) — operar diretamente e tratar o erro
71
+ 6. **Memory**: data structures unbounded, cleanup faltando, event listener leaks
72
+ 7. **Operações broad demais**: ler arquivos inteiros quando apenas uma porção é necessária, carregar todos os items quando filtrando por um
73
+
74
+ ## Fase 3 — Aplicar Correções
75
+
76
+ Aguardar os três agentes completarem. Agregar os findings e corrigir cada issue diretamente. Se um finding é false positive ou não vale a pena endereçar, anotar e seguir em frente — não argumentar com o finding, apenas pular.
77
+
78
+ Restrições: não modificar configs/testes/gerados, respeitar boundaries de packages em monorepo, rodar `verification.commands` após fixes.
79
+
80
+ Relatório via `TPL-SIMPLIFY.md`. Omitir dimensões sem issues. Código limpo → confirmar sem relatório.
81
+
82
+ Funciona sem `.hefesto/` (usa `git diff` e `CLAUDE.md`). Se invocado pelo `/hefesto-execute`, relatório vai para o Argos.
@@ -0,0 +1,54 @@
1
+ # CLAUDE.md
2
+
3
+ Este arquivo orienta o Claude Code (claude.ai/code) ao trabalhar com o código deste repositório.
4
+
5
+ # {{PROJECT_NAME}}
6
+
7
+ {{PROJECT_DESCRIPTION}}
8
+
9
+ ## Comandos
10
+
11
+ {{COMMANDS}}
12
+
13
+ ## Arquitetura
14
+
15
+ {{ARCHITECTURE}}
16
+
17
+ ## Convenções
18
+
19
+ {{CONVENTIONS}}
20
+
21
+ ## Idioma
22
+
23
+ - Comunicação com o usuário: Português BR
24
+ - Identificadores de código: Inglês
25
+
26
+ ## Hefesto
27
+
28
+ Este projeto usa o [Hefesto](https://www.npmjs.com/package/@lugom.io/hefesto) para gestão de features e desenvolvimento feature-driven.
29
+
30
+ ### Estrutura .hefesto/
31
+
32
+ - `PROJECT.md` — Visão, restrições, features e decisões
33
+ - `STATE.md` — Memória entre sessões (manter < 80 linhas)
34
+ - `config.json` — Configuração e counters
35
+ - `features/` — Documentos de feature (FEAT-NNN-slug.md)
36
+ - `research/` — Documentos de pesquisa (RES-NNN-slug.md)
37
+ - `DESIGN.md` — Contrato visual (cores, tipografia, componentes, tokens)
38
+
39
+ ### Skills disponíveis
40
+
41
+ - `/hefesto-init` — Inicializar ou atualizar configuração do projeto
42
+ - `/hefesto-new-feature` — Criar nova feature
43
+ - `/hefesto-execute` — Executar implementação de feature (verificação + QA loop)
44
+ - `/hefesto-debug` — Debugging sistemático (causa raiz → hipótese → fix)
45
+ - `/hefesto-design` — Criar contrato visual do projeto
46
+ - `/hefesto-security` — Auditoria de segurança (OWASP, secrets, boundaries)
47
+ - `/hefesto-simplify` — Simplificação e reuso de código
48
+
49
+ ### Workflow
50
+
51
+ 1. Features seguem o ciclo: `draft` → `ready` → `active` → `done`
52
+ 2. Cada feature tem Fases de implementação (stories atômicas)
53
+ 3. `STATE.md` é atualizado a cada mudança de estado
54
+ 4. IDs são sequenciais e nunca reutilizados
@@ -0,0 +1,19 @@
1
+ {
2
+ "version": "{{HEFESTO_VERSION}}",
3
+ "project": {
4
+ "name": "",
5
+ "description": "",
6
+ "language": "pt-BR",
7
+ "platform": "",
8
+ "lang": "",
9
+ "monorepo": false
10
+ },
11
+ "runtime": "claude",
12
+ "feature": { "id_prefix": "FEAT", "counter": 0 },
13
+ "research": { "id_prefix": "RES", "counter": 0 },
14
+ "design": { "status": "none" },
15
+ "verification": {
16
+ "commands": [],
17
+ "auto_detect": true
18
+ }
19
+ }