Progresso
0%
Step by step

Trabalhar com o Claude Code como um profissional

Do primeiro CLAUDE.md até criares os teus próprios agentes, skills e hooks. Cada módulo tem explicação, exemplos prontos a copiar, um exercício prático e um teste. No fim, recebes uma nota de 0 a 20.

⏱ ~90 min🧪 32 perguntas💾 O progresso fica guardado no browser
Módulo 01

Fundamentos: como o Claude Code pensa

O Claude Code é um agente: lê ficheiros, corre comandos, edita código e verifica o resultado, em ciclo. Ser eficiente é dar-lhe contexto certo, um objetivo claro e uma forma de se verificar.

O ciclo de ouro: Explorar → Planear → Implementar → Verificar

  1. Explorar. Pede-lhe para ler os ficheiros relevantes sem escrever código ainda. Ex.: “Lê src/auth/ e explica-me como funciona o login. Não alteres nada.”
  2. Planear. Entra em Plan Mode (Shift+Tab até aparecer “plan mode”). O Claude investiga e propõe um plano, sem tocar em ficheiros. Revês e ajustas.
  3. Implementar. Aprovas o plano e ele executa. Podes interromper a qualquer momento com Esc.
  4. Verificar. Testes, build, lint, screenshot. Um agente que se consegue verificar sozinho é muito mais fiável.

Atalhos e comandos que vais usar todos os dias

Comando / atalhoO que faz
Shift+TabAlterna modos de permissão: normal → aceitar edições automaticamente → plan mode
EscInterrompe o Claude (sem perder o contexto)
Esc Esc ou /rewindVolta atrás para um ponto anterior da conversa e/ou do código
@ficheiroReferencia um ficheiro diretamente no prompt
! comandoCorre um comando shell e o output entra na conversa
/initAnalisa o projeto e gera um CLAUDE.md inicial
/clearLimpa a conversa (começa do zero)
/compactResume a conversa para libertar contexto
/modelTroca de modelo (Opus para tarefas difíceis, Sonnet/Haiku para rapidez)
claude -c / claude -rContinua a última sessão / escolhe uma sessão para retomar
claude -p "…"Modo não-interativo (ótimo para scripts e CI)
Regra de ouroDá-lhe um critério de sucesso verificável: “Implementa X. Está feito quando npm test passar e a página /login carregar sem erros na consola.”
Exercício prático: abre um projeto teu, corre claude, carrega Shift+Tab até ao plan mode e pede: “Explica-me a arquitetura deste projeto e sugere 3 melhorias. Não alteres nada.”
Módulo 02

CLAUDE.md: a memória permanente

O CLAUDE.md é carregado automaticamente no início de cada sessão. É o sítio para tudo aquilo que te cansas de repetir: comandos, convenções, armadilhas do projeto.

Onde vive (hierarquia)

👤 Utilizador

~/.claude/CLAUDE.md
Preferências pessoais para todos os projetos.

📁 Projeto

./CLAUDE.md ou ./.claude/CLAUDE.md
Partilhado com a equipa via git.

🗂 Subpasta

./frontend/CLAUDE.md
Carregado só quando o Claude trabalha nessa pasta.

🔗 Imports

@docs/api.md dentro do CLAUDE.md puxa outro ficheiro (até 5 níveis).

Os ficheiros somam-se, não se substituem. Edita-os rapidamente com /memory.

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

✅ Coloca

Comandos de build/test/lint · estrutura de pastas essencial · convenções de código que não são óbvias · armadilhas (“não mexer em X porque…”) · como fazer commits/PRs · stack e versões.

❌ Evita

Texto de marketing · documentação enorme (usa imports ou links) · coisas que o Claude descobre lendo o código · regras vagas (“escreve bom código”) · segredos e passwords.

Exemplo de um bom CLAUDE.md

CLAUDE.md
# Projeto: Loja Online
Next.js 15 (App Router) + TypeScript + Prisma + PostgreSQL.

## Comandos
- `pnpm dev`        → servidor local (porta 3000)
- `pnpm test`       → testes (Vitest). Corre um ficheiro: `pnpm test path/to/file`
- `pnpm lint --fix` → lint + formatação
- `pnpm db:migrate` → migrações Prisma

## Estrutura
- `app/`        rotas e páginas
- `lib/`        lógica de negócio (sem React aqui)
- `components/` UI reutilizável

## Convenções
- Usa sempre named exports; nunca default exports.
- Valida inputs de API com Zod em `lib/schemas/`.
- Preços são guardados em cêntimos (inteiros), nunca floats.

