T tutoriais · passo a passo

Claude Code na Prática

O manual de operação do Claude Code, do primeiro dia ao uso avançado: perguntar ao próprio código antes de editar, planejar antes de escrever, dar ao agente um jeito de conferir o próprio trabalho, montar a hierarquia de contexto, travar permissões e rodar vários em paralelo. Cada movimento com o comando real, a doc oficial linkada e as ressalvas que costumam ficar de fora.

Aula liberada na hora

Preencha o cadastro para assistir a aula completa

A aula em vídeo e os onze movimentos abrem assim que você enviar os dados. Quem se cadastra também recebe o aviso da próxima imersão, nos dias 19 e 20 de agosto, às 19h.

Cadastro confirmado. Você recebe o aviso da imersão dos dias 19 e 20 de agosto, às 19h. Boa aula.

Assista primeiro · depois use os passos abaixo como referência de consulta

O manual de operação

Onze movimentos que separam quem usa de quem opera

Quase todo mundo abre o Claude Code, digita um pedido grande e torce. Funciona às vezes. O que funciona sempre é operar em ordem: entender o que o agente é, perguntar antes de mandar, planejar antes de escrever, e principalmente entregar a ele um jeito de saber sozinho se acertou. Esta aula é essa ordem, movimento por movimento, com o comando que você digita e a doc oficial de cada afirmação.

O salto não vem do prompt bonito. Vem de dar ao agente uma forma de conferir o próprio trabalho.

Sem um teste, um build, um lint ou um screenshot pra comparar, o único sinal de "pronto" que existe é a aparência do resultado, e quem vira o loop de verificação é você. Com uma checagem que devolve passa ou falha, o agente roda o ciclo sozinho: faz, roda a checagem, lê o resultado e refaz até passar. Esse é o eixo do método, e todos os outros dez movimentos existem pra sustentar esse.
O métodoOnze movimentos, na ordem01·11
Movimento 1

O agente que constrói, não o autocomplete

Ele não completa linha. Ele lê arquivo, roda comando, edita e volta pra conferir, num ciclo só.

Em uma linha: o Claude Code é um ambiente de programação agêntico, não um completador de código. Você descreve o que quer e ele explora, planeja e implementa, lendo arquivos, rodando comandos e alterando o projeto enquanto você acompanha, redireciona ou sai de perto.

O que muda na prática

A geração anterior de assistente completava uma linha por vez e devolvia a bola pra você. Aqui o pedido é a funcionalidade inteira, e o encadeamento das ferramentas (ler arquivo, buscar, rodar bash, editar) é decisão dele. Você não escreve no prompt qual ferramenta usar e em que ordem: descreve o resultado e revisa o caminho.

A restrição que manda em tudo

Quase toda boa prática do Claude Code sai de uma limitação só: a janela de contexto enche rápido e o desempenho cai conforme ela enche. A janela guarda a conversa inteira, cada arquivo lido e cada saída de comando, e uma única sessão de depuração consome dezenas de milhares de tokens. Quando ela aperta, o agente começa a esquecer instrução antiga e a errar mais. Contexto é o recurso escasso, não a inteligência do modelo.

A armadilha

Tratar a sessão como chat infinito. Misturar três tarefas sem relação na mesma janela é o erro mais comum, e o custo aparece como resposta pior sem motivo aparente. Use /clear entre tarefas que não conversam entre si, e /context pra ver o que está ocupando espaço.

Antes de começar

Ele roda no terminal, então funciona com qualquer editor e em qualquer ambiente: local, dentro de uma sessão SSH, dentro do tmux. Não existe passo de indexação nem espera pra começar a usar: ele lê os arquivos sob demanda, na hora da pergunta. O que sai da sua máquina são os prompts e as saídas do modelo, trafegando por TLS, e o limite de escrita padrão é a pasta onde você iniciou a sessão mais as subpastas dela.

Fonte · code.claude.com/docs/en/best-practices (o parágrafo sobre janela de contexto e degradação) e code.claude.com/docs/en/security (fronteira do diretório de trabalho).

Movimento 2

Comece perguntando ao próprio código

O primeiro uso não é editar nada. É fazer ao repositório as perguntas que você faria a um engenheiro sênior.

Em uma linha: ao chegar num código que você não conhece, use o agente pra aprender, não pra alterar. Perguntar não exige prompt especial e é o jeito mais barato de calibrar o que ele resolve sozinho e onde precisa da sua mão.

Por que essa é a primeira parada

