@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,246 @@
1
+ # Preset: Web
2
+
3
+ ## Stack
4
+
5
+ - Next.js (App Router) + TypeScript
6
+ - TailwindCSS + shadcn/ui
7
+ - Vitest + Playwright
8
+ - ESLint + Prettier
9
+ - T3 Env + Zod
10
+ - pnpm (package manager)
11
+
12
+ ## Scaffold
13
+
14
+ ### 1. Criar projeto Next.js
15
+
16
+ ```bash
17
+ pnpx create-next-app@latest . --typescript --tailwind --eslint --app --src-dir --import-alias "@/*" --turbopack --yes
18
+ ```
19
+
20
+ Após o scaffold, deletar arquivos genéricos gerados: `rm -f CLAUDE.md AGENTS.md`
21
+
22
+ **Diretório não vazio:** se `.hefesto/` ou `package.json` já existem, criar num subdiretório temporário e mover:
23
+
24
+ ```bash
25
+ pnpx create-next-app@latest .tmp-scaffold --typescript --tailwind --eslint --app --src-dir --import-alias "@/*" --turbopack --yes
26
+ mv .tmp-scaffold/* . && mv .tmp-scaffold/.gitignore . 2>/dev/null && mv .tmp-scaffold/.eslintrc* . 2>/dev/null
27
+ rmdir .tmp-scaffold
28
+ rm -f CLAUDE.md AGENTS.md
29
+ ```
30
+
31
+ ### 2. shadcn/ui
32
+
33
+ ```bash
34
+ pnpx shadcn@latest init -d
35
+ ```
36
+
37
+ ### 3. Prettier
38
+
39
+ ```bash
40
+ pnpm add -D prettier prettier-plugin-tailwindcss eslint-config-prettier
41
+ ```
42
+
43
+ Criar `.prettierrc` (semi, singleQuote, trailingComma all, plugin tailwindcss). Criar `.prettierignore` (node_modules, .next, dist, coverage, .claude, .hefesto). Adicionar `eslint-config-prettier` ao ESLint config.
44
+
45
+ Scripts: `format`, `format:check`.
46
+
47
+ ### 4. Vitest
48
+
49
+ ```bash
50
+ pnpm add -D vitest @vitejs/plugin-react @testing-library/react @testing-library/dom @testing-library/user-event @testing-library/jest-dom jsdom vite-tsconfig-paths
51
+ ```
52
+
53
+ Criar `vitest.config.ts` (jsdom, react plugin, tsconfigPaths, setup em `tests/setup.ts`, include `src/**/*.test.*` e `tests/unit/**`). Criar `tests/setup.ts` com import de `@testing-library/jest-dom/vitest`.
54
+
55
+ Scripts: `test`, `test:watch`, `test:coverage`.
56
+
57
+ ### 5. Playwright
58
+
59
+ ```bash
60
+ pnpm add -D @playwright/test
61
+ pnpx playwright install --with-deps chromium
62
+ ```
63
+
64
+ Criar `playwright.config.ts` (testDir `tests/e2e`, baseURL localhost:3000, webServer com `pnpm dev`).
65
+
66
+ Script: `test:e2e`.
67
+
68
+ ### 6. T3 Env + Zod
69
+
70
+ ```bash
71
+ pnpm add @t3-oss/env-nextjs zod
72
+ ```
73
+
74
+ Criar `src/lib/env.ts` com `createEnv` (server: NODE_ENV, client: vazio). Importar `./src/lib/env.ts` no topo de `next.config.ts`. Criar `.env.example`. Adicionar `.env`, `.env.local`, `.env.production` ao `.gitignore`.
75
+
76
+ ### 7. Limpar boilerplate
77
+
78
+ - `src/app/page.tsx` → página limpa com `<h1>` do nome do projeto
79
+ - `src/app/globals.css` → apenas imports Tailwind + variáveis shadcn
80
+ - Remover assets padrão em `public/` (next.svg, vercel.svg)
81
+ - Simplificar `src/app/layout.tsx`
82
+
83
+ ### 8. Criar estrutura feature-based
84
+
85
+ ```bash
86
+ mkdir -p src/features src/hooks src/services src/types tests/unit tests/e2e
87
+ ```
88
+
89
+ Criar `.gitkeep` nos diretórios vazios.
90
+
91
+ ### 9. Formatação inicial
92
+
93
+ ```bash
94
+ pnpm format
95
+ ```
96
+
97
+ ---
98
+
99
+ ## Arquitetura e Convenções
100
+
101
+ ### Feature-based
102
+
103
+ Código organizado por domínio em `src/features/`. Cada feature:
104
+
105
+ ```
106
+ src/features/<nome>/
107
+ ├── components/ ← componentes da feature
108
+ ├── hooks/ ← hooks da feature
109
+ ├── services/ ← lógica de negócio e chamadas de API
110
+ ├── types/ ← tipos e interfaces
111
+ └── index.ts ← barrel export (API pública)
112
+ ```
113
+
114
+ Compartilhado entre features fica em `src/` raiz: `components/`, `components/ui/` (shadcn), `hooks/`, `services/`, `types/`, `lib/`.
115
+
116
+ ### Princípios
117
+
118
+ 1. **Features não importam de outras features.** Código compartilhado sobe para `src/`.
119
+ 2. **`src/app/` só contém rotas e layouts.** Lógica fica em `src/features/`.
120
+ 3. **Barrel exports** — importar do índice: `import { LoginForm } from '@/features/auth'`.
121
+ 4. **Sem `any`** — usar `unknown` e narrowing.
122
+ 5. **Validação nas bordas** — inputs de usuário e APIs externas com Zod.
123
+ 6. **Env validado** — usar `env` de `@/lib/env`, nunca `process.env` direto.
124
+
125
+ ### Naming
126
+
127
+ | Elemento | Convenção | Exemplo |
128
+ | ----------- | ------------------ | ---------------------- |
129
+ | Componentes | PascalCase | `ProductCard.tsx` |
130
+ | Hooks | useCamelCase | `useProducts.ts` |
131
+ | Serviços | camelCase.service | `auth.service.ts` |
132
+ | Tipos | PascalCase | `User`, `AuthResult` |
133
+ | Constantes | SCREAMING_SNAKE | `MAX_ITEMS_PER_PAGE` |
134
+ | Testes | .test.ts/.test.tsx | `auth.service.test.ts` |
135
+
136
+ ### Testes
137
+
138
+ - **Co-localizados** (`src/**/*.test.ts`) — lógica de negócio. Ficam ao lado do arquivo.
139
+ - **De feature** (`tests/unit/`) — testes criados pelo Argos para validar requisitos. Nome: `feat-NNN-slug.test.ts`.
140
+ - **E2E** (`tests/e2e/`) — fluxos críticos com Playwright.
141
+
142
+ ### Next.js 16 — `proxy.ts`
143
+
144
+ No Next.js 16, `middleware.ts` foi substituído por `proxy.ts` (runtime Node.js em vez de Edge). Função exportada: `proxy` em vez de `middleware`. Para migrar: `npx @next/codemod@canary middleware-to-proxy .`
145
+
146
+ Para proteção de rotas, preferir Server Components com `redirect()`.
147
+
148
+ ---
149
+
150
+ ## Receitas
151
+
152
+ Padrões prontos para adotar conforme a feature precisar. **Não são instaladas no scaffold** — usar quando o projeto demandar.
153
+
154
+ ### Data Fetching — TanStack Query
155
+
156
+ **Quando:** a feature precisa buscar, cachear ou sincronizar dados do servidor.
157
+
158
+ ```bash
159
+ pnpm add @tanstack/react-query @tanstack/react-query-devtools
160
+ ```
161
+
162
+ Setup: criar `src/lib/query-client.ts` com `QueryClient` configurado (staleTime, gcTime). Criar `src/components/providers.tsx` com `QueryClientProvider` wrapping children + `ReactQueryDevtools` em dev. Adicionar o provider no `layout.tsx` (como Client Component).
163
+
164
+ Pattern de uso em features:
165
+
166
+ ```
167
+ src/features/products/
168
+ ├── hooks/
169
+ │ └── use-products.ts ← useQuery + queryKey + fetch function
170
+ ├── services/
171
+ │ └── products.service.ts ← fetch functions puras (sem hooks)
172
+ ```
173
+
174
+ Hooks chamam services. Services são funções puras testáveis. Query keys seguem padrão `[feature, ...params]`.
175
+
176
+ ### Formulários — React Hook Form + Zod
177
+
178
+ **Quando:** a feature tem formulários com validação.
179
+
180
+ ```bash
181
+ pnpm add react-hook-form @hookform/resolvers
182
+ ```
183
+
184
+ Zod já está na stack. Usar `zodResolver` com `useForm`. Integrar com componentes `Form` do shadcn/ui (`npx shadcn@latest add form`).
185
+
186
+ Pattern: schema Zod define a validação, `useForm` gerencia o state, shadcn/ui `FormField` renderiza.
187
+
188
+ ### Estado Global — Zustand
189
+
190
+ **Quando:** estado precisa ser compartilhado entre features sem prop drilling. Preferir para estado de UI (sidebar aberta, tema, filtros). Para dados do servidor, usar TanStack Query.
191
+
192
+ ```bash
193
+ pnpm add zustand
194
+ ```
195
+
196
+ Pattern: um store por domínio em `src/features/<nome>/stores/`. Stores exportam hooks (`useCartStore`). Usar slices para stores complexas.
197
+
198
+ ### Autenticação — Better Auth
199
+
200
+ **Quando:** a feature precisa de login, registro, sessões ou proteção de rotas.
201
+
202
+ ```bash
203
+ pnpm add better-auth
204
+ ```
205
+
206
+ Setup: criar `src/lib/auth.ts` (server) com `betterAuth()` configurando database adapter e providers (email/password, Google, GitHub). Criar `src/lib/auth-client.ts` com `createAuthClient()`. Criar API route em `src/app/api/auth/[...all]/route.ts`.
207
+
208
+ Plugins úteis: `twoFactor()`, `magicLink()`, `organization()`.
209
+
210
+ Pattern de proteção: Server Components usam `auth.api.getSession()` + `redirect()`. Client Components usam `authClient.useSession()`.
211
+
212
+ ### Banco de Dados — Drizzle ORM
213
+
214
+ **Quando:** a feature precisa persistir dados.
215
+
216
+ ```bash
217
+ pnpm add drizzle-orm postgres
218
+ pnpm add -D drizzle-kit
219
+ ```
220
+
221
+ Setup: criar `src/db/index.ts` (connection com `postgres` driver). Criar `src/db/schema/` com schemas por domínio. Criar `drizzle.config.ts` apontando para o schema e connection string via `env.ts`, com `out: './src/db/migrations'`.
222
+
223
+ Estrutura:
224
+
225
+ ```
226
+ src/db/
227
+ ├── index.ts ← connection + export do db
228
+ ├── schema/
229
+ │ ├── index.ts ← re-export de todos os schemas
230
+ │ └── users.ts
231
+ └── migrations/ ← geradas pelo drizzle-kit (out: './src/db/migrations')
232
+ ```
233
+
234
+ Adicionar `DATABASE_URL` ao T3 Env (`src/lib/env.ts`) e `.env.example`.
235
+
236
+ Scripts: `db:generate` (`drizzle-kit generate`), `db:migrate` (`drizzle-kit migrate`), `db:studio` (`drizzle-kit studio`).
237
+
238
+ Pattern: schemas em `src/db/schema/<dominio>.ts`, queries em `src/features/<nome>/services/`.
239
+
240
+ ---
241
+
242
+ ## config.json
243
+
244
+ - platform: "web"
245
+ - lang: "typescript"
246
+ - monorepo: false
@@ -1,53 +1,87 @@
1
1
  ---