## Armadilhas
- NUNCA editar `prisma/migrations/` à mão.
- `lib/legacy-payments.ts` está congelado — perguntar antes de alterar.

## Fluxo
- Depois de alterar código: corre `pnpm lint --fix` e os testes afetados.
- Mensagens de commit em inglês, formato Conventional Commits.

Mais detalhes da API: @docs/api-guide.md
Curto vence longoCada linha do CLAUDE.md consome contexto em todas as sessões. Pergunta-te em cada linha: “Se eu apagar isto, o Claude vai errar?” Se não, apaga. Usa ÊNFASE (ex.: “IMPORTANTE”, “NUNCA”) só para as poucas regras críticas.

Exemplo de CLAUDE.md pessoal (global)

~/.claude/CLAUDE.md
# Preferências pessoais
- Responde em português de Portugal; código e commits em inglês.
- Prefiro soluções simples; não adiciones dependências sem perguntar.
- Antes de dizer que algo está feito, corre os testes e mostra o resultado.
- Uso pnpm, não npm.
Exercício prático: num projeto teu corre /init. Depois abre o ficheiro gerado e corta-o para metade: mantém só comandos, convenções não óbvias e armadilhas. Testa numa sessão nova perguntando “que comandos uso para testar?”.
Módulo 03

Gestão de contexto e prompts eficientes

A janela de contexto é o recurso mais precioso. Quanto mais cheia, mais lento e menos preciso o Claude fica. Gerir contexto é a competência nº1 de quem trabalha bem com agentes.

Hábitos que fazem a diferença

  1. /clear entre tarefas diferentes. Acabaste a feature A? Limpa antes de começar a B. Contexto antigo distrai.
  2. /compact em tarefas longas. Podes orientar o resumo: /compact mantém as decisões sobre a API e a lista de ficheiros alterados.
  3. /context para ver o que ocupa espaço (ficheiros de memória, MCP, ferramentas, conversa).
  4. Delega investigação a subagentes. Eles leem 50 ficheiros no contexto deles e devolvem só a conclusão (ver Módulo 6).
  5. Se o Claude se enganou duas vezes, recomeça. /clear + um prompt melhor é quase sempre mais rápido do que corrigir em cima de uma conversa “poluída”.

Prompt fraco vs. prompt forte

😕 Fraco

“Corrige o bug do login.”

💪 Forte

“Os utilizadores com email em maiúsculas não conseguem fazer login (ver @src/auth/login.ts). Escreve primeiro um teste que reproduza o erro, depois corrige a causa. Corre pnpm test auth para confirmar.”

Ingredientes de um prompt forte: o quê · onde (ficheiros com @) · restrições · como verificar. Podes também colar screenshots ou arrastar imagens para o terminal.

Pede uma entrevistaPara features grandes: “Quero adicionar pagamentos. Antes de planear, faz-me as perguntas que precisas para ter uma especificação completa.” Depois guarda o resultado num SPEC.md e começa uma sessão nova com ele.
Exercício prático: numa sessão longa, corre /context e observa a distribuição. Depois corre /compact com uma instrução de foco e volta a correr /context.
Módulo 04

Settings e permissões: menos interrupções, mais segurança

Os ficheiros settings.json controlam o que o Claude pode fazer sem te perguntar, variáveis de ambiente, hooks e muito mais.

FicheiroÂmbitoVai para o git?
~/.claude/settings.jsonTodos os teus projetos—
.claude/settings.jsonProjeto (equipa)Sim
.claude/settings.local.jsonProjeto, só para tiNão (ignorado automaticamente)

Permissões allow / deny

.claude/settings.json
{
  "permissions": {
    "allow": [
      "Bash(pnpm test:*)",
      "Bash(pnpm lint:*)",
      "Bash(git status)",
      "Bash(git diff:*)"
    ],
    "deny": [
      "Read(./.env)",
      "Read(./secrets/**)",
      "Bash(rm -rf:*)"
    ]
  }
}

deny ganha sempre a allow. Também podes gerir isto interativamente com /permissions, ou escolher “não voltar a perguntar” quando o Claude pede autorização.

Cuidado com o “modo YOLO”--dangerously-skip-permissions desliga todas as confirmações. Usa apenas em ambientes isolados (container/VM sem dados importantes). No dia a dia, uma boa lista allow dá-te 90% da velocidade com segurança.
Exercício prático: cria .claude/settings.json num projeto e adiciona à allow os comandos de teste e lint que usas. Adiciona Read(./.env) à deny. Confirma com /permissions.
Módulo 05

Skills: ensina-lhe receitas reutilizáveis

