Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
wardn — aislamiento de credenciales para agentes de IA. Los agentes nunca ven claves API reales - garantía estructural, no política. | Kitploit
Herramientas/GitHubGitHub/rohansx/wardn
Autenticación y AutorizaciónHerramientas de Cifrado/DescifradoSeguridad en la NubeDevSecOpsUtilidades y FrameworksDetección de SecretosGestión de Identidad y Acceso (IAM)Seguridad de Cadena de SuministroSeguridad de APIs
GitHubrohansx/wardn

wardn

aislamiento de credenciales para agentes de IA. Los agentes nunca ven claves API reales - garantía estructural, no política.

363hace 1 mesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver Repositorio

wardn

Un firewall de credenciales para agentes de IA.

La afirmación principal es estructural, no política: los agentes reciben tokens de relleno, nunca claves de API reales. La clave real cruza solo una costura de red — dentro del proxy wardn, en su camino hacia la API ascendente — y se elimina de las respuestas antes de que lleguen al agente. Los registros, el entorno, las ventanas de contexto de LLM, los archivos temporales y el historial del shell solo contienen rellenos.```text agent process OPENAI_KEY=wdn_placeholder_a1b2c3d4e5f6g7h8 (useless) agent logs Authorization: Bearer wdn_placeholder_a1b2... (useless) LLM context wdn_placeholder_a1b2c3d4e5f6g7h8 (useless) wardn proxy injects the real key in-flight, single seam (deleted on response) ~/.vibeguard/vault.enc AES-256-GCM(Argon2id(passphrase)) (encrypted at rest)

root@kitploit:~
Esta es la afirmación fundamental y es defendible hoy contra el compromiso del agente, la inyección de indicaciones, el robo de registros y la exfiltración de habilidades.
Lea [docs/THREAT-MODEL.md](https://github.com/rohansx/wardn/blob/HEAD/docs/THREAT-MODEL.md) para conocer la división honesta entre lo que está cubierto y lo que no, incluido el nivel donde la afirmación más fuerte de "el compromiso del anfitrión no filtra nada" se vuelve alcanzable.

La bóveda en sí (cifrada en reposo, clave derivada de una frase de contraseña) es un componente real y la razón por la que el cortafuegos puede ejecutarse en una sola máquina. El próximo nivel [docs/HOSTED-TIER.md](https://github.com/rohansx/wardn/blob/HEAD/docs/HOSTED-TIER.md) además envuelve el proxy en un enclave de cómputo confidencial para que incluso un VPS completamente comprometido no pueda leer la clave.

[![Crates.io](https://img.shields.io/crates/v/wardn.svg)](https://crates.io/crates/wardn)
[![License](https://img.shields.io/crates/l/wardn.svg)](LICENSE)

## El Problema

Cada framework de agente de IA hoy almacena claves API en variables de entorno o archivos `.env`. Un agente comprometido, una habilidad maliciosa, un ladrón de credenciales común o una inyección de indicaciones que exfiltre `Authorization: Bearer sk-...` de un registro de LLM obtiene acceso completo a sus credenciales.```
~/.env              → OPENAI_KEY=sk-proj-real-key      # plaintext, readable by anyone
agent context       → "Use OPENAI_KEY=sk-proj-real-key" # leaked into LLM context window
agent logs          → Authorization: Bearer sk-proj-... # sitting in log files

La solución: un cortafuegos de credenciales

