códigomadrugada

claude codeprodutividade.netia para devs

CLAUDE.md: como dar memória de projeto ao Claude Code (guia para devs .NET)

O CLAUDE.md é o arquivo que diz ao Claude Code tudo que ele precisa saber sobre seu projeto .NET. Veja como criar um que realmente funciona.

Dev configurando arquivo CLAUDE.md no terminal para projeto ASP.NET Core com Claude Code
Código da Madrugada30 de maio de 20267 min de leitura

Você abre o Claude Code num projeto .NET que não tocava há uma semana. Digita uma pergunta e o agente responde como se fosse o primeiro dia: não sabe qual é o banco, não sabe como você nomeia variáveis, não sabe que usa xUnit e não NUnit. Resultado: você passa os próximos cinco minutos reexplicando o contexto antes de conseguir qualquer coisa útil.

O CLAUDE.md resolve isso.

O que é o CLAUDE.md

É um arquivo de texto simples que o Claude Code lê automaticamente toda vez que você inicia uma sessão num repositório. Funciona como o "system prompt" do agente para aquele projeto específico.

A documentação oficial chama de "memória de projeto". Na prática, é você dizendo ao agente: essa é a stack, essas são as convenções, esses são os comandos, não faça isso aqui. Uma vez escrito, você para de repetir contexto toda hora.

Sem o arquivo, o Claude Code começa cada sessão do zero. Com ele, age como um dev sênior que já fez onboarding no projeto.

Onde o arquivo fica

Na raiz do repositório, no mesmo nível do .sln ou do diretório src/. O Claude Code procura pelo arquivo ao iniciar e o carrega antes de qualquer interação.

Você também pode ter CLAUDE.md em subdiretórios. Num monorepo com múltiplos serviços, faz sentido ter um na raiz com contexto global e arquivos específicos em cada pasta:

meu-projeto/
├── CLAUDE.md            ← contexto global, lido sempre
├── src/
│   ├── Api/
│   │   └── CLAUDE.md   ← contexto específico da API
│   └── Worker/
│       └── CLAUDE.md   ← contexto específico do worker
├── MinhaSolucao.sln
└── README.md

O Claude Code empilha os arquivos do diretório raiz até onde você está trabalhando. Contexto global mais contexto específico, sem repetição.

Um CLAUDE.md real para projeto ASP.NET Core

Esse é um exemplo funcional para uma API com ASP.NET Core 8, Entity Framework Core, PostgreSQL e xUnit. É o tipo de arquivo que vai em qualquer projeto .NET antes de o Claude Code tocar no código:

# Contexto do Projeto

API de gestão de pedidos. ASP.NET Core 8, Entity Framework Core 8 (Code First),
PostgreSQL 16, xUnit para testes.

## Stack e Versões

- .NET 8 / C# 12
- ASP.NET Core 8 (controllers)
- Entity Framework Core 8 com Npgsql
- PostgreSQL 16 (local via Docker, produção na Render)
- xUnit 2.x + Testcontainers para testes de integração
- FluentAssertions para assertions

## Estrutura de Pastas

src/
  Api/           → endpoints, controllers, middlewares
  Application/   → use cases, DTOs, interfaces
  Domain/        → entidades, value objects, regras de negócio
  Infrastructure → repositórios, EF DbContext, migrations

## Convenções de Código

- Async/await em todos os métodos que acessam banco ou I/O; sufixo Async obrigatório
- Nunca usar .Result ou .Wait() — causa deadlock em ASP.NET Core
- Evitar var quando o tipo não é óbvio pela atribuição
- Sem AutoMapper: mapeamento manual é a convenção do projeto

## Comandos

Rodar testes:          dotnet test
Build:                 dotnet build
Aplicar migrations:    dotnet ef database update --project src/Infrastructure
Nova migration:        dotnet ef migrations add NomeDaMigration --project src/Infrastructure --startup-project src/Api
Subir banco local:     docker compose up -d postgres

## O que Não Fazer

- Não mockar o banco nos testes de integração — usamos Testcontainers com PostgreSQL real
- Não colocar lógica de negócio nos controllers
- Não criar migrations sem revisar o SQL gerado (`dotnet ef migrations script`)

Esse arquivo tem uns 280 tokens. Pouca coisa. Mas o ganho em qualidade das respostas é imediato: o agente para de sugerir .Result, para de propor AutoMapper, entende que migration precisa do --startup-project separado.

Claude Code para devs .NET: módulo completo de configuração de projeto

CLAUDE.md, hooks e sub-agentes aplicados em projetos ASP.NET Core reais.

Ver cursos

O que colocar (e o que não colocar)

Coloque

Stack e versões específicas. "ASP.NET Core 8" é mais útil que "API .NET". O agente adapta sugestões pra versão correta da API e avisa quando uma feature não existe naquela versão.

