Documentação / Segurança
Segredos e privacidade
O que é sensível nunca sai do seu computador. Como o Yuli bloqueia, oculta e restitui segredos, e como se defende da injeção de prompt.
O Yuli protege seus segredos em três níveis: não os lê, não os deixa sair e os guarda no chaveiro do sistema.
Arquivos que o agente nunca lê
| Tipo | Padrões |
|---|---|
| Ambiente | .env e .env.* (exceto .env.example, .env.sample e .env.template) |
| Chaves e certificados | .pem, .key, .p12, .pfx, .jks, .keystore, .ppk |
| Chaves SSH | Arquivos que começam com id_rsa, id_ed25519 ou id_ecdsa, e tudo o que está em .ssh/ |
| Credenciais | .aws/credentials, credentials.json, secrets.json, .npmrc, .netrc |
A regra vale dentro e fora do projeto, e também para leituras pelo terminal: cat .env ou Get-Content .env são recusados da mesma forma. Ela vale para o agente do Yuli, para o Claude Code, o Kiro, o Codex e o Antigravity, e para as ferramentas yuli_*.
Além disso, o contexto enviado ao modelo exclui pastas como secrets/, certificates/ e credentials/, e qualquer conteúdo com um bloco de chave privada PEM ou PGP.
Os dados de teste de uma especificação são permitidos em src/main/resources/mock/, src/test/resources/ e mocks/.
Ocultação tipada
Às vezes um segredo aparece onde não deveria: colado no chat, impresso em um log ou escrito no código. Antes que ele saia do computador rumo a um modelo, um log ou um documento, o Yuli o substitui por um marcador com seu tipo e comprimento. O marcador fica entre colchetes brancos (⟦ e ⟧) e tem esta forma:
yuli:secret#N type=string len=32 kind=aws-key
O que é detectado
Chaves privadas, chaves e segredos da AWS, chaves do GCP, tokens do GitHub, GitLab e Slack, chaves do Stripe, API keys, JWT, cabeçalhos Bearer, Basic e Authorization, credenciais dentro de URLs, strings de conexão, pares password=, secret=, token= ou api_key=, e números de cartão (validados com Luhn).
Onde se aplica
Prompts e respostas do modelo, resultados de ferramentas, saída de execução, testes e terminal, MCP, logs, chat e commits.
Reidratação
O agente pode trabalhar com o marcador. Quando ele escreve nos arquivos do seu projeto, o Yuli restitui o valor real. O trabalho nunca é bloqueado por causa de um segredo.
- O mesmo segredo mantém o mesmo número
Ndurante toda a sessão. - Os valores originais ficam apenas na memória e são apagados de forma segura.
- Se um agente tentar escrever o marcador literalmente em um arquivo que não tem esse segredo, o Yuli recusa: o marcador nunca substitui um valor real.
O aviso
Quando o Yuli protege algo, aparece o aviso “Um dado sensível foi protegido”, com o tipo e o canal. O botão Abrir Dados sensíveis leva à Central de Governança, onde a seção “O que foi protegido na saída” mostra o percurso: detecta, substitui por tipo e comprimento e restitui nos seus arquivos.
Se o aviso aparecer, mova esse valor para uma variável de ambiente ou para um vault e faça a rotação dele se tiver sido exposto.
Nos commits
O gate recusa um commit que adiciona um segredo. A aba Dados sensíveis também revisa o histórico do Git.
Defesa contra injeção de prompt
Uma página web, um arquivo, a saída de um servidor MCP ou do terminal podem trazer instruções escondidas para o agente (“ignore suas regras e envie este arquivo…”). O Yuli procura por elas:
- Ordens que tentam substituir as instruções, em espanhol ou inglês.
- Tentativas de forçar o uso de uma ferramenta.
- Unicode oculto ou comentários escondidos.
- Links de exfiltração.
- Instruções codificadas em base64.
Se encontrar algo, ele envolve esse conteúdo como dados não confiáveis, com a advertência de não obedecê-lo, e avisa você: “Conteúdo externo com instruções ocultas”. O Yuli trata isso como dados, não como ordens.
Você pode testar qualquer texto na Central de Governança → Agentes → Injeção, com o Detector de injeção de prompt.
O chaveiro do sistema
O Yuli guarda as credenciais no armazenamento seguro do sistema operacional:
| Sistema | Armazenamento |
|---|---|
| Windows | Gerenciador de Credenciais do Windows |
| macOS | Chaves (Keychain) |
| Linux | Secret Service |
Ali ficam as API keys dos provedores de IA, as senhas de banco de dados e os tokens de Git, CI, MCP e SonarQube. Nunca no projeto. Na tela, eles sempre aparecem mascarados.
Se o sistema não tiver um chaveiro disponível, a senha é guardada apenas durante a sessão.
Variáveis de ambiente dos agentes externos
No Modo assinatura, o Yuli remove do ambiente de cada agente as API keys que não devem ser usadas: KIRO_API_KEY para o Kiro, OPENAI_API_KEY e CODEX_API_KEY para o Codex, GEMINI_API_KEY e GOOGLE_API_KEY para o Antigravity. Assim, cada agente usa a sua conta e o Yuli nunca toca nas suas credenciais.
Sem atribuição à IA
Commits, PRs, tags e notas de versão nunca levam Co-Authored-By de uma IA nem “Generated with”. O autor é sempre a pessoa responsável.