MÓDULO 4.3

📋 BMad na Prática

Breakdown-Manage-Delegate: o método arquitetural para transformar objetivos complexos em tarefas executáveis por agentes. Da teoria ao código Python, incluindo um exemplo real completo com 8 tarefas, 3 paralelas e 3 agentes especializados.

6
Tópicos
45
Minutos
Interm.
Nível
Método
Tipo
1

🎯 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.

2

🔨 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

1

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".

2

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.

3

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.

4

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" é.
3

🗂️ 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)

4

📤 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

1 Domínio: agente treinado/promtado para o tipo de tarefa (pesquisa, código, redação)
2 Custo: tarefa simples → modelo barato; tarefa complexa → modelo caro
3 Disponibilidade: agente com menor carga atual recebe a tarefa
4 Confiabilidade: histórico de sucesso do agente para esse tipo de tarefa

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

5

🐍 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}")
6

📖 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.

B

Breakdown — 8 tarefas identificadas

T1: Identificar concorrentes (sem dependência)
T2: Coletar features Concorrente A (depende T1)
T3: Coletar features Concorrente B (depende T1)
T4: Coletar features Concorrente C (depende T1)
T5: Analisar pricing de todos (depende T2, T3, T4)
T6: Criar feature comparison table (depende T2, T3, T4)
T7: Análise estratégica (depende T5, T6)
T8: Gerar relatório final (depende T7)
M

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

D

Delegate — Atribuição por especialidade

PesquisadorT1 (identificação), T2, T3, T4 (coleta) — modelo barato, muita busca web
AnalistaT5 (pricing), T6 (tabela), T7 (estratégia) — modelo médio, análise estruturada
RedatorT8 (relatório) — modelo médio, geração de documento profissional

✓ 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

BMad é um método de raciocínio — não um framework, mas um processo repetível e auditável
Breakdown produz o DAG de tarefas — com dependências, critérios de sucesso e rastreabilidade
Manage identifica paralelismo — e o caminho crítico que define a duração mínima
Delegate usa matching criterioso — domínio, custo, disponibilidade e confiabilidade do agente
Python usa TaskTree + topological sort — exatamente o padrão interno do LangGraph e CrewAI

Próximo Módulo:

4.4 — Agentes Especializados: Planejador, Executor, Revisor, Auditor — os papéis, responsabilidades e contratos de interface entre eles.