Four SKILL.md-based workflows for agent-driven development: frontend/UI, backend/API, architecture, and security code review. Each workflow defines phases with verification steps, acceptance criteria and hard rules so agents deliver work that can be checked instead of asserted. The security review consults live sources (OSV.dev, GitHub Advisory, NVD) because model CVE knowledge is frozen at training cutoff. Includes a QA harness (qa/) that scores workflows on 30+ criteria, a non-regression gate, and meta-tests that corrupt the harness to prove it detects regressions.
14 KiB
name, description, version, author, license, platforms, metadata
| name | description | version | author | license | platforms | metadata | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| wf-backend | Use p/ backend/API. Fluxo PLAN→BUILD→SECURITY→TEST. | 1.0.0 | Hermes Agent | MIT |
|
|
Workflow Backend/API
Orquestrador obrigatório para TODO trabalho backend: APIs REST/GraphQL, autenticação, banco de dados, integrações, serviços, jobs. Processo de 4 fases com skills fixas.
When to Use
Sempre que a tarefa envolver servidor: criar/editar endpoints, auth, schema DB, integrações, filas, webhooks, ou revisar segurança de backend/models.
Skills do stack (carregar conforme a fase)
- Segurança multi-stack:
secure-coding(15 stacks) - Segurança de API (OWASP):
api-security-review,bola-detector,auth-rbac-scaffold,injection-checker,openapi-hardener,security-test-generator - Bug hunting adversarial:
hermaguard(pre-scan + 3 agentes — edge cases, ataque, blast radius; read-only, encontra o que está quebrado) - Locais:
fastapi-uvicorn-wiring(Python),rest-graphql-debug,software-code-quality,dependency-cve-audit,security-best-practices,test-driven-development,network-audit
Fase 1 — PLAN (contrato antes de código)
- Definir API contract primeiro: rotas, métodos, payloads, status codes, erros (RFC 9457 / RFC 7807), rate limit, versionamento.
- Validar schema:
openapi-hardener— OpenAPI/Zod/Pydantic saneado antes de escrever handler. - Definir modelo de dados + migração (idempotente) ANTES de query.
- Decidir auth: sessão/OAuth/JWT com base no contexto; documentar.
- Approved do contrato pelo usuário antes de build.
- VERIFICAR: validar o contrato com
openapi-hardener(schemas coerentes), conferir rate limit + versionamento definidos, e confirmar que o modelo de dados tem migração idempotente antes de construir. - VERIFICAR (comandos de plano): usar
curlpara provar o contrato contra um stub (ex:curl -i localhost:PORT/health) egit log/branches para confirmar que o contrato fica versionado no repo. - CHECKPOINT: registrar contrato em
docs/contract.md(ou OpenAPI) para as fases seguintes referenciarem. - VERIFICAR (comandos de contrato completo):
grep -c "->" docs/contract.md— todas as rotas têm status codes esperados; egrep -c "429\|rate" docs/contract.mdpara provar que rate limit está no contrato. - VERIFICAR (auth no contrato):
grep -rn "auth\|bearer\|session" docs/contract.md— decidir e documentar o modelo de auth ANTES do build (não deixar para a Fase 2/3). - VERIFICAR (validação de contrato): se OpenAPI,
python3 -m json.tool docs/openapi.json > /dev/nullpara provar que o schema é válido em JSON.
Checklist da fase 1 (validar antes do build):
- Rotas/métodos/payloads/status codes definidos e aprovados.
- Erros no padrão RFC 9457/7807; rate limit e versionamento especificados.
openapi-hardenervalidou os schemas (Zod/Pydantic/OpenAPI).- Migração de dados idempotente desenhada antes de qualquer query.
Anti-padrões desta fase:
- NUNCA escrever handler sem contrato aprovado.
- NUNCA deixar schema "se inferir na mão livre" — definir e validar.
- NÃO esquecer rate limit/versionamento na fase 1 (correção é cara depois).
- NÃO misturar payload v2 com contrato v1 sem versionamento explícito.
Fase 2 — BUILD (escrever com defaults seguros)
secure-coding— aplicar padrões da stack em uso (Node/FastAPI/Go/etc).- Validação na borda (Zod/Pydantic), erros estruturados, timeouts em clientes HTTP e DB, idempotência em mutações.
- Argon2id p/ senhas, httpOnly cookies p/ sessões, nunca logar segredos.
- Type-safe boundaries; evitar
any/asdescontrolados em TS. - VERIFICAR: rodar
secure-codingcomo checklist da stack (validação na borda, timeouts, idempotência) erest-graphql-debugpara confirmar que os status codes/mensagens batem com o contrato da Fase 1. - VERIFICAR (timeouts): para todo cliente HTTP do serviço, confirmar
timeoutdefinido —grep -rn "requests\|fetch(" src/ | wc -lcontra o número detimeoutpresentes; igual = OK. - VERIFICAR (redação de segredos):
grep -rniE "password|secret|token" src/ --include="*.py" --include="*.ts" | grep -i "log\|print"— zero hits é o esperado (nenhum segredo sendo logado). - VERIFICAR (queries): conferir que toda listagem tem
LIMIT— checar comsearch_filesas chamadas sem paginação antes de seguir.
Checklist da fase 2 (build seguro):
- Validação na borda (Zod/Pydantic) em TODA entrada externa.
- Erros estruturados; timeouts em clientes HTTP e DB.
- Mutações idempotentes; transações onde há múltiplas gravações.
- Senhas com Argon2id; sessões httpOnly; nenhum segredo em log.
- Type-safe boundaries; sem
anysolto no que atravessa a fronteira.
Anti-padrões desta fase:
- NUNCA logar senha/token/dado sensível.
- NUNCA confiar em input externo sem validação na borda.
- NÃO fazer query sem LIMIT/paginação em listas não limitadas.
- NÃO engolir erro com
except: pass/ catch vazio (mascara falha).
Fase 3 — SECURITY (auditar tudo)
bola-detectorem rotas com:id/findUnique(Object-Level Authz).auth-rbac-scaffoldem qualquer fluxo de JWT/login/roles.injection-checkerem SQL/ORM/shell/templates.api-security-reviewno conjunto final (OWASP API Top 10).dependency-cve-auditnas deps do projeto (local).- VERIFICAR: consolidar achados P0/P1 por severidade, validar que cada rota sensível tem auth + ownership-scope, e re-auditar depois de qualquer fix (nada de despachar cego).
- VERIFICAR (ownership): para rotas com
:id, conferir que a query usa o ID autenticado —grep -rn "user_id\|user.id\|req.user" src/ | wc -l= número de rotas protegidas.
- VERIFICAR (rate limit):
grep -rniE "ratelimit|rate_limit|limiter" src/— toda rota de escrita tem rate limit de referência; se ausente, anotar como P2. - VERIFICAR (headers/CORS): conferir CSP/CORS configurados (CORS
allowlist explícita, não
*com credenciais);grep -rn "access-control\|csp\|content-security" src/. - VERIFICAR (re-audit pós-fix): após corrigir P0/P1, re-rodar
bola-detector+api-security-reviewe confirmar que os achados sumiram (não só mudaram de arquivo). - VERIFICAR (critério de aceite de segurança): para cada achado P0/P1, reexecutar o teste que o reproduzia e confirmar que agora passa; manter o PoC no repositório de testes.
- VERIFICAR (comandos de confirmação):
grep -c "auth\|ownership" src/deve ser >= número de rotas que mexem em dado de usuário — cada rota sensível tem o controle por objeto documentado no código.
Checklist da fase 3 (segurança):
bola-detectorlimpo em rotas com:id(object-level authz).- Auth/RBAC (
auth-rbac-scaffold) cobrindo roles e sessions. injection-checkerlimpo (SQL/ORM/shell/templates).api-security-reviewsem P0/P1 (OWASP API Top 10).dependency-cve-auditsem CVEs críticas pendentes.
Anti-padrões desta fase:
- NUNCA definir query escopada por outro ID que não o autenticado.
- NUNCA aceitar finding P0/P1 sem evidência de correção.
- NÃO revisar segurança só nos endpoints novos — escopar também os existentes.
- NÃO tratar auditoria como checklist burocrático: achado não resolvido bloqueia.
Fase 4 — TEST + BUG HUNT (provar antes de entregar)
hermaguardno diff do backend — dispachar os 3 agentes adversariais (Edge Case Hunter, Adversarial Reviewer, Blast Radius). Esperar falhar: NUNCA parar em "parece ok"; exigir cobertura de edge cases, races, rollback safety e schema drift. Read-only (não corrige — acha).test-driven-development: testar o que valida/auth/idempotência.security-test-generator: testes de segurança (authz negativa, payloads malformados, rate limit).- Rodar suíte + lint + typecheck; status real, não suposição.
- Corrigir os findings P0/P1 do hermaguard como tarefas separadas; rodar hermaguard de novo se o fix mudou >3 arquivos.
- Relatório: contrato entregue, achados de segurança P0/P1/P2 resolvidos, bugs caçados pelo hermaguard (por severidade), testes passando (contagem).
- VERIFICAR (não-regressão QA): rodar
test_quality.py(gate do workflow) — score não pode cair em relação ao baseline. - VERIFICAR (cobertura de classes): para rolls em produção, conferir que o hermaguard cobriu edge cases, races, rollback safety e schema drift — não aceitar "sem achados" sem essa cobertura.
- VERIFICAR (efeito colateral): se a mudança alterou contrato/DB, rodar
rest-graphql-debugpara confirmar status codes e mensagens sem regressão. - VERIFICAR (cobertura de testes real):
python3 -m pytest --cov=app -q(ounpm test -- --coverage) — anotar % de cobertura e garantir que os módulos críticos (auth, validação, idempotência) têm pelo menos smoke test. - VERIFICAR (migração reversível): se houve schema change, rodar
alembic downgrade -1/equivalente em dev para provar rollback; egit diff --statpara conferir o escopo do que está indo pra frente. - VERIFICAR (config por ambiente):
grep -rn "getenv\|os.environ\|process.env" src/— toda configuração via env, sem valores hardcoded que vazam para prod. - VERIFICAR (comandos de entrega):
python3 -m pytest -q && npm run build(ou stack equivalente) como smoke final; egit statuspara confirmar que os artefatos de teste não vazaram pro repo. - VERIFICAR (critério de entrega): relatório final só fecha quando cada item do checklist da Fase 4 está marcado — sem exceção de última hora não auditada.
Checklist da fase 4 (gate de entrega):
hermaguardrodado; findings CRITICAL/HIGH zero ou com plano de fix.- TDD: testes de validação, auth e idempotência verdes.
security-test-generator: authz negativa, payloads mal, rate limit.- Suíte + lint + typecheck verdes (contagem real, não suposição).
- Findings P0/P1 corrigidos e re-verificados (hermaguard rodado de novo se o fix alterou >3 arquivos).
Anti-padrões desta fase:
- NUNCA rodar hermaguard em código com testes quebrados (polui o review).
- NUNCA dar "suíte passando" sem ter executado a suíte.
- NÃO aceitar "hermaguard não achou nada" sem exigir a cobertura por classe (edge cases, races, rollback, schema drift).
- NÃO reportar achado P0/P1 como resolvido sem a verificação de volta.
Comandos de Verificação (executáveis)
# Gate de qualidade do próprio workflow (sem regressão)
python3 ~/.hermes/skills/software-development/wf-qa/test_quality.py
# Testes + meta-testes (prova que o harness detecta regressão)
python3 ~/.hermes/skills/software-development/wf-qa/test_tests.py
# Audit OWASP de um endpoint/controller
# (skill api-security-review) — veja a skill
# CVE nas deps do projeto
# (skill dependency-cve-audit) — veja a skill
# Bug hunt adversarial no diff (read-only)
# (skill hermaguard: "hermaguard this")
Critérios de Aceite (checklist não-regressivo)
- Contrato aprovado (PLAN) antes de qualquer handler.
- BUILD com defaults seguros;
secure-codingvalidado na stack. - SECURITY: bola/auth/injection/api-review/CVE rodados; P0/P1 resolvidos.
- TEST: hermaguard + TDD + security-test-generator; suíte verde com contagem real.
- Nenhuma skill do stack removida do arquivo.
- Rodar
python3 ~/.hermes/skills/software-development/wf-qa/test_quality.py→ exit 0 (sem regressão).
Exemplos de execução por fase (comandos reais)
Fase 1 — validar contrato antes de codar:
# Lista de rotas planejadas (contrato em aberto)
cat > docs/contract.md <<'EOF'
POST /api/v1/users -> 201 | 400 | 401 | 409 | 429
GET /api/v1/users/:id -> 200 | 404 | 403
Erros: RFC 9457 (application/problem+json)
EOF
Fase 2 — build seguro (exemplo FastAPI + Pydantic):
# Rodar a stack e conferir a OpenAPI gerada
uvicorn app.main:app --reload # ou npm run dev
curl -s localhost:8000/openapi.json | python3 -m json.tool > /tmp/openapi.json
python3 -c "import sys,json; d=json.load(open('/tmp/openapi.json')); print('schemas:', len(d.get('components',{}).get('schemas',{})))"
# Validação de contrato contra a OpenAPI real
curl -s localhost:8000/health -i | head -5 # status codes do health
curl -s -X POST localhost:8000/api/v1/users -d '{}' -i | head -5 # 400 esperado
Fase 3 — auditoria de segurança:
# Rodar as skills de auditoria OWASP (veja cada skill p/ uso exato)
# bola-detector: "audite rotas com :id" / auth-rbac-scaffold: "valide o fluxo de login"
# injection-checker: "escaneie SQL/ORM" / api-security-review: "revisão OWASP do conjunto"
# dependency-cve-audit: "audite as dependências" (skill local)
Fase 4 — testes e bug hunt:
python3 -m pytest -v # ou npm test
python3 ~/.hermes/skills/software-development/wf-qa/test_quality.py # gate do workfl
# "hermaguard this" (bug hunt adversarial no diff)
Gates anti-regressão (rodar junto com o fluxo):
python3 ~/.hermes/skills/software-development/wf-qa/test_tests.py # teste dos testes
# verifica que o harness DETECTA regressão (mutações sempre derrubam o score)
python3 -m pytest tests/security/ -x # se existir suíte de segurança
Regras duras
- NUNCA escrever handler antes do contrato aprovado.
- NUNCA entregar endpoint sem passar pelas 4 fases (security + testes + hermaguard).
- Rota que mexe em dado do usuário → ownership-check obrigatório (query escopada ao ID autenticado).
- Tests vermelhos = fixar primeiro; hermaguard não roda em código quebrado.