Comandos não-óbvios. Qualquer projeto tem dotnet build. O que o Claude Code não vai adivinhar é que sua migration precisa de --startup-project, ou que seu Docker Compose se chama compose.dev.yaml e não docker-compose.yml.

Convenções que contradizem o padrão C#. Se o time usa _nomePrivado com underscore, escreva isso. Se você proíbe var, escreva. O agente assume as convenções do C# por padrão; o CLAUDE.md é pra declarar onde você diverge.

O que evitar. A seção "Não Fazer" é frequentemente a mais valiosa. Onde o agente vai escorregar se não for avisado? Mockar banco quando você usa Testcontainers? Colocar lógica no controller? Liste essas armadilhas.

Contexto de negócio em 2-3 frases. "API de gestão de pedidos para varejo" ajuda o Claude Code a nomear variáveis, escrever comentários e sugerir estruturas que fazem sentido para o domínio. Não precisa de mais que isso.

Não coloque

Coisas que estão nos arquivos. Não liste todos os packages do .csproj. O Claude Code lê esse arquivo quando precisa. O CLAUDE.md é para o que não está no código.

Convenções óbvias do C#. "Usar PascalCase para propriedades públicas" é o padrão da linguagem, dispensável. Foco no que diverge do padrão ou no que o agente tipicamente erra.

Documentação funcional. Se você tem um docs/ com specs de negócio, mencione a pasta. Mas não copie o conteúdo lá para o CLAUDE.md: o contexto vira ruído e consome tokens sem retorno proporcional.

Dica

Revise o CLAUDE.md depois de uma semana de uso. Quais instruções você precisou repetir ao agente que não estavam no arquivo? Essas entram. Quais seções o agente já seguia por padrão sem precisar ser avisado? Essas saem.

CLAUDE.md e consumo de tokens

O arquivo é enviado inteiro em toda sessão. Um arquivo de 500 tokens significa 500 tokens a menos para código e conversa. Na prática, 200-500 tokens é um tamanho bom para a maioria dos projetos .NET.

Mas o custo real não está no tamanho do CLAUDE.md. Está em sessões longas onde o contexto cresce sem controle. Se você ainda não leu sobre isso, o post Como economizar tokens no Claude Code tem as técnicas que mais fazem diferença no dia a dia.

E se você está conectando o agente a ferramentas externas, banco de dados ou APIs via MCP, o guia de MCP para devs explica como configurar sem explodir o contexto.

Commitar ou não commitar?

Commite. O CLAUDE.md deve estar no controle de versão por dois motivos práticos.

Primeiro, qualquer dev do time recebe o mesmo contexto configurado automaticamente ao clonar o repositório. Não depende de ninguém lembrar de "configurar o Claude Code" na mão.

Segundo, o arquivo evolui com o projeto. Quando você muda a stack ou adota uma nova convenção, faz sentido que essa mudança apareça no histórico de commits junto com o código que motivou ela.

A única coisa que fica fora do CLAUDE.md: credenciais, tokens e URLs de produção. Essas vão em variáveis de ambiente ou .env.local. O CLAUDE.md é informação técnica do projeto, não segredo de infraestrutura.

Se você está começando com Claude Code e ainda não tem o agente configurado no seu projeto .NET, o post O que é Claude Code e como usar no projeto C# .NET cobre os primeiros passos antes de criar o CLAUDE.md.

Perguntas frequentes

O que é o arquivo CLAUDE.md?
CLAUDE.md é um arquivo de configuração que o Claude Code lê automaticamente ao iniciar uma sessão. Funciona como o 'system prompt' do projeto: você escreve ali a stack, as convenções, os comandos e o que o agente deve evitar.
Onde devo colocar o CLAUDE.md no meu projeto .NET?
Na raiz do repositório, no mesmo nível do .sln ou do .csproj principal. Você também pode ter arquivos CLAUDE.md em subdiretórios; o Claude Code lê o da raiz e depois os dos diretórios relevantes para a tarefa em andamento.
O CLAUDE.md afeta o consumo de tokens?
Sim. O arquivo inteiro é enviado como contexto em cada sessão. Um arquivo de 500 tokens significa 500 tokens a menos disponíveis para código e conversa. Mantenha-o enxuto: convenções não-óbvias e comandos específicos do projeto, sem repetir o que o C# já define como padrão.
Posso usar CLAUDE.md em projetos com múltiplos serviços?
Sim. Em monorepos, o padrão é um CLAUDE.md na raiz com o contexto global e arquivos específicos em cada pasta de serviço. O Claude Code empilha os arquivos do diretório raiz até o diretório atual, então o contexto é acumulado automaticamente.
Devo fazer commit do CLAUDE.md?
Sim. Commitar é a prática recomendada. Assim o time inteiro, e você em outra máquina, recebem o mesmo contexto sem configuração manual. Trate como um README técnico para o agente.

Artigos relacionados

Quer aprender C# do zero ao avançado?

Cursos práticos em português, com projetos reais e acesso vitalício.

Conhecer o curso de C#