🎯 O que é BMad
BMad não é um framework — é um método de raciocínio. Ele responde a pergunta mais difícil de orquestração: dado um objetivo complexo e vago, como você chega a um conjunto de tarefas concretas, priorizadas e atribuíveis a agentes específicos?
📊 BMad: as 3 fases
B — Breakdown
Decompor o objetivo em subproblemas e tarefas com dependências e critérios de sucesso
M — Manage
Organizar as tarefas em árvore de execução, definir sequencial vs. paralelo, estimar custo
D — Delegate
Atribuir cada tarefa ao agente mais adequado com contexto mínimo e critério de aceitação
💡 Por que BMad em vez de improvisar?
Sem um método, cada problema novo gera uma solução ad-hoc inconsistente. Com BMad, você tem um processo repetível que qualquer membro da equipe pode aplicar. O resultado: planejamento auditável, tarefas rastreáveis e sistemas que você consegue debugar quando algo dá errado.
🔨 Fase Breakdown: decompor o objetivo
A fase mais crítica — e a mais subestimada. Uma decomposição ruim propaga erro por todo o sistema. Tarefas mal definidas garantem resultados mal definidos. O Breakdown transforma um objetivo vago em um grafo de tarefas concreto e verificável.
🔨 Processo de Breakdown passo a passo
Formule o objetivo em termos verificáveis
Ruim: "analise o mercado". Bom: "produza relatório com: 5 concorrentes identificados, feature comparison em tabela, análise de pricing e recomendação de posicionamento".
Identifique os subproblemas independentes
Pergunte: "o que precisa acontecer para isso estar completo?" Cada resposta é um subproblema potencial. Use princípio MECE: mutuamente exclusivos, coletivamente exaustivos.
Mapeie as dependências entre tarefas
Pergunta: "essa tarefa precisa do resultado de qual outra antes de começar?" Isso forma o DAG (Directed Acyclic Graph) de execução.
Defina critério de sucesso por tarefa
Cada tarefa precisa de um critério verificável: "lista de 5 concorrentes com URL, categoria e pricing". Sem critério, o agente não sabe quando parou.
⚠️ Erros comuns no Breakdown
- ✗Granularidade errada: tarefas muito grandes (agente não sabe por onde começar) ou muito pequenas (overhead desnecessário)
- ✗Dependências circulares: A depende de B que depende de A — o sistema trava antes de começar
- ✗Critério de sucesso vago: "analise bem" não é verificável. "Produza relatório com N campos específicos" é.
🗂️ Fase Manage: organizar a execução
Com as tarefas e dependências definidas, o Manage organiza a execução para ser eficiente. A decisão central: o que pode ser paralelo (economiza tempo) e o que precisa ser sequencial (respeita dependências). A organização correta é a diferença entre 10 minutos e 1 hora de execução.
🗂️ O que o Manage produz
1. Árvore de execução
Transforma o DAG de dependências em uma ordem de execução: quais tarefas começam primeiro, quais esperam outras, quais são o caminho crítico.
2. Classificação paralelo/sequencial
Tarefas sem dependência entre si são marcadas como paralelas. Tarefas com dependência são sequenciais. Isso define a estrutura de execução.
3. Estimativa de custo total
Soma o custo estimado de tokens de cada tarefa (baseado em complexidade e agente que vai executar). Budget total antes de iniciar a execução.
📊 Identificando o caminho crítico
O caminho crítico é a sequência de tarefas dependentes mais longa. A duração total da execução nunca será menor que o caminho crítico. Para acelerar o sistema, optimize as tarefas no caminho crítico — otimizar as outras não ajuda.
Pesquisa A (2min) ─┐
Pesquisa B (2min) ─┤→ Análise (5min) → Relatório (3min)
Pesquisa C (2min) ─┘
# Caminho crítico: Análise (5min) + Relatório (3min) = 8min
# As pesquisas paralelas tomam 2min (não 6min)
# Total: 10min (não 12min se fossem todas em série)
📤 Fase Delegate: atribuir ao agente certo
Com a árvore de execução definida, o Delegate atribui cada tarefa ao agente mais adequado, passa exatamente o contexto necessário (nem mais, nem menos) e define o critério de aceitação que o agente usará para saber quando terminou.
Critérios de matching tarefa → agente
O pacote de delegação
task_description
O que fazer em linguagem natural clara e específica
context (mínimo necessário)
Resultado das tarefas predecessoras que este agente precisa
acceptance_criteria
Como o agente sabe que terminou (schema do output esperado)
timeout + max_cost
Limites de tempo e budget para esta tarefa específica
🐍 BMad em Python
A implementação do BMad em Python usa conceitos de grafos direcionados (DAGs) para representar dependências entre tarefas e execução topológica para respeitar a ordem correta. Você vai reconhecer esse padrão exato no LangGraph e outras ferramentas de orquestração.
Python — Estruturas de dados BMad
from dataclasses import dataclass, field
from enum import Enum
from typing import List, Optional, Dict, Any
import asyncio
class TaskStatus(Enum):
PENDING = "pending"
RUNNING = "running"
DONE = "done"
FAILED = "failed"
@dataclass
class Task:
id: str
description: str
agent_id: str
dependencies: List[str] = field(default_factory=list)
acceptance_criteria: str = ""
max_cost_usd: float = 1.0
timeout_seconds: int = 120
status: TaskStatus = TaskStatus.PENDING
result: Optional[Any] = None
cost_usd: float = 0.0
class TaskTree:
def __init__(self):
self.tasks: Dict[str, Task] = {}
def add_task(self, task: Task):
self.tasks[task.id] = task
def get_ready_tasks(self) -> List[Task]:
"""Tarefas cujas dependências foram concluídas"""
ready = []
for task in self.tasks.values():
if task.status == TaskStatus.PENDING:
deps_done = all(
self.tasks[dep].status == TaskStatus.DONE
for dep in task.dependencies
)
if deps_done:
ready.append(task)
return ready
Python — Executor BMad com progresso em tempo real
class BMadExecutor:
def __init__(self, task_tree: TaskTree, agent_registry: dict):
self.tree = task_tree
self.agents = agent_registry
self.total_cost = 0.0
async def execute(self, budget_usd: float = 10.0):
while not self._is_complete():
ready = self.tree.get_ready_tasks()
if not ready:
break # deadlock ou completo
# Executa tarefas prontas em paralelo
tasks = [self._run_task(t, budget_usd) for t in ready]
await asyncio.gather(*tasks, return_exceptions=True)
async def _run_task(self, task: Task, budget: float):
if self.total_cost >= budget:
task.status = TaskStatus.FAILED
return
task.status = TaskStatus.RUNNING
agent = self.agents[task.agent_id]
context = self._build_context(task)
try:
result = await asyncio.wait_for(
agent.run(task.description, context),
timeout=task.timeout_seconds
)
task.result = result
task.status = TaskStatus.DONE
self.total_cost += task.cost_usd
print(f"✓ {task.id} concluído — custo: ${task.cost_usd:.3f}")
except Exception as e:
task.status = TaskStatus.FAILED
print(f"✗ {task.id} falhou: {e}")
📖 Exemplo real: análise de concorrência
Objetivo: "Analisar os 5 principais concorrentes e gerar um relatório executivo com análise comparativa e recomendação de posicionamento." Vamos aplicar as 3 fases do BMad a esse problema real.
Breakdown — 8 tarefas identificadas
Manage — Árvore de execução
Onda 1: T1 (sequencial — identifica concorrentes)
Onda 2: T2, T3, T4 (paralelo — coleta simultânea)
Onda 3: T5, T6 (paralelo — análise simultânea)
Onda 4: T7 (sequencial — síntese estratégica)
Onda 5: T8 (sequencial — relatório final)
Custo estimado: $0.45 | Tempo: ~12 min
Delegate — Atribuição por especialidade
✓ O resultado do BMad aplicado
Em vez de um agente generalista tentando fazer tudo em 30 minutos (e provavelmente falhando na análise estratégica), você tem 3 agentes especializados entregando em 12 minutos, com custo controlado e resultado rastreável por tarefa. Quando o T6 produz uma tabela errada, você sabe exatamente qual agente foi responsável e pode corrigir só aquela tarefa.
✅ Resumo do Módulo 4.3
Próximo Módulo:
4.4 — Agentes Especializados: Planejador, Executor, Revisor, Auditor — os papéis, responsabilidades e contratos de interface entre eles.