Saltar para o conteúdo
← Inforjota
Cursos Inforjota English

Lição 6 de 8 · 15 min · Verificado em 6 de Outubro de 2026

Segredos, permissões e tecto de gasto

No fim desta lição vais conseguir:

  • Guardar uma chave num ficheiro .env que o Git ignora
  • Agir de imediato quando uma chave escapa: revogar e criar outra
  • Definir regras que dizem ao agente o que pode fazer, o que tem de perguntar e o que nunca faz
  • Ligar na consola do fornecedor um tecto de gasto que bloqueia (e, se quiseres, alertas) antes da primeira chamada com uma chave

O sobrinho da dona da padaria quis pôr na página um mapa de um serviço pago. Colou a chave de API no código, fez commit e enviou tudo para um repositório público. No dia seguinte a conta tinha gastos que ninguém da padaria fizera: alguém encontrou a chave e estava a usá-la.

O que é um segredo

Um segredo é tudo o que abre uma porta: a palavra-passe do email, uma chave de API (o código que um programa usa para pagar um serviço) ou um token. O fornecedor não distingue se quem a usa és tu ou outra pessoa.

A regra de ouro: um segredo nunca vai para o código, para um commit nem para a conversa com o agente. A conversa fica guardada e passa pelo fornecedor. Se colaste lá uma chave, trata-a como exposta.

O conceito: um cofre e uma lista do que não sai

Os segredos ficam num ficheiro chamado .env (o ponto faz parte do nome). O programa lê-a pelo nome da variável. Outro ficheiro, o .gitignore, diz ao Git para deixar o .env de fora quando fazes git add. Assim o código vai para o GitHub sem o segredo.

Mas o .gitignore não é uma fechadura: o agente, ou qualquer programa teu, consegue ler o .env. E não esconde uma chave que vai no JavaScript que o browser descarrega, como a do mapa da padaria: quem abrir a página vê-a, com ou sem .env. Essas precisam de outras protecções, que ficam para mais tarde. Por isso, durante o curso, usa só a chave a fingir do exercício.

Como se faz hoje: .env e .gitignore

Isto é como está a 6 de Outubro de 2026; se o ecrã for diferente, procura o botão com o mesmo nome.

Na pasta do projecto, cria primeiro o .gitignore com esta linha:

.env

Só depois cria o .env, com uma linha por segredo:

CHAVE_API=cola-aqui-a-tua-chave

Ao agente dizes apenas o nome:

O programa deve ler a chave da variável CHAVE_API, que está no ficheiro .env.
Não leias nem mostres o conteúdo do .env.

Cuidado

A ordem conta. Se o .env entrar num commit antes de estar no .gitignore, a chave fica no histórico, mesmo que apagues o ficheiro depois. E pô-lo depois no .gitignore não o tira de lá: o Git continua a seguir o que já registou. Se esse histórico for para o GitHub, a chave está perdida.

Se uma chave escapar

Por esta ordem, já:

  1. Entra na consola do fornecedor e revoga a chave: deixa de servir a quem for.
  2. Cria uma chave nova e põe-na no .env.
  3. Vê o consumo dos últimos dias: alguém a usou?
  4. Só depois limpa o código e o histórico, com ajuda do agente.

Dica

Cria uma chave por projecto, com um nome que diga para que serve («padaria-mapa»): se escapar, revogas só essa.

Permissões: o que o agente pode fazer

Conforme o modo, o agente pede autorização antes de certas acções. As regras poupam-te perguntas repetidas e proíbem o que nunca deve acontecer. São três listas:

  • Permitir (allow): faz sem perguntar (correr os testes).
  • Perguntar (ask): pede sempre autorização (enviar para o GitHub).
  • Proibir (deny): nunca faz, mesmo que lho peças (ler o .env).

No Claude Code, as regras ficam em .claude/settings.json, dentro do projecto. Este exemplo da documentação oficial proíbe a leitura do .env:

{
  "permissions": {
    "deny": ["Read(./.env)", "Read(./.env.*)"]
  }
}

A proibição ganha sempre: as regras deny são vistas primeiro. O comando /permissions mostra as regras activas. Guia: Permissões no Claude Code.

No Codex, a sandbox decide onde pode escrever e se usa a internet; a política de aprovação decide quando pergunta. No modo Auto, escreve só na pasta, sem rede, e pergunta antes de sair daí. /permissions muda o modo; /status mostra o activo. Os perfis de permissão, ainda em testes, também proíbem ler o .env. Guia: Aprovações e segurança no Codex.