wardn entrega a los agentes una cadena de marcador de posición inútil y elimina la clave real de todas las superficies a las que puede acceder. Las claves reales se inyectan en la capa de red — una única costura — y se eliminan de las respuestas antes de que lleguen al agente.``` agent environment → OPENAI_KEY=wdn_placeholder_a1b2c3d4e5f6g7h8 (useless) wardn vault → OPENAI_KEY=sk-proj-real-key (encrypted at rest) upstream request → Authorization: Bearer sk-proj-real-key (network transit only) upstream response → ...real keys stripped, placeholders returned... (re-injected on the way back) agent logs → Authorization: Bearer wdn_placeholder_a1b2... (useless) LLM context window → wdn_placeholder_a1b2c3d4e5f6g7h8 (useless)

root@kitploit:~
## Arquitectura```mermaid
flowchart TB
    subgraph Agent["AI Agent Process"]
        A1["Agent Code"]
        A2["ENV: OPENAI_KEY=wdn_placeholder_a1b2..."]
    end

    subgraph Wardn["wardn daemon · localhost:7777"]
        direction TB
        P["HTTP Proxy"]
        MCP["MCP Server\n(stdio)"]

        subgraph Pipeline["Request Pipeline"]
            direction LR
            S1["Identify\nAgent"] --> S2["Resolve\nPlaceholder"] --> S3["Check\nAuth"] --> S4["Rate\nLimit"] --> S5["Inject\nReal Key"]
        end

        subgraph ResponsePipeline["Response Pipeline"]
            direction RL
            R1["Strip Real\nKeys"] --> R2["Replace with\nPlaceholders"]
        end

        subgraph Vault["Encrypted Vault"]
            V1["AES-256-GCM"]
            V2["Argon2id KDF"]
            V3["Placeholder Map\nper agent × credential"]
        end
    end

    subgraph External["External APIs"]
        E1["api.openai.com"]
        E2["api.anthropic.com"]
        E3["..."]
    end

    A1 -- "placeholder token\nin headers/body" --> P
    A1 -. "MCP: get_credential_ref\nlist_credentials\ncheck_rate_limit" .-> MCP
    MCP -. "placeholder token\n(never real keys)" .-> A1
    P --> Pipeline
    Pipeline --> External
    External --> ResponsePipeline
    ResponsePipeline -- "response with\nplaceholders only" --> A1
    Pipeline <--> Vault
    ResponsePipeline <--> Vault

    style Agent fill:#1a1a2e,stroke:#e94560,color:#fff
    style Wardn fill:#0f3460,stroke:#16213e,color:#fff
    style Pipeline fill:#16213e,stroke:#e94560,color:#fff
    style ResponsePipeline fill:#16213e,stroke:#e94560,color:#fff
    style Vault fill:#1a1a2e,stroke:#00d2ff,color:#fff
    style External fill:#0a0a0a,stroke:#533483,color:#fff

Cómo funciona```

Agent sends request with placeholder in Authorization header │ ▼ ┌─────────────────────────┐ │ wardn proxy │ │ localhost:7777 │ │ │ │ 1. Identify agent │ │ 2. Resolve placeholder │ │ 3. Check authorization │ │ 4. Check rate limit │ │ 5. Inject real key │ │ 6. Forward request │ │ 7. Strip key from resp │ │ 8. Return to agent │ └─────────────────────────┘ │ ▼ External API (only place real key exists in transit)

root@kitploit:~
## Demostración

<p align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/12823/1fa6109ffd855ec98c173c5edd2d7ee77f6b0c918a3cdecb1ea5fbfe8326161d.gif" alt="demostración de wardn" width="800">
</p>

## Niveles de Confianza, Honestamente

| Nivel | Dónde | Qué ofrece |
|---|---|---|
| **Autoalojado (hoy)** | tu portátil, tu VPS, CI | Bóveda cifrada en reposo, reclamo de firewall contra agentes. **No** defiende contra root en el anfitrión. |
| **Alojado (próximamente)** | gestionado por wardn o BYO-cloud | Entorno de computación confidencial (Nitro / SEV-SNP) + atestación remota + flujo de cifrado hacia el proxy. Afirmación real de "una compromiso del anfitrión no filtra nada". |

El nivel autoalojado es la afirmación principal y se envía hoy. El nivel alojado
es la ruta de actualización estricta: cuesta dinero y complejidad operativa, y
su diseño está en [docs/HOSTED-TIER.md](https://github.com/rohansx/wardn/blob/HEAD/docs/HOSTED-TIER.md). Inventario completo
y honesto de lo que está y no está cubierto:

👉 **[docs/THREAT-MODEL.md](https://github.com/rohansx/wardn/blob/HEAD/docs/THREAT-MODEL.md)** — tabla de cubre / no cubre,
"ninguna bóveda de software elimina la compromiso del anfitrión" indicado claramente, y
la ruta de actualización.

## Instalación```bash
# Prebuilt binary (Linux/macOS, amd64/arm64), checksum-verified
curl -sSf https://raw.githubusercontent.com/rohansx/wardn/main/install.sh | sh

# or from crates.io
cargo install wardn

# or Homebrew, once the tap is published (see Formula/wardn.rb)
brew install rohansx/wardn/wardn

