EnigmAgent MCP

Cofre local criptografado com AES-256-GCM + Argon2id que resolve segredos {{PLACEHOLDER}} para credenciais de agentes de IA.

Documentação

EnigmAgent

npm version npm downloads License: MIT Crypto Glama MCP GitHub stars OpenCLAW-P2P

Integrações: n8n-nodes-enigmagent · langchain-enigmagent · llama-index-tools-enigmagent · crewai-tools-enigmagent · 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çãoO que acontece
Colar o segredo no chatEle acaba nos logs do provedor de IA, na janela de contexto, possivelmente nos dados de treinamento
Dar ao agente um token de longa duraçãoO agente pode agir com permissões totais, em qualquer sessão futura
Não usar agentes para tarefas sensíveisVocê 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

  1. Baixe o ZIP da versão mais recente e descompacte-o.
  2. Vá para chrome://extensions e ative o Modo do desenvolvedor (alternância no canto superior direito).
  3. Clique em Carregar sem compactação e selecione a pasta extension/.

Firefox

  1. Vá para about:debugging#/runtime/this-firefox.
  2. Clique em Carregar complemento temporário…
  3. 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

SintaxeResolve 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

CamadaImplementação
Derivação de chave por senhaArgon2id (m=64 MiB, t=3, p=1) — @noble/hashes@1.4.0, incluído, reproduzível
Criptografia de segredosAES-256-GCM, nonce de 96 bits por entrada
Material de chaveVive apenas na memória do processo — nunca gravado em disco
Vinculação de usuárioNome de usuário misturado no contexto do Argon2id: mesma senha + usuário diferente = chave diferente
Aplicação de domínioCada segredo é fixado a um domínio; o resolvedor recusa origens incompatíveis
Entrega ao siteSetter nativo de value + eventos input/change — nunca área de transferência, nunca console
Armazenamento do cofreArquivo 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 / BitwardenArquivos .envEnigmAgent
Usuário-alvoHumanos fazendo loginDesenvolvedores evitando segredos codificadosAgentes de IA agindo em nome de humanos
Problema centralPreencher logins para humanosManter segredos fora do controle de versãoManter segredos fora das janelas de contexto e logs de IA
Em repousoCriptografado (nuvem)Texto simplesCriptografado (arquivo local)
Visível ao contexto do LLMSim (quando o humano cola)Sim (quando o agente lê .env)Nunca
Vinculação de domínioDica de URL por itemNenhumaAplicada
Sincronização em nuvemSimN/ANã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)

AbordagemSegredo 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
EnigmAgentNãoNãoPor 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.

ComponenteFunçãoLink
OpenCLAW-P2PProtocolo central · Provas Lean 4 · Artigosgithub.com/Agnuxo1/OpenCLAW-P2P
BenchClawBenchmarking de agentes com 17 avaliadoresgithub.com/Agnuxo1/benchclaw
EnigmAgentCofre criptografado local para credenciaisgithub.com/Agnuxo1/EnigmAgent
AgentBootInstalador de SO bare-metalgithub.com/Agnuxo1/AgentBoot
CAJALLLM de pesquisa de 4B para artigoshuggingface.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.