Dica

Escrever «não leias o .env» é um pedido; uma regra deny é uma fechadura da ferramenta. Mas só trava o agente, não um programa que ele corra. Por isso, enquanto aprendes, não tenhas lá chaves verdadeiras.

O modo que não pergunta

As duas ferramentas têm um modo em que o agente faz tudo sem perguntar: --dangerously-skip-permissions no Claude Code e --dangerously-bypass-approvals-and-sandbox no Codex («dangerously» quer dizer «perigosamente»).

Cuidado

Nesse modo o agente pode apagar ficheiros, instalar programas e enviar dados sem perguntar. Usa-se só num ambiente isolado, como uma máquina virtual ou um contentor, com uma pasta descartável lá dentro. Uma pasta descartável no computador do dia-a-dia não chega: sem a protecção, o agente sai dela.

No Claude Code, as versões recentes podem arrancar em modo automático, em que outro modelo aprova por ti. Enquanto aprendes, usa Shift+Tab até ver manual mode on: o modo Manual pergunta antes da maior parte das acções.

Tecto de gasto: antes da primeira chamada

Com uma chave de API, cada pedido custa dinheiro. Antes da primeira chamada, liga na consola do fornecedor o controlo certo:

  • tecto que bloqueia: quando o gasto chega ao valor, os pedidos são recusados;
  • alerta: recebes um aviso, mas os pedidos continuam.

Liga sempre o tecto, com um valor baixo (subir é fácil); um alerta abaixo dele dá-te tempo para reagir. Na consola da Anthropic: Settings > Billing, secção Spend limits. Na da OpenAI: Spend, Edit spend limit, e liga Enforce a hard limit (sem ela, os pedidos não são recusados). A OpenAI avisa que o corte não é instantâneo: o gasto pode passar um pouco do tecto. Guias: limites de gasto da Anthropic e Spend limits da OpenAI. Valores de cada plano: consulta a página Estado actual.

Exercício

Na pasta padaria da lição 5:

Como sei que ficou bem o git status mostra o .gitignore como ficheiro novo e não mostra o .env. No Claude Code, o primeiro pedido é bloqueado pela regra e o segundo funciona. No Codex, o /status mostra que só pode escrever na pasta do projecto (ou que está só em leitura, se ainda não confiaste na pasta).

Se não deu

  • O .env aparece no git status: o .gitignore tem um erro no nome ou na linha. No Windows, o Bloco de Notas pode gravá-lo como .gitignore.txt (activa ver as extensões).
  • Não vês os ficheiros que começam por ponto: estão escondidos. No PowerShell, dir -Force mostra-os; no Mac, no Linux e no WSL, ls -a.
  • O .env já entrou num commit: git rm --cached .env tira-o do Git sem o apagar do disco; depois faz commit. Se a chave fosse verdadeira, revoga-a na mesma.
  • O agente leu o .env apesar da regra: confirma o nome .claude/settings.json, as vírgulas e as aspas, e abre uma sessão nova. O /permissions mostra se a regra foi lida.

Vídeos

O Jeito Certo de Guardar Senhas e Chaves de API dos Seus Códigos
Hashtag Programação · 14 min · PT-BR · legendas · Ver no YouTube
Mostra como guardar senhas e chaves de API fora do código com variáveis de ambiente (exemplo em Python); não aborda o tecto de gasto.
How auto mode works with Claude Code
Claude · 5 min · EN · legendas · Ver no YouTube
Vídeo oficial da Anthropic sobre o modo automático do Claude Code: como o classificador filtra cada acção e como configurá-lo.

Testa o que aprendeste

1. O teu programa precisa de uma chave de API. Qual destes pedidos ao agente é o melhor?
2. Descobres que uma chave verdadeira foi parar a um repositório público no GitHub. Qual é o primeiro passo?
3. Um tutorial manda correr o agente com --dangerously-skip-permissions, no teu computador do dia-a-dia, «para ir mais depressa». O que fazes?

Correcções a esta lição (1)
  • : Depois de uma revisão externa: o `.gitignore` deixou de ser apresentado como controlo de acesso (o agente lê o `.env`); uma chave que acabe no JavaScript do browser fica exposta, por isso usa-se só a chave falsa; «nunca entra num commit» não vale para ficheiros já seguidos pelo Git; o comando do Windows passou a `dir -Force`; o tecto de gastos ficou alinhado com a lição 2. As opções do quiz foram reordenadas.