Inicio rápido```bash

Create an encrypted vault and store your keys

wardn vault create wardn vault set OPENAI_KEY wardn vault set ANTHROPIC_KEY

Set up Claude Code integration (one command)

wardn setup claude-code

root@kitploit:~
Eso es todo. Claude Code ahora usa el servidor MCP de wardn para obtener tokens de marcador de posición en lugar de leer claves reales de tu entorno.

### Qué sucede a continuación

1. Claude Code llama a `get_credential_ref` → obtiene `wdn_placeholder_a1b2...` (no la clave real)
2. El agente envía la solicitud con el marcador a través del proxy de wardn
3. El proxy intercambia el marcador por la clave real y la reenvía a la API
4. El proxy elimina la clave real de la respuesta antes de devolverla al agente

La clave real nunca entra en la memoria, los registros o la ventana de contexto del LLM del agente.

## Panel de control local

Una vez que el daemon esté activo (`wardn serve`, o iniciado por `wardn run`), abre
**http://127.0.0.1:7777/ui** en un navegador. Una vista de solo lectura y solo local de:

- **Credenciales** — cada credencial almacenada con sus ACL (agentes permitidos, dominios permitidos, límite de tasa + insignias de presupuesto).
- **Actividad reciente** — los últimos 50 eventos del proxy con método, dominio, ruta, estado, agente, request_id y costo registrado (`request_completed`, `credential_injected`, `rate_limit`, `budget_exceeded`, `loop_detected`, `request_error`).
- **Presupuestos** — el presupuesto configurado de cada credencial (máx., gastado, restante, ventana, modo) con una barra de progreso que cambia de advertencia a malo al cruzar el 50% / 80%.

Se sondea automáticamente cada 2 s. Sin puntos finales de mutación: la única forma
de salir del panel de control es la propia API (`/api/summary`, `/api/credentials`,
`/api/audit?limit=N`, `/api/budgets`).```bash
# Static, anonymous, never sees real keys
curl http://127.0.0.1:7777/api/summary | jq

Configuración manual```bash

Get a placeholder token (never the real key)

wardn vault get OPENAI_KEY

→ wdn_placeholder_a1b2c3d4e5f6g7h8

List stored credentials (names only, no values)

wardn vault list

Start the proxy

wardn serve

Start proxy + MCP server for Claude Code / Cursor

wardn serve --mcp --agent my-agent

root@kitploit:~
## Referencia de CLI

### Gestión de Vault```bash
wardn vault create                        # create encrypted vault
wardn vault set OPENAI_KEY                # store credential (prompts for value, no echo)
wardn vault get OPENAI_KEY                # get placeholder token (never the real value)
wardn vault get OPENAI_KEY --agent bot    # get placeholder for specific agent
wardn vault list                          # list all credentials
wardn vault rotate OPENAI_KEY             # rotate value, placeholders unchanged
wardn vault remove OPENAI_KEY             # remove credential

# Custom vault path
wardn --vault /path/to/vault.enc vault list

Servidor proxy```bash

wardn serve # HTTP proxy on 127.0.0.1:7777 wardn serve --host 0.0.0.0 --port 8080 # custom bind address wardn serve --config wardn.toml # load config with rate limits + ACLs wardn serve --mcp --agent my-agent # proxy + MCP server (stdio)

root@kitploit:~
### Claude Code / Integración con Cursor```bash
wardn setup claude-code                   # register wardn as MCP server in Claude Code
wardn setup cursor                        # register wardn as MCP server in Cursor

# Or manually:
claude mcp add --transport stdio --scope user wardn -- wardn serve --mcp --agent claude-code

Qué hace wardn setup

  1. Solicita tu frase de contraseña del vault y verifica que puede abrir el vault
  2. Encuentra la ruta del binario wardn en tu sistema
  3. Registra wardn como un servidor MCP:
    • Claude Code: ejecuta claude mcp add con WARDN_PASSPHRASE en la configuración de entorno
    • Cursor: escribe en ~/.cursor/mcp.json con la frase de contraseña en env
  4. En el próximo lanzamiento, el IDE inicia wardn serve --mcp como un subproceso

Verificando que funciona