A doc oficial trata isso como fluxo de integração a uma base nova, porque reduz o tempo de rampa e tira carga dos outros engenheiros do time: em vez de interromper alguém, você pergunta ao repositório. E, do ponto de vista de quem está aprendendo a ferramenta, perguntar ensina a escrever prompt sem risco nenhum, já que nada é escrito em disco.

Perguntas que valem o dia
  • Como o log funciona neste projeto, e como eu crio um endpoint novo seguindo o padrão que já existe?
  • Que casos de borda o fluxo de cadastro trata hoje, e quais ele ignora?
  • Por que esta função tem tantos argumentos? Olhe o histórico do git e resuma como ela chegou nesse formato.
  • O que eu entreguei nesta semana? Leia o log do git filtrando pelo meu usuário e resuma por tema.
O detalhe que economiza tempo

Aponte a fonte em vez de descrever o problema. A doc é explícita: trocar "por que essa API é tão estranha?" por "olhe o histórico do git desta classe e resuma como a API dela surgiu" muda a qualidade da resposta, porque direciona o agente pra evidência em vez do palpite. Vale o mesmo pra @arquivo, que puxa o conteúdo pro contexto antes da resposta.

A armadilha

Pedir "investigue o sistema" sem escopo. Ele lê centenas de arquivos, entope a janela e a sessão fica ruim pro resto do dia. Delimite a investigação ou mande usar subagente: o subagente explora num contexto separado e devolve só o resumo, mantendo a sua conversa limpa.

Ressalva honesta

Ganho de tempo de integração depende do tamanho e da bagunça da base. A doc afirma a direção (melhora a rampa, reduz a carga sobre o time) sem cravar número, e eu não vou inventar um. Meça no seu repositório antes de prometer prazo pra alguém.

Fonte · code.claude.com/docs/en/best-practices, seções "Ask codebase questions", "Provide specific context in your prompts" e "Use subagents for investigation".

Movimento 3

Explorar, planejar, codar, commitar

Separar pesquisa de execução é o que impede o agente de resolver, muito bem, o problema errado.

Em uma linha: quatro fases, nesta ordem. Explorar sem alterar nada, pedir um plano, aprovar o plano, só então implementar e commitar.

Como entrar no modo plano

Aperte Shift Tab até a barra de status mostrar o modo de plano, ou inicie a sessão já nele com claude --permission-mode plan. Nesse modo ele lê arquivos e responde sem alterar nada. Depois de gerado o plano, Ctrl G abre o plano no seu editor pra você corrigir antes de liberar. Sair do modo plano é aprovar ou apertar Shift Tab de novo.

Os quatro prompts, na prática
A sequência completa
1. explorar (modo plano)
   leia src/auth e entenda como a sessao e o login funcionam hoje.
   veja tambem como as variaveis de ambiente guardam segredo.

2. planejar (modo plano)
   quero adicionar login com Google. que arquivos mudam?
   qual o fluxo da sessao? monte um plano.

3. implementar (modo normal)
   implemente o fluxo do seu plano. escreva teste pro callback,
   rode a suite e corrija o que falhar.

4. fechar
   faca o commit com mensagem descritiva e abra o PR
A ordem importa mais que a redação. O que resolve é separar a fase que lê da fase que escreve.
Quando NÃO planejar

Planejar tem custo. A doc é direta: se o escopo está claro e a mudança é pequena (corrigir um typo, adicionar uma linha de log, renomear uma variável), peça direto. A regra prática que eu uso: se você consegue descrever o diff em uma frase, pule o plano. Planejar vale quando você está inseguro sobre a abordagem, quando a mudança encosta em vários arquivos, ou quando você não conhece o código que vai mexer.

A variação que rende mais

Em funcionalidade grande, inverta: em vez de você explicar tudo, mande ele te entrevistar. Um prompt curto pedindo entrevista detalhada faz ele perguntar sobre implementação, interface, casos de borda e trade-offs que você ainda não pensou, e no fim gravar a especificação num arquivo. Aí você abre uma sessão nova, limpa, só pra executar a especificação. Tempo gasto deixando a spec precisa rende mais que tempo assistindo a implementação.

A armadilha

Corrigir a mesma coisa três vezes na mesma sessão. Depois de duas correções falhas, o contexto está poluído de tentativa errada e cada nova tentativa piora. O caminho é /clear e um prompt novo, melhor, que já incorpore o que você aprendeu.

Fonte · code.claude.com/docs/en/best-practices, seções "Explore first, then plan, then code", "Let Claude interview you" e "Avoid common failure patterns".

