Claude Code
na prática
Um guia de referência completo para dominar o Claude Code — desde a configuração inicial até orquestração de agentes, hooks e integração com IDEs.
Instalação
Requisitos, instalação via npm e autenticação
CLAUDE.md
Memória persistente do projecto — o ficheiro mais importante
Skills
Comportamentos reutilizáveis invocados por linguagem natural
Agentes
Subagentes especializados com contexto próprio e paralelos
Hooks
Controlo determinístico sobre eventos do ciclo de vida
IDEs
VS Code, JetBrains, Cursor, desktop app e web
MCP Servers
Integrar ferramentas externas: Notion, GitHub, Figma…
Slash Commands
Atalhos rápidos para fluxos repetidos no terminal
Instalação e configuração inicial
O Claude Code é instalado como pacote npm global e requer uma conta Anthropic com plano Pro, Max ou acesso à API.
Requisitos
- Node.js 18+ — confirma com
node --version - npm — incluído com o Node.js
- Conta Anthropic — plano Pro, Max ou chave de API
- SO suportados: macOS, Linux e Windows (via WSL ou terminal nativo)
Instalar
# Instalação global npm install -g @anthropic-ai/claude-code # Verificar instalação claude --version # Iniciar sessão (abre o browser para autenticação) claude
ANTHROPIC_API_KEY antes de correr claude.Primeiros passos no projecto
Navega para o teu projecto
O Claude Code trabalha sempre a partir da raiz do projecto para partilhar o contexto correcto.
Corre /init
Analisa a estrutura do projecto e gera automaticamente um ficheiro CLAUDE.md inicial.
Revê e refina o CLAUDE.md
Adiciona convenções, comandos de build e regras específicas do projecto.
Liga MCP servers se necessário
Usa claude mcp add para conectar ferramentas externas como Notion ou GitHub.
Comandos essenciais de sessão
| Comando | O que faz |
|---|---|
/help | Lista todos os comandos disponíveis |
/clear | Limpa o histórico da sessão (poupa tokens) |
/model | Muda o modelo (sonnet, opus, haiku) |
/compact | Compacta o contexto manualmente |
/permissions | Gere permissões de ferramentas |
/mcp | Lista os MCP servers ligados |
/hooks | Vê e gere os hooks configurados |
/agents | Cria ou gere subagentes |
Ctrl+B | Envia um agente para segundo plano |
CLAUDE.md — a memória persistente
O ficheiro mais importante do Claude Code. É carregado automaticamente no início de cada sessão e fornece contexto que não se perde com a compactação.
O que é e para que serve
O CLAUDE.md é a memória estável do projecto. Ao contrário das instruções dadas numa conversa — que podem desaparecer durante a compactação de contexto — o conteúdo do CLAUDE.md é sempre recarregado. Trata-o como o documento de bordo do Claude para o teu projecto.
Localizações e hierarquia
| Ficheiro | Âmbito | Partilhado |
|---|---|---|
~/.claude/CLAUDE.md | Global — todos os projectos | Não (pessoal) |
./CLAUDE.md | Projecto — raiz | Sim (git) |
./src/CLAUDE.md | Directório filho — carregado quando relevante | Sim (git) |
./.claude/CLAUDE.md | Alternativa à raiz do projecto | Opcional |
Estrutura recomendada
# CLAUDE.md — [Nome do projecto] ## Visão geral do projecto Aplicação web em Next.js com TypeScript, backend em Node.js/Express e base de dados PostgreSQL. Serve clientes enterprise B2B. ## Stack técnica - Frontend: Next.js 14, TypeScript, Tailwind CSS - Backend: Node.js 20, Express, Prisma ORM - Base de dados: PostgreSQL 15 - Testes: Jest + Playwright (E2E) - Estado: Zustand (cliente) ## Comandos essenciais ```bash npm run dev # Iniciar dev server npm run test # Correr testes npm run lint # ESLint + Prettier npm run build # Build de produção npm run db:migrate # Aplicar migrações ``` ## Estrutura de ficheiros - `src/components/` — componentes React - `src/pages/api/` — rotas da API - `src/lib/` — utilitários partilhados - `prisma/` — schema e migrações ## Convenções de código - TypeScript strict mode em todo o projecto - Componentes funcionais com hooks (sem class components) - Nomes de ficheiros em kebab-case - Imports absolutos a partir de `@/` - Testes obrigatórios para funções públicas ## Regras de negócio críticas - Nunca apagar registos — usar soft delete (`deletedAt`) - Toda a autenticação passa pelo middleware `withAuth` - Logs de auditoria obrigatórios em operações de escrita ## O que evitar - NÃO usar `any` no TypeScript - NÃO commitar sem correr `npm run lint` - NÃO alterar o schema Prisma sem migração
Boas práticas
- Mantém curto e legível — não é um README. Vai ao essencial.
- Inclui comandos de build e teste — evita que Claude perca tempo a descobrir.
- Define o que não fazer — restrições são tão úteis quanto permissões.
- Actualiza com o projecto — CLAUDE.md desactualizado gera confusão.
- Usa
/initcomo ponto de partida — e refina manualmente. - Regras críticas no CLAUDE.md, não em settings.json — settings.json aplica regras determinísticas (hooks, permissões), CLAUDE.md é contexto e orientação.
MCP Servers — integrar ferramentas externas
O Model Context Protocol (MCP) permite ligar o Claude Code a serviços externos: bases de dados, gestores de projectos, design tools e muito mais.
O que é o MCP
MCP é um protocolo padrão que expõe ferramentas, recursos e prompts de serviços externos ao Claude. Cada servidor MCP que conectas adiciona novas capacidades — por exemplo, ligares ao servidor GitHub MCP permite que o Claude leia issues, crie PRs e comente commits directamente.
Adicionar um servidor MCP
# Adicionar servidor stdio (local) claude mcp add playwright npx @playwright/mcp@latest # Adicionar servidor remoto (HTTP) claude mcp add github https://mcp.github.com/sse # Listar servidores ligados claude mcp list # Remover servidor claude mcp remove playwright
Configuração em .mcp.json
Para partilhar servidores com a equipa, define-os em .mcp.json na raiz do projecto (commitado no git).
{
"mcpServers": {
"github": {
"type": "url",
"url": "https://mcp.github.com/sse"
},
"postgres": {
"type": "stdio",
"command": "npx",
"args": ["@modelcontextprotocol/server-postgres"],
"env": { "DATABASE_URL": "${DATABASE_URL}" }
},
"notion": {
"type": "url",
"url": "https://mcp.notion.com/mcp"
}
}
}
Servidores MCP populares
GitHub MCP
Issues, PRs, comentários e repositórios directamente no Claude
Notion MCP
Ler e criar páginas, bases de dados e blocos no Notion
Figma MCP
Importar designs e especificações de componentes
PostgreSQL MCP
Consultar a base de dados e analisar dados em tempo real
Playwright MCP
Automação de browser — testes E2E e web scraping
Slack MCP
Enviar mensagens e ler canais no Slack
Slash Commands — atalhos de sessão
Comandos personalizados invocados com /nome que encapsulam fluxos repetidos. Desde a v2.1.101, os comandos foram integrados nas Skills — ambos coexistem, mas as Skills são agora a abordagem recomendada.
Tipos de comandos
| Tipo | Prefixo | Localização | Âmbito |
|---|---|---|---|
| Projecto | /project:nome | .claude/commands/ | Equipa (git) |
| Pessoal | /nome | ~/.claude/commands/ | Todos os projectos |
| MCP prompt | /mcp__servidor__prompt | Servidor MCP | Dinâmico |
| Skill | /skill-name | .claude/skills/ | Recomendado (novo) |
Criar um comando personalizado
# Criar directório de comandos do projecto mkdir -p .claude/commands # Comando simples echo "Analisa este código para vulnerabilidades de segurança:" \ > .claude/commands/security.md # Comando com argumento ($ARGUMENTS) echo 'Corrige o issue #$ARGUMENTS seguindo os nossos padrões de código' \ > .claude/commands/fix-issue.md # Usar na sessão /project:fix-issue 1234 /security
Comando com frontmatter YAML
--- description: Faz review de código e cria PR allowed-tools: Bash(git *), Read, Write --- # PR Review Faz um code review completo das alterações em `$ARGUMENTS` e cria um PR. ## Passos 1. Lê os ficheiros alterados com `!git diff $ARGUMENTS` 2. Verifica convenções de código 3. Corre os testes: `!npm test` 4. Cria o PR com mensagem descritiva
!`comando` para executar bash e injectar o output no prompt. Usa @ficheiro para referenciar um ficheiro.Skills — conhecimento reutilizável
As Skills são ficheiros SKILL.md que ensinam ao Claude metodologias, convenções e fluxos de trabalho específicos. Ao contrário dos comandos, as Skills podem ser invocadas automaticamente — o Claude decide quando aplicá-las com base na descrição.
Skills vs. Slash Commands vs. CLAUDE.md
| Ferramenta | Invocação | Melhor para |
|---|---|---|
CLAUDE.md | Automática (sempre) | Contexto estático que raramente muda |
| Slash Commands | Manual (/nome) | Fluxos repetidos e previsíveis |
| Skills | Auto ou manual (/skill-name) | Conhecimento de domínio e metodologias |
| Subagentes | Explícita ou por delegação | Trabalho paralelo e isolamento de contexto |
Estrutura de uma Skill
# Estrutura no sistema de ficheiros .claude/ skills/ security-review/ SKILL.md # Ficheiro obrigatório (case-sensitive) checklist.md # Ficheiros de suporte opcionais patterns.ts # Scripts ou templates
Exemplo de SKILL.md
--- name: security-review description: > Faz revisão de segurança de código. Usar quando alguém pede para verificar vulnerabilidades, analisar autenticação, ou rever código antes de deployment em produção. allowed-tools: Read, Grep, Glob argument-hint: [caminho ou ficheiro a rever] disable-model-invocation: false --- # Security Review Analisa o código em `$ARGUMENTS` como um auditor de segurança sénior. ## O que verificar - Injecção SQL / NoSQL - Autenticação e autorização - Exposição de dados sensíveis (chaves, passwords) - Validação de inputs - CSRF e XSS - Dependências com vulnerabilidades conhecidas ## Output esperado Relatório com: severidade (crítica/alta/média/baixa), descrição, linha afectada e sugestão de correcção.
Opções de frontmatter
| Campo | Tipo | Descrição |
|---|---|---|
name | string | Nome da skill (= comando /name) |
description | string | Quando invocar — Claude usa matching semântico |
allowed-tools | lista | Ferramentas permitidas sem pedir confirmação |
disable-model-invocation | bool | true = só pode ser invocada manualmente |
user-invocable | bool | false = oculta do menu / |
argument-hint | string | Hint de autocomplete no terminal |
model | string | Modelo específico para esta skill |
context | fork | Corre em janela de contexto separada |
description com palavras que o utilizador usaria — é ela que o Claude usa para decidir quando aplicar a skill automaticamente.Agentes & Subagentes
Os subagentes são instâncias Claude especializadas com o seu próprio contexto, permissões e sistema de prompt. Permitem paralelismo, isolamento e especialização sem poluir o contexto principal.
Como funcionam
Quando crias um subagente, o Claude Code instancia uma segunda sessão com o seu próprio system prompt (o conteúdo do ficheiro .md), janela de contexto e conjunto de ferramentas. O agente pai delega, o subagente executa e devolve um resumo — poupando contexto precioso no agente principal.
Contexto isolado
O subagente faz toda a leitura pesada no seu próprio contexto e retorna apenas o resumo
Execução paralela
Vários subagentes correm em simultâneo em tarefas independentes
Permissões restritas
Cada agente tem apenas as ferramentas que precisa — princípio do mínimo privilégio
Especialização
System prompt dedicado para cada papel: arquitecto, revisor, tester…
Criar um subagente
Cria um ficheiro Markdown em .claude/agents/ (projecto) ou ~/.claude/agents/ (global).
--- name: code-reviewer description: > Revê código para melhorias de qualidade, performance e boas práticas. Usar para code review antes de criar PRs ou após implementação. tools: Read, Grep, Glob model: sonnet permissionMode: acceptEdits maxTurns: 20 hooks: PostToolUse: - matcher: "Read" hooks: - type: command command: "echo 'Ficheiro lido pelo reviewer'" --- # Code Reviewer És um engenheiro sénior especializado em code review. O teu papel é identificar problemas de qualidade, performance, segurança e manutenibilidade. ## Foco - Legibilidade e clareza - Performance e eficiência - Cobertura de casos extremos - Consistência com o estilo do projecto ## Output Devolve um relatório estruturado com prioridades claras. Cada issue deve ter: localização, problema, sugestão.
Frontmatter dos subagentes
| Campo | Valores | Descrição |
|---|---|---|
name | string | Identificador único do agente |
description | string | Quando delegar — Claude usa matching semântico |
tools | lista | Ferramentas permitidas (herda tudo se omitido) |
disallowedTools | lista | Ferramentas explicitamente negadas |
model | haiku, sonnet, opus, inherit | Modelo a usar |
permissionMode | acceptEdits, plan, bypassPermissions | Modo de permissão |
maxTurns | número | Máximo de turnos antes de parar |
background | bool | true = corre sempre em segundo plano |
memory | user, project, local | Âmbito da memória persistente |
Invocar subagentes
# Linguagem natural — Claude delega automaticamente pela descrição Usa o agente code-reviewer para analisar src/auth/ # Explícito Use the code-reviewer subagent on 'src/auth/middleware.ts' # Menu interactivo /agents # Executar em paralelo (num prompt) Lança 3 agentes em paralelo: 1. code-reviewer em src/api/ 2. security-review em src/auth/ 3. test-writer em src/utils/
Agent Teams (avançado)
Ao contrário dos subagentes (configurados em ficheiros YAML), as Agent Teams são orquestradas directamente no prompt. Descreves os papéis e o agente líder trata da coordenação. Os elementos da equipa herdam as permissões e ligações MCP do líder.
# Exemplo de orquestração de equipa no prompt
Implementa a feature de notificações por email.
Usa uma equipa de 3 agentes:
- Arquitecto: planeia a solução e a estrutura de dados
- Implementador: escreve o código seguindo o plano
- Tester: cria testes unitários e de integração
O arquitecto começa, passa o plano ao implementador,
e o tester valida no final.
Hooks — controlo determinístico
Os hooks disparam scripts shell ou callbacks em resposta a eventos do ciclo de vida do Claude Code. Ao contrário das instruções no CLAUDE.md, os hooks são garantidos — executam sempre, sem depender de o Claude se lembrar.
Filosofia: hooks vs. instruções
CLAUDE.md
Orientação — Claude pode esquecer, compactar ou interpretar de forma diferente
Hooks
Determinístico — executa sempre, independente do contexto ou compactação
Eventos disponíveis
Dispara antes de qualquer tool call. Podes bloquear a operação (exit code 2), modificar o input, ou apenas registar.
Casos de uso: bloquear rm -rf, validar queries de base de dados, auditar acessos a ficheiros sensíveis.
Recebe via stdin: tool_name, tool_input, session_id.
Dispara após cada ferramenta completar. Perfeito para acções automáticas pós-edição.
Casos de uso: correr ESLint após cada ficheiro editado, correr testes após Write/Edit, registar operações de escrita.
Recebe via stdin: tool_name, tool_input, tool_output.
Dispara quando a sessão principal termina uma resposta. Útil para notificações ou limpeza.
Casos de uso: notificação sonora/visual, enviar sumário para Slack, limpar ficheiros temporários.
Dispara quando um subagente (Task tool) completa o seu trabalho. Permite orquestrar pipelines de agentes.
Casos de uso: fazer log do resultado, desencadear o próximo agente numa pipeline, registar métricas.
Dispara ao sair, com SIGINT ou erro. Recebe session_id, transcript_path, reason.
Casos de uso: guardar transcrição, fazer backup, limpar processos.
Dispara quando o utilizador submete uma mensagem. Permite injectar contexto adicional ou validar o input.
Casos de uso: adicionar contexto do ambiente automaticamente, registar prompts para análise.
Configurar hooks em settings.json
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [{
"type": "command",
"command": "npm run lint --fix 2>&1 | tail -5"
}]
}
],
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [{
"type": "command",
"command": "./scripts/validate-command.sh"
}]
}
],
"Stop": [
{
"hooks": [{
"type": "command",
"command": "echo '✅ Claude terminou' | osascript -e 'display notification stdin'"
}]
}
]
}
}
Códigos de saída e comportamento
| Exit code | Efeito (PreToolUse) | Efeito (PostToolUse) |
|---|---|---|
0 | Continua normalmente | Continua normalmente |
2 | Bloqueia a operação — Claude vê o stderr como feedback | Injecta stderr como contexto |
| Outro | Erro de hook — Claude é notificado | Erro de hook — Claude é notificado |
Exemplo avançado: validar queries read-only
#!/bin/bash # Lê o input JSON do Claude Code via stdin INPUT=$(cat) COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command') # Bloqueia queries de escrita if echo "$COMMAND" | grep -qiE 'INSERT|UPDATE|DELETE|DROP|TRUNCATE'; then echo "Operação de escrita bloqueada em modo read-only" >&2 exit 2 # Exit 2 = bloquear e informar Claude fi exit 0 # Permitir
IDEs & Plataformas
O Claude Code funciona em múltiplos ambientes: terminal, extensões de IDE, aplicação desktop, interface web e iOS. A extensão VS Code é a abordagem recomendada para a maioria dos developers.
Comparação de plataformas
- Interface gráfica nativa
- Diff viewer integrado
- @-menção de ficheiros com linhas
- Historial de conversas
- Múltiplos tabs de sessão
- Partilha automática de erros/lint
- Plugin beta disponível
- Diff viewer do IDE
- Atalho Cmd/Ctrl+Esc
- Contexto partilhado automático
- Suporte a Remote Dev
- Sem dependência de IDE
- Interface visual completa
- Controlo do ecrã (macOS)
- Boa para não-developers
- Sem instalação local
- Sessões remotas
- Bom para reviews e consultas
- Integração @Claude no Slack
Instalar a extensão VS Code
Abre as Extensões
Cmd+Shift+X (Mac) ou Ctrl+Shift+X (Win/Linux)
Pesquisa "Claude Code"
Instala a extensão oficial da Anthropic. Confirma o publisher antes de instalar.
Autentica na primeira abertura
Clica no ícone do Claude Code. O browser abre para autenticação com a conta Anthropic.
Abre o projecto e usa
Abre a pasta do projecto no VS Code. O Claude Code partilha contexto automaticamente com o que tens aberto.
Instalar o plugin JetBrains
1. Abre o IDE JetBrains (IntelliJ, PyCharm, WebStorm…) 2. Settings / Preferences → Plugins → Marketplace 3. Pesquisa "Claude Code [Beta]" 4. Instala da listagem da Anthropic PBC 5. Reinicia o IDE 6. Abre o terminal integrado na raiz do projecto 7. Corre: claude (o plugin liga-se automaticamente ao processo CLI)
Modos de permissão na VS Code
| Modo | Comportamento | Quando usar |
|---|---|---|
| Normal | Pede confirmação antes de cada acção | Tarefas novas ou desconhecidas |
| Plan | Descreve o plano e aguarda aprovação antes de fazer alterações | Tarefas complexas que queres rever |
| Auto-accept | Executa sem pedir confirmação | Quando confias na direcção da tarefa |
Fluxos de trabalho
Padrões práticos para tirar o máximo partido do Claude Code no dia-a-dia de desenvolvimento.
Gestão de contexto
O contexto é o recurso mais crítico numa sessão Claude Code. Quando enche, o sistema compacta automaticamente — perdendo detalhes de mensagens antigas.
- Usa
/clearao iniciar uma tarefa nova e distinta - Tudo o que o Claude tem de saber sempre vai no CLAUDE.md
- Subagentes são ideais para tarefas de leitura intensiva — lêem no seu próprio contexto
- Usa
/compactmanualmente antes de iniciar uma fase longa - Monitoriza com
/contextou/usage
Modos de permissão
| Modo | Como activar | Ideal para |
|---|---|---|
| Normal | Default | Exploração, tarefas desconhecidas |
| Auto mode | claude --enable-auto-mode ou Shift+Tab | Quando confias na direcção — classificador automático bloqueia apenas o arriscado |
| Plan mode | /plan ou no botão VS Code | Tarefas complexas — revê antes de executar |
| Bypass | bypassPermissions no frontmatter do agente | CI/CD e automação headless |
Pipeline de desenvolvimento típico
Planear
Usa o modo Plan para o Claude descrever a abordagem. Adiciona comentários no markdown do plano antes de aprovar.
Implementar
Claude executa o plano. Os hooks garantem lint e testes automáticos após cada edição.
Rever
Usa o code-reviewer subagente (separado) para não poluir o contexto principal.
Commitar e PR
Claude gera mensagem de commit e cria o PR. O hook de Stop notifica quando termina.
Modo headless / CI
# Executar tarefa sem interacção humana claude -p "Analisa o código, corre os testes e corrige os erros" \ --permission-mode bypassPermissions \ --output-format json # Usar como biblioteca (Agent SDK) npx @anthropic-ai/claude-code run \ --task "Implementa o endpoint /api/users seguindo a especificação em spec.md"
Dicas, extras & o que não te podes esquecer
Funcionalidades menos óbvias que fazem uma diferença significativa na produtividade.
Plugins — distribuir configurações em equipa
Os plugins são pacotes que agrupam skills, subagentes, hooks e servidores MCP numa unidade instalável. Permitem partilhar configurações complexas sem processo manual de cópia de ficheiros.
Agendamento de tarefas
O Claude Code suporta tarefas agendadas (cloud cron jobs) que correm na infraestrutura da Anthropic com acesso ao teu projecto.
# Criar tarefa agendada (revê PRs abertos toda segunda de manhã) claude trigger create \ --schedule "0 9 * * 1" \ --prompt "Revê os PRs abertos e faz sumário do estado" # Loop dentro de uma sessão (a cada 5 minutos) /loop 5m /project:check-queue
Git Worktrees para desenvolvimento paralelo
Usa git worktrees para ter múltiplas branches activas em simultâneo, cada uma com a sua sessão Claude Code — sem interferência entre tarefas.
# Criar worktree para uma feature git worktree add ../projecto-feature-auth feature/auth # Abrir sessão Claude Code no worktree cd ../projecto-feature-auth && claude # O contexto é completamente independente da branch principal
Docker Sandboxes
Para execução de código não confiável ou operações de alto risco, o Claude Code suporta sandboxes Docker — o agente corre num container isolado sem acesso ao sistema principal.
# Activar sandbox para uma sessão claude --sandbox docker # Ou definir no settings.json do projecto "sandbox": { "type": "docker" }
Dicas rápidas de produtividade
- Usa
/clearfrequentemente — começas sempre com contexto limpo e poupas tokens. - Pede ao Claude para te entrevistar antes de executar tarefas complexas: "Faz-me perguntas para perceber bem o que preciso antes de começar".
- Usa dois Claudes: um para causar bugs, outro para encontrá-los — contextos separados dão resultados melhores.
- Se tiveres um resultado excelente, nota o que fizeste: estrutura do prompt, contexto fornecido, modo activo.
- Pede ao Claude para escrever os próprios hooks e comandos: "Escreve um hook que corre os testes após cada ficheiro editado".
- Usa
@ficheiroe@terminal:nomeno VS Code para dar contexto sem copiar/colar. - O modelo padrão alterna entre Opus (até 50% de uso) e Sonnet. Usa
/model haikupara tarefas simples e poupas créditos.
O que verificares que não esqueceste
CLAUDE.md criado
Com comandos de build, stack e convenções
MCP server
Pelo menos GitHub ou a ferramenta principal do projecto
Hook de lint
PostToolUse com ESLint/Prettier após Write/Edit
Subagente de review
code-reviewer em .claude/agents/
IDE ligada
Extensão VS Code ou plugin JetBrains instalado
Modo de permissão
Definido conforme o nível de confiança no projecto