Después de ejecutar la configuración, reinicia tu IDE y prueba estos prompts:``` "List my wardn credentials" → Claude calls list_credentials, shows credential names (never values)

"Get me a reference to OPENAI_KEY" → Claude calls get_credential_ref, gets wdn_placeholder_... (not the real key)

"Check my rate limit for OPENAI_KEY" → Claude calls check_rate_limit, shows remaining quota

root@kitploit:~
#### Herramientas MCP disponibles

| Herramienta | Qué devuelve | Seguridad |
|-------------|--------------|-----------|
| `get_credential_ref` | Token de marcador de posición (`wdn_placeholder_...`) | Nunca el valor real |
| `list_credentials` | Nombres de credenciales + metadatos | Filtrado por acceso del agente |
| `check_rate_limit` | Cuota restante, info de reintento | Solo lectura |

### Migración de Credenciales```bash
wardn migrate --dry-run                             # audit Claude Code dir for exposed keys
wardn migrate --source claude-code                  # scan + migrate to vault
wardn migrate --source open-claw                    # scan OpenClaw config
wardn migrate --source directory --path ./my-proj   # scan any directory

Importación de credenciales```bash

Classic .env file (KEY=value, comments, optional export, quoted values

with backslash escapes honored)

wardn import dotenv ./.env

JSON or YAML file. Format inferred from extension; either a flat map

or a structured {credentials: [{name, value}, ...]} shape.

wardn import file ./creds.json wardn import file ./creds.yaml

1Password CLI — reuses your signed-in op session. Default name is

derived from the ref's last segment; override with --name.

wardn import one-password op://Personal/openai/api_key wardn import one-password op://Work/anthropic/token --name ANTHROPIC_KEY

stdin — read .env-format lines. Useful for piping.

echo 'OPENAI_KEY=sk-...' | wardn import stdin

root@kitploit:~
Cada importador solicita la frase de contraseña de la bóveda en el primer uso (o la lee
de `WARDN_PASSPHRASE` / el llavero del SO). Los valores existentes se sobrescriben
silenciosamente — el importador es solo de valores, los metadatos (agentes permitidos /
dominios / límite de tasa / presupuesto) se conservan.

### Automatización

Para CI/scripts, configure las variables de entorno `WARDN_PASSPHRASE` y `WARDN_VALUE` para omitir los mensajes interactivos:```bash
WARDN_PASSPHRASE=my-pass wardn vault list
WARDN_PASSPHRASE=my-pass WARDN_VALUE=sk-proj-xxx wardn vault set OPENAI_KEY

API de la biblioteca

Añade a tu Cargo.toml:```toml [dependencies] wardn = "0.4"

root@kitploit:~
### Operaciones de Vault```rust
use wardn::{Vault, config::CredentialConfig};

// Create an encrypted vault
let vault = Vault::create("vault.enc", "my-passphrase")?;

// Store a credential
vault.set_with_config("OPENAI_KEY", "sk-proj-real-key-123", &CredentialConfig {
    allowed_agents: vec!["researcher".into(), "writer".into()],
    allowed_domains: vec!["api.openai.com".into()],
    rate_limit: Some(RateLimitConfig { max_calls: 200, per: TimePeriod::Hour }),
})?;

// Agent gets a placeholder (not the real key)
let placeholder = vault.get_placeholder("OPENAI_KEY", "researcher")?;
// → "wdn_placeholder_a1b2c3d4e5f6g7h8"

// Rotate the real key — all placeholders keep working
vault.rotate("OPENAI_KEY", "sk-proj-new-key-456")?;

HTTP Proxy```rust

use wardn::daemon::{Daemon, DaemonConfig};

let daemon = Daemon::new(vault, DaemonConfig::default()); daemon.serve_proxy().await?;

root@kitploit:~
### MCP Server```rust
use wardn::mcp::WardenMcpServer;

// Serve over stdio (for Claude Code, Cursor, etc.)
WardenMcpServer::serve_stdio(vault, rate_limiter, "agent-id".into()).await?;

MCP tools exposed (read-only, no credential values ever returned):

ToolDescription
get_credential_refObtén tu token de marcador de posición para una credencial
list_credentialsLista las credenciales a las que estás autorizado a acceder
check_rate_limitVerifica tu cuota restante

Security Properties

What This Defeats

How Is This Different From...

For a deeper comparison against wardn's closest direct peers (Infisical Agent Vault, 1Password for Agents, LiteLLM virtual keys) and how wardn's guarantees map to OWASP's Agentic Top 10 and the MCP spec's security guidance, see docs/comparison.md.

Trust Boundary