Movimento 4

Dê a ele um jeito de conferir o próprio trabalho

É o movimento que muda tudo: com uma checagem que devolve passa ou falha, o loop fecha sem você.

Em uma linha: o agente para quando o trabalho parece pronto. Sem uma checagem que ele mesmo rode, "parece pronto" é o único sinal disponível, e o revisor passa a ser você, a cada erro.

O que serve como checagem

Qualquer coisa que devolva um sinal legível dentro da conversa: uma suíte de testes, o código de saída de um build, um linter, um script que compara a saída com um arquivo de referência, ou um screenshot do navegador comparado com o design. O critério não é sofisticação, é ter resposta binária.

Como pedir (a diferença está no depois)
Antes e depois
# fraco
implemente uma funcao que valida e-mail

# forte
escreva validateEmail. casos: usuario@exemplo.com verdadeiro,
invalido falso, usuario@.com falso. rode os testes depois de implementar.

# fraco
deixe o painel mais bonito

# forte
[cola o screenshot] implemente este design. tire um screenshot do
resultado, compare com o original, liste as diferencas e corrija.

# fraco
o build esta quebrando

# forte
o build falha com este erro: [cola]. corrija e confirme que o build
passa. ataque a causa raiz, nao silencie o erro.
O padrão é sempre o mesmo: descreva o critério, mande rodar a checagem e mande iterar até passar.
Quatro níveis de rigor
  • No próprio prompt: mandar rodar a checagem e iterar na mesma mensagem. Funciona hoje, em qualquer tarefa, sem configurar nada.
  • Na sessão inteira: registrar a checagem como condição de /goal. Um avaliador separado reconfere a cada turno e o agente segue trabalhando até a condição valer.
  • Como portão determinístico: um hook Stop roda sua checagem como script e impede o turno de encerrar enquanto não passar. Existe um teto: depois de oito bloqueios seguidos, a ferramenta encerra o turno mesmo assim.
  • Como segunda opinião: um subagente revisor, ou um fluxo que reconfere as próprias conclusões, faz um modelo novo tentar derrubar o resultado, pra que quem executou não seja quem dá a nota.
Exija a prova, não o "pronto"

Mande mostrar evidência em vez de afirmar sucesso: a saída do teste, o comando exato que rodou e o que ele devolveu, ou o screenshot do resultado. Revisar evidência é mais rápido que refazer a verificação, e é a única forma de auditar sessão que você não assistiu.

A armadilha

Confiar na implementação plausível. Ela compila, parece certa e não trata o caso de borda. E, no outro extremo, um revisor instruído a achar falha quase sempre acha alguma, mesmo quando o trabalho está bom, porque foi isso que você pediu. Instrua o revisor a apontar só o que afeta correção ou requisito declarado, e trate o resto como opcional.

Fonte · code.claude.com/docs/en/best-practices, seções "Give Claude a way to verify its work" e "Add an adversarial review step".

Movimento 5

Plugue as ferramentas do time

Duas portas: as CLIs que já existem na sua máquina e os servidores MCP versionados no repositório.

Em uma linha: o agente fica muito melhor quando enxerga as mesmas ferramentas que o seu time já usa. Existem dois caminhos, e eles se somam.

Porta 1 · as CLIs que já existem

A doc chama a linha de comando de jeito mais econômico em contexto de falar com serviço externo. Se você usa GitHub, instale o gh: ele já sabe abrir issue, criar pull request e ler comentário. Sem o gh, sobra chamar a API sem autenticação e bater no limite de requisição. E ele aprende CLI que não conhece: mande use a CLI tal com --help pra aprender a usar, e depois resolva A, B e C. Ferramenta que você usa direto, registre no CLAUDE.md pra não reexplicar toda sessão.

Porta 2 · MCP, com três escopos

MCP é o protocolo aberto que conecta o agente a ferramenta, banco e API externa. O que decide se aquilo é seu ou do time é o escopo do registro: local vale só pra você naquele projeto, user vale pra você em todos os projetos, e project grava num arquivo .mcp.json na raiz, que é justamente o que você versiona pra todo mundo receber o mesmo conjunto.

Registrar por escopo
# so pra voce, neste projeto
claude mcp add --transport http stripe --scope local https://mcp.stripe.com

# pro time inteiro: grava .mcp.json na raiz do repositorio
claude mcp add --transport http shared-server --scope project https://example.com/mcp

# pra voce, em todos os projetos
claude mcp add --transport http hubspot --scope user https://mcp.hubspot.com/anthropic