Uma skill é uma pasta com um SKILL.md: instruções (e opcionalmente scripts/ficheiros de apoio) para um tipo de tarefa. O Claude vê só o nome e a descrição; carrega o resto apenas quando precisa — por isso não gasta contexto.

📁 Projeto

.claude/skills/<nome>/SKILL.md

👤 Pessoal

~/.claude/skills/<nome>/SKILL.md

⚡ Invocação

Automática (o Claude decide pela descrição) ou manual com /nome.

Passo a passo: criar a skill “review-pr”

  1. Cria a pasta: mkdir -p .claude/skills/review-pr
  2. Cria o ficheiro SKILL.md com frontmatter (nome + descrição) e as instruções.
  3. Abre uma sessão nova e escreve /review-pr — ou simplesmente “revê as minhas alterações”.
.claude/skills/review-pr/SKILL.md
---
name: review-pr
description: Revê as alterações atuais (git diff) à procura de bugs, problemas de segurança e falta de testes. Usa quando o utilizador pedir uma revisão de código.
allowed-tools: Bash(git diff:*), Bash(git log:*), Read, Grep
---

# Revisão de código

1. Corre `git diff main...HEAD` para ver as alterações.
2. Para cada ficheiro alterado, verifica:
   - erros de lógica e casos limite
   - inputs não validados, segredos no código
   - código novo sem testes
3. Responde com uma tabela: ficheiro · linha · gravidade · problema · sugestão.
4. Termina com um veredito: ✅ pronto / ⚠️ pequenas correções / ❌ precisa de trabalho.

