一键导入
debugging-flask-route-after-app-run
Flask bug — rotas definidas depois do app.run() são código morto
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Flask bug — rotas definidas depois do app.run() são código morto
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Transforms the Hermes agent from a reactive question-answerer into a proactive autonomous executor. ARCHITECT takes any high-level goal, decomposes it into a dependency-aware task graph, executes each step with validation, self-corrects on failure, and delivers results — all without hand-holding. The missing execution layer for personal AI agents. Zero dependencies. Zero config. Works with any model. Pairs with apex-agent and agent-memoria for the complete autonomous agent stack.
Auto-reflective self-improvement skill — extracts learnings from corrections and success patterns, permanently encodes them into memory and skills. Philosophy: Correct once, never again.
Orchestrate multi-agent teams with defined roles, task lifecycles, handoff protocols, and review workflows. Use when: (1) Setting up a team of 2+ agents with different specializations, (2) Defining task routing and lifecycle (inbox → spec → build → review → done), (3) Creating handoff protocols between agents, (4) Establishing review and quality gates, (5) Managing async communication and artifact sharing between agents.
Integrate existing autonomous agents (like Hermes) into multi-agent orchestration platforms (AionUI, LangChain, etc.) via ACP over stdio.
MiniMax Agent Platform (agent.minimax.io) — MaxHermes, MaxClaw, Skills marketplace. Relacao com Hermes Agent (NousResearch) e OpenClaw.
Paperclip AI agent operations — creating agents with hierarchy, autonomous operation via hierarchical issues, and troubleshooting. Use when: creating agents, setting up org hierarchy, recovering from errors, or monitoring agent health.
| name | debugging-flask-route-after-app-run |
| description | Flask bug — rotas definidas depois do app.run() são código morto |
Em Python Flask, app.run() é bloqueante. Código definido depois dele é código morto no servidor em execução.
test_client() mas devolve 404 no servidor realapp.run() nunca aparecemcurl directa ao endpoint retorna 404# ❌ DEAD CODE — nunca executado pelo servidor
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5123)
@app.route("/webhook/sac/avaliar", methods=["POST"])
def webhook_sac_avaliar(): # INACESSÍVEL
...
# ✅ VIVO — executado antes do servidor arrancar
@app.route("/webhook/sac/avaliar", methods=["POST"])
def webhook_sac_avaliar(): # ACESSÍVEL
...
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5123)
test_client() processa pedidos in-process sem iniciar o servidor HTTP. Nunca chama app.run(), por isso rotas registadas depois do app.run() são visíveis nos testes mas não no servidor real.
# Adicionar JUSTO ANTES do app.run()
print(">>> URL_RULES", [r.rule for r in app.url_map.iter_rules()])
# Se a rota pretendida não aparece aqui → está registada depois do app.run()
Gunicorn também lê o mesmo app object. Se a rota foi registada depois do app.run(), o gunicorn também não a vê — porque o código nunca foi executado.
Sempre que uma rota parece não funcionar, verificar: está o decorador/route registration antes ou depois do app.run()?
Quando se move rotas de depois para antes do app.run(), podem aparecer problemas adicionais:
AssertionError: View function mapping is overwriting an existing endpoint function)Se o código original tinha rotas ANTES do app.run() E depois, ao mover criam-se duplicados.
Solução: Identificar e remover as duplicatas ANTES de mover. Procurar: grep -n "^@app.route" ficheiro.py
NameError: name 'render_template' is not definedFlask só importa render_template_string mas o código novo usa render_template.
Solução: Adicionar render_template ao import do Flask:
from flask import ..., render_template_string, render_template
{ username } vs { login })Se o backend espera { login } mas o HTML envia { username } — login funciona mas redirect não acontece.
Solução: Verificar o JSON que o JS envia vs o que request.get_json() espera no servidor.
curl primeiro, browser depoisO browser pode ter cookies de sessão antigos que mascaram o comportamento real. Sempre testar com curl -v limpo.
Bug real: ~/.hermes/sac_agent/sac_agent.py — webhook_sac_avaliar definido após app.run(). Corrigido 25/04/2026. Commit: f92d4ab no repo bianinho-cerebro.
Bug real 27/04/2026: Rotas admin (perfil, convites, users) definidas após app.run() + sistema de login duplicado hardcoded vs DB + render_template em falta + campo {username} vs {login} no admin-login.html. Corrigido em ambos ~/.hermes/sac_agent/ e ~/sac-agent-local/.