# conferir o que esta ligado
claude mcp list
Commite o .mcp.json. Quem clonar o repositório recebe as mesmas ferramentas sem instalar nada à mão.
A pegadinha do .mcp.json

Servidor de escopo de projeto não conecta sozinho: por segurança, a ferramenta pede aprovação em sessão interativa antes de usar servidor vindo do .mcp.json. Enquanto ninguém aprovar, ele aparece como pendente na listagem. E um repositório clonado não consegue se autoaprovar: a aprovação só passa a valer depois que você roda a sessão naquela pasta e aceita o diálogo de confiança. Pra zerar as escolhas de aprovação, existe claude mcp reset-project-choices.

A armadilha

Ligar servidor MCP demais. Cada servidor conectado carrega descrição de ferramenta pra dentro do contexto, e contexto é o recurso escasso. Ligue o que o projeto usa de verdade, e prefira CLI quando ela resolve, porque CLI custa menos contexto que servidor.

Fonte · code.claude.com/docs/en/mcp (escopos, .mcp.json, aprovação e confiança de workspace) e code.claude.com/docs/en/best-practices, seções "Use CLI tools" e "Connect MCP servers".

Movimento 6

CLAUDE.md e a hierarquia de contexto

Quatro camadas com caminho fixo, carregadas do escopo mais amplo pro mais específico. Escreva uma vez, o time inteiro herda.

Em uma linha: CLAUDE.md é o arquivo que entra no contexto no começo de toda sessão. Ele existe em quatro lugares, cada um com um alcance, e a ordem de carga vai do mais amplo ao mais específico.

Os quatro lugares, com o caminho exato
  • Política gerenciada (a organização inteira, distribuída por MDM ou similar): no macOS em /Library/Application Support/ClaudeCode/CLAUDE.md, no Linux e WSL em /etc/claude-code/CLAUDE.md, no Windows em C:\Program Files\ClaudeCode\CLAUDE.md. Este não pode ser excluído por configuração individual.
  • Suas preferências, valendo em todos os seus projetos: ~/.claude/CLAUDE.md.
  • O projeto, compartilhado com o time por controle de versão: ./CLAUDE.md ou ./.claude/CLAUDE.md.
  • Local do projeto, só seu, entra no .gitignore: ./CLAUDE.local.md.
Como a carga acontece

Ele sobe a árvore de diretórios a partir de onde você iniciou a sessão e concatena tudo que achou, da raiz do sistema de arquivos até o seu diretório de trabalho, sem um sobrescrever o outro. Ou seja, o arquivo mais próximo de onde você abriu é o último lido. Já os CLAUDE.md em subdiretórios abaixo do diretório atual não entram no início: eles são puxados quando o agente lê um arquivo daquela pasta. É isso que faz monorepo funcionar sem carregar o mundo inteiro.

O que escrever (e o que cortar)

Comandos de bash que ele não teria como adivinhar, regra de estilo que difere do padrão da linguagem, instrução de teste, etiqueta do repositório (nome de branch, convenção de PR), decisão de arquitetura específica do projeto e as pegadinhas do ambiente. Fora: o que ele descobre lendo o código, convenção padrão que ele já conhece, documentação longa de API (linke) e descrição arquivo por arquivo. O teste de cada linha é uma pergunta só: se eu apagar isto, ele passa a errar? Se não, apague.

O limite que quase ninguém respeita

Mire abaixo de 200 linhas por arquivo. Arquivo longo consome mais contexto e derruba a aderência, e o efeito é traiçoeiro: quando ele insiste em ignorar uma regra que existe, quase sempre o problema é o arquivo estar grande demais e a regra ter se perdido no meio. Rode /context pra confirmar quais arquivos de memória carregaram de verdade, e /init pra gerar um CLAUDE.md inicial a partir do próprio projeto.

Quando o assunto não cabe no CLAUDE.md

Instrução que vale só pra um pedaço do código vira regra com caminho: arquivos .md dentro de .claude/rules/, com um campo paths no cabeçalho, carregam só quando o agente toca em arquivo que casa com o padrão. Procedimento de vários passos vira skill, que só carrega quando é usada. E o que precisa acontecer sempre, sem exceção, não é instrução: é hook, que roda como script em ponto fixo do ciclo, independente do que o modelo decidir.

Ressalva honesta

