<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://montanari.dev/knowledge/articles</id>
    <title>montanari.dev</title>
    <updated>2026-06-01T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://montanari.dev/knowledge/articles"/>
    <subtitle>Engenharia de Sistemas Multiagentes: arquitetura, padrões e implementação.</subtitle>
    <icon>https://montanari.dev/img/favicon.svg</icon>
    <rights>Copyright © 2026 montanari.dev</rights>
    <entry>
        <title type="html"><![CDATA[Control planes para sistemas multiagentes]]></title>
        <id>https://montanari.dev/knowledge/articles/control-planes-para-sistemas-multiagentes</id>
        <link href="https://montanari.dev/knowledge/articles/control-planes-para-sistemas-multiagentes"/>
        <updated>2026-06-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Separando governança, execução e estado para operar agentes com previsibilidade.]]></summary>
        <content type="html"><![CDATA[<img class="articleCover" src="https://montanari.dev/img/og/control-planes-para-sistemas-multiagentes.png" alt="Diagrama abstrato de um control plane coordenando agentes"><blockquote>
<p>Placeholder editorial: estrutura preparada para receber a versão aprofundada do artigo.</p>
</blockquote>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contexto">Contexto<a href="https://montanari.dev/knowledge/articles/control-planes-para-sistemas-multiagentes#contexto" class="hash-link" aria-label="Link direto para Contexto" title="Link direto para Contexto" translate="no">​</a></h2>
<p>Sistemas multiagentes acumulam configuração, políticas, ferramentas e estado operacional. Quando esses elementos vivem dentro de cada runtime, a governança se fragmenta.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="arquitetura">Arquitetura<a href="https://montanari.dev/knowledge/articles/control-planes-para-sistemas-multiagentes#arquitetura" class="hash-link" aria-label="Link direto para Arquitetura" title="Link direto para Arquitetura" translate="no">​</a></h2>
<!-- -->
<section class="architectureDecision"><header><span>ADR</span><h3>Separar control plane e data plane</h3><span class="statusBadge statusBadge--accepted">accepted</span></header><p>O control plane governa configuração e políticas; o data plane executa tarefas com baixa latência.</p></section>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="trade-offs">Trade-offs<a href="https://montanari.dev/knowledge/articles/control-planes-para-sistemas-multiagentes#trade-offs" class="hash-link" aria-label="Link direto para Trade-offs" title="Link direto para Trade-offs" translate="no">​</a></h2>
<section class="tradeoffs"><h3>Trade-offs</h3><div class="tradeoffsGrid"><div><strong>Vantagens</strong><ul><li>Governança centralizada</li><li>Rollbacks independentes</li><li>Auditoria consistente</li></ul></div><div><strong>Custos e riscos</strong><ul><li>Nova camada operacional</li><li>Consistência eventual</li><li>Contratos adicionais</li></ul></div></div></section>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="próximos-passos">Próximos passos<a href="https://montanari.dev/knowledge/articles/control-planes-para-sistemas-multiagentes#pr%C3%B3ximos-passos" class="hash-link" aria-label="Link direto para Próximos passos" title="Link direto para Próximos passos" translate="no">​</a></h2>
<p>Este placeholder será expandido com protocolos, modelo de dados, código e testes de falha.</p>]]></content>
        <author>
            <name>Gui</name>
            <uri>https://montanari.dev/about</uri>
        </author>
        <category label="Architecture" term="Architecture"/>
        <category label="Multi-Agent" term="Multi-Agent"/>
        <category label="Control Plane" term="Control Plane"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[DSPy e otimização programática]]></title>
        <id>https://montanari.dev/knowledge/articles/dspy-otimizacao</id>
        <link href="https://montanari.dev/knowledge/articles/dspy-otimizacao"/>
        <updated>2026-07-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Separando intenção, exemplos e otimização da escrita manual de prompts.]]></summary>
        <content type="html"><![CDATA[<img class="articleCover" src="https://montanari.dev/img/og/dspy-e-otimizacao-programatica.png" alt="Capa do conteúdo: DSPy e otimização programática"><h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="programa-métrica-e-otimizador">Programa, métrica e otimizador<a href="https://montanari.dev/knowledge/articles/dspy-otimizacao#programa-m%C3%A9trica-e-otimizador" class="hash-link" aria-label="Link direto para Programa, métrica e otimizador" title="Link direto para Programa, métrica e otimizador" translate="no">​</a></h2>
<p>O ganho não vem apenas da sintaxe, mas da separação entre comportamento desejado e mecanismo de busca.</p>]]></content>
        <author>
            <name>Gui</name>
            <uri>https://montanari.dev/about</uri>
        </author>
        <category label="DSPy" term="DSPy"/>
        <category label="Evaluation" term="Evaluation"/>
        <category label="Architecture" term="Architecture"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Avaliação contínua em produção]]></title>
        <id>https://montanari.dev/knowledge/articles/avaliacao-continua</id>
        <link href="https://montanari.dev/knowledge/articles/avaliacao-continua"/>
        <updated>2026-07-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Da suíte offline aos sinais amostrados no runtime.]]></summary>
        <content type="html"><![CDATA[<img class="articleCover" src="https://montanari.dev/img/og/avaliacao-continua-em-producao.png" alt="Capa do conteúdo: Avaliação contínua em produção"><h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="uma-malha-de-avaliação">Uma malha de avaliação<a href="https://montanari.dev/knowledge/articles/avaliacao-continua#uma-malha-de-avalia%C3%A7%C3%A3o" class="hash-link" aria-label="Link direto para Uma malha de avaliação" title="Link direto para Uma malha de avaliação" translate="no">​</a></h2>
<p>Conecte testes determinísticos, juízes, revisão humana e métricas de negócio com proveniência comum.</p>
<figure class="benchmark"><figcaption><span>BENCHMARK</span><strong>Estratégias de avaliação</strong></figcaption><div class="benchmarkScroll"><table><thead><tr><th>Opção</th><th>Cobertura</th><th>Custo</th></tr></thead><tbody><tr class=""><th>Regras</th><td>Baixa</td><td>Baixo</td></tr><tr class="isHighlighted"><th>LLM judge</th><td>Média</td><td>Médio</td></tr><tr class=""><th>Humana</th><td>Alta</td><td>Alto</td></tr></tbody></table></div></figure>]]></content>
        <author>
            <name>Gui</name>
            <uri>https://montanari.dev/about</uri>
        </author>
        <category label="Evaluation" term="Evaluation"/>
        <category label="Observability" term="Observability"/>
        <category label="Multi-Agent" term="Multi-Agent"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Human in the Loop como protocolo]]></title>
        <id>https://montanari.dev/knowledge/articles/hitl-como-protocolo</id>
        <link href="https://montanari.dev/knowledge/articles/hitl-como-protocolo"/>
        <updated>2026-07-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Intervenção humana modelada como estado, contrato e prazo.]]></summary>
        <content type="html"><![CDATA[<img class="articleCover" src="https://montanari.dev/img/og/human-in-the-loop-como-protocolo.png" alt="Capa do conteúdo: Human in the Loop como protocolo"><h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="a-pausa-é-parte-do-sistema">A pausa é parte do sistema<a href="https://montanari.dev/knowledge/articles/hitl-como-protocolo#a-pausa-%C3%A9-parte-do-sistema" class="hash-link" aria-label="Link direto para A pausa é parte do sistema" title="Link direto para A pausa é parte do sistema" translate="no">​</a></h2>
<p>Modele solicitação, expiração, escalonamento e retomada como transições persistidas.</p>]]></content>
        <author>
            <name>Gui</name>
            <uri>https://montanari.dev/about</uri>
        </author>
        <category label="Human in the Loop" term="Human in the Loop"/>
        <category label="Multi-Agent" term="Multi-Agent"/>
        <category label="Architecture" term="Architecture"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Eventos como memória operacional]]></title>
        <id>https://montanari.dev/knowledge/articles/eventos-como-memoria-operacional</id>
        <link href="https://montanari.dev/knowledge/articles/eventos-como-memoria-operacional"/>
        <updated>2026-07-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Por que eventos de domínio são melhores que logs para reconstruir decisões.]]></summary>
        <content type="html"><![CDATA[<img class="articleCover" src="https://montanari.dev/img/og/eventos-como-memoria-operacional.png" alt="Capa do conteúdo: Eventos como memória operacional"><h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="eventos-de-decisão">Eventos de decisão<a href="https://montanari.dev/knowledge/articles/eventos-como-memoria-operacional#eventos-de-decis%C3%A3o" class="hash-link" aria-label="Link direto para Eventos de decisão" title="Link direto para Eventos de decisão" translate="no">​</a></h2>
<p>O evento deve registrar intenção, evidência, política aplicada, resultado e correlação, sem depender do texto livre do modelo.</p>]]></content>
        <author>
            <name>Gui</name>
            <uri>https://montanari.dev/about</uri>
        </author>
        <category label="Event-driven" term="Event-driven"/>
        <category label="Observability" term="Observability"/>
        <category label="Memory" term="Memory"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Guardrails em camadas]]></title>
        <id>https://montanari.dev/knowledge/articles/guardrails-em-camadas</id>
        <link href="https://montanari.dev/knowledge/articles/guardrails-em-camadas"/>
        <updated>2026-07-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Prevenção, detecção e contenção de falhas em sistemas agentic.]]></summary>
        <content type="html"><![CDATA[<img class="articleCover" src="https://montanari.dev/img/og/guardrails-em-camadas.png" alt="Capa do conteúdo: Guardrails em camadas"><h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="modelo-de-defesa">Modelo de defesa<a href="https://montanari.dev/knowledge/articles/guardrails-em-camadas#modelo-de-defesa" class="hash-link" aria-label="Link direto para Modelo de defesa" title="Link direto para Modelo de defesa" translate="no">​</a></h2>
<p>Distribua controles entre entrada, planejamento, execução de ferramentas, saída e efeitos externos.</p>]]></content>
        <author>
            <name>Gui</name>
            <uri>https://montanari.dev/about</uri>
        </author>
        <category label="Guardrails" term="Guardrails"/>
        <category label="Multi-Agent" term="Multi-Agent"/>
        <category label="Tool Calling" term="Tool Calling"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tool calling é um contrato distribuído]]></title>
        <id>https://montanari.dev/knowledge/articles/tool-calling-como-contrato</id>
        <link href="https://montanari.dev/knowledge/articles/tool-calling-como-contrato"/>
        <updated>2026-06-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Schemas, idempotência e limites na execução de ferramentas por agentes.]]></summary>
        <content type="html"><![CDATA[<img class="articleCover" src="https://montanari.dev/img/og/tool-calling-e-um-contrato-distribuido.png" alt="Capa do conteúdo: Tool calling é um contrato distribuído"><h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contratos-antes-de-prompts">Contratos antes de prompts<a href="https://montanari.dev/knowledge/articles/tool-calling-como-contrato#contratos-antes-de-prompts" class="hash-link" aria-label="Link direto para Contratos antes de prompts" title="Link direto para Contratos antes de prompts" translate="no">​</a></h2>
<p>Uma tool precisa declarar entradas, saídas, autorização, idempotência, timeout e política de retry.</p>
<aside class="mdxCallout mdxCallout--warning"><div class="mdxCalloutMarker">!</div><div><strong>Atenção</strong><div>Retries automáticos em operações não idempotentes podem duplicar efeitos no mundo real.</div></div></aside>]]></content>
        <author>
            <name>Gui</name>
            <uri>https://montanari.dev/about</uri>
        </author>
        <category label="Tool Calling" term="Tool Calling"/>
        <category label="Guardrails" term="Guardrails"/>
        <category label="Architecture" term="Architecture"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[LangGraph como runtime, não como desenho]]></title>
        <id>https://montanari.dev/knowledge/articles/langgraph-como-runtime</id>
        <link href="https://montanari.dev/knowledge/articles/langgraph-como-runtime"/>
        <updated>2026-06-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Estado, checkpoints e recuperação em grafos de agentes.]]></summary>
        <content type="html"><![CDATA[<img class="articleCover" src="https://montanari.dev/img/og/langgraph-como-runtime-nao-como-desenho.png" alt="Capa do conteúdo: LangGraph como runtime, não como desenho"><h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="problema">Problema<a href="https://montanari.dev/knowledge/articles/langgraph-como-runtime#problema" class="hash-link" aria-label="Link direto para Problema" title="Link direto para Problema" translate="no">​</a></h2>
<p>O valor do grafo aparece quando falhas, retomadas e intervenção humana fazem parte do fluxo.</p>
<aside class="mdxCallout mdxCallout--info"><div class="mdxCalloutMarker">→</div><div><strong>Dica</strong><div>Modele cada nó como uma transição observável e idempotente sempre que possível.</div></div></aside>]]></content>
        <author>
            <name>Gui</name>
            <uri>https://montanari.dev/about</uri>
        </author>
        <category label="LangGraph" term="LangGraph"/>
        <category label="Multi-Agent" term="Multi-Agent"/>
        <category label="Architecture" term="Architecture"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Observabilidade além de traces]]></title>
        <id>https://montanari.dev/knowledge/articles/observabilidade-sistemas-multiagentes</id>
        <link href="https://montanari.dev/knowledge/articles/observabilidade-sistemas-multiagentes"/>
        <updated>2026-06-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Sinais, avaliações e contratos para explicar decisões de agentes em produção.]]></summary>
        <content type="html"><![CDATA[<img class="articleCover" src="https://montanari.dev/img/og/observabilidade-alem-de-traces.png" alt="Capa do conteúdo: Observabilidade além de traces"><blockquote>
<p>Placeholder editorial para uma análise completa de observabilidade agentic.</p>
</blockquote>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="os-sinais">Os sinais<a href="https://montanari.dev/knowledge/articles/observabilidade-sistemas-multiagentes#os-sinais" class="hash-link" aria-label="Link direto para Os sinais" title="Link direto para Os sinais" translate="no">​</a></h2>
<p>Combine traces distribuídos, eventos de decisão, métricas de resultado e avaliações amostradas.</p>
<aside class="mdxCallout mdxCallout--danger"><div class="mdxCalloutMarker">×</div><div><strong>Anti-pattern</strong><div>Usar o texto integral do prompt como único evento de auditoria mistura dados sensíveis, ruído e ausência de estrutura.</div></div></aside>]]></content>
        <author>
            <name>Gui</name>
            <uri>https://montanari.dev/about</uri>
        </author>
        <category label="Observability" term="Observability"/>
        <category label="Evaluation" term="Evaluation"/>
        <category label="Multi-Agent" term="Multi-Agent"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Memória não é contexto]]></title>
        <id>https://montanari.dev/knowledge/articles/memoria-nao-e-contexto</id>
        <link href="https://montanari.dev/knowledge/articles/memoria-nao-e-contexto"/>
        <updated>2026-06-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Um modelo prático para memória episódica, semântica e operacional em agentes.]]></summary>
        <content type="html"><![CDATA[<img class="articleCover" src="https://montanari.dev/img/og/memoria-nao-e-contexto.png" alt="Capa do conteúdo: Memória não é contexto"><blockquote>
<p>Placeholder editorial para o modelo completo de memória.</p>
</blockquote>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="contexto-e-memória">Contexto e memória<a href="https://montanari.dev/knowledge/articles/memoria-nao-e-contexto#contexto-e-mem%C3%B3ria" class="hash-link" aria-label="Link direto para Contexto e memória" title="Link direto para Contexto e memória" translate="no">​</a></h2>
<p>Contexto é uma projeção temporária. Memória possui retenção, proveniência, escopo e políticas de esquecimento.</p>
<!-- -->
<aside class="mdxCallout mdxCallout--success"><div class="mdxCalloutMarker">✓</div><div><strong>Best practice</strong><div>Defina o contrato de retenção antes de escolher o mecanismo de armazenamento.</div></div></aside>]]></content>
        <author>
            <name>Gui</name>
            <uri>https://montanari.dev/about</uri>
        </author>
        <category label="Memory" term="Memory"/>
        <category label="Multi-Agent" term="Multi-Agent"/>
        <category label="Architecture" term="Architecture"/>
    </entry>
</feed>