2
2
  name: hefesto-new-feature
3
- description: "Cria uma nova feature no Hefesto. Use /hefesto-new-feature para definir uma nova feature com visão, fluxo do usuário, requisitos e fases de implementação."
3
+ description: >
4
+ Cria o spec de uma nova feature no Hefesto. Coleta visão e requisitos, propõe abordagens,
5
+ decompõe em fases risk-first com rastreabilidade de requisitos.
6
+ Usar com: /hefesto-new-feature. Gera o documento FEAT-NNN — para implementar, usar
7
+ /hefesto-execute depois.
4
8
  user-invocable: true
5
9
  disable-model-invocation: true
6
10
  ---
7
11
 
8
12
  # Hefesto New Feature
9
13
 
10
- Cria um novo documento de feature em `.hefesto/features/`.
14
+ Cria um novo documento de feature em `.hefesto/features/`. Guia o usuário desde a visão inicial até um spec completo com requisitos testáveis, fases de implementação ordenadas por risco, e rastreabilidade requisito→fase.
11
15
 
12
16
  ## Pré-requisitos
13
17
 
14
- Verificar se `.hefesto/` existe. Se não existir, sugerir `/hefesto-init` primeiro.
15
-
16
- ## O que fazer
17
-
18
- 1. Ler `.hefesto/templates/FEATURE.md` como base para o novo arquivo de feature.
19
- 2. Ler `.hefesto/config.json` para obter o próximo ID disponível.
20
- 3. Perguntar ao usuário:
21
- - Título da feature (curto, descritivo)
22
- - Visão (o que entrega e por que existe)
23
- - Fluxo do usuário (passos que o usuário percorre)
24
- - Requisitos principais (testáveis, centrados no usuário)
25
- - O que está fora do escopo
26
- 4. Com base nas respostas, propor fases de implementação:
27
- - Cada fase deve ser atômica (executável em uma sessão)
28
- - Listar arquivos que serão criados/modificados
29
- - Definir tarefas concretas e critérios de aceitação
30
- 5. Gerar o ID: `FEAT-NNN` onde NNN é o counter + 1, zero-padded.
31
- 6. Gerar o slug a partir do título (lowercase, hifenizado, max 40 chars).
32
- 7. Criar o arquivo `.hefesto/features/FEAT-NNN-slug.md` com o conteúdo.
33
- 8. Atualizar `.hefesto/config.json` incrementando o counter.
34
- 9. Atualizar `.hefesto/ROADMAP.md` adicionando a nova feature na tabela.
35
- 10. Atualizar `.hefesto/STATE.md` se for a primeira feature ou se nenhuma estiver ativa.
36
-
37
- ## Formato do arquivo
38
-
39
- O arquivo segue o template narrativo unificado com frontmatter YAML:
40
-
41
- ```yaml
42
- ---
43
- id: FEAT-NNN
44
- title: "Título"
45
- status: draft
46
- created: YYYY-MM-DD
47
- updated: YYYY-MM-DD
48
- phases_total: N
49
- phases_done: 0
50
- ---
51
- ```
18
+ Verificar se `.hefesto/` existe. Se não, sugerir `/hefesto-init`.
19
+
20
+ ## Workflow
21
+
22
+ ### Fase 0 Explorar Contexto
23
+
24
+ Antes de perguntar, entender o terreno:
25
+
26
+ 1. Ler `PROJECT.md` (valor central, stack, receitas), `STATE.md` (feature ativa, bloqueios), `config.json` (próximo ID)
27
+ 2. Listar features existentes (frontmatter) notar áreas cobertas, padrões de naming
28
+ 3. Se features `draft`/`blocked`, mencionar — talvez retomar em vez de criar nova
29
+
30
+ Resumo: `Projeto: X | Stack: Y | Features: N (X done, Y active) | Próxima: FEAT-NNN`
31
+
32
+ ### Fase 1 Entender a Feature
33
+
34
+ O objetivo é sair desta fase com entendimento completo do que construir. Conversar com o usuário até ter clareza pode ser uma mensagem ou várias.
35
+
36
+ 1. **Título** curto e descritivo, identifica a feature de relance
37
+ 2. **Problema** qual dor ou necessidade motiva essa feature? Por que importa agora?
38
+ 3. **Visão** o que entrega e como o usuário se beneficia quando estiver pronta
39
+ 4. **Fluxo do usuário** passos concretos que o usuário percorre do início ao fim
40
+ 5. **Requisitos** — testáveis, com critério claro de pass/fail. Perguntar: "como sei que está funcionando?"
41
+ 6. **Fora do escopo** — o que explicitamente NÃO faz parte. Perguntar: "tem algo parecido que não devemos incluir?"
42
+ 7. **Riscos/incertezas** — integração externa, tech nova, performance, dependência de terceiros
43
+ 8. **Receitas** Se o PROJECT.md contiver receitas, consultar e sugerir as relevantes (ex: feature com formulário → React Hook Form + Zod). Se não houver, pular
44
+
45
+ ### Fase 2 — Propor Abordagens
46
+
47
+ Propor 2-3 abordagens com trade-offs quando relevante. Recomendar uma com razão concreta. Pular se feature é simples/óbvia.
48
+
49
+ ### Fase 3 — Decompor em Fases
50
+
51
+ Seguir estrutura de `TPL-FEATURE.md` (seção "Implementação"). Para definições de status e ciclo de vida, ver `/hefesto-context`.
52
+
53
+ #### Risk-first ordering
54
+
55
+ Incerteza primeiro — invalidar premissas cedo. Se sem risco, ordenar por dependência natural.
56
+
57
+ #### Rastreabilidade REQ→Fase
58
+
59
+ Cada fase lista quais REQ-NN cobre. Verificar cobertura total — alertar se algum REQ ficou órfão.
60
+
61
+ Cada fase atômica (~30 min).
62
+
63
+ ### Fase 4 — Detectar Escopo Excessivo
64
+
65
+ Se > 5 fases ou > 10 requisitos: alertar e sugerir divisão concreta. Advisory, não mandatório.
66
+
67
+ ### Fase 5 — Self-Review
68
+
69
+ - [ ] Título claro (não genérico)
70
+ - [ ] Visão inclui O QUE e POR QUÊ
71
+ - [ ] Pelo menos 2 requisitos testáveis
72
+ - [ ] "Fora do Escopo" preenchido
73
+ - [ ] Fases atômicas com critérios de aceitação
74
+
75
+ Se falhar, pedir complemento. Se usuário disser "segue assim", respeitar.
76
+
77
+ ### Fase 6 — Criar Arquivo
52
78
 