CLAUDE.md não é configuração obrigatória, é contexto. A doc diz de forma explícita que o conteúdo chega como mensagem de usuário depois do prompt de sistema, e que não há garantia de cumprimento estrito, principalmente com instrução vaga ou contraditória. Se duas regras se contradizem, ele pode escolher qualquer uma. Revise e pode o arquivo com a mesma disciplina que você usa pra revisar código.

Fonte · code.claude.com/docs/en/memory (caminhos, ordem de carga, imports, limite de 200 linhas e regras com paths) e code.claude.com/docs/en/best-practices, seção "Write an effective CLAUDE.md".

Movimento 7

Comandos próprios: de .claude/commands para skills

Aquilo que você repete vira arquivo, e o arquivo vira uma barra que qualquer um do time digita.

Em uma linha: comando próprio é um arquivo markdown numa pasta conhecida. O nome do arquivo vira o nome da barra, e ele pode ser pessoal ou versionado com o projeto.

O que mudou (importante)

Os comandos personalizados foram unificados com as skills. Um arquivo em .claude/commands/deploy.md e uma skill em .claude/skills/deploy/SKILL.md criam o mesmo /deploy e funcionam igual. Os seus arquivos antigos em .claude/commands/ continuam valendo, então não há nada pra migrar às pressas. O que a skill acrescenta é uma pasta pra arquivos de apoio, cabeçalho pra controlar quem invoca e a possibilidade de o próprio agente carregar aquilo quando for relevante.

Onde os arquivos moram
  • Pessoal, em todos os seus projetos: ~/.claude/skills/<nome>/SKILL.md.
  • Projeto, versionado com o time: .claude/skills/<nome>/SKILL.md.
  • Se existir a mesma skill nos dois lugares, a do projeto vale sobre a pessoal.
O formato mínimo
.claude/skills/fix-issue/SKILL.md
---
name: fix-issue
description: Corrige uma issue do GitHub
disable-model-invocation: true
---
Analise e corrija a issue: $ARGUMENTS.

1. use gh issue view pra pegar os detalhes
2. entenda o problema descrito
3. procure os arquivos relevantes no codigo
4. implemente a correcao
5. escreva e rode os testes
6. passe o lint e a checagem de tipos
7. faca o commit com mensagem descritiva
8. abra o PR
Rode com /fix-issue 1234. Use disable-model-invocation quando o procedimento tem efeito colateral e você quer disparar na mão.
Por que isso importa mais do que parece

Skill carrega sob demanda, CLAUDE.md carrega toda sessão. Então material longo de referência dentro de uma skill custa quase nada até a hora em que é usado, enquanto o mesmo texto no CLAUDE.md pesa em cada conversa. A regra de bolso: fato que vale sempre fica no CLAUDE.md, procedimento de vários passos vira skill.

Exemplo prático

Aquele processo de release que só três pessoas do time sabem fazer na ordem certa: escreva os passos num SKILL.md, commite, e a partir dali qualquer pessoa digita a barra e o agente executa a sequência inteira. É o efeito de rede que faz o investimento render: uma pessoa escreve, o time inteiro usa.

Fonte · code.claude.com/docs/en/skills (a unificação de comandos e skills, os caminhos e o cabeçalho) e code.claude.com/docs/en/best-practices, seção "Create skills".

Movimento 8

Permissões: liberar o seguro, bloquear o resto

Depois da décima aprovação você não revisa mais, só clica. Permissão bem configurada devolve a atenção pro que importa.

Em uma linha: por padrão ele pede permissão pra tudo que altera o sistema. Isso é seguro e cansativo. Existem três formas de reduzir a interrupção sem abrir mão do controle.

Os três caminhos
  • Modo automático: um classificador à parte revisa os comandos e bloqueia só o que parece arriscado (escalada de escopo, infraestrutura desconhecida, ação induzida por conteúdo hostil). Serve quando você confia na direção da tarefa e não quer clicar em cada passo.
  • Lista de permissão: você libera nominalmente o que sabe que é seguro, tipo rodar o lint ou fazer commit.
  • Sandbox: isolamento no nível do sistema operacional, restringindo sistema de arquivos e rede, pra ele trabalhar com mais liberdade dentro de uma fronteira definida.
A sintaxe exata da regra
.claude/settings.json
{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(git commit *)",
      "WebFetch(domain:github.com)"
    ],
    "deny": [
      "Bash(git push *)",
      "WebFetch(domain:interno.exemplo.com)"
    ]
  }
}
O espaço antes do asterisco importa: Bash(git diff *) casa com qualquer coisa que comece com "git diff", enquanto Bash(git diff*) casaria também com git diff-index.
A regra de precedência que resolve discussão

