Haldir
Identidad, secretos y auditoría para agentes de IA. El modo proxy intercepta cada llamada de herramienta MCP.
Documentación
Haldir — La capa de protección para agentes de IA
La capa de gobernanza de código abierto para agentes de IA. Identidad, secretos, auditoría y aplicación de políticas — con licencia MIT, autoalojable o mediante nuestra nube.
Haldir aplica gobernanza en cada llamada de herramienta de un agente de IA: sesiones con alcance y límites de gasto, secretos cifrados que el modelo nunca ve, registro de auditoría encadenado con hash a prueba de manipulación, aprobaciones con intervención humana y un proxy que intercepta cada llamada MCP antes de que llegue a tus herramientas. SDKs nativos para LangChain, CrewAI, AutoGen y Vercel AI SDK.
CLI
$ haldir overview
Haldir tenant overview
acct_xyz123 · tier pro · 2026-04-19T18:42:11+00:00
Status ● ok
Actions 4,217 / 50,000 ████░░░░░░░░░░░░░░░░ 8.4%
Spend $ 47.30 this month
Sessions 12 active · 3/10 agents
Vault 8 secrets · 62 accesses this month
Audit 1,847 entries · 0 flagged (7d) · chain ✓
Webhooks 2 registered · 541 deliveries (24h) · 99.82% success
Approvals 1 pending
Instala una vez y gestiona toda la plataforma desde la terminal:
pip install haldir
haldir login # one-time; stashes API key
haldir overview --watch # top-style live dashboard
haldir status # green/yellow/red component pills
haldir ready # exits 0/1, perfect for CI
haldir audit tail --agent my-bot # the last N entries
haldir audit export --format=jsonl --out audit-2026-04.jsonl
haldir audit verify # hash chain integrity check
haldir webhooks deliveries # last 20 retry attempts
haldir migrate up # apply pending schema migrations
Cada comando acepta --json para scripts. haldir --help para la superficie completa.
Dos formas de ejecutar Haldir
| Autoalojado | Nube (haldir.xyz) | |
|---|---|---|
| Precio | Gratis para siempre | Plan gratuito + planes de pago |
| Funciones | Todo | Todo — misma API, mismos SDKs |
| Tú ejecutas | API + Postgres | Nada |
| Ideal para | Industrias reguladas, entornos aislados, "debemos poseer los datos" | "Solo haz que funcione" |
Autoalojamiento en 5 minutos
git clone https://github.com/ExposureGuard/haldir.git
cd haldir
cp .env.example .env
python3 -c 'import base64, os; print(base64.urlsafe_b64encode(os.urandom(32)).decode())'
# paste the output into .env as HALDIR_ENCRYPTION_KEY, then:
docker compose up -d
curl http://localhost:8000/health
Guía completa de autoalojamiento: SELF_HOSTING.md
O usa nuestra nube
pip install haldir
Eso es todo — apunta a https://haldir.xyz, sin registro, API en vivo.
Disponible ahora: haldir.xyz · Documentación de API · Especificación OpenAPI · Smithery
🧪 Aceptando 5 socios de diseño. 30 días gratis, acceso completo, línea directa con el fundador. Si estás lanzando agentes de IA a producción, escribe a sterling@haldir.xyz.
Rendimiento
Haldir es lo suficientemente rápido para estar en la ruta crítica de cada llamada de herramienta de un agente sin convertirse en el cuello de botella.
Rendimiento HTTP de un solo servidor (gunicorn 4 workers, 32 clientes concurrentes, backend SQLite optimizado, cada solicitud pasa por la pila completa de middleware — autenticación, validación, idempotencia, métricas, registro estructurado):
| Endpoint | RPS | p50 | p95 | p99 |
|---|---|---|---|---|
GET /healthz | 1,638 | 19.1 ms | 32.5 ms | 41.6 ms |
GET /v1/status | 1,382 | 22.2 ms | 30.8 ms | 45.4 ms |
GET /v1/sessions/:id | 903 | 29.2 ms | 95.5 ms | 172.1 ms |
POST /v1/sessions (crear) | 1,142 | 27.7 ms | 35.2 ms | 39.9 ms |
POST /v1/audit (escritura de cadena de hash) | 1,092 | 28.7 ms | 37.6 ms | 52.6 ms |
Hardware: Intel Core i3-1215U de 12.ª generación (8 núcleos, 8 GB de RAM). SQLite está configurado con WAL + synchronous=NORMAL + mmap de 256 MiB + almacenamiento temporal en memoria — el p99 de búsqueda de sesión bajó un 52 % frente a la ruta sin optimizar. Las implementaciones con Postgres (pool configurable mediante HALDIR_PG_POOL_MIN/MAX) reducen aún más el p99; actívalo mediante DATABASE_URL=postgresql://....
Costo de primitivas (Python puro, sin E/S):
| Primitiva | p50 | Notas |
|---|---|---|
Vault.store_secret (cifrado AES-256-GCM + vinculación AAD) | < 10 µs | en memoria, sin escritura en BD |
Vault.get_secret (descifrado AES-256-GCM + verificación AAD) | < 10 µs | en memoria |
AuditEntry.compute_hash (SHA-256 sobre carga útil canónica) | < 10 µs | |
Gate.check_permission vía REST | ~50-120 ms | red + ida y vuelta a BD, con Cloudflare al frente |
Watch.log_action vía REST | ~50-150 ms | incluye búsqueda de cadena + escritura en BD |
| Envoltorio completo de herramienta gobernada (verificación + registro) | ~100-250 ms |
Los agentes normalmente esperan 500-3000 ms por una respuesta del LLM y 100-1000 ms por una llamada a API externa, por lo que la sobrecarga de Haldir queda dentro del ruido. Reproduce localmente:
# Concurrent HTTP throughput (launches a local gunicorn, ~60s total)
python bench/bench_http.py --duration 10 --concurrency 32 --workers 4
# Primitive cost only (no API key needed)
python bench/bench_primitives.py --local
# End-to-end against the hosted service
export HALDIR_API_KEY=hld_...
python bench/bench_primitives.py
Cumplimiento
Un solo endpoint genera un paquete de prueba de control listo para auditoría que cubre ocho secciones, cada una anclada a un criterio de servicio de confianza SOC2:
haldir compliance evidence --since 2026-01-01 --out evidence-q1-2026.md
| # | Sección | SOC2 |
|---|---|---|
| 1 | Identidad (tenant, suscripción, período) | — |
| 2 | Control de acceso (claves API + alcances por clave) | CC6.1 |
| 3 | Cifrado (AES-256-GCM, vinculación AAD) | CC6.7 |
| 4 | Registro de auditoría (recuento de entradas, integridad de cadena de hash) | CC7.2 |
| 5 | Gobernanza de gasto (límites por sesión, registros de pago) | CC5.2 |
| 6 | Aprobaciones humanas (ciclo de vida de solicitud/decisión) | CC8.1 |
| 7 | Alertas salientes (tasa de éxito de entrega de webhooks) | CC7.3 |
| 8 | Firma de documento (auto-hash SHA-256) | — |
El paquete se firma a sí mismo: un SHA-256 sobre el JSON canónico de las secciones 1-7. Un auditor que reciba un paquete archivado puede volver a llamar a /v1/compliance/evidence/manifest y confirmar que el resumen coincide — prueba de que el documento no fue modificado después de su emisión.
JSON para subir al almacén de evidencia, Markdown para el momento de "muestra esto al auditor", ambos desde el mismo endpoint /v1/compliance/evidence.
Por qué Haldir
Los agentes de IA están llamando APIs, gastando dinero y accediendo a credenciales sin supervisión alguna. Haldir es la capa que faltaba:
| Sin Haldir | Con Haldir |
|---|---|
| El agente tiene acceso ilimitado | Sesiones con alcance y permisos |
| Secretos en variables de entorno en texto plano | Bóveda cifrada con AES y control de acceso |
| Sin límites de gasto | Aplicación de presupuesto por sesión |
| Sin registro de lo que ocurrió | Registro de auditoría inmutable |
| Sin supervisión humana | Flujos de aprobación con webhooks |
| El agente habla directamente con las herramientas | El proxy intercepta y aplica políticas |
Inicio rápido
pip install haldir
from sdk.client import HaldirClient
h = HaldirClient(api_key="hld_xxx", base_url="https://haldir.xyz")
# Create a governed agent session
session = h.create_session("my-agent", scopes=["read", "spend:50"])
# Store secrets agents never see directly
h.store_secret("stripe_key", "sk_live_xxx")
# Retrieve with scope enforcement
key = h.get_secret("stripe_key", session_id=session["session_id"])
# Authorize payments against budget
h.authorize_payment(session["session_id"], 29.99)
# Every action is logged
h.log_action(session["session_id"], tool="stripe", action="charge", cost_usd=29.99)
# Revoke when done
h.revoke_session(session["session_id"])
Productos
Gate — Identidad y autenticación de agentes
Sesiones con alcance, permisos, límites de gasto y TTL. Sin sesión = sin acceso.
curl -X POST https://haldir.xyz/v1/sessions \
-H "Authorization: Bearer hld_xxx" \
-H "Content-Type: application/json" \
-d '{"agent_id": "my-bot", "scopes": ["read", "browse", "spend:50"], "ttl": 3600}'
Vault — Secretos cifrados y pagos
Almacenamiento cifrado con AES. Los agentes solicitan acceso; Vault verifica el alcance de la sesión. Autorización de pagos con presupuestos por sesión.
curl -X POST https://haldir.xyz/v1/secrets \
-H "Authorization: Bearer hld_xxx" \
-H "Content-Type: application/json" \
-d '{"name": "api_key", "value": "sk_live_xxx", "scope_required": "read"}'
Watch — Registro de auditoría y cumplimiento
Registro inmutable de cada acción. Detección de anomalías. Seguimiento de costos. Exportaciones de cumplimiento.
curl https://haldir.xyz/v1/audit?agent_id=my-bot \
-H "Authorization: Bearer hld_xxx"
Proxy — Capa de aplicación
Se sitúa entre los agentes y los servidores MCP. Cada llamada de herramienta es interceptada, autorizada y registrada. Admite aplicación de políticas: listas de permitidos, listas de denegados, límites de gasto, límites de tasa, ventanas de tiempo.
# Register an upstream MCP server
curl -X POST https://haldir.xyz/v1/proxy/upstreams \
-H "Authorization: Bearer hld_xxx" \
-H "Content-Type: application/json" \
-d '{"name": "myserver", "url": "https://my-mcp-server.com/mcp"}'
# Call through the proxy — governance enforced
curl -X POST https://haldir.xyz/v1/proxy/call \
-H "Authorization: Bearer hld_xxx" \
-H "Content-Type: application/json" \
-d '{"tool": "scan_domain", "arguments": {"domain": "example.com"}, "session_id": "ses_xxx"}'
Approvals — Intervención humana
Pausa la ejecución del agente para revisión humana. Notificaciones por webhook. Aprueba o deniega desde el panel o la API.
# Require approval for spend over $100
curl -X POST https://haldir.xyz/v1/approvals/rules \
-H "Authorization: Bearer hld_xxx" \
-H "Content-Type: application/json" \
-d '{"type": "spend_over", "threshold": 100}'
Servidor MCP
Haldir está disponible como servidor MCP con 10 herramientas para Claude, Cursor, Windsurf y cualquier IA compatible con MCP:
{
"mcpServers": {
"haldir": {
"command": "haldir-mcp",
"env": {
"HALDIR_API_KEY": "hld_xxx"
}
}
}
}
Herramientas MCP: createSession, getSession, revokeSession, checkPermission, storeSecret, getSecret, authorizePayment, logAction, getAuditTrail, getSpend
Endpoint HTTP MCP: POST https://haldir.xyz/mcp
Arquitectura
Agent (Claude, GPT, Cursor, etc.)
│
▼
┌─────────────────────────────┐
│ Haldir Proxy │ ← Intercepts every tool call
│ Policy enforcement layer │
└──────┬──────────┬───────────┘
│ │
┌────▼────┐ ┌───▼────┐
│ Gate │ │ Watch │
│identity │ │ audit │
│sessions │ │ costs │
└────┬────┘ └────────┘
│
┌────▼────┐
│ Vault │
│secrets │
│payments │
└────┬────┘
│
▼
Upstream MCP Servers
(your actual tools)
Referencia de API
Documentación completa en haldir.xyz/docs
| Endpoint | Método | Descripción |
|---|---|---|
/v1/keys | POST | Crear clave API |
/v1/sessions | POST | Crear sesión de agente |
/v1/sessions/:id | GET | Obtener información de sesión |
/v1/sessions/:id | DELETE | Revocar sesión |
/v1/sessions/:id/check | POST | Verificar permiso |
/v1/secrets | POST | Almacenar secreto |
/v1/secrets/:name | GET | Recuperar secreto |
/v1/secrets | GET | Listar secretos |
/v1/secrets/:name | DELETE | Eliminar secreto |
/v1/payments/authorize | POST | Autorizar pago |
/v1/audit | POST | Registrar acción |
/v1/audit | GET | Consultar registro de auditoría |
/v1/audit/spend | GET | Resumen de gasto |
/v1/approvals/rules | POST | Agregar regla de aprobación |
/v1/approvals/request | POST | Solicitar aprobación |
/v1/approvals/:id | GET | Verificar estado de aprobación |
/v1/approvals/:id/approve | POST | Aprobar |
/v1/approvals/:id/deny | POST | Denegar |
/v1/approvals/pending | GET | Listar pendientes |
/v1/webhooks | POST | Registrar webhook |
/v1/webhooks | GET | Listar webhooks |
/v1/proxy/upstreams | POST | Registrar upstream |
/v1/proxy/tools | GET | Listar herramientas del proxy |
/v1/proxy/call | POST | Llamar a través del proxy |
/v1/proxy/policies | POST | Agregar política |
/v1/usage | GET | Estadísticas de uso |
/v1/metrics | GET | Métricas de plataforma |
Descubrimiento de agentes
Haldir es detectable a través de todos los protocolos principales:
| URL | Protocolo |
|---|---|
haldir.xyz/openapi.json | OpenAPI 3.1 |
haldir.xyz/llms.txt | Documentación legible por LLM |
haldir.xyz/.well-known/ai-plugin.json | Plugins de ChatGPT |
haldir.xyz/.well-known/mcp/server-card.json | Descubrimiento MCP |
haldir.xyz/mcp | MCP JSON-RPC |
smithery.ai/server/haldir/haldir | Registro de Smithery |
pypi.org/project/haldir | PyPI |
Licencia
MIT
Enlaces
- Sitio web: haldir.xyz
- Documentación de API: haldir.xyz/docs
- Smithery: Ver en Smithery
- PyPI: haldir
- OpenAPI: haldir.xyz/openapi.json