ANTHROPIC CLI

Projeto 2: Agentic com Claude Code

Guia passo a passo para usar o Claude Code como agente de desenvolvimento autônomo. Aprenda a configurar CLAUDE.md, permissões, hooks, skills e integração com MCP.

6 tópicos
Exemplos de código reais
Projeto Python/FastAPI

Baixar Configuração Completa

CLAUDE.md, settings.json, skills prontos para usar no seu projeto

↓ Download ZIP

⚡ Configure em 3 passos

  1. 1

    Instale o Claude Code

    npm install -g @anthropic-ai/claude-code
  2. 2

    Copie os arquivos para seu projeto

    cp -r .claude/ CLAUDE.md /seu-projeto/
  3. 3

    Execute o Claude Code

    claude # na pasta do seu projeto

Precisa de Node.js? Baixe em nodejs.org. Chave Anthropic em console.anthropic.com.

O que é

O Claude Code é uma CLI oficial da Anthropic que transforma o Claude em um agente de desenvolvimento que opera diretamente no seu terminal. Diferente de plugins de editor, ele tem acesso completo ao sistema de arquivos, pode executar comandos, criar branches, rodar testes e navegar pelo código como um desenvolvedor sênior — tudo a partir de instruções em linguagem natural.

Por que usar

  • + Executa tarefas complexas de múltiplos arquivos sem supervisão constante
  • + Integra nativamente com git, GitHub CLI, pytest e qualquer ferramenta de terminal
  • + Contexto persistente via CLAUDE.md — o agente "conhece" as regras do projeto
  • + Permissões configuráveis por projeto, com listas allow/deny granulares

Como configurar

Instale globalmente via npm e autentique com sua chave da Anthropic:

# 1. Instalar o Claude Code globalmente
npm install -g @anthropic-ai/claude-code

# 2. Verificar a instalação
claude --version

# 3. Autenticar (abre o browser para OAuth)
claude auth login

# 4. Ou usar chave de API diretamente
export ANTHROPIC_API_KEY="sk-ant-..."

# 5. Entrar no diretório do projeto e iniciar
cd meu-projeto
claude

# 6. Modo não-interativo (headless)
claude -p "Adicione testes para o módulo de autenticação"

Estrutura básica recomendada para qualquer projeto:

meu-projeto/
├── CLAUDE.md                  # Memória e regras do agente
├── .claude/
│   ├── settings.json          # Permissões e hooks
│   └── skills/
│       ├── fix-issue/
│       │   └── SKILL.md       # Skill customizada
│       └── deploy/
│           └── SKILL.md
└── src/                       # Código do projeto

O que é

O CLAUDE.md é um arquivo Markdown na raiz do projeto que o Claude Code lê automaticamente no início de cada sessão. Ele funciona como a memória persistente do agente — contém o contexto do projeto, convenções de código, comandos úteis, regras de comportamento e qualquer informação que o Claude precisa saber para trabalhar corretamente no repositório.

A diferença em relação a um prompt comum é que o CLAUDE.md é específico do projeto, fica no repositório (podendo ser versionado), e é lido automaticamente — o desenvolvedor não precisa repetir o contexto a cada conversa.

Por que usar

  • + Elimina a necessidade de explicar o projeto do zero a cada sessão
  • + Garante que o Claude siga as convenções da equipe (snake_case, docstrings, etc.)
  • + Previne ações indesejadas com regras explícitas ("nunca commitar em main")
  • + Pode ser compartilhado entre a equipe via controle de versão

Como configurar

Seções recomendadas para um CLAUDE.md completo:

# CLAUDE.md

## Contexto do Projeto
API REST com FastAPI + PostgreSQL para gestão de tarefas.
Stack: Python 3.11, SQLAlchemy 2.0, Pydantic v2, pytest.

## Comandos Principais
- Rodar: `uvicorn app.main:app --reload`
- Testes: `pytest --cov=app`
- Lint: `ruff check app/`

## Convenções
- snake_case para funções e variáveis
- Type hints obrigatórios em todas as funções
- Docstrings no formato Google Style

## Regras do Claude
- NUNCA commitar em main ou develop
- Sempre criar branch: feat/, fix/, refactor/
- Rodar pytest antes de qualquer commit
- Nunca expor SECRET_KEY ou DATABASE_URL

## Arquitetura
app/routers/   → endpoints por recurso
app/models/    → SQLAlchemy models
app/schemas/   → Pydantic schemas
app/services/  → lógica de negócio

O que é

O sistema de permissões do Claude Code controla exatamente quais comandos o agente pode executar de forma autônoma, quais requerem confirmação do usuário e quais são completamente bloqueados. As configurações ficam em .claude/settings.json e podem ser definidas por projeto.