Bloqueio ganha de liberação, em qualquer nível. Se um nível nega, nenhum outro consegue permitir, e política gerenciada é o topo: nem argumento de linha de comando derruba uma negativa gerenciada. Também vale ao contrário do que muita gente espera: um bloqueio amplo como Bash(aws *) anula até uma liberação mais específica que casaria com a mesma chamada, ou seja, regra de bloqueio não carrega exceção.

Bloquear domínio de verdade

Se existe um endereço que ninguém deveria acessar, a regra é WebFetch(domain:exemplo.com) no bloqueio. Subdomínio em qualquer profundidade se escreve WebFetch(domain:*.exemplo.com), e ele não cobre o domínio raiz. Só que bloquear a ferramenta de busca não basta: quem quiser burlar chama curl. O caminho completo é negar também os comandos de rede no bash e liberar por domínio na ferramenta própria.

Onde a aprovação fica gravada

Quando você escolhe "sim, não pergunte de novo" pra um comando de bash, a regra é gravada em .claude/settings.local.json na raiz do repositório, e passa a valer nas próximas sessões daquele repositório inteiro, inclusive nas iniciadas em subpasta. Aprovação de edição de arquivo é diferente: ela não é gravada, vale até o fim da sessão.

A armadilha

Achar que regra em CLAUDE.md protege alguma coisa. Não protege: instrução é contexto, permissão é regra do cliente. Se algo não pode acontecer, escreva como bloqueio de permissão ou como hook, nunca como pedido educado no arquivo de instruções. E cuidado com o outro extremo, o de desligar tudo por conveniência em máquina que tem acesso a produção.

Fonte · code.claude.com/docs/en/permissions (sintaxe das regras, precedência, WebFetch por domínio e onde a aprovação é salva) e code.claude.com/docs/en/best-practices, seção "Configure permissions".

Movimento 9

Os atalhos que mudam o ritmo

Terminal é minimalista, então esses atalhos não aparecem sozinhos. Seis deles mudam o dia.

Em uma linha: a maior parte do ganho de velocidade não vem de prompt melhor, vem de interromper e corrigir cedo. Estes são os atalhos que tornam isso barato.

A folha de consulta
  • Shift Tab · alterna o modo de permissão, circulando entre manual, aceitar edições e modo de plano, mais os modos que você tiver habilitado.
  • Esc · interrompe no meio da ação. O trabalho feito até ali é preservado, então você redireciona sem perder contexto. Com um diálogo aberto, ele fecha o diálogo em vez de interromper.
  • Esc Esc · com texto digitado, limpa o rascunho e guarda no histórico. Com o campo vazio, abre o menu de retorno, pra restaurar código e conversa de um ponto anterior.
  • Exclamação no começo · modo shell. Roda o comando direto, joga a saída pra dentro da sessão e o agente responde a partir dela.
  • Arroba · menciona caminho de arquivo, com autocompletar, e puxa o conteúdo pro contexto.
  • Ctrl R · busca reversa no histórico de comandos.
O uso do escape que quase ninguém faz

Ele sugeriu uma edição de vinte linhas e dezenove estão perfeitas. Em vez de aceitar e mandar corrigir depois, aperte escape, diga exatamente qual linha está errada e mande refazer. Ciclo curto de correção rende mais que ciclo longo de conserto, e a doc afirma isso de forma direta: corrigir cedo em geral produz solução melhor e mais rápido do que esperar o fim.

Retomar de onde parou

A conversa fica salva localmente. claude --continue retoma a mais recente daquele diretório e claude --resume abre a lista pra escolher, ou aceita o identificador direto. Batize as sessões com nome descritivo e trate cada uma como uma branch de trabalho: cada frente com o próprio contexto persistente.

Ressalva honesta sobre os checkpoints

O retorno com escape duplo só desfaz o que passou pelas ferramentas de edição de arquivo do agente. Alteração feita por comando de bash ou por processo externo não é capturada. Ou seja, checkpoint é conveniência, não substitui git. Commite antes de mandar ele tentar algo arriscado.

Duas mudanças recentes que valem saber

O jogo de sinal de cerquilha pra gravar memória não aparece mais na tabela de comandos rápidos da doc de modo interativo. Hoje o caminho documentado é pedir em linguagem natural ("lembre que os testes precisam do Redis local"), que salva na memória automática, ou usar /memory pra abrir e editar os arquivos direto. Da mesma forma, /terminal-setup e /theme não constam na referência de comandos atual: quebra de linha com shift e enter já é nativa em vários terminais, e a aparência ficou dentro de /config.

