Volver a actualizaciones
Nuevo releaseJul 21, 2026

cynative v1.6.0

Agente de IA de solo lectura que consulta tu infraestructura en la nube, código y tiempo de ejecución para revelar configuraciones incorrectas, secretos filtrados y rutas de escalada de privilegios con hallazgos verificados y respaldados por evidencia.

Compartir

cynative

Construye tus propios agentes de seguridad

Framework de código abierto para agentes de seguridad con acceso en vivo y de solo lectura a tu infraestructura.

CI Release License: Apache-2.0 OpenSSF Best Practices

Inicio rápido · Tu primer agente · Documentación

Pregúntale cualquier cosa a tu infraestructura. Cynative ejecuta modelos de vanguardia en tu código, nube y runtime, razonando a través de GitHub, GitLab, AWS, GCP, Azure y Kubernetes como un solo sistema, y regresa con respuestas verificadas.```bash cynative "what in my cloud is publicly exposed that shouldn't be?"

It writes and runs code in an ephemeral sandbox, querying your APIs in parallel, so one question fans out across your whole stack. Every finding is cross-checked and traced back to its origin.

Unlike coding agents and MCP servers, it's **read-only by construction**: every call is gated and authorized *before* a credential is attached - point it at production with confidence.
<!-- END agent-about -->

<p align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/9087/1b3db179a03479f5951d624c8adbb4890465aa86d038d3312dc9aec9801bcfb9.gif"
       alt="cynative auditando una escalada de privilegios de CI a nube"
       width="900">
</p>

## Lo que obtienen tus agentes

- **Código a runtime**: Razona a través de AWS, GCP, Azure, cualquier K8s, GitHub y GitLab
- **Sandbox**: Genera y ejecuta código para investigar a escala, sin acceso propio a red ni host
- **Action-gate**: Resuelve cada llamada a sus acciones IAM requeridas y aplica una política de solo lectura antes de adjuntar una credencial
- **Respaldado por evidencia**: Realiza verificaciones cruzadas para confirmar cada hallazgo
- **Soberano**: Un solo binario, tu modelo, tus datos siguen siendo tuyos

## Inicio rápido

Instala y configura un LLM:

<!-- BEGIN quickstart-example -->```bash
brew install cynative/tap/cynative

export CYNATIVE_LLM_PROVIDER=anthropic
export CYNATIVE_LLM_MODEL=claude-opus-5
export ANTHROPIC_API_KEY=...

Recoge las credenciales que ya están en tu shell. Pregúntale lo que quieras:```bash cynative -p "which IAM roles can escalate to admin?" cynative -p "high-risk cloud permissions, trace each to the PR where it was granted" cynative -p "cloud credentials leaked in source code and their current blast radius" cynative "live cloud resources absent from IaC - drift" # starts an interactive session cat findings.json | cynative -p "triage these findings by exploitability"

## Tu primer agente

Un agente es un archivo markdown: una línea de descripción, y luego el prompt. El nombre del archivo es el nombre. Para añadir el tuyo, crea `~/.cynative/agents/` y escribe uno en él. Cynative no crea este directorio por ti:```bash
mkdir -p ~/.cynative/agents

cat > ~/.cynative/agents/aws-public-data-stores.md <<'EOF'
---
description: Finds publicly accessible data stores in an AWS account.
---
Check S3, RDS snapshots, EBS snapshots and public AMIs for exposure.
Report each finding with the resource ARN and how it is reachable.
EOF

cynative -p --agent aws-public-data-stores

Consulta docs/agents.md para conocer el formato.

