Domínio 1 — Agentic Architecture & Orchestration · Lição 4 de 7

Quatro formas de construir um agente

Objetivos de aprendizagem

O espectro: de "faço tudo" a "a Anthropic faz tudo"

Um agente sempre tem duas metades: o harness (o loop agêntico, a execução de ferramentas, o gerenciamento de contexto) e o deployment (a infraestrutura onde isso roda). As quatro abordagens se diferenciam por quem assume cada metade:

AbordagemQuem fornece o harnessQuem fornece o deploymentQuando usar
Loop manual (Messages API) Você — escreve o loop, checa stop_reason, executa ferramentas, gerencia histórico. Você — sua infraestrutura. Controle total: transporte customizado, formas de requisição que o SDK não monta, fluxos que não cabem nos hooks do runner, ou para evitar dependência beta.
Tool Runner do SDK (client.beta.messages.tool_runner, beta) O SDK — automatiza o loop sobre as suas ferramentas (@beta_tool); você intervém por iteração se quiser. Você — sua infraestrutura. Padrão recomendado para agentes de ferramentas customizadas: menos código, hooks por iteração (aprovação, interceptação, modificação de resultado), max_iterations.
Claude Agent SDK A Anthropic — o harness completo do Claude Code: loop, ferramentas built-in (Read, Write, Bash, Grep, Glob), subagentes via Task, hooks, sessões, skills e MCP. Você — roda na sua máquina/servidor, com acesso ao seu filesystem. Agentes de propósito geral que operam sobre arquivos/código/ambiente: produtividade de dev, pesquisa multi-agente, suporte com MCP — sem reimplementar harness.
Managed Agents (beta) A Anthropic — agente hospedado com harness gerenciado. A Anthropic — sessões e sandbox gerenciados no servidor; você interage por API. Quando você não quer operar nem o harness nem a infraestrutura de execução: menor esforço operacional, menos controle fino sobre o ambiente.
flowchart LR
    subgraph voce[Você fornece]
      A[Loop manual
harness: você
deploy: você] B[Tool Runner
harness: SDK
deploy: você] C[Claude Agent SDK
harness: Anthropic
deploy: você] end subgraph anthropic[Anthropic fornece] D[Managed Agents
harness: Anthropic
deploy: Anthropic] end A -- menos abstração --> B -- --> C -- mais abstração --> D

Tool Runner em 20 linhas

O runner elimina o loop manual: você declara as ferramentas como funções tipadas e itera pelas mensagens. A iteração termina sozinha quando o Claude para de chamar ferramentas:

import anthropic
from anthropic import beta_tool

client = anthropic.Anthropic()

@beta_tool
def lookup_order(order_id: str) -> str:
    """Busca o status de um pedido pelo numero.

    Args:
        order_id: Numero do pedido, ex. 4412.
    """
    return '{"order_id": "%s", "status": "shipped"}' % order_id

runner = client.beta.messages.tool_runner(
    model="claude-opus-5",
    max_tokens=8000,
    max_iterations=20,  # guarda-corpo de custo, NAO o criterio de parada
    tools=[lookup_order],
    messages=[{"role": "user", "content": "Qual o status do pedido 4412?"}],
)

last = None
for message in runner:
    # cada iteracao entrega a mensagem do assistente ANTES das tools rodarem:
    # da para inspecionar, aprovar/negar ou modificar o resultado aqui.
    last = message

if last is not None:
    final_text = next((b.text for b in last.content if b.type == "text"), "")
    print(final_text)

Beta e pause_turn: o Tool Runner é beta. E, na versão atual do SDK Python, ele não retoma pause_turn automaticamente — um turno pausado encerra o runner como se fosse a mensagem final. Se você usa ferramentas server-side longas, espelhe o histórico e reinicie o runner com o turno pausado anexado, ou trate pause_turn num loop manual.

Claude Agent SDK: o harness do Claude Code como biblioteca

O Claude Agent SDK (Python/TypeScript) empacota o mesmo harness que move o Claude Code: loop agêntico pronto, ferramentas de filesystem e shell, subagentes (Task), hooks de ciclo de vida, sessões persistentes, skills e integração MCP. Você configura via ClaudeAgentOptions (ferramentas permitidas, system prompt, agentes, hooks) e chama query() — o SDK executa o loop inteiro na sua máquina. As lições 5, 6 e 7 aprofundam subagentes, hooks e sessões.

Limites de iteração e task budgets

Na prova, qualquer alternativa que use limite de iterações/orçamento como mecanismo primário de terminação está errada (anti-padrão do task statement 1.1). A palavra-chave das alternativas corretas é "safety net"/"guarda-corpo" combinada com stop_reason.

Pegadinhas da prova

Resumo em 5 linhas

  1. Agente = harness (loop + ferramentas + controle) + deployment (onde roda); as 4 abordagens variam em quem fornece cada metade.
  2. Loop manual: você fornece tudo — controle máximo, esforço máximo.
  3. Tool Runner (beta): o SDK roda o loop sobre suas ferramentas na sua infra; hooks por iteração cobrem aprovação/interceptação; max_iterations como guarda-corpo.
  4. Claude Agent SDK: harness completo do Claude Code (built-in tools, Task, hooks, sessões) rodando na sua infra; Managed Agents (beta): harness e sandbox hospedados pela Anthropic.
  5. Limites de iteração e task budgets (beta) são guarda-corpos de custo/segurança — nunca o mecanismo primário de parada.

Documentação oficial

Questões de fixação

1. Sua equipe quer um agente que explore o codebase com Read/Grep/Bash, delegue a subagentes e mantenha sessões — rodando nos servidores da empresa por exigência de compliance. Qual abordagem entrega isso com menos esforço?

2. No Tool Runner do SDK Python, qual é o papel correto do parâmetro max_iterations?

3. Qual par "harness / deployment" descreve corretamente os Managed Agents?

4. Um desenvolvedor afirma: "preciso de aprovação humana antes de qualquer ferramenta com efeito colateral, então sou obrigado a abandonar o Tool Runner e escrever o loop manual". Como avaliar?