Wardn concentra la confianza en un solo proceso local (el proxy) en lugar de distribuirla en cada plugin, herramienta y ventana de contexto del LLM. Esta es una superficie de ataque más pequeña, no una superficie de ataque cero:

  • El proxy se ejecuta localmente como un subproceso iniciado por tu IDE o shell — mismo nivel de confianza que tu kernel
  • La bóveda está cifrada en reposo y solo se descifra en memoria con tu frase de contraseña
  • Si tu máquina local está completamente comprometida, wardn no puede ayudar (nada puede)
  • El token de marcador de posición es un token de portador para el proxy — pero solo funciona a través de localhost:7777, no contra APIs reales, y puede tener límite de tarifa y ser revocado por agente

Audit Logging

Cada acceso a credenciales se registra con un ID de solicitud único para trazabilidad:``` INFO request_id=a1b2c3 agent=claude-code method=POST domain=api.openai.com path=/v1/chat/completions proxy request received INFO request_id=a1b2c3 agent=claude-code credential=OPENAI_KEY domain=api.openai.com credential injected INFO request_id=a1b2c3 agent=claude-code upstream_status=200 credentials_injected=1 credentials_stripped=0 proxy request completed

root@kitploit:~
Set `RUST_LOG=wardn=info` (o `debug`/`trace`) para controlar la verbosidad. Los registros van a stderr, nunca a stdout.

## Configuración```toml
[warden]
vault_path = "~/.vibeguard/vault.enc"

[warden.credentials.OPENAI_KEY]
rate_limit = { max_calls = 200, per = "hour" }
allowed_agents = ["researcher", "writer"]
allowed_domains = ["api.openai.com"]

[warden.credentials.ANTHROPIC_KEY]
rate_limit = { max_calls = 100, per = "hour" }
allowed_agents = ["researcher"]
allowed_domains = ["api.anthropic.com"]

Estructura del Proyecto```

wardn/ ├── src/ │ ├── main.rs # CLI entry point (clap + tokio) │ ├── cli/ │ │ ├── mod.rs # Clap argument definitions │ │ ├── vault_cmd.rs # Vault subcommand handlers │ │ ├── serve_cmd.rs # Serve subcommand handler │ │ ├── run_cmd.rs # wardn run — lazy-starts the daemon, wires │ │ │ # agent env vars, execs the child │ │ ├── setup_cmd.rs # Claude Code / Cursor MCP setup (+ shell alias) │ │ └── migrate_cmd.rs # Migrate subcommand handler │ ├── lib.rs # Public API, WardenError │ ├── config.rs # TOML configuration parsing, [upstreams] map │ ├── vault/ │ │ ├── mod.rs # Vault CRUD operations │ │ ├── encryption.rs # AES-256-GCM + Argon2id + zeroize types │ │ ├── storage.rs # On-disk format (WDNV), atomic writes │ │ ├── placeholder.rs # Token generation, per-agent isolation │ │ └── keyring_store.rs # OS keychain passphrase storage │ ├── proxy/ │ │ ├── mod.rs # HTTP proxy server (axum) │ │ ├── route.rs # Provider-prefix vs Host-header upstream routing │ │ ├── inject.rs # Credential injection into requests │ │ ├── strip.rs # Credential stripping (shared pair-building) │ │ ├── stream.rs # Streaming (SSE/chunked) credential stripper │ │ └── rate_limit.rs # Token bucket rate limiter │ ├── mcp/ │ │ ├── mod.rs # MCP server (rmcp, stdio transport) │ │ └── tools.rs # Tool parameter/response types │ ├── migrate/ │ │ ├── mod.rs # Migration orchestrator + risk scoring │ │ └── scanners/ │ │ └── credentials.rs # API key pattern scanner │ └── daemon/ │ └── mod.rs # Daemon (proxy + MCP in single process) └── tests/ ├── cli_tests.rs # CLI integration tests ├── vault_tests.rs # Vault integration tests ├── proxy_tests.rs # Proxy tests without a real upstream ├── proxy_e2e_tests.rs # Real upstream via wiremock (header/body/SSE) └── run_cmd_tests.rs # Real end-to-end wardn run

root@kitploit:~
## Desarrollo```bash
# Integration tests use a fast (insecure) KDF so the suite runs in
# milliseconds instead of paying the real Argon2id cost per test —
# always pass this feature flag when running tests locally or in CI:
cargo test --features test-fast-kdf