Ejecutar agentes```bash

cynative -p --agent aws-public-data-stores "AWS account ID 12814983572854 only" # with a task cynative -p --agent aws-public-data-stores # without cynative --agent aws-public-data-stores # seeds an interactive session

`--agent` se combina con `-p`, `--auto-approve`, `--config` y stdin canalizado, por lo que el mismo archivo se ejecuta de forma interactiva mientras lo desarrollas y de forma no interactiva una vez que se estabiliza.

Los agentes se leen de `~/.cynative/agents/` y del conjunto integrado en el binario; un archivo de usuario tiene prioridad sobre uno integrado con el mismo nombre. `cynative agents list` muestra cada agente con su origen y marca las copias ocultas, y `cynative agents show <name>` imprime el archivo exacto que se ejecutaría.

## ¿No puede hacer esto un agente de codificación con MCPs?

| | Agente de codificación + MCPs | Cynative |
|---|---|---|
| Rendimiento | Una acción por llamada | Escribe código en sandbox que distribuye llamadas de forma concurrente: menos tokens, respuestas más rápidas |
| Hallazgos | Salida sin verificar | El verificador contrasta cada hallazgo con evidencia en vivo |
| Solo lectura | Filtro de lectura opcional | Activado por defecto, falla de forma segura: las acciones de IAM requeridas se verifican contra una política de auditoría de seguridad. `secretsmanager:GetSecretValue` es una acción de IAM *Read*: un filtro la permite, `SecurityAudit` la bloquea |
| Credenciales | Ambientales, sin cambios | Sesión STS limitada a solo lectura: AWS también aplica el límite |
| Radio de impacto | Tu shell, cualquier red | El código de investigación se ejecuta en un sandbox sin acceso al host, con la red limitada a tus servicios mapeados |
| Secretos | Enviados al modelo tal cual | Redactados de la salida de la herramienta antes de enviarse al modelo |
| Cadena de suministro | MCPs y habilidades de terceros que se ejecutan con tus credenciales | Un binario de código abierto, conectores integrados |
| Rastro de auditoría | Registros de sesión dispersos, con el mejor esfuerzo | Registro JSONL de fallo seguro de cada llamada a la herramienta: si no puede registrar, se aborta |

Un binario, tu endpoint de modelo, tu cuenta. Ejecútalo en una instancia en la nube que audita, a través de la inferencia gestionada de esa nube, y nada sale de tu entorno: seguridad en tu infraestructura, desde dentro de tu infraestructura.

## Instalación

**Homebrew** (macOS / Linux - recomendado):```bash
brew install cynative/tap/cynative

Script de instalación (macOS / Linux: verifica el SHA-256 de la descarga contra el checksums.txt de la versión, fallando de forma segura):```bash curl -fsSL https://raw.githubusercontent.com/cynative/cynative/main/install.sh | sh

**Windows** (Scoop):```powershell
scoop bucket add cynative https://github.com/cynative/scoop-bucket
scoop install cynative
Actualización, desinstalación, detalles de Windows, fijación de versiones y descarga manual

Actualización / desinstalación

MétodoActualizaciónDesinstalación
Homebrewbrew upgrade cynativebrew uninstall cynative
Script de instalaciónvolver a ejecutar el one-linercurl -fsSL https://raw.githubusercontent.com/cynative/cynative/main/install.sh | sh -s -- --uninstall
Scoopscoop update cynativescoop uninstall cynative

Windows (script de PowerShell): irm https://raw.githubusercontent.com/cynative/cynative/main/install.ps1 | iex; desinstalar con & ([scriptblock]::Create((irm https://raw.githubusercontent.com/cynative/cynative/main/install.ps1))) -Uninstall.

Opciones del script de instalación: fija una versión con CYNATIVE_VERSION=v1.0.0; cambia el directorio de destino con CYNATIVE_INSTALL_DIR (por defecto ~/.local/bin, sin sudo). El script verifica la atestación de la release de GitHub cuando gh está instalado (advertencia por defecto); establece CYNATIVE_REQUIRE_ATTESTATION=1 para que una verificación fallida sea fatal. Para una instalación de alta integridad, obtén el script desde una etiqueta inmutable en lugar de main.

