Prólogo
Boa parte da conversa sobre IA em 2026 ainda gira em torno dos modelos. Qual é mais inteligente. Qual escreve React mais limpo. Qual benchmark acabou de subir dois pontos.
Essa conversa é cada vez mais a errada.
O trabalho interessante deste ano acontece uma camada abaixo do modelo: no formato dos codebases que o modelo lê. Enquanto todo mundo assiste Anthropic, OpenAI e Google entregarem janelas de contexto maiores, autores de frameworks vêm redesenhando seus pacotes silenciosamente para que essas janelas tenham algo útil para ler.
O Next.js 16 é o exemplo mais claro que vi até agora. Depois de passar uma noite dissecando node_modules/next neste repositório, o quadro é difícil de ignorar: a Vercel não está mais otimizando o Next.js só para humanos. Está otimizando o Next.js para ser inferido por agentes.
Este artigo é um teardown do que eles realmente entregaram, o que isso implica para o design de frameworks, e por que acho que node_modules/ está prestes a virar uma camada de inteligência por si só.
Tese central
O desenvolvimento assistido por IA moderno está migrando do conhecimento estático de framework pré-treinado para inteligência de repositório em runtime. O framework que você tem instalado localmente está se tornando mais autoritativo do que qualquer coisa cozida no modelo.
O problema do conhecimento pré-treinado de framework
Todo assistente de código em produção hoje carrega um corte de conhecimento. Mesmo com retrieval augmentation, os priors que um modelo traz para uma tarefa são formados muito antes do projeto existir.
Para a maioria dos domínios isso tudo bem. Para frameworks como o Next.js é um problema estrutural.
Três coisas dão errado ao mesmo tempo:
- APIs depreciam mais rápido que os ciclos de retraining. Uma nova convenção do App Router pode aterrissar em uma única minor version, e ciclos de pré-treino não são eventos semanais.
- Modelos alucinam APIs plausíveis-mas-erradas. Quem já viu um LLM confiantemente fazer
import { getServerSideProps } from "next/app"em um projeto App Router conhece o modo de falha. - Ruído de migração vira ruído de treino. Anos de blog posts, respostas no Stack Overflow e tutoriais no YouTube descrevendo versões mais antigas do Next.js ficam no corpus de treino como texto indiferenciado. O modelo não tem como ponderar
13.4contra16.2de forma confiável.
A resposta tradicional foi "retrieval por cima do site público de docs". Ajuda, mas tem seus próprios modos de falha: as docs que o agente encontra online podem não bater com a versão que ele está editando, a busca custa latência e tokens, e a resolução entre o framework rodando e o snapshot indexado vai derivando ao longo do tempo.
A resposta da Vercel no Next.js 16 é mais agressiva. Eles moveram a fonte de verdade.
O Next.js entrega documentação atrelada à versão dentro do pacote
next, permitindo que agentes de código de IA referenciem APIs e padrões precisos e atualizados. Um arquivoAGENTS.mdna raiz do seu projeto direciona os agentes para essas docs empacotadas em vez de seus dados de treino.
O que o Next.js 16 realmente entrega
Eu fui ver. Eis o que está sentado no disco neste repositório exato após pnpm install next@16.2.4.
- node_modules/next/dist/docs
- index.md
- 01-app
- 01-getting-started
- 02-guides
- 03-api-reference
- 02-pages
- 03-architecture
Um find nessa subárvore retorna 421 arquivos. Cada guia e página de referência de API da documentação pública é espelhada em disco, com versão presa ao pacote instalado. O layout do diretório espelha deliberadamente o nextjs.org/docs, então um agente que já tenha crawleado o site público não precisa aprender um novo modelo mental.
O enquadramento no arquivo de índice deixa a intenção explícita. Este é literalmente o primeiro parágrafo de node_modules/next/dist/docs/index.md depois do frontmatter:
1---2title: Next.js Docs3description: Welcome to the Next.js Documentation.4---56{/_ AI agent hint: If fixing slow client-side navigations, Suspense alone is not enough.7You must also export `unstable_instant` from the route.8Read docs/01-app/02-guides/instant-navigation.mdx before making changes. _/}
Esse comentário MDX não é para humanos. Humanos não veem; renderizadores MDX o removem. Ele existe para enviesar um agente que lê o arquivo antes de tocar na camada de roteamento. A Vercel está escrevendo dicas inline destinadas a leitores LLM, embutidas na documentação que vai dentro do pacote.
Essa é a parte que eu fico revisitando. Não é um efeito colateral de uma ferramenta interna. É uma escolha de design.
AGENTS.md: uma convenção que carrega peso
create-next-app@canary agora escreve dois arquivos em todo projeto novo por padrão: AGENTS.md e CLAUDE.md. O conteúdo default do AGENTS.md é propositalmente pequeno.
1<!-- BEGIN:nextjs-agent-rules -->23# Next.js: ALWAYS read docs before coding45Before any Next.js work, find and read the relevant doc in6`node_modules/next/dist/docs/`. Your training data is outdated.7The docs are the source of truth.89<!-- END:nextjs-agent-rules -->
CLAUDE.md é um one-liner que re-importa o mesmo conteúdo usando a sintaxe @ do Claude Code:
1@AGENTS.md
Três detalhes pequenos merecem atenção porque revelam mais do que o snippet sugere:
- Os marcadores de comentário
BEGIN/ENDsão um protocolo de versionamento. Eles avisam aos futuros codemods quais linhas eles possuem. A Vercel consegue entregar um novo bloco deAGENTS.mdsem sobrescrever suas instruções específicas de projeto, porque só substituem o que está entre os marcadores. É o mesmo padrão que o Husky e ogit-attributesadotaram: um contrato silencioso, aditivo. - A instrução em si é anti-confiança. Ela não diz "use padrões do Next.js 16". Diz: seus dados de treino estão desatualizados, vá ler o disco. O framework está pedindo ao modelo que desconfie de seus próprios priors.
- O opt-out default é
--no-agents-md. A direção on-by-default importa. Convenção vence configuração; a convenção agora é agent-aware.
Para projetos que antecedem o Next.js 16.2, existe um codemod (npx @next/codemod@latest agents-md) que materializa as docs em .next-docs/ em vez de node_modules/, e aponta o AGENTS.md gerado para essa localização. O caminho exato é negociável. O princípio de que as docs vão junto com o código não é.
O que isto é, estruturalmente
AGENTS.md é um arquivo de manifesto para um consumidor separado do seu repositório. Está para agentes de IA como package.json está para gerenciadores de pacote, ou como robots.txt está para crawlers. O framework reconhece que agora existem múltiplas populações de leitores, e entrega configuração apontada para uma não humana.
O endpoint MCP: estado vivo, não só docs estáticas
Docs estáticas atreladas à versão são metade do que a Vercel entregou. A outra metade vive atrás do dev server.
O Next.js 16 expõe um endpoint MCP embutido em /_next/mcp. Combine com o pacote npm next-devtools-mcp, jogue um .mcp.json na raiz do repo, e qualquer agente MCP-aware (Claude Code, Cursor, Copilot) ganha uma superfície de tools para a aplicação rodando.
1{2"mcpServers": {3"next-devtools": {4"command": "npx",5"args": ["-y", "next-devtools-mcp@latest"]6}7}8}
As tools que o agente recebe não são acesso shell genérico; são introspecção específica de domínio do runtime do Next.js:
| Tool | O que o agente pode perguntar |
|---|---|
get_errors | Erros de build ao vivo, erros em runtime e erros de tipo vindos do dev server. |
get_logs | Caminho do arquivo de log do dev, incluindo saída do console do navegador e logs de servidor. |
get_routes | Lista de rotas derivada do filesystem, agrupada por appRouter / pagesRouter, com padrões de segmento dinâmico. |
get_page_metadata | Metadados por rota: quais componentes renderizam, quais configs de segmento se aplicam. |
get_project_metadata | Estrutura do projeto, configuração e URL do dev server. |
get_server_action_by_id | Lookup reverso: converte um ID de Server Action de volta para arquivo fonte e função. |
Essa é a segunda metade da virada. Docs estáticas respondem "qual é a API atual?". O endpoint MCP responde "como a aplicação rodando parece neste momento?".
Juntos substituem os dois modos de falha que descrevi antes: priors desatualizados são substituídos por docs com versão presa, e estrutura inferida da aplicação é substituída por introspecção. Rotas alucinadas se tornam impossíveis, porque o agente consegue listar as reais.
Por que isso importa para o custo de tokens
Sem um endpoint MCP de introspecção, o agente precisa caminhar seu filesystem, parsear sua árvore de rotas e re-derivar metadados a cada sessão, pagando isso em tokens de entrada. Com get_routes e companhia, a mesma informação chega como resposta estruturada, geralmente algumas centenas de tokens no máximo. Eficiência de tokens está começando a ser uma preocupação de framework.
node_modules como camada de inteligência
Se você dá zoom out, node_modules/next no 16.2 não é só uma dependência em runtime. É um canal de distribuição de contexto machine-readable, do qual os bundles JavaScript são apenas um payload.
Olhe o que agora está embutido dentro de um único pacote instalado:
Dentro de node_modules/next@16.2.4
Cada um desses itens, isoladamente, é trivial. Juntos descrevem um pacote cuja superfície de área é intencionalmente legível para um leitor não humano.
Alguns padrões que valem nomear:
- Declarações de tipo 1 para 1. Todo subpath público em
package.json#filesentrega seu próprio.d.ts. Um agente não precisa adivinhar a forma denext/cache,next/headers,next/og,next/navigation,next/form,next/script,next/dynamic,next/image,next/server,next/jest,next/web-vitals. Cada entrypoint anuncia um contrato tipado antes de qualquer documentação ser consultada. - Enumeração explícita de subpaths. O array
files[]nonext/package.jsonlista cada entrypoint suportado pelo nome. Esse array em si é uma superfície de descoberta, então um agente que quer saber o quenextexporta consegue lê-lo diretamente sem imports especulativos. - Estrutura codificada por convenção. Os prefixos numéricos de pasta (
01-app,02-guides,03-api-reference) dão aos agentes um caminho de traversal ordenado, semanticamente sortable, que bate com a hierarquia de informação do site público. - Codemods como artefatos de primeira classe.
@next/codemodé publicado como pacote separado. Migrações não são blog posts; são transformações executáveis que o agente pode sugerir e rodar. Agentes raciocinando sobre upgrades têm algo concreto para chamar.
O pacote está virando o manual.
Isso é uma mudança arquitetural real em como um framework é entregue, e tem implicações bem além do Next.js.
Memória pré-treinada vs. inferência em runtime
O velho contrato entre LLMs e frameworks parecia mais ou menos assim:
Como agentes raciocinam sobre um framework
| Feature | Propriedade | Modelo de memória pré-treinada |
|---|---|---|
| Fonte de verdade para formas de API | Snapshot do corpus de treino | `.d.ts` e docs de `node_modules` locais |
| Fonte de verdade para layout do projeto | Inferido de padrões de nome de arquivo | MCP `get_routes` / `get_project_metadata` |
| Reação a uma nova minor version | Alucina ou recusa | Relê as docs empacotadas |
| Reação a uma API depreciada | Sugere mesmo assim, frequentemente com confiança | Mostra a depreciação pela assinatura tipada ou pela doc |
| Modelo de custo | Barato se acertar, caro se errar (retrabalho) | Algumas centenas de tokens extras para carregar contexto |
| Direção de confiança | Confia no modelo, verifica o código | Confia no disco, usa o modelo para raciocinar |
| Modo de falha primário | Alucinações confiantes | Contexto local desatualizado ou ausente |
O modelo de inferência em runtime não é melhor em toda dimensão. Custa mais tokens por sessão, depende de o agente realmente ler os arquivos que lhe disseram para ler, e empurra a correção para a disposição do framework de manter artefatos machine-readable.
Mas compõe muito melhor com a forma como os times de fato trabalham.
Um modelo que raciocina sobre o repositório local consegue:
- Bater com a versão que sua aplicação está rodando, não a versão em que foi treinado.
- Ver sua configuração customizada, incluindo partes que nunca iriam para as docs públicas.
- Inspecionar o estado de erro ao vivo e raciocinar a partir de evidência observada, não suposições.
- Errar e se autocorrigir, porque a próxima resposta é informada por uma releitura dos mesmos arquivos.
Esse é o padrão que se vê emergindo em todo loop de agente bem desenhado em 2026: o modelo é o motor de raciocínio, o repositório é a base de conhecimento, e o framework decide o quão legível essa base de conhecimento é.
O que isso significa para autores de framework
Se você constrói um framework, uma biblioteca, ou até um SDK interno não trivial, o release do Next.js 16 se lê como uma prévia das table stakes que vêm por aí.
Entregue docs dentro do pacote
Empacote uma árvore de docs atrelada à versão em disco. Espelhe a estrutura do seu site público para que agentes que já o crawlearam continuem orientados.
Tipifique todo subpath público
Um agente nunca deveria precisar adivinhar. Um `.d.ts` por entrypoint exportado, declarado em `package.json#files` e `exports`.
Adote AGENTS.md como manifesto
Use marcadores `BEGIN`/`END` para que codemods possam atualizar seu bloco sem atropelar instruções do usuário. Trate como configuração, não conteúdo.
Exponha uma superfície de introspecção em runtime
Construa um endpoint MCP ou equivalente. Torne rotas, erros e configuração consultáveis. Pare de forçar agentes a re-derivar estrutura.
Publique codemods, não guias de migração
Transformações executáveis são agent-friendly; prosa longa de migração não é. Faça `npx <sua-cli> codemod` virar uma API de primeira classe.
Escreva dicas inline para leitores não humanos
Comentários MDX, tags JSDoc e avisos de depreciação estruturados agora fazem parte da superfície de DX, não só das docs.
Princípio unificador: pare de assumir que o único consumidor do seu repositório é um humano lendo no GitHub.
Para onde isso está indo
Algumas coisas seguem de onde estamos agora.
node_modules/ vira um corpus de contexto. Assim que um framework grande entrega docs no pacote, o caminho passa a carregar peso. Outras bibliotecas vão seguir com node_modules/<nome>/dist/docs/, e o tooling, incluindo harnesses de agentes, vai começar a tratar isso como uma localização padrão de lookup. A convenção AGENTS.md só funciona quando vira convenção.
Definições de tipo se tornam mais importantes que docs. Um .d.ts é um contrato estruturado, machine-readable, atrelado à versão. Quando agentes precisarem escolher entre scrapear prosa e ler uma declaração tipada, vão ler a declaração. Frameworks que subinvestirem em seus tipos públicos vão ver sua DX assistida por IA ficar para trás.
Dicas para o compilador viram superfície de documentação. Comentários MDX inline, anotações JSX {/* AI agent hint */} e JSDoc estruturado são todos sinais direcionados a leitores não humanos. Espere plugins de IDE, linters e codemods começarem a emiti-los e validá-los.
MCP vira o protocolo de introspecção de framework. Já está acontecendo com next-devtools-mcp. Outros frameworks têm um template óbvio para seguir: entregue um endpoint, entregue um pacote npm fino que faz a ponte com o editor do usuário, documente as tools, evolua a superfície. Os provedores de modelo não precisam padronizar isso; os autores de framework precisam.
Benchmarks migram de código genérico para tarefas de framework. A Vercel publica nextjs.org/evals especificamente para medir o quão bem agentes lidam com trabalho real de Next.js. Conforme mais frameworks investirem em superfícies legíveis para agente, espere benchmarks específicos de framework se multiplicarem, e espere que adoção de framework seja em parte impulsionada por eles.
A armadilha a evitar
Nada disso significa despejar tudo em AGENTS.md. Manifestos de agente longos e prescritivos são ruído; são cacheados, relidos, retokenizados a cada turno. O default do Next.js é uma única instrução precisamente porque tem que ser: redirecione o agente para uma fonte mais rica, não tente ser a fonte.
Pensamento final
Dois anos atrás discutíamos se LLMs poderiam escrever código frontend de produção. A discussão se resolveu sozinha, silenciosamente: podem, quando o framework deixa.
O que o Next.js 16 está fazendo (empacotar docs dentro do pacote, defaultar AGENTS.md em todo projeto novo, expor um endpoint MCP embutido, embutir dicas inline em comentários MDX) não é uma feature de IA. É uma mudança de arquitetura de framework, feita porque a população de desenvolvedores lendo o framework agora inclui agentes, e agentes leem diferente de humanos.
Os frameworks que vão vencer a próxima década não serão os com os truques de runtime mais inteligentes. Serão os mais legíveis para qualquer combinação de humano e máquina que estiver raciocinando sobre o codebase em qualquer momento.
node_modules/ nunca foi só dependências. Daqui pra frente, é também contexto.
Leia o disco. Confie no disco. Entregue um disco que vale ser lido.