Fonte · code.claude.com/docs/en/interactive-mode (tabela de atalhos e de comandos rápidos), code.claude.com/docs/en/commands (referência dos comandos embutidos) e code.claude.com/docs/en/best-practices, seções "Course-correct early and often" e "Rewind with checkpoints".

Movimento 10

Sem interface: claude -p como utilitário Unix

Entra dado pelo cano, sai JSON pelo outro lado. É assim que ele entra no CI, no hook de commit e no seu script.

Em uma linha: a flag -p roda o agente sem interface. É o mesmo motor da sessão interativa, exposto como comando: você passa o prompt, escolhe o formato de saída e usa o resultado como usaria qualquer utilitário de linha de comando.

Nome atual

O que antes se chamava SDK do Claude Code hoje é o Agent SDK, disponível como CLI pra script e CI e como pacote em Python e TypeScript pra controle programático completo. Se você encontrar material antigo falando em "Claude Code SDK", é a mesma coisa com o nome anterior.

Os quatro usos que resolvem o dia
Receitas prontas
# 1. jogar um log gigante pra dentro e pedir o diagnostico
cat build-error.txt | claude -p 'explique a causa raiz deste erro' > saida.txt

# 2. saida estruturada pra script consumir
claude -p "liste os endpoints da API" --output-format json | jq -r '.result'

# 3. virar um linter do projeto, no package.json
git diff main | claude -p "voce e um corretor de typos. para cada typo
neste diff, responda arquivo:linha numa linha e o problema na seguinte."

# 4. revisar um PR com papel definido
gh pr diff "$1" | claude -p \
  --append-system-prompt "Voce e engenheiro de seguranca. Revise
  procurando vulnerabilidade." --output-format json
Os formatos de saída são text (padrão), json (um objeto com o texto no campo result) e stream-json (um objeto por linha, pra processar em tempo real).
Distribuir trabalho em lote

Pra migração grande, o padrão é gerar a lista de arquivos num arquivo texto e depois varrer essa lista chamando claude -p por item, restringindo o que ele pode fazer com --allowedTools. Refine o prompt nos dois ou três primeiros arquivos e só então rode no conjunto inteiro. É trabalho não assistido, então a restrição de ferramenta deixa de ser detalhe e vira o que segura o risco.

O detalhe que salva o CI

Existe a flag --bare, que pula a descoberta automática de hooks, skills, plugins, servidores MCP, memória automática e CLAUDE.md. Serve exatamente pra CI e script, onde você quer o mesmo resultado em toda máquina, sem depender do que um colega deixou no ~/.claude dele. A contrapartida honesta: em modo bare ele não usa o login de assinatura, então é preciso ter a chave de API no ambiente. A doc sinaliza que --bare deve virar o padrão do -p no futuro.

Ressalvas honestas
  • Entrada por cano tem teto de 10 MB. Acima disso, escreva num arquivo e cite o caminho no prompt.
  • O diálogo de confiança de workspace não aparece em modo não interativo. Regra de liberação que dependeria dele fica ignorada, e o comportamento pode diferir do que você viu na sessão interativa.
  • O custo em dólar que vem no JSON é estimativa do cliente e pode divergir da fatura.

Fonte · code.claude.com/docs/en/headless (flags, formatos, bare mode, teto de 10 MB e estimativa de custo) e code.claude.com/docs/en/cli-reference.

Movimento 11

Rodar vários em paralelo

Um checkout isolado por sessão. Uma constrói a funcionalidade enquanto a outra corrige o bug, sem uma pisar na outra.

Em uma linha: um worktree do git é um diretório de trabalho separado, com os próprios arquivos e a própria branch, compartilhando o histórico e o remoto do mesmo repositório. Uma sessão por worktree significa que edição de uma nunca encosta na outra.

O caminho curto
Frentes isoladas
# cria o worktree isolado e ja inicia a sessao nele
claude --worktree feature-auth

# noutro terminal, outra frente, isolada da primeira
claude --worktree fix-checkout

# na mao, quando voce precisa de um caminho ou branch especifico
git worktree add ../projeto-feature-a -b feature-a
git worktree list
git worktree remove ../projeto-feature-a
Por padrão o worktree nasce em .claude/worktrees/<nome> na raiz do repositório, numa branch nova. Coloque .claude/worktrees/ no .gitignore.
O isolamento é real, não é combinado

