SECRETOS LOCALES · CLAUDE CODE · MACOS · LINUX · WINDOWS
Que Claude use tus secretos,
no los
vea.
MCP-nativo. Local-first. Cero telemetría. Cripto Apache-2.0.
@tu/clsec — ~/.clsec
# Claude generates this in the conversation: $ curl -H "Authorization: Bearer {{GITHUB_TOKEN}}" api.github.com/user # PreToolUse hook rewrites to (transcript keeps the placeholder): $ clsec-exec -- curl -H "Authorization: Bearer {{GITHUB_TOKEN}}" api.github.com/user # stdout returned to Claude (scrubbed): {"login":"octocat","id":42,"public_repos":17}
# MCP tools exposed to the model: → secret_list list all stored names → secret_describe metadata only — no value → secret_rotate prompt user, encrypt new → secret_tag organize without revealing → secret_audit_log read who accessed what # Tools the MCP server cannot expose — by API shape: ✗ secret_reveal does not exist ✗ secret_read does not exist ✗ secret_export_plaintext does not exist
# clsec audit --since 1h 2026-05-18T20:14:03Z resolve GITHUB_TOKEN caller=clsec-exec child=curl exit=0 2026-05-18T20:14:51Z resolve VERCEL_TOKEN caller=clsec-exec child=vercel exit=0 2026-05-18T20:17:22Z denied GITHUB_TOKEN caller=mcp reason=role_forbidden 2026-05-18T20:19:08Z rotate OPENAI_API_KEY caller=cli old=superseded 2026-05-18T20:21:44Z resolve SLACK_WEBHOOK caller=clsec-exec child=curl exit=0
curl -fsSL https://claulock.com/install.sh | sh macOS 13+ · Apple Silicon / Intel · verifica minisign + cosign antes de extraer
curl -fsSL https://claulock.com/install.sh | sh Linux arm64 / x86_64 · glibc 2.31+ · misma verificación de firmas
irm https://claulock.com/install.ps1 | iex Windows 10 1803+ · arm64 / x86_64 · binarios bajo %LOCALAPPDATA%\ClauLock\bin
v0.6.0 arrastrar a Aplicaciones · wizard automático · menu-bar + Dock Novedades →
- Superficies de fuga enumeradas
- 5 superficies de fuga
- Llamadas de red del daemon
- 0 llamadas de telemetría
- Plataformas soportadas
- 3 plataformas
- Licencia de la cripto
- Apache-2.0 cripto core
FUNCIONA CON
- Claude Code (MCP + shell hooks)
- Cursor (MCP)
- Continue (MCP)
- Zed (MCP)
- Codex CLI (shell hooks)
- Aider (shell hooks)
Cualquier cosa que hable MCP o shell hooks. ¿Falta un cliente? Abre un issue.
QUÉ ES CLAULOCK
Un socket local entre Claude y tus secretos.
Cinco garantías que se sostienen por la forma del sistema, no por promesa.
- Invariante never-reveal. La superficie MCP no expone ninguna herramienta que devuelva texto plano. La exfiltración no es improbable — es estructuralmente imposible por forma de la API.
- MCP-nativo. Drop-in para Claude Code, Cursor, Continue — cualquier cosa que hable MCP. Un install registra el servidor, los hooks y el daemon.
- Local-first. Daemon + socket Unix + ~/.clsec/vault.clsec en tu máquina. Sin cuenta cloud, sin telemetría, sin servidor de updates que llame a casa.
- Cripto auditable. XChaCha20-Poly1305 + Argon2id (256 MiB, t=3, p=4), AAD-bound por registro. Apache-2.0 para que los auditores lean el código primero.
- Binarios firmados. macOS notarizado, Linux + Windows minisign + cosign con builds reproducibles y un SBOM CycloneDX en cada release.
CÓMO FUNCIONA
Tres hooks, un socket, cero fugas.
El invariante — Claude referencia un secreto por nombre, nunca por valor — se aplica en tres capas. Las tres tienen que sostenerse. Probamos el invariante en CI en cada push.
PASO 1 — HOOK PRETOOLUSE
Reescribe el comando antes de que corra.
# Claude genera este comando:
curl -H "Authorization: Bearer {{GITHUB_TOKEN}}" api.github.com/user
# El hook PreToolUse lo reescribe a:
clsec-exec -- curl -H "Authorization: Bearer {{GITHUB_TOKEN}}" api.github.com/user
El placeholder se queda en el transcript de Claude. El texto plano lo busca out-of-band clsec-exec y lo sustituye en fork/exec — sólo el proceso hijo lo ve.
PASO 2 — SERVIDOR MCP
Listar, describir, rotar. Nunca revelar.
# Tools que el servidor MCP expone:
secret_list secret_describe secret_rotate secret_tag secret_audit_log
# Tools que no existen (por forma de API — no removidas, nunca construidas):
secret_reveal secret_read secret_export_plaintext
El servidor MCP corre bajo rol Mcp. En la capa IPC, el daemon bloquea al rol Mcp de llamar Method::Resolve. Un binario MCP comprometido sigue sin poder pedir un valor.
PASO 3 — SCRUBBER POSTTOOLUSE
Redacta cualquier cosa que se filtre a stdout.
# Output crudo de un curl que imprimió el token:
Authenticated as octocat (token: ghp_live_AbCd1234EfGh5678…)
# Scrubbed antes de que el tool result vuelva a Claude:
Authenticated as octocat (token: [REDACTED:GITHUB_TOKEN])
Escaneo Aho-Corasick sobre stdout buscando cualquier valor resuelto durante la llamada. Las variantes base64, percent-encoded y hex se precomputan — fugas a través de JSON, URLs y debug traces se capturan automáticamente.
SERVIDOR MCP
ClauLock habla MCP nativamente.
ClauLock incluye un servidor MCP para que Claude pueda listar, describir y rotar tus secretos — pero nunca leer su texto plano. Lo agregas a tu claude_desktop_config.json y tus clientes MCP existentes lo levantan automáticamente. El comando clsec install lo hace por ti en las plataformas soportadas.
// ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"claulock": {
"command": "clsec-mcp",
"args": []
}
}
} El servidor corre bajo rol Mcp y tiene prohibido Resolve a nivel del daemon. Expone secret_list, secret_describe, secret_rotate, secret_tag, secret_audit_log — y nada más.
Lo que filtra cada atajo, de verdad
Adónde van realmente tus secretos
Cinco patrones comunes, cuatro superficies de fuga. Las casillas en rojo son las que ya no puedes repintar después.
| Patrón | En el transcript de Claude | En el historial del shell | En la ventana de contexto del modelo | Reversible después |
|---|---|---|---|---|
| Pegar en el chat | Sí — literal | No | Sí | No |
| export VAR=… | A veces | Sí | Si Claude lee env | Limpieza manual |
| Archivo .env | Si Claude lo lee | No | Si Claude lo lee | Borrado manual |
| Vault / 1Password CLI | Si se exporta | No | Si se exporta | Rotación |
| ClauLock | Solo el placeholder | No | Solo el placeholder | clsec rotate |
El problema no es dónde guardas el secreto. Es el instante en que cruza al campo de visión del modelo. ClauLock hace ese cruce opcional.
Qué ve Claude vs qué se ejecuta
El mismo comando, cinco capas. El texto plano aparece en exactamente una
línea — dentro del proceso hijo que realmente lo necesita, durante la
vida de ese único execve.
| Capa | Contenido |
|---|---|
| Transcript de Claude | curl -H "Authorization: Bearer {{GITHUB_TOKEN}}" api.github.com/user |
| Llamada de la tool Bash | curl -H "Authorization: Bearer {{GITHUB_TOKEN}}" api.github.com/user |
| Tras el hook PreToolUse | clsec-exec -- curl -H "Authorization: Bearer {{GITHUB_TOKEN}}" … |
| Dentro de clsec-exec (sólo argv del hijo) | curl -H "Authorization: Bearer ghp_live_…" api.github.com/user |
| stdout devuelto a Claude | {"login":"octocat",…} (scrubbeado) |
Sólo la cuarta línea contiene el valor real. Mira en qué se diferencia de Vault, Composio, Doppler y .env.
QUIERO QUE CLAUDE…
Todos los workflows que ya le diste a Claude, de forma segura
Estas son las credenciales que silenciosamente se acumulan en tus transcripts hoy. Con ClauLock, cada una se convierte en un placeholder que Claude puede referenciar pero no leer.
- haga commits a mi repo privado.
GITHUB_TOKENClaude llama `git push` con `Authorization: Bearer {{GITHUB_TOKEN}}`. El token no aparece en el diff, el mensaje, ni el transcript. - haga deploy a Vercel.
VERCEL_TOKEN`vercel deploy --token {{VERCEL_TOKEN}}` corre dentro de `clsec-exec`. El modelo ve el placeholder, el deploy ve el valor real, el audit log ve ambos eventos. - corra una migración de Supabase.
DATABASE_URL · SUPABASE_SERVICE_KEYDos secretos, un popup cada uno — solo la primera vez. Después, `clsec migrate up` funciona en cada sesión sin volver a preguntar. - haga fine-tuning de un modelo OpenAI.
OPENAI_API_KEYEl error de pegar-y-olvidar más caro. ClauLock guarda la key en tu vault local; el uso aparece en `clsec audit` con bytes y exit codes. - envíe un mensaje en Slack al equipo.
SLACK_WEBHOOK_URLClaude postea release notes via `curl -d ... {{SLACK_WEBHOOK}}`. El webhook nunca queda en ninguna ventana de Claude — pasada, presente, futura. - rote keys cuando algo se sienta raro.
cualquier nombre`clsec rotate {{NAME}}` te re-pregunta, cifra el valor nuevo, y marca el anterior como superseded en el audit log. Sin grep por history.
Visibilidad total
Cada vez que Claude tocó tus tokens
Escrito localmente, legible localmente. Cadena hash tamper-evident — una herramienta comprometida no puede editar la historia silenciosamente. Corre `clsec audit --since 24h` cuando quieras una copia.
read = secreto resuelto en un proceso hijo · revealed-blocked = el scrubber atrapó un intento de leak · rotated = reemplazaste el valor
Por qué existe
Claude Code puede ejecutar comandos de shell. Ese es el punto. Pero
las formas usuales de darle credenciales — variables de entorno,
archivos .env, pegar un token en el
chat — terminan todas con el texto plano en un transcript o un log.
✗ export GITHUB_TOKEN=ghp_Ab12...
→ valor cae en el historial del shell, env, y cada output de tool
✗ "Aquí está mi token: ghp_Ab12..." → valor cae en el contexto del modelo y en el transcript
✓ curl -H "Authorization: Bearer {{GITHUB_TOKEN}}" ... → ClauLock resuelve en fork/exec. El transcript conserva el placeholder.
Founders — Apoyo pre-1.0
Ayuda a shipear 1.0. Sé Founder.
$49 única vez → 2 años de Pro ($98 de valor). Pagas un año, el segundo va por mi cuenta. Tu nombre en el repo público, acceso anticipado a funciones Pro y un voto en el roadmap. 2.500 plazas — cierra cuando v1.0 salga.
$49 — ahorras $49 vs. Pro a $49/año tras el launch
Pruébalo en cinco minutos.
Un comando instala el daemon, el servidor MCP y los hooks de Claude Code. Gratis para siempre para individuos — Pro activa sync y breach detection.
curl -fsSL https://claulock.com/install.sh | sh