macOS (manual): descarga cynative_Darwin_arm64.pkg (Apple Silicon) o cynative_Darwin_x86_64.pkg (Intel) desde la página de releases e instala con sudo installer -pkg <file> -target / (o haz doble clic). Estos están firmados, notarizados y sellados - sin aviso de Gatekeeper en el primer arranque. Los archivos sin procesar cynative_Darwin_*.tar.gz permanecen para scripting/CI; el primer lanzamiento de GUI de un binario de tarball en cuarentena necesita internet para la verificación de notarización en línea (el uso desde terminal/install.sh/Homebrew no se ve afectado).

Linux / Windows (manual): descarga un binario precompilado y checksums.txt desde la página de releases, verifica el SHA-256 y coloca el binario en tu PATH. Binario estático único, sin dependencias.

Verificar una firma de release (opcional). Las nuevas releases incluyen checksums.txt.sigstore.json, un paquete de Sigstore que firma checksums.txt con un certificado sin clave vinculado al flujo de trabajo de release de este repositorio. Autentica el manifiesto y luego verifica tu archivo contra él:```bash cosign verify-blob checksums.txt
--bundle checksums.txt.sigstore.json
--certificate-identity "https://github.com/cynative/cynative/.github/workflows/release.yaml@refs/heads/main"
--certificate-oidc-issuer "https://token.actions.githubusercontent.com"

grep cynative_Linux_x86_64.tar.gz checksums.txt | sha256sum -c - # Linux grep cynative_Darwin_arm64.tar.gz checksums.txt | shasum -a 256 -c - # macOS

```powershell
(Get-FileHash .\cynative_Windows_x86_64.zip -Algorithm SHA256).Hash.ToLower()
Select-String -Path checksums.txt -Pattern cynative_Windows_x86_64.zip

Esto cubre los archivos nombrados en checksums.txt. Los instaladores .pkg están firmados con Developer ID, notarizados y sellados en su lugar, y cada activo está además cubierto por la atestación de la versión de GitHub (gh release verify <tag>). Dos límites que vale la pena conocer: cosign obtiene la raíz de confianza de Sigstore a través de la red a menos que pases --trusted-root, y debido a que los nombres de archivo no llevan versión, la firma prueba el origen y la integridad, pero no de qué versión proviene un conjunto suelto de archivos: la URL de la versión o gh release verify es lo que vincula una versión.

Proveedores de LLM

Cynative se comunica con los LLM a través del Bifrost SDK integrado y admite casi cualquier proveedor de IA listo para usar (OpenAI, Anthropic, Azure OpenAI, Amazon Bedrock, Google Vertex/Gemini, Cohere, Mistral, Groq, Ollama, vLLM y más). Elige uno de docs/providers/README.md y sigue la guía de ese proveedor.

Ejemplos rápidos```bash # Google Vertex export CYNATIVE_LLM_PROVIDER=vertex export CYNATIVE_LLM_MODEL=gemini-3.1-pro-preview export CYNATIVE_LLM_VERTEX_PROJECT_ID=my-gcp-project export CYNATIVE_LLM_VERTEX_REGION=global # CI / no gcloud: export GOOGLE_APPLICATION_CREDENTIALS=/path/to/sa.json

OpenAI

export CYNATIVE_LLM_PROVIDER=openai export CYNATIVE_LLM_MODEL=gpt-5.6-sol export OPENAI_API_KEY=sk-...

Amazon Bedrock - AWS credential chain

export CYNATIVE_LLM_PROVIDER=bedrock export CYNATIVE_LLM_MODEL=anthropic.claude-opus-5 export CYNATIVE_LLM_BEDROCK_REGION=us-east-1

Azure OpenAI - endpoint via env, no YAML needed

export CYNATIVE_LLM_PROVIDER=azure export CYNATIVE_LLM_MODEL=my-gpt-5.6-sol export AZURE_OPENAI_API_KEY=... export CYNATIVE_LLM_AZURE_ENDPOINT=https://my-resource.openai.azure.com

Local Ollama

export CYNATIVE_LLM_PROVIDER=ollama export CYNATIVE_LLM_MODEL=nemotron-cascade-2 export CYNATIVE_LLM_OLLAMA_URL=http://localhost:11434

</details>

<details>
<summary><strong>YAML avanzado</strong></summary>

Para el balanceo de carga con múltiples claves, comportamiento de reintento personalizado, configuración de proxy,
o cualquier otra función de Bifrost, escribe un archivo YAML:```yaml
llm:
  provider: openai
  model: gpt-5.5
  api_key: env.OPENAI_API_KEY
  network_config:                 # common fields shown; see schemas.NetworkConfig for the full set
    base_url: https://my-proxy.example.com/v1
    default_request_timeout_in_seconds: 60
    max_retries: 3
    extra_headers:
      x-tenant: prod

