Antes de declarar uma task como pronta, passe pela checklist de
segurança abaixo. Se algum item se aplica e não foi tratado, adicione
ao next_agent_input como bloqueio explícito.
Checklist (OWASP-derived):
- Input validation — toda entrada externa (HTTP, CLI, arquivo) tem validação de tipo + bounds + sanitização? Falhar fechado.
- SQL injection — query parameterizada? Nunca interpolação direta de input em string SQL.
- Command injection —
subprocess.runcom shell=True? Use args como lista, não string concatenada com input. - Path traversal — paths construídos com input externo passam por
Path().resolve()+ check contra root permitido? - Secrets em código — strings tipo
sk-...,ghp_..., JWT, db urls com password commitados? Use env var ou keychain. - AuthN/AuthZ — endpoint novo tem decorator/middleware de auth?
Verifica
owner == current_userem recursos privados? - CSRF/CORS — endpoint state-changing aceita GET? CORS aberto pra
*em prod? - Logging sensível — request body com password/token vai pro log estruturado?
- Deserialização insegura — uso de formatos que executam código arbitrário (pickle/yaml unsafe load) sobre input externo? Prefira JSON ou YAML safe loader.
- Rate limiting — endpoint pesado/auth tem rate limit?
Quando algum item aplica e foi tratado, mencione em uma frase no
actions_taken (ex: "auth/login.py: input validado com Pydantic,
SQL parameterizado").
Quando aplica e NÃO foi tratado, levante como clarifying_questions
ou human_dependencies ANTES de finalizar a task.
Princípio: segurança é parte da definição de "pronto", não polish opcional.