53
- Seguido pelas seções: Visão, Fluxo do Usuário, Requisitos, Fora do Escopo, Implementação (com Fases), Notas Técnicas.
79
+ 1. Gerar ID `FEAT-NNN` (counter + 1, zero-padded) e slug (lowercase, hifenizado, max 40 chars, sem acentos)
80
+ 2. Ler `.hefesto/templates/TPL-FEATURE.md` e criar `.hefesto/features/FEAT-NNN-slug.md` substituindo placeholders
81
+ 3. Atualizar `config.json` (feature.counter)
82
+ 4. Atualizar tabela de Features em `PROJECT.md`
83
+ 5. Atualizar `STATE.md` se for primeira feature ou nenhuma ativa
84
+ 6. Seletor: "Promover para `ready` ou continuar iterando?"
85
+ - Se **ready**: atualizar status e STATE.md
86
+ - Se **iterar**: coletar ajustes, aplicar, repetir até promoção ou encerramento
87
+ 7. Sugerir `/hefesto-execute` quando pronto
@@ -0,0 +1,89 @@
1
+ ---
2
+ name: hefesto-security
3
+ description: >
4
+ Revisão de segurança de código. Encontra vulnerabilidades e aplica fixes.
5
+ ATIVAR quando: "segurança", "security", "vulnerabilidade", "XSS", "injection", "OWASP",
6
+ "segredo exposto", "código seguro", "auditoria de segurança", "security review".
7
+ Também: padrões perigosos (eval, exec, deserialização), inputs não validados, falhas silenciosas.
8
+ user-invocable: true
9
+ disable-model-invocation: false
10
+ argument-hint: '[arquivos ou escopo opcional]'
11
+ ---
12
+
13
+ # Hefesto Security
14
+
15
+ Revisão de segurança que encontra vulnerabilidades reais e aplica fixes concretos. Zero tolerância a falhas silenciosas e padrões perigosos.
16
+
17
+ ## Princípios
18
+
19
+ 1. **Falhas silenciosas são inaceitáveis** — catch vazio é bug escondido; todo erro deve ser logado
20
+ 2. **Validar nas bordas** — inputs de usuário, APIs externas, env vars. Dados internos entre módulos não precisam
21
+ 3. **Sem segredos em código** — API keys, tokens, passwords em variáveis de ambiente, nunca hardcoded
22
+
23
+ ## Workflow
24
+
25
+ ### Fase 1 — Identificar escopo
26
+
27
+ 1. Se argumentos fornecidos → usar esses arquivos
28
+ 2. Senão, buscar feature ativa:
29
+ - Ler `.hefesto/STATE.md` → extrair arquivos modificados do frontmatter
30
+ - Se STATE.md não existir ou não tiver arquivos → `git diff --name-only` (staged + unstaged)
31
+ 3. Fallback → `git diff --name-only HEAD~1`
32
+ 4. Filtrar apenas código-fonte (excluir binários, lock files, build artifacts, código gerado)
33
+ 5. Excluir: diretórios de dependências, `dist/`, `build/`, `*.lock`, `*.lockb`, arquivos auto-gerados
34
+
35
+ ### Fase 2 — Análise de vulnerabilidades
36
+
37
+ Ler `references/severity-and-judgment.md` — usar critérios de severidade e regras de falso positivo ao longo de toda a análise. Ler `references/boundaries-and-bypasses.md` — verificar cada boundary type aplicável.
38
+
39
+ Para cada arquivo no escopo, analisar semanticamente estas categorias universais:
40
+
41
+ 1. **Code injection** — eval, exec, desserialização insegura, template injection, dynamic imports — em qualquer linguagem
42
+ 2. **Data injection** — SQL, NoSQL, LDAP, command injection, XSS — em qualquer framework ou ORM
43
+ 3. **Input validation gaps** — dados cruzando trust boundaries sem validação (consultar boundaries reference)
44
+ 4. **Auth & access control** — rotas sem auth, IDOR, CORS permissivo, CSRF, missing role checks
45
+ 5. **Insecure configuration** — debug mode em produção, headers de segurança ausentes, crypto fraco, default credentials
46
+ 6. **Data exposure** — dados sensíveis em logs, responses, URLs, query params, error messages
47
+ 7. **Resource exhaustion** — queries sem limit, missing pagination, missing timeouts, body size ilimitado
48
+
49
+ Para cada finding, avaliar contexto antes de reportar — consultar "When NOT to Report" na referencia de severidade.
50
+
51
+ ### Fase 3 — Falhas silenciosas
52
+
53
+ Ler `references/severity-and-judgment.md` seção "Silent Failures" — contém as 6 categorias universais, critérios de classificação e exceções.
54
+
55
+ 1. Encontrar todos os construtos de error handling na(s) linguagem(ns) detectada(s)
56
+ 2. Classificar cada um usando as categorias e critérios da referência
57
+ 3. Consultar "Quando silenciamento é aceitável" antes de reportar
58
+
59
+ ### Fase 4 — Segredos
60
+
61
+ Ler `references/secrets-detection.md`.
62
+
63
+ 1. Usar regex por provider e genericos para grep nos arquivos do escopo
64
+ 2. Consultar "Exceptions" em `references/severity-and-judgment.md` antes de reportar — nem todo match e secret real
65
+ 3. Verificar `.gitignore` conforme "Gitignore Audit"
66
+ 4. Verificar se `.env` esta committed no git
67
+
68
+ ### Fase 5 — Aplicar correções
69
+
70
+ 1. Para issues **🔴 critical**: aplicar fix automaticamente
71
+ - Gerar correção apropriada para a linguagem/framework detectado
72
+ - Erros engolidos → adicionar log + re-throw ou return adequado
73
+ - Code injection → substituir por alternativa segura
74
+ - Segredos hardcoded → mover para variável de ambiente
75
+ - Queries com interpolação → parameterized queries
76
+
77
+ 2. Para issues **⚠ warning**: aplicar fix se a correção é clara e segura. Para mudanças que alteram comportamento (ex: adicionar validação que pode rejeitar inputs), perguntar antes
78
+
79
+ 3. Rodar verification commands após fixes para garantir que nada quebrou
80
+
81
+ 4. Apresentar relatório no formato `TPL-SECURITY.md` — preencher todas as seções aplicáveis, omitir seções sem issues
82
+
83
+ ## Notas
84
+
85
+ - Se o projeto não tiver `.hefesto/`, o skill funciona com `git diff` e `CLAUDE.md`
86
+ - Não reportar vulnerabilidades em dependências (escopo de ferramentas de audit de dependências)
87
+ - Não reportar issues em código gerado
88
+ - Priorizar issues com impacto real sobre issues teóricas
89
+ - Se invocado pelo `/hefesto-execute`, o relatório é passado para o Argos junto com o resultado da feature
@@ -0,0 +1,152 @@
1
+ # Boundaries e Bypass Techniques
2
+
3
+ Trust boundaries universais e tecnicas de bypass de validacao. Independente de linguagem ou framework.
4
+
5
+ ## Quick Index
6
+
7
+ - **Tipos de boundary** → "Boundaries" (linha 12)
8
+ - **Tecnicas de bypass** → "Bypass Vectors" (linha 72)
9
+ - **Como detectar** → "How to Detect" (linha 117)
10
+
11
+ ---
12
+
13
+ ## Boundaries
14
+
15
+ ### Form inputs / JSON body
16
+
17
+ Dados submetidos via form HTML ou JSON body em POST/PUT/PATCH.
18
+
19
+ | O que verificar | Quando e problema |
20
+ | ------------------------------- | ---------------------------------------------------- |
21
+ | Usado diretamente em DB query | Sempre |
22
+ | Usado em operacao de filesystem | Sempre |
23
+ | Usado em redirect | Sempre |
24
+ | Tipos nao verificados | Se vem de JSON body (pode ser string, array, objeto) |
25
+ | Tamanho nao limitado | Se e string longa — DoS via payload gigante |
26
+
27
+ ### Query params / route params
28
+
29
+ Dados na URL: `/users/:id?sort=name&order=asc`.
30
+
31
+ | O que verificar | Quando e problema |
32
+ | ------------------------------------ | ----------------------------- |
33
+ | Param numerico sem validacao de tipo | Sempre |
34
+ | Param usado em regex | Sempre — ReDoS |
35
+ | Param usado em path de filesystem | Sempre — path traversal |
36
+ | Sort/order sem whitelist | Se usado em query — injection |
37
+ | Pagination sem limites | Se usado em LIMIT — DoS |
38
+
39
+ ### Respostas de API externa
40
+
41
+ Dados retornados por APIs de terceiros. Nao confiar mesmo em APIs "de confianca".
42
+
43
+ | O que verificar | Quando e problema |
44
+ | ------------------------------ | ------------------------------------- |
45
+ | Estrutura nao validada | Sempre — crash se estrutura mudou |
46
+ | Dados renderizados no frontend | Se contem HTML/JS — XSS stored |
47
+ | Status code nao verificado | Se assume sucesso |
48
+ | Dados usados em query | Sempre — injection via dados externos |
49
+
50
+ ### Headers / Cookies
51
+
52
+ | O que verificar | Quando e problema |
53
+ | --------------------------------------------- | -------------------------------------------------------- |
54
+ | Cookie usado sem validacao | Se contem dados de sessao (JWT sem verificar assinatura) |
55
+ | Header Host / X-Forwarded-For usado em logica | Sempre — spoofavel |
56
+ | Content-Type nao verificado | Se processa body condicionalmente |
57
+ | Referer / Origin para autenticacao | Sempre — spoofavel |
58
+
59
+ ### File uploads
60
+
61
+ | O que verificar | Quando e problema |
62
+ | -------------------------------------- | --------------------------------------- |
63
+ | Tipo nao validado (MIME + magic bytes) | Sempre |
64
+ | Tamanho nao limitado | Sempre — DoS |
65
+ | Nome do arquivo nao sanitizado | Se usado no filesystem — path traversal |
66
+ | Conteudo nao escaneado | Se armazenado/servido — polyglot files |
67
+ | Extensao dupla | Se whitelist por extensao — bypass |
68
+
69
+ ### Boundaries adicionais
70
+
71
+ | Boundary | O que verificar |
72
+ | -------------------------------- | ---------------------------------------------------------------------------------------- |
73
+ | **WebSocket messages** | Cada mensagem deve ser validada — nao ha "sessao validada" que garanta mensagens futuras |
74
+ | **GraphQL inputs** | Validar args de cada resolver. Queries aninhadas → DoS (query depth limiting) |
75
+ | **CLI args** | Validar antes de usar em shell commands, file operations, ou regex |
76
+ | **Variaveis de ambiente** | Validar formato esperado no startup (URL valida, numero, enum) |
77
+ | **IPC / inter-process** | Mensagens entre processos devem ser validadas — outro processo pode ser comprometido |
78
+ | **Database read-back** | Dados lidos do DB podem ter sido inseridos sem sanitizacao em versao anterior do codigo |
79
+ | **gRPC / RPC inputs** | Mesmo com tipos definidos no proto, validar ranges e constraints de negocio |
80
+ | **Event queue / message broker** | Mensagens de filas (Kafka, RabbitMQ, SQS) sao tao untrusted quanto HTTP requests |
81
+
82
+ ---
83
+
84
+ ## Bypass Vectors
85
+
86
+ Tecnicas que atacantes usam para contornar validacao fraca. Verificar se a validacao cobre estes cenarios:
87
+
88
+ ### Type coercion
89
+
90
+ Input esperado num tipo, recebido em outro. Comparacoes fracas (`==` vs `===`), conversoes implicitas, e frameworks que aceitam tipos variados para o mesmo parametro (string se 1 valor, array se multiplos).
91
+
92
+ **Deteccao**: comparacao fraca de input com valor fixo; ausencia de type check explicito.
93
+
94
+ ### Prototype / object pollution
95
+
96
+ Payload JSON com propriedades especiais (`__proto__`, `constructor.prototype`) que injetam propriedades em objetos. Afeta linguagens com heranca prototipal ou merge recursivo de objetos.
97
+
98
+ **Deteccao**: JSON parse seguido de merge/assign/spread sem filtrar keys especiais.
99
+
100
+ ### Unicode normalization
101
+
102
+ Caracteres Unicode que normalizam para equivalentes ASCII. Pode bypassar blacklists de filename, filtros de input, e comparacoes de string.
103
+
104
+ **Deteccao**: validacao de filename ou input sem normalizacao previa; filtros baseados em comparacao byte-a-byte.
105
+
106
+ ### Null byte injection
107
+
108
+ Null bytes (`\0`, `\x00`, `%00`) que truncam strings em sistemas baseados em C. Path traversal classico: `../../etc/passwd\0.png` — extensao ignorada.
109
+
110
+ **Deteccao**: input usado em operacoes de filesystem sem filtrar null bytes.
111
+
112
+ ### Array vs scalar ambiguity
113
+
114
+ Parametros que podem ser string ou array dependendo de quantos valores sao enviados. Frameworks web frequentemente tem este comportamento em query params.
115
+
116
+ **Deteccao**: input de query params usado sem type check ou conversao explicita.
117
+
118
+ ---
119
+
120
+ ## How to Detect
121
+
122
+ Heuristicas para identificar "input → operacao sem validacao no meio":
123
+
124
+ ### 1. Rastrear fluxo de dados
125
+
126
+ ```
127
+ input source → variavel local → operacao perigosa
128
+ ```
129
+
130
+ Se entre a origem (request, CLI arg, env var, file upload, API response) e o destino (DB query, filesystem op, shell command, redirect, HTML render) nao ha:
131
+
132
+ - Schema validation (qualquer biblioteca de validacao)
133
+ - Type assertion / type guard
134
+ - Sanitizacao explicita
135
+ - Parameterized query / prepared statement
136
+
137
+ → Reportar como ⚠ warning.
138
+
139
+ ### 2. Sinais de validacao ausente
140
+
141
+ - Input de request usado na mesma funcao que operacao perigosa sem chamada de validacao entre eles
142
+ - Dados de API externa usados diretamente sem schema validation
143
+ - Parametros de rota usados em query sem conversao de tipo
144
+
145
+ ### 3. Sinais de validacao presente
146
+
147
+ - Import de biblioteca de validacao no arquivo
148
+ - Schema definido antes do handler
149
+ - Middleware de validacao na rota
150
+ - Type guards explicitos
151
+ - Parameterized queries (placeholders em vez de interpolacao)
152
+ - Sanitization functions entre input e uso