Por que usar

  • + Previne ações destrutivas acidentais (rm -rf, git push --force)
  • + Libera fluxo para ações seguras e repetitivas sem confirmação manual
  • + Configurável por projeto — um projeto de produção pode ter regras mais rígidas
  • + Três modos: default (pergunta tudo), auto-edit (edições sem confirmar), bypass-permissions (CI/CD)

Como configurar

// .claude/settings.json
{
  "permissions": {
    "allow": [
      "Bash(git add:*)",        // git add permitido
      "Bash(git commit:*)",
      "Bash(pytest:*)",          // rodar testes sem confirmar
      "Bash(pip install:*)",
      "Bash(python:*)"
    ],
    "deny": [
      "Bash(git push --force:*)", // bloqueado permanentemente
      "Bash(rm -rf:*)",
      "Bash(sudo:*)"
    ]
  }
}

Modos de execução via flag:

# Modo padrão (pergunta antes de ações não configuradas)
claude

# Modo auto-edit (edita arquivos sem confirmação)
claude --auto-edit

# Modo headless para CI/CD (bypass total, use com cuidado)
claude --dangerously-skip-permissions -p "rodar suíte de testes"

O que é

Hooks são comandos shell que o Claude Code executa automaticamente em resposta a eventos do ciclo de vida da sessão. Permitem integrar o agente com sistemas externos, executar verificações de segurança, notificar equipes e automatizar tarefas recorrentes sem intervenção manual.

PreToolUse

Executa antes de qualquer ferramenta (Bash, Edit, etc.)

PostToolUse

Executa após uma ferramenta ser usada com sucesso

SessionStart

Executa uma vez ao iniciar uma nova sessão do Claude

Notification

Executa quando Claude gera uma notificação para o usuário

Por que usar

  • + Rodar lint automaticamente após cada edição de arquivo Python
  • + Enviar notificações no Slack quando o agente concluir uma tarefa longa
  • + Registrar logs de auditoria de todos os comandos executados
  • + Bloquear comandos perigosos com verificação customizada antes de executar

Como configurar

// .claude/settings.json — seção hooks
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",        // aplica a todos os Bash
        "hooks": [{
          "type": "command",
          "command": "echo '[Audit] Bash: $CLAUDE_TOOL_INPUT'"
        }]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Edit",         // após editar arquivo
        "hooks": [{
          "type": "command",
          "command": "ruff check app/ --quiet"
        }]
      }
    ],
    "Notification": [
      {
        "matcher": "*",
        "hooks": [{
          "type": "command",
          "command": "notify-send 'Claude Code' '$CLAUDE_NOTIFICATION'"
        }]
      }
    ]
  }
}

O que é

Skills são macros de agente ativadas por comandos no formato /nome-da-skill. Cada skill é definida por um arquivo SKILL.md dentro de .claude/skills/nome/ e descreve em linguagem natural os passos que o Claude deve seguir — como uma receita de execução.

A diferença para um prompt simples é que skills são reutilizáveis, versionáveis, compartilháveis entre a equipe e podem encapsular fluxos complexos de múltiplos passos.

Por que usar

  • + /fix-issue 123 — corrige automaticamente uma issue do GitHub
  • + /commit — cria commit com mensagem gerada a partir do diff
  • + /review-pr 45 — revisa um PR e sugere melhorias
  • + /deploy staging — executa pipeline de deploy para staging

Como configurar

Estrutura de um SKILL.md para a skill /fix-issue:

# Skill: fix-issue

## Uso
/fix-issue <numero-da-issue>

## Passos
1. Ler issue: `gh issue view <numero> --json title,body`
2. Identificar arquivos relacionados com Grep/Glob
3. Criar branch: `git checkout -b fix/issue-<numero>`
4. Implementar correção com Edit/Write
5. Rodar testes: `pytest`
6. Commitar: `git commit -m "Fix: resolve #<numero>"`

## Regras
- Nunca modificar main diretamente
- Se testes falharem, corrigir antes de commitar
- Mencionar o número da issue na mensagem de commit

## Ferramentas
Bash, Read, Edit, Write, Grep, Glob

Localização no projeto:

.claude/skills/
├── fix-issue/
│   └── SKILL.md      → ativada com /fix-issue
├── commit/
│   └── SKILL.md      → ativada com /commit
└── review-pr/
    └── SKILL.md      → ativada com /review-pr

O que é

MCP (Model Context Protocol) é um protocolo aberto que permite ao Claude se conectar a fontes de dados e ferramentas externas de forma padronizada. Já os subagentes são instâncias filhas do Claude invocadas pela ferramenta Task — permitem paralelizar trabalho, como fazer o agente principal orquestrar múltiplos subagentes trabalhando em partes diferentes do código simultaneamente.

