scopuli: um cofre de secrets para os meus agentes de IA
Como eu simplifiquei o compartilhamento de secrets e variaveis de ambiente entre meus agentes de IA
- publicado
- leitura
- ~3 min
Ultimamente estava sofrendo muito com variaveis de ambiente e secrets compartilhados entre meus agentes.
Tinha vários .env espalhados em vários projetos, em vários hosts, em vários containers. Vez ou outra tinha que rotacionar um secret, por exemplo do cloudflare ou uma key qualquer e só ia lembrar de reconfigurar onde precisava quando um fluxo parava de funcionar.
Admito que meu setup é complexo e bagunçado por minha própria culpa e responsabilidade, mas eu gastei algumas horas esses dias e bolei uma solucao que me atende 100%.
Se você também tem uma coleção de agentes e uma coleção ainda maior de .env espalhados, talvez resolva sua vida também.
A ideia é simples: um cofre self-hosted, único dono (eu), onde guardo todos os secrets e emito chaves de acesso com escopo para cada agente. Cada agente só enxerga os secrets que combinam com o escopo da chave dele, e eu posso revogar qualquer chave a qualquer momento.
O resultado foi o scopuli: um binário único em Go que é ao mesmo tempo CLI, daemon e servidor MCP, com um banco SQLite criptografado via SQLCipher. Rodei no meu Proxmox, num container Docker, e pronto.
O fluxo no dia a dia ficou assim:
- Eu crio os secrets pela CLI, organizados em paths tipo
cloudflare/prod/api_token. - Para cada agente, emito uma chave com escopo em glob (
cloudflare/*, por exemplo) e permissão de leitura. - O agente busca o secret quando precisa, via CLI ou como ferramenta MCP — que é como a maioria dos meus agentes consome.
- Se eu rotacionar um secret, atualizo em um lugar só e todos os agentes passam a pegar o valor novo. Sem caça aos
.env.
Outro detalhe que eu gosto bastante: secrets e chaves aceitam descrição em Markdown, tags e metadados estruturados, tudo indexado em busca full-text. Isso parece frescura, mas faz diferença — o agente entende o contexto do secret antes de pedir o valor, e eu também entendo daqui a seis meses quando não lembrar mais para que servia aquela key.
E sim, mais uma vez foi vibe coding na veia: arquitetura, threat model, código, testes e documentação foram produzidos por agentes de IA sob minha direção e revisão. Dessa vez o desafio maior não foi notarização (graças), mas sim fechar o modelo de segurança direito — o que cada chave pode ver, como o token de operador é gerado no primeiro boot, como o audit log prova que ninguém adulterou nada.
No final, a coleção de .env virou um cofre só, com uma senha mestra que só eu conheço. Meu objetivo foi cumprido e, de quebra, ainda me diverti escrevendo o modelo de ameaças.
Algumas informações extras:
Repositório: https://github.com/lucaspdude/scopuli
Documentação: https://lucaspdude.github.io/scopuli/
Modelo de segurança: https://lucaspdude.github.io/scopuli/security/
Para quem quiser fuçar, é 100% open source e livre.