بنقرة واحدة
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/.