EnigmAgent MCP
Cofre local criptografado com AES-256-GCM + Argon2id que resolve segredos {{PLACEHOLDER}} para credenciais de agentes de IA.
Documentação
EnigmAgent
Integrações: ·
·
·
· Claude Desktop · Cursor · Continue.dev · Cline · Open WebUI · mais →
Na semana passada, pedi ao Claude para enviar uma correção para um repositório privado no GitHub. Para isso, o Claude precisava do meu token de acesso pessoal. Eu tinha três opções, e todas eram terríveis: colar o token no chat (e nos logs do provedor para sempre), dar ao agente um token de longa duração que ele pudesse reutilizar sozinho às 3 da manhã, ou desistir e fazer manualmente.
EnigmAgent é a quarta opção.
Seu agente de IA digita {{GITHUB_TOKEN}}. O placeholder sai do modelo e viaja pela conversa, pelos logs, pela janela de contexto — e somente no momento em que sua ferramenta realmente precisa da credencial, o EnigmAgent intercepta a chamada, descriptografa o token real localmente com AES-256-GCM e o injeta. O texto simples existe por apenas um tick do loop de eventos. O modelo nunca o vê. O provedor nunca o vê. O histórico do seu terminal nunca o vê.
npx enigmagent-mcp --vault ./my.vault.json
Essa é a instalação completa para Claude Desktop, Cursor, Continue.dev, Cline, Open WebUI, AnythingLLM e LM Studio. Uma extensão de navegador separada cobre tudo o que vive em uma aba.
⭐ Dê uma estrela neste repositório se você já colou um token que se arrependeu.
Configuração do Claude Desktop em 30 segundos
Adicione isto a ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) ou %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"enigmagent": {
"command": "npx",
"args": ["-y", "enigmagent-mcp", "--vault", "/absolute/path/to/my.vault.json"]
}
}
}
Reinicie o Claude Desktop. Duas novas ferramentas aparecem: enigmagent_resolve e enigmagent_list. Agora peça ao Claude:
"Liste minhas entradas do cofre e depois chame minha API do GitHub com
{{GITHUB_TOKEN}}no cabeçalho Authorization."
O token real nunca entra na conversa. O mesmo padrão funciona para Cursor e Continue.dev abaixo.
O problema (em detalhes)
Quando você usa um agente de IA — Claude, ChatGPT, Cursor, uma ferramenta de automação de navegador — para fazer algo que exige credenciais, você enfrenta uma escolha impossível:
| Opção | O que acontece |
|---|---|
| Colar o segredo no chat | Ele acaba nos logs do provedor de IA, na janela de contexto, possivelmente nos dados de treinamento |
| Dar ao agente um token de longa duração | O agente pode agir com permissões totais, em qualquer sessão futura |
| Não usar agentes para tarefas sensíveis | Você perde a maior parte do valor |
EnigmAgent é a opção D. O agente apenas digita {{GITHUB_TOKEN}}. O valor real nunca aparece na conversa, nos logs ou na memória do agente.
Como funciona
┌─────────────────┐ types {{GITHUB_TOKEN}} ┌────────────────────┐
│ LLM / Agent │ ──────────────────────────▶ │ Tool call / Form │
│ (any provider) │ │ (github.com / …) │
└─────────────────┘ └─────────┬──────────┘
│ submit / call (intercepted)
▼
┌───────────────────────┐
│ EnigmAgent │
│ detects placeholder, │
│ checks domain match, │
│ decrypts → ghp_xxx │
└───────────┬───────────┘
│ real value
▼
┌───────────────────────┐
│ Request reissued │
│ with real credential │
└───────────────────────┘
O valor em texto simples existe na memória por aproximadamente um tick do loop de eventos. Ele nunca é copiado para a área de transferência, nunca é registrado e nunca é visível para qualquer outra aba, script ou contexto de LLM.
Caminhos de instalação
Servidor MCP (recomendado para agentes de IA)
npx enigmagent-mcp --vault ./my.vault.json # MCP stdio for Claude/Cursor/etc.
npx enigmagent-mcp --mode rest --port 3737 # local REST API for custom integrations
Defina as variáveis de ambiente ENIGMAGENT_USER + ENIGMAGENT_PASS para pular o prompt interativo de desbloqueio (modo CI/headless).
Extensão de navegador (para credenciais em formulários web)
Chrome / Edge / Brave
- Baixe o ZIP da versão mais recente e descompacte-o.
- Vá para
chrome://extensionse ative o Modo do desenvolvedor (alternância no canto superior direito). - Clique em Carregar sem compactação e selecione a pasta
extension/.
Firefox
- Vá para
about:debugging#/runtime/this-firefox. - Clique em Carregar complemento temporário…
- Selecione
extension/manifest.json.
Versões assinadas para Chrome Web Store, Firefox AMO, Edge Add-ons e Opera estão em andamento.
Configuração por cliente
Claude Desktop
Veja a configuração de 30 segundos acima.
Cursor
Adicione a ~/.cursor/mcp.json:
{
"mcpServers": {
"enigmagent": {
"command": "npx",
"args": ["-y", "enigmagent-mcp", "--vault", "/abs/path/my.vault.json"]
}
}
}
Continue.dev
Em ~/.continue/config.yaml:
mcpServers:
- name: enigmagent
command: npx
args: ["-y", "enigmagent-mcp", "--vault", "/abs/path/my.vault.json"]
Cline (VS Code)
Edite cline_mcp_settings.json:
{
"mcpServers": {
"enigmagent": {
"command": "npx",
"args": ["-y", "enigmagent-mcp", "--vault", "/abs/path/my.vault.json"]
}
}
}
Open WebUI
Use mcpo como ponte:
mcpo --port 8000 -- npx enigmagent-mcp --vault /abs/path/my.vault.json
Casos de uso reais
Agentes baseados em navegador
Diga ao seu agente: "Quando precisar autenticar no GitHub, digite {{GITHUB_TOKEN}} e envie. Não me pergunte pelo valor real."
O agente digita o placeholder. O EnigmAgent intercepta, resolve no domínio vinculado, injeta e reenvia. Um pequeno selo mostra: ✓ enviado com valores reais.
Injeção de documentos ({{DOC:filename}})
Envie um arquivo Markdown como segredo de documento. Referencie-o como {{DOC:system-prompt.md}} em qualquer campo de texto no domínio vinculado. Seu agente pode incorporar seu prompt de sistema completo sem que ele apareça no chat.
Placeholders de dados pessoais
add NIF @agenciatributaria.gob.es 12345678A
add IBAN @banca.example.com ES9121000418450200051332
Qualquer nome personalizado funciona. A vinculação de domínio é aplicada em todos os lugares.
Referência de sintaxe de placeholder
| Sintaxe | Resolve para |
|---|---|
{{GITHUB_TOKEN}} | Segredo chamado GITHUB_TOKEN, somente no domínio vinculado |
{{LOGIN:github.com}} | Primeiro segredo vinculado a github.com |
{{DOC:report.md}} | Conteúdo do documento armazenado DOC_report.md |
{{NIF}} | Placeholder de dados pessoais — qualquer nome personalizado funciona |
Gramática de nomes: [A-Za-z0-9_:\-.@]+ — sem diferenciar maiúsculas de minúsculas.
Modelo de segurança
| Camada | Implementação |
|---|---|
| Derivação de chave por senha | Argon2id (m=64 MiB, t=3, p=1) — @noble/hashes@1.4.0, incluído, reproduzível |
| Criptografia de segredos | AES-256-GCM, nonce de 96 bits por entrada |
| Material de chave | Vive apenas na memória do processo — nunca gravado em disco |
| Vinculação de usuário | Nome de usuário misturado no contexto do Argon2id: mesma senha + usuário diferente = chave diferente |
| Aplicação de domínio | Cada segredo é fixado a um domínio; o resolvedor recusa origens incompatíveis |
| Entrega ao site | Setter nativo de value + eventos input/change — nunca área de transferência, nunca console |
| Armazenamento do cofre | Arquivo criptografado em disco, texto simples nunca persistido |
Modelo de ameaça completo: docs/THREAT_MODEL.md. O que ele NÃO protege contra:
- Um processo comprometido na sua máquina lendo a memória da sessão desbloqueada
- Um servidor MCP malicioso ao qual você se conectou com permissão para chamar
enigmagent_resolve - Canais laterais (timing, swap, core dumps) — fora do escopo para v0.x
EnigmAgent vs. 1Password / Bitwarden / .env
| 1Password / Bitwarden | Arquivos .env | EnigmAgent | |
|---|---|---|---|
| Usuário-alvo | Humanos fazendo login | Desenvolvedores evitando segredos codificados | Agentes de IA agindo em nome de humanos |
| Problema central | Preencher logins para humanos | Manter segredos fora do controle de versão | Manter segredos fora das janelas de contexto e logs de IA |
| Em repouso | Criptografado (nuvem) | Texto simples | Criptografado (arquivo local) |
| Visível ao contexto do LLM | Sim (quando o humano cola) | Sim (quando o agente lê .env) | Nunca |
| Vinculação de domínio | Dica de URL por item | Nenhuma | Aplicada |
| Sincronização em nuvem | Sim | N/A | Não — somente local por design |
Use 1Password ou Bitwarden para seus próprios logins. Use .env para sua abreviação de desenvolvimento local. Use EnigmAgent para as credenciais que seus agentes de IA precisam para agir em seu nome.
Por que construí isto
EnigmAgent faz parte do ecossistema OpenCLAW / P2PCLAW de ferramentas locais de IA que preservam a privacidade — uma rede de pesquisa científica multiagente onde dezenas de agentes LLM coordenam, avaliam uns aos outros e publicam artigos. Cada um desses agentes precisa de credenciais. Nenhum deles deveria tê-las.
Essa é a declaração completa do problema. O cofre é apenas a menor solução viável.
— Francisco Angulo de Lafuente
Estrutura do repositório
EnigmAgent/
├── extension/ Chrome/Firefox extension (MV3)
├── platforms/firefox-ext/ Firefox manifest variant
├── build-tool/ Reproducible build (esbuild + icon generator)
├── docs/ ARCHITECTURE.md, THREAT_MODEL.md
│ └── papers/ Background research papers (PDF)
├── examples/ Placeholder schemas
├── tests/ Smoke tests + crypto round-trip
├── glama.json Glama MCP server manifest
├── smithery.yaml Smithery server descriptor
├── PRIVACY.md
├── SECURITY.md Responsible disclosure
└── README.md
O código-fonte do servidor Node/MCP está no repositório irmão: Agnuxo1/enigmagent-mcp.
Reproduzindo a compilação da extensão
cd build-tool
npm ci
npx esbuild argon2-entry.js \
--bundle --minify --format=iife --target=es2020 \
--outfile=../extension/lib/argon2id.js
python make-icons.py
package.json e package-lock.json fixam @noble/hashes@1.4.0. A saída é reproduzível byte a byte — verifique com sha256sum extension/lib/argon2id.js.
Por que não usar apenas arquivos .env? (Comparação)
| Abordagem | Segredo no prompt? | Segredo nos logs? | Vinculação por domínio? | Funciona em CI? |
|---|---|---|---|---|
.env / variáveis de ambiente | ✅ Não (mas o agente pode lê-los) | ✅ Não | ❌ Global | ✅ Sim |
| Colar no chat | ❌ Sim — permanente | ❌ Sim — permanente | — | — |
| CLI do 1Password | ✅ Não | ✅ Não | ❌ Todo o cofre | ✅ Sim |
| Doppler / HashiCorp Vault | ✅ Não | ✅ Não | ❌ Namespace global | ✅ Sim |
| EnigmAgent | ✅ Não | ✅ Não | ✅ Por segredo | ✅ Sim |
EnigmAgent é a única opção que combina criptografia local-first, vinculação de domínio por segredo e zero texto simples no contexto. O arquivo do cofre nunca sai da sua máquina.
Licença
MIT — veja LICENSE.
Construído por
Francisco Angulo de Lafuente — pesquisador e desenvolvedor independente. Mais de 35 anos em software. Também construindo P2PCLAW (rede de ciência descentralizada), BenchClaw (avaliação de agentes) e PaperClaw (publicação autônoma de pesquisa).
Se esta ferramenta for útil para você:
- ⭐ Dê uma estrela no repositório — é assim que o ecossistema de IA descobre ferramentas
- 🐛 Abra uma issue — cada caso de uso real aprimora o modelo de ameaça
- 📣 Conte para uma pessoa que ainda cola chaves de API no Claude
🧩 Ecossistema P2PCLAW
Este projeto faz parte do P2PCLAW — uma rede de pesquisa de IA distribuída com benchmarking de nível de produção, ferramentas para agentes e distribuição de modelos.
| Componente | Função | Link |
|---|---|---|
| OpenCLAW-P2P | Protocolo central · Provas Lean 4 · Artigos | github.com/Agnuxo1/OpenCLAW-P2P |
| BenchClaw | Benchmarking de agentes com 17 avaliadores | github.com/Agnuxo1/benchclaw |
| EnigmAgent | Cofre criptografado local para credenciais | github.com/Agnuxo1/EnigmAgent |
| AgentBoot | Instalador de SO bare-metal | github.com/Agnuxo1/AgentBoot |
| CAJAL | LLM de pesquisa de 4B para artigos | huggingface.co/Agnuxo/CAJAL-4B-P2PCLAW |
🌐 Site principal: https://www.p2pclaw.com/ 📄 Artigo: arXiv:2604.19792
💝 Suporte
Se esta ferramenta for útil para você:
- ⭐ Dê uma estrela no repositório — é assim que o ecossistema descobre ferramentas
- 🐛 Abra uma issue — cada caso de uso real aprimora o projeto
- 💰 Patrocine: github.com/sponsors/Agnuxo1
Construído por Francisco Angulo de Lafuente — pesquisador independente com mais de 35 anos em software.