Véase docs/providers/ para la referencia de configuración de cada proveedor compatible.

Sesiones y aprobaciones

cynative abre una sesión interactiva (edición completa de línea e historial con las teclas de flecha); cynative "tarea" ejecuta la tarea y luego permanece interactivo; -p / --print ejecuta una única tarea de forma no interactiva y sale - para scripts y tuberías (p. ej. cat main.tf | cynative -p "revisa este Terraform en busca de configuraciones incorrectas"). El código de salida transmite el veredicto para scripts: 0 cuando se generó un informe, 2 cuando la ejecución terminó sin una respuesta (el aviso indica el motivo - presupuesto de iteraciones o tokens, una respuesta del modelo vacía o filtrada), 130 en interrupción, 143 en SIGTERM, y 1 para cualquier otro fallo.

Cynative llama a tu stack usando las credenciales que ya están en tu shell - no mantiene un almacén de credenciales separado. Proporciona siempre la credencial de solo lectura con mínimos privilegios necesaria.

Aprobaciones: cada llamada a una herramienta espera una sola pulsación de tecla: y la ejecuta una vez, a autoriza todas las llamadas posteriores a esa herramienta para la sesión (los scripts aún se imprimen antes de ejecutarse), cualquier otra tecla la deniega. Sin terminal de control, usa --auto-approve.

Detención a mitad de tarea: mientras una tarea se está ejecutando, pulsa Esc o Ctrl-C una vez para detenerla de forma controlada (el agente termina cualquier llamada ya en curso, luego se detiene e imprime ⏸ Detenido). Cuando el agente encuentra errores o rechazos repetidos de herramientas, se detiene automáticamente, resume en qué está bloqueado y pide la información que falta.

Completado de Bash: Consulta cynative completion <shell> --help para las notas completas de instalación de cada shell.

Cynative imprime un pie de página operativo breve (tiempos, uso de tokens) en stderr - redirigir stdout (cynative -p "..." > out.txt) mantiene la respuesta capturada limpia. --version imprime la versión, el commit, la fecha de compilación, la versión de Go y la plataforma.

cynative doctor valida la configuración y la disponibilidad de los conectores sin iniciar una sesión de investigación. Pasa --live-llm para también sondear el modelo configurado con un viaje de ida y vuelta sin herramientas.

Controles de recursos y costes para ejecuciones desatendidas

Controles de recursos y costes: para ejecuciones desatendidas, programadas o de horizonte largo - integradas en cron, CI o cualquier disparador - acota el trabajo explícitamente. Los controles clave (claves de configuración / variables de entorno):

Clave de configuración / variable de entornoPredeterminadoEfecto
max_total_tokens
CYNATIVE_MAX_TOTAL_TOKENS
0 (sin límite)Tope de tokens por sesión, compartido entre el bucle principal, los subagentes de tareas, el verificador siempre activo y los seguimientos interactivos.
max_iterations
CYNATIVE_MAX_ITERATIONS
32Máximo de iteraciones de llamadas a herramientas del bucle principal por turno.
max_subagent_iterations
CYNATIVE_MAX_SUBAGENT_ITERATIONS
10Máximo de iteraciones dentro de un subagente de tareas.
max_consecutive_failures
CYNATIVE_MAX_CONSECUTIVE_FAILURES
5Llamadas a herramientas consecutivas sin progreso antes de detenerse y resumir (0 lo desactiva).
sandbox_max_concurrency
CYNATIVE_SANDBOX_MAX_CONCURRENCY
16Máximo de llamadas a herramientas concurrentes dentro del sandbox.