cargo build
cargo clippy --all-targets --features test-fast-kdf

Cifrado de Vault```mermaid

flowchart LR subgraph Input Pass["Passphrase"] Salt["Random Salt\n(16 bytes)"] Creds["Credentials\n(JSON)"] end

root@kitploit:~
subgraph KDF["Key Derivation"]
    Argon["Argon2id\nm=19456 t=2 p=1"]
end

subgraph Encrypt["Encryption"]
    AES["AES-256-GCM"]
    Nonce["Random Nonce\n(12 bytes)"]
end

subgraph Output["WDNV File"]
    direction TB
    Magic["WDNV (4B)"]
    Ver["Version (2B)"]
    SaltOut["Salt (16B)"]
    Payload["Nonce ‖ Ciphertext ‖ Tag"]
end

Pass --> Argon
Salt --> Argon
Argon -- "256-bit key" --> AES
Creds --> AES
Nonce --> AES
AES --> Payload

style Input fill:#1a1a2e,stroke:#e94560,color:#fff
style KDF fill:#16213e,stroke:#00d2ff,color:#fff
style Encrypt fill:#16213e,stroke:#00d2ff,color:#fff
style Output fill:#0f3460,stroke:#533483,color:#fff
root@kitploit:~
### Formato de archivo```
Bytes 0-3:   Magic "WDNV"
Bytes 4-5:   Version (u16 LE)
Bytes 6-21:  Argon2id salt (16 bytes)
Bytes 22+:   AES-256-GCM encrypted payload (nonce ‖ ciphertext ‖ tag)

Parte de VibeGuard

Wardn es la capa de aislamiento de credenciales de VibeGuard — un demonio de seguridad para agentes de IA. Otros módulos planificados:

  • Sentinel — firewall de inyección de prompts
  • CloakPipe — middleware de redacción de PII
  • Watcher — registro de auditoría + panel

Licencia

MIT

Descargar herramienta
PropertyGuarantee
Sin credencial en la memoria del agenteEl proceso del agente solo contiene cadenas de marcador de posición
Sin credencial en disco en texto planoBóveda cifrada con AES-256-GCM y KDF Argon2id
Sin credencial en registrosSolo los marcadores de posición aparecen en cualquier salida de registro
Sin credencial en el contexto del LLMMarcador de posición inyectado en env, clave real en la capa de red
Exposición de costos limitadaLímites de tarifa de cubeta de tokens por credencial por agente
Protección de eco de credencialesClaves reales eliminadas de las respuestas de la API antes de llegar al agente
Seguridad de memoriaSensitiveString/SensitiveBytes se ponen a cero al liberarse
Persistencia atómicaEscribir temporal luego renombrar evita la corrupción de la bóveda
AttackHow wardn stops it
Robo de credenciales .envNo hay archivos .env. Claves solo en bóveda cifrada
Habilidad maliciosa lee $OPENAI_KEYObtiene wdn_placeholder_... — inútil
Stealer apunta a la configuración del agenteEncuentra solo tokens de marcador de posición
Inyección de prompt extrae la claveLa clave nunca está en la ventana de contexto del agente
Los registros del agente contienen credencialesLos registros contienen solo cadenas de marcador de posición
Compromiso total del agenteEl atacante tiene un marcador de posición inútil
Costos descontrolados de un agente en bucleLímite de tarifa por credencial por agente
ToolWhat it doesHow wardn differs
Gestores de secretos (Vault, AWS SM, 1Password)Almacenamiento seguro + recuperaciónEl agente aún obtiene la clave real en tiempo de ejecución. Wardn asegura que el agente nunca la toque.
VarlockValidación de .env basada en esquemas + configuración segura para IASe enfoca en la gestión de configuraciones y escaneo de fugas. Wardn realiza inyección de credenciales en tiempo de ejecución — la clave nunca entra al proceso del agente.
OpenRouterEnrutamiento de API + gestión de clavesConfía en el cliente con una clave API. Wardn no — el agente tiene un marcador de posición inútil.
dotenv + .gitignoreMantener secretos fuera de gitLas claves aún están en memoria, variables de entorno, registros. Wardn las elimina de los tres.
Mallas de servicios (Istio, Linkerd)Autenticación de servicio a servicioResuelven mTLS a nivel de infraestructura. Wardn resuelve la autenticación agente-a-API donde el agente mismo no es de confianza.