Foco extra (se indicado pelo utilizador): $ARGUMENTS
Campo do frontmatterPara quê
nameNome e comando /nome
descriptionO mais importante. É assim que o Claude decide quando usar a skill. Diz o quê e quando.
allowed-toolsFerramentas pré-autorizadas enquanto a skill está ativa
disable-model-invocation: trueSó corre quando tu escreves /nome (bom para deploys e ações com efeitos)
$ARGUMENTSNo corpo: substituído pelo que escreves depois do comando (/review-pr segurança)
Skills vs. CLAUDE.mdCLAUDE.md = regras que se aplicam sempre. Skill = procedimento para uma tarefa específica. Se uma secção do teu CLAUDE.md só interessa às vezes, transforma-a numa skill. Os antigos comandos em .claude/commands/*.md continuam a funcionar e comportam-se como skills simples.
Exercício prático: cria uma skill pessoal em ~/.claude/skills/commit/SKILL.md que analisa o git diff --staged e escreve uma mensagem de commit no teu formato preferido. Marca-a com disable-model-invocation: true e testa com /commit.
Módulo 06

Subagentes: especialistas com contexto próprio

Um subagente é um “Claude assistente” com o seu próprio prompt de sistema, ferramentas e janela de contexto. O agente principal delega-lhe uma tarefa e recebe apenas o resultado — o teu contexto fica limpo.

Quando usar

Investigar muitos ficheiros · revisão independente · tarefas paralelas · funções repetidas com regras fixas (ex.: “test-runner”).

Quando evitar

Tarefas pequenas que fazes em 2–3 passos: o subagente começa sem contexto e custa mais tokens.

Passo a passo: criar o agente “test-runner”

  1. Forma fácil: escreve /agents → “Create new agent” → o Claude ajuda-te a gerar o ficheiro.
  2. Forma manual: cria .claude/agents/test-runner.md (projeto) ou ~/.claude/agents/test-runner.md (pessoal).
  3. Usa: “Usa o test-runner para verificar as minhas alterações” — ou deixa o Claude delegar sozinho, com base na descrição.
.claude/agents/test-runner.md
---
name: test-runner
description: Corre os testes, analisa falhas e propõe correções. Usa proativamente depois de alterações de código.
tools: Bash, Read, Grep, Glob
model: sonnet
---

És um especialista em testes.

1. Identifica os testes afetados pelas alterações recentes (`git diff --name-only`).
2. Corre-os com `pnpm test <ficheiros>`.
3. Para cada falha: lê o teste e o código, identifica a causa raiz.
4. Devolve um relatório curto:
   - ✅ / ❌ por ficheiro
   - causa de cada falha (1 linha)
   - correção sugerida (diff mínimo)

Não alteres ficheiros: apenas relata.
CampoPara quê
nameIdentificador do agente
descriptionQuando o principal deve delegar (“use proactively…” incentiva o uso automático)
toolsLista de ferramentas permitidas. Omitido = herda todas. Restringe para segurança e foco.
modelsonnet, opus, haiku ou inherit. Haiku é ótimo para tarefas simples e rápidas.
Skill ou subagente?Skill = conhecimento/receita que corre no teu contexto atual. Subagente = trabalhador separado com contexto isolado. Precisas de “como fazer X”? Skill. Precisas de “vai fazer X e diz-me só o resultado”? Subagente.
Exercício prático: cria um agente code-explorer só com Read, Grep, Glob e model: haiku, cuja descrição seja “encontra onde algo está implementado no código”. Pergunta: “Onde é que tratamos a autenticação?” e observa a delegação.
Módulo 07

Hooks: automação garantida

Instruções no CLAUDE.md são sugestões que o Claude normalmente segue. Hooks são comandos shell que correm sempre, em momentos definidos. Se algo tem de acontecer 100% das vezes, é um hook.

EventoQuando disparaUso típico
PreToolUseAntes de uma ferramenta correrBloquear comandos perigosos ou edições a ficheiros protegidos
PostToolUseDepois de uma ferramenta correrFormatar ficheiros após edição, correr lint
UserPromptSubmitQuando envias um promptInjetar contexto extra, validar prompts
StopQuando o Claude termina de responderCorrer testes, notificação
NotificationQuando o Claude precisa da tua atençãoNotificação no desktop
SessionStartInício de sessãoCarregar contexto (ex.: issues abertas)

Exemplo 1 — formatar automaticamente depois de cada edição

.claude/settings.json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"
          }
        ]
      }
    ]
  }
}

O hook recebe um JSON no stdin com os detalhes da chamada (ex.: tool_input.file_path). O matcher filtra por nome de ferramenta (aceita regex).

Exemplo 2 — proteger o ficheiro .env

.claude/hooks/protect-env.sh
#!/usr/bin/env bash
file=$(jq -r '.tool_input.file_path // empty')
if [[ "$file" == *.env* ]]; then
  echo "Bloqueado: não é permitido editar ficheiros .env" >&2
  exit 2   # exit 2 = bloqueia a ação; o stderr é enviado ao Claude
fi
exit 0
// em .claude/settings.json
"PreToolUse": [{
  "matcher": "Edit|Write",
  "hooks": [{ "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/protect-env.sh" }]
}]
Códigos de saída0 = tudo bem, continua · 2 = bloqueia e mostra o stderr ao Claude (para ele corrigir) · outro = erro não bloqueante. Usa /hooks para ver os hooks ativos.
SegurançaHooks correm com as tuas permissões, sem confirmação. Lê sempre um hook antes de o adicionar, sobretudo se vier de outra pessoa.
Exercício prático: adiciona um hook Notification em ~/.claude/settings.json com notify-send "Claude precisa de ti" (Linux). Assim podes mudar de janela e ser avisado.
Módulo 08

MCP e Plugins: liga o Claude ao mundo

O MCP (Model Context Protocol) dá ao Claude ferramentas externas: GitHub, Notion, bases de dados, browsers, Figma… Os plugins empacotam skills, agentes, hooks e servidores MCP para instalares de uma vez.

Adicionar um servidor MCP

# Servidor remoto (HTTP)
claude mcp add --transport http notion https://mcp.notion.com/mcp

# Servidor local (stdio) — tudo depois de -- é o comando a correr
claude mcp add playwright -- npx @playwright/mcp@latest

# Partilhar com a equipa (grava em .mcp.json na raiz do projeto)
claude mcp add --scope project --transport http github https://api.githubcopilot.com/mcp/

# Gerir
claude mcp list
claude mcp remove notion

Dentro de uma sessão, /mcp mostra o estado dos servidores e permite autenticar (OAuth).

ScopeOnde ficaQuem vê
local (padrão)Config do utilizador, só para este projetoSó tu, neste projeto
project.mcp.json no repositórioToda a equipa
userConfig do utilizadorSó tu, em todos os projetos
Menos é maisCada servidor MCP acrescenta definições de ferramentas ao contexto. Instala só o que usas de facto e remove o resto — verifica o impacto com /context.

Plugins

Escreve /plugin para navegar em marketplaces e instalar pacotes prontos (ex.: um plugin de revisão de código traz skills + agentes + hooks). Ótimo para partilhar o teu setup com a equipa: em vez de copiar 10 ficheiros, publicas um plugin.

Mapa mental final: o que usar quando

Preciso de…Usa
Regras que valem sempreCLAUDE.md
Uma receita para um tipo de tarefaSkill
Um trabalhador com contexto isoladoSubagente
Algo que acontece obrigatoriamenteHook
Acesso a um serviço externoMCP
Partilhar tudo isto num pacotePlugin
Exercício prático: corre claude mcp list para veres o que já tens instalado. Remove um servidor que nunca usas e compara o antes/depois com /context.
Resultado

A tua nota final