La verificación de hallazgos (herramienta verify_findings) realiza llamadas adicionales al modelo - presupuesta para ellas en cualquier ejecución que produzca hallazgos.

Conectores

Además de las credenciales en tu shell, Cynative impone solo lectura en tres capas:

  • Red - cada host de solicitud está fijado a su servicio y región mapeados y la IP resuelta se verifica antes de conectar - tu agente puede alcanzar tu infraestructura y nada más.
  • Puerta de acciones - cada operación se resuelve a sus acciones IAM requeridas, derivadas de las definiciones de API de los propios proveedores, y luego se autoriza mediante una política de solo lectura antes de adjuntar cualquier credencial: SecurityAudit (AWS), roles/viewer (GCP), Reader (Azure). La cobertura sigue las APIs de la nube a medida que crecen, y la puerta falla de forma segura ante cualquier cosa que clasifique como escritura. Para Kubernetes, la política es el propio rol RBAC view en vivo del clúster, obtenido en tiempo de ejecución y aplicado por solicitud. GitHub y GitLab son de solo lectura por defecto; un ajuste connectors.{github,gitlab}.permissions puede permitir escritura en categorías específicas donde un flujo de trabajo lo necesite, aplicado por solicitud antes de adjuntar el token. Incluso en modo de solo lectura, los endpoints de escaneo de secretos de GitHub permanecen bloqueados y la API GraphQL de GitLab está denegada.
  • Credencial (AWS) - para identidades de roles asumidos, las credenciales se re-emiten mediante STS AssumeRole, limitadas a una política gestionada (SecurityAudit por defecto), de modo que AWS IAM también aplica el límite. Las identidades de usuario IAM y raíz se ejecutan con sus credenciales base, controladas por la puerta de acciones anterior.

Cynative se conecta a AWS, GCP, Azure, EKS/GKE/AKS, Kubernetes autogestionado, GitHub y GitLab. Consulta docs/connectors/README.md para el descubrimiento de credenciales, el endurecimiento, las limitaciones y los ejemplos específicos de cada conector.

Ejecución de código y orquestación de herramientas