Por que usar

  • + MCP conecta Claude a bancos de dados, APIs, Slack, Jira, sem código customizado
  • + Subagentes permitem trabalho paralelo — 4 módulos sendo implementados ao mesmo tempo
  • + Worktrees isolam cada subagente em seu próprio diretório — sem conflitos de arquivos
  • + Modo headless (claude -p "...") permite automação total via scripts e CI/CD

Como configurar

Conectar um servidor MCP ao Claude Code:

# Adicionar servidor MCP ao Claude
claude mcp add postgres-server \
  --command "npx @anthropic/mcp-server-postgres" \
  --env DATABASE_URL="$DATABASE_URL"

# Listar MCPs configurados
claude mcp list

# Usar em sessão interativa (Claude agora tem acesso ao banco)
claude
# "Liste as 10 tarefas mais recentes do banco de dados"

Usar a ferramenta Task para criar subagentes paralelos:

# Prompt para o agente principal orquestrar subagentes
claude -p "
Implemente as seguintes features em paralelo usando subagentes:

1. Subagente A: Criar endpoint POST /api/v1/tasks com validação
2. Subagente B: Adicionar testes para o endpoint de autenticação
3. Subagente C: Atualizar documentação do README

Use a ferramenta Task para cada subagente.
Aguarde todos completarem antes de fazer o commit final.
"

Trabalhar com worktrees para isolamento:

# Criar worktree para trabalhar em feature isolada
git worktree add .claude/worktrees/feat-auth feat/auth-refresh

# Claude Code cria worktrees automaticamente com /worktree
/worktree feat-notifications

# Listar worktrees ativos
git worktree list

Exemplo Completo: CLAUDE.md

Conteúdo do arquivo CLAUDE.md criado para este projeto de demonstração.

CLAUDE.md markdown
# CLAUDE.md — API REST de Gerenciamento de Tarefas

## Contexto do Projeto
API REST com FastAPI + PostgreSQL para gestão de tarefas.
Stack: Python 3.11, SQLAlchemy 2.0, Pydantic v2, pytest.
Repositório: github.com/nmaldaner/task-api

## Comandos de Desenvolvimento
- Instalar: `pip install -r requirements.txt`
- Rodar: `uvicorn app.main:app --reload --port 8000`
- Testes: `pytest --cov=app --cov-report=html`
- Migrations: `alembic upgrade head`
- Lint: `ruff check app/`

## Convenções de Código
- snake_case para variáveis e funções
- PascalCase para classes e schemas Pydantic
- Type hints obrigatórios em todas as funções públicas
- Docstrings no formato Google Style
- Imports: stdlib > third-party > local (separados por linha em branco)

## Regras do Claude Code
- NUNCA commitar diretamente em main ou develop
- Sempre criar branch: feat/, fix/, refactor/, docs/
- Rodar pytest antes de qualquer commit
- Nunca expor SECRET_KEY ou DATABASE_URL em código
- Nunca usar git push --force sem confirmação explícita

## Arquitetura
app/routers/   → endpoints organizados por recurso
app/models/    → SQLAlchemy models (tabelas do banco)
app/schemas/   → Pydantic schemas (request/response)
app/services/  → lógica de negócio
tests/         → testes com pytest + fixtures

## Variáveis de Ambiente Importantes
DATABASE_URL, SECRET_KEY, ALGORITHM, ENVIRONMENT, DEBUG

## URLs Principais
- Swagger: http://localhost:8000/docs
- Health: http://localhost:8000/health
- API: http://localhost:8000/api/v1/

Exemplo Completo: settings.json

Arquivo de configuração em .claude/settings.json com permissões e hooks configurados.

.claude/settings.json json
{
  "permissions": {
    // Comandos permitidos sem confirmação
    "allow": [
      "Bash(git add:*)",
      "Bash(git commit:*)",
      "Bash(git checkout:*)",
      "Bash(pytest:*)",
      "Bash(pip install:*)",
      "Bash(python:*)"
    ],
    // Comandos sempre bloqueados
    "deny": [
      "Bash(git push --force:*)",
      "Bash(rm -rf:*)",
      "Bash(sudo:*)"
    ]
  },
  "hooks": {
    // Executar antes de qualquer comando Bash
    "PreToolUse": [{
      "matcher": "Bash",
      "hooks": [{
        "type": "command",
        "command": "echo '[Hook] Verificando segurança...'"
      }]
    }],
    // Executar após editar um arquivo
    "PostToolUse": [{
      "matcher": "Edit",
      "hooks": [{
        "type": "command",
        "command": "echo '[Hook] Arquivo editado. Considere rodar os testes.'"
      }]
    }]
  },
  "env": {
    "ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}",
    "ENVIRONMENT": "development"
  }
}

Proximos Passos

Continue explorando os outros projetos da serie Agentic.