Enquanto a sessão está isolada, a ferramenta bloqueia edição que aponte pro checkout principal, comando cujo diretório de trabalho caia lá, e comando que redirecione o git pra lá por qualquer caminho. Ela também recusa construção de shell que não consegue rastrear estaticamente e pede pra quebrar em comandos simples. Isso vale igualmente pros subagentes que a sessão isolada abrir.

Além do worktree

Worktree isola arquivo. Subagente e time de agentes coordenam o trabalho: dá pra pedir que os subagentes rodem cada um no próprio worktree, ou fixar isso num subagente com isolation: worktree no cabeçalho dele. Vale lembrar que rodar em paralelo não é só velocidade: contexto novo melhora revisão, porque o revisor não fica enviesado pelo código que ele mesmo acabou de escrever.

O padrão escritor e revisor

Sessão A implementa. Sessão B, que não viu nada, recebe o arquivo e a instrução de procurar caso de borda, condição de corrida e inconsistência com os padrões que já existem. A saída de B volta pra A como pauta de correção. Funciona igual com teste: uma sessão escreve os testes, outra escreve o código pra passar neles.

Ressalvas honestas
  • Worktree é um checkout novo, então dependência não vem instalada e arquivo ignorado pelo git, tipo .env, não existe lá. Pra copiar automaticamente, crie um arquivo .worktreeinclude na raiz, com sintaxe de gitignore.
  • Sessão não interativa com -p não tem o passo de saída, então não limpa o worktree sozinha. Remova com git worktree remove.
  • Aprovação de permissão dada dentro de um worktree é salva no checkout principal e passa a valer no repositório inteiro. É conveniente e é exatamente por isso que merece atenção.

Fonte · code.claude.com/docs/en/worktrees (flag, isolamento, .worktreeinclude e limpeza) e code.claude.com/docs/en/best-practices, seção "Run multiple Claude sessions".

FechoO que checar antes de confiar12
O resumo em uma página

A ferramenta é a mesma pra todo mundo. O que muda é o cerco que você monta em volta dela.

Quem entrega pouco com o Claude Code costuma fazer as mesmas três coisas: pede grande demais de uma vez, não dá nenhuma forma de conferir o resultado e deixa o contexto virar um depósito de tarefas sem relação. Quem entrega muito faz o contrário, e nada disso é sofisticado: pergunta antes de mandar, separa a fase que lê da fase que escreve, entrega um teste ou um screenshot como juiz, e limpa a mesa entre um assunto e outro.

O resto é infraestrutura, e infraestrutura tem efeito de rede. O CLAUDE.md do projeto, o .mcp.json versionado, a skill com o processo de release, as permissões commitadas: uma pessoa escreve, o time inteiro colhe. É o único investimento aqui que rende mais a cada semana em vez de menos.

A pergunta que fica

Antes de mandar a próxima tarefa grande, responda uma coisa só: que comando ele pode rodar sozinho pra descobrir que errou? Se você não tem resposta, o revisor é você, e a sessão vai custar o seu dia inteiro.

O que mudou desde as primeiras versões
SDK

O que se chamava SDK do Claude Code hoje é o Agent SDK, com CLI, Python e TypeScript. Material antigo com o nome anterior descreve a mesma coisa.

Comandos

Comandos personalizados foram unificados com as skills. Os arquivos em .claude/commands/ continuam funcionando; o formato novo é .claude/skills/<nome>/SKILL.md.

Memória

Além do CLAUDE.md escrito por você, existe a memória automática, que o próprio agente escreve por repositório. O comando /memory lista, edita e liga ou desliga isso.

Comandos antigos

/terminal-setup e /theme não constam na referência atual. Quebra de linha com shift e enter já é nativa em vários terminais, e a aparência migrou pra /config.

Endereço

A documentação saiu de docs.anthropic.com/en/docs/claude-code/ e hoje responde em code.claude.com/docs/en/. Os links antigos redirecionam.

Privacidade

Sob termos comerciais (Team, Enterprise, API), a Anthropic não treina modelo generativo com código ou prompt enviado ao Claude Code, salvo adesão explícita a programa de parceria. Nas contas de consumidor (Free, Pro e Max) existe uma opção do usuário: com ela ligada, os dados podem ser usados pra treinar. Confira em qual regime você está antes de rodar em código sensível.

Fontes desta aula

Toda afirmação técnica acima foi conferida na documentação oficial do Claude Code. O que não tem fonte não entrou, e onde a doc não crava número eu também não cravei.