Para trabajo masivo - "revisa cada bucket S3 público", "lista los clústeres EKS en cada región" - Cynative puede escribir y ejecutar JavaScript en un sandbox en lugar de emitir una llamada a herramienta a la vez. Las herramientas del agente (p. ej. http_request) se exponen como funciones JavaScript async, de modo que itera, filtra y encadena llamadas en código - y ejecuta llamadas independientes de forma concurrente con el ayudante integrado mapConcurrent(items, fn, limit) (o await Promise.all([...]) para conjuntos fijos pequeños). Solo lo que el script registra con console.log regresa al modelo, manteniendo la investigación rápida y eficiente en tokens.```js // Discover regions, then list EKS clusters in every region concurrently, // following pagination - only the summary returns to the model. const r = await http_request({ method: "GET", url: "https://ec2.us-east-1.amazonaws.com/?Action=DescribeRegions&Version=2016-11-15", auth_provider: "aws", aws_auth: { service: "ec2", region: "us-east-1" }, }); const regions = [...r.body.matchAll(/([^<]+)</regionName>/g)].map((m) => m[1]);

const all = await mapConcurrent(regions, async (region) => { const clusters = []; let token = null; do { const url = https://eks.${region}.amazonaws.com/clusters + (token ? ?nextToken=${encodeURIComponent(token)} : ""); const resp = await http_request({ method: "GET", url, auth_provider: "aws", aws_auth: { service: "eks", region }, }); const body = JSON.parse(resp.body); clusters.push(...body.clusters); token = body.nextToken; } while (token); return { region, clusters }; });

console.log(JSON.stringify(all.filter((x) => x.clusters.length > 0), null, 2));

- **Async y concurrente**: las funciones de las herramientas devuelven Promesas - usa `await` con ellas, distribúyelas
  sobre muchos recursos con `mapConcurrent(items, fn, limit)` (acotado,
  preservando el orden), o usa `await Promise.all([...])` para conjuntos fijos pequeños.
- **Respuestas estructuradas**: `http_request` se resuelve a `{ status, statusText,
  headers, body }`; `body` es la cadena cruda - `JSON.parse(resp.body)` para APIs
  JSON o léela directamente para XML.
- **Aislado**: un script solo puede llamar a las herramientas que Cynative expone - no tiene
  acceso de red ni al host por sí mismo.
- **Ves el script completo**: cada llamada a `code_execution` se muestra completa para
  aprobación antes de ejecutarse (omítelo con `--auto-approve`; transmite cada llamada interna
  con `-v`).
- **Con estado dentro de una sesión**: los valores guardados en `globalThis` persisten entre
  llamadas durante una sesión interactiva, siempre que la llamada se ejecute hasta completarse
  (una que agote el tiempo o quede suspendida los restablece); los `let`/`const`/`var`/`function`
  de nivel superior están limitados a una sola llamada.
- **Acotado**: los scripts se ejecutan bajo un tiempo límite (120s por defecto) y un tamaño de
  salida máximo.

## Registro de auditoría

Cada llamada a una herramienta se registra en un registro de auditoría JSONL persistente (`~/.cynative/audit.log`, activado por defecto). El registro es de cierre ante fallos: si una llamada no puede registrarse, la ejecución se aborta. Cada entrada de una ejecución de agente también registra el nombre del agente, la fuente y el resumen del archivo, de modo que un hallazgo pueda rastrearse hasta el prompt exacto que lo produjo.

Los resultados de las herramientas se redactan antes de escribirse, pero los argumentos del prompt de aprobación se almacenan textualmente: el registro puede contener valores sensibles. Solo puede leerlo el usuario que ejecutó Cynative. La rotación y retención son configurables.

Configúralo bajo `audit:` en `~/.cynative/config.yaml`, o mediante variables de entorno:

| Clave | Env | Predeterminado |
|---|---|---|
| `audit.enabled` | `CYNATIVE_AUDIT_ENABLED` | `true` |
| `audit.path` | `CYNATIVE_AUDIT_PATH` | `~/.cynative/audit.log` |
| `audit.max_size_mb` | `CYNATIVE_AUDIT_MAX_SIZE_MB` | `100` |
| `audit.retention_days` | `CYNATIVE_AUDIT_RETENTION_DAYS` | `30` |
| `audit.compress` | `CYNATIVE_AUDIT_COMPRESS` | `false` |

## Preguntas y comentarios

[Discussions](https://github.com/cynative/cynative/discussions) es el mejor lugar para compartir tus comentarios: a qué lo apuntaste, qué devolvió y qué falta. Las estrellas ayudan a que la gente encuentre el proyecto.

## Contribuciones

Las contribuciones son bienvenidas: nuevos agentes, conectores, conjuntos de datos de evaluación y
mejoras en general. Consulta [CONTRIBUTING.md](https://github.com/cynative/cynative/blob/main/CONTRIBUTING.md) para la configuración de
desarrollo, la compuerta `make check` y las convenciones de PR, y [SECURITY.md](https://github.com/cynative/cynative/blob/main/SECURITY.md)
para reportar vulnerabilidades.

## Licencia

Licencia Apache-2.0. Consulta [LICENSE](https://github.com/cynative/cynative/blob/main/LICENSE) para el texto completo.

Categorías