Voltar às atualizações
New releaseJul 21, 2026

cynative v1.6.0

Agente de IA somente leitura que consulta sua nuvem, código e infraestrutura de runtime para revelar configurações incorretas, segredos vazados e caminhos de escalonamento de privilégios com descobertas verificadas e apoiadas por evidências.

Compartilhar

cynative

Crie seus próprios agentes de segurança

Framework de código aberto para agentes de segurança com acesso ao vivo e somente leitura à sua infraestrutura.

CI Release License: Apache-2.0 OpenSSF Best Practices

Início rápido · Seu primeiro agente · Documentação

Pergunte qualquer coisa à sua infraestrutura. O Cynative executa modelos de ponta no seu código, nuvem e runtime — raciocinando por meio de GitHub, GitLab, AWS, GCP, Azure e Kubernetes como um único sistema — e retorna com respostas verificadas.```bash cynative "what in my cloud is publicly exposed that shouldn't be?"

Escreve e executa código num sandbox efémero, consultando as tuas APIs em paralelo, para que uma pergunta se ramifique por toda a tua stack. Cada descoberta é verificada de forma cruzada e rastreada até à sua origem.

Ao contrário de agentes de codificação e servidores MCP, é **apenas de leitura por construção**: cada chamada é controlada e autorizada *antes* de uma credencial ser anexada - aponta-o para produção com confiança.
<!-- END agent-about -->

<p align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/9087/1b3db179a03479f5951d624c8adbb4890465aa86d038d3312dc9aec9801bcfb9.gif"
       alt="cynative a auditar uma escalada de privilégios de CI para cloud"
       width="900">
</p>

## O que os teus agentes obtêm

- **Código-para-runtime**: Raciocina através de AWS, GCP, Azure, qualquer K8s, GitHub e GitLab
- **Sandbox**: Gera e executa código para pesquisar em escala, sem acesso de rede ou host próprio
- **Action-gate**: Resolve cada chamada para as suas ações IAM necessárias e aplica uma política apenas de leitura antes de uma credencial ser anexada
- **Baseado em evidências**: Verifica de forma cruzada para confirmar cada descoberta
- **Soberano**: Um único binário, o teu modelo, os teus dados permanecem teus

## Início rápido

Instala e define um 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=...

Ele captura as credenciais já presentes no seu shell. Pergunte qualquer coisa:```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"

## O seu primeiro agente

Um agente é um ficheiro markdown: uma linha de descrição, seguida do prompt. O nome do ficheiro é o nome. Para adicionar o seu, crie `~/.cynative/agents/` e escreva um lá dentro. A Cynative não cria este diretório por si:```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

Consulte docs/agents.md para ver o formato.

Executando 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` compõe-se com `-p`, `--auto-approve`, `--config` e stdin canalizado, de modo que o mesmo arquivo roda interativamente enquanto você o desenvolve e não interativamente assim que ele se estabiliza.

Os agentes são lidos de `~/.cynative/agents/` e do conjunto embutido no binário; um arquivo do usuário prevalece sobre um embutido de mesmo nome. `cynative agents list` mostra cada agente com sua origem e marca as cópias sombreadas, e `cynative agents show <name>` imprime o arquivo exato que seria executado.

## Um agente de codificação com MCPs não faz isso?

| | Agente de codificação + MCPs | Cynative |
|---|---|---|
| Throughput | Uma ação por chamada | Escreve código em sandbox que distribui chamadas concorrentemente - menos tokens, respostas mais rápidas |
| Descobertas | Saída não verificada | Verificador cruza cada descoberta com evidências ao vivo |
| Somente leitura | Filtro de leitura opcional | Ativado por padrão, falha fechada - ações IAM necessárias verificadas contra uma política de auditoria de segurança. `secretsmanager:GetSecretValue` é uma ação IAM *Read*: um filtro a permite, `SecurityAudit` a bloqueia |
| Credenciais | Ambientais, inalteradas | Sessão STS limitada a somente leitura - a AWS também impõe o limite |
| Raio de impacto | Seu shell, qualquer rede | O código de pesquisa roda em uma sandbox sem acesso ao host, com rede fixada aos seus serviços mapeados |
| Segredos | Enviados ao modelo como estão | Redigidos da saída da ferramenta antes de serem enviados ao modelo |
| Cadeia de suprimentos | MCPs e skills de terceiros rodando com suas credenciais | Um binário de código aberto, conectores embutidos |
| Trilha de auditoria | Logs de sessão dispersos, melhor esforço | Log JSONL com falha fechada de cada chamada de ferramenta - se não puder registrar, aborta |

Um binário, seu endpoint de modelo, sua conta. Execute-o em uma instância na nuvem que ele audita, por meio da inferência gerenciada dessa nuvem, e nada sai do seu ambiente: segurança na sua infraestrutura, a partir da sua infraestrutura.

## Instalação

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

Script de instalação (macOS / Linux - verifica o SHA-256 do download em relação ao checksums.txt da versão, falhando 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
Atualização, desinstalação, detalhes do Windows, fixação de versão e download manual

Atualização / desinstalação

MétodoAtualizaçãoDesinstalação
Homebrewbrew upgrade cynativebrew uninstall cynative
Script de instalaçãoexecute novamente o one-linercurl -fsSL https://raw.githubusercontent.com/cynative/cynative/main/install.sh | sh -s -- --uninstall
Scoopscoop update cynativescoop uninstall cynative

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

Opções do script de instalação: fixe uma versão com CYNATIVE_VERSION=v1.0.0; altere o diretório de destino com CYNATIVE_INSTALL_DIR (padrão ~/.local/bin, sem sudo). O script verifica a atestação do release do GitHub quando gh está instalado (advertência por padrão); defina CYNATIVE_REQUIRE_ATTESTATION=1 para tornar uma verificação falha fatal. Para uma instalação de alta integridade, busque o script de uma tag imutável em vez de main.

macOS (manual): baixe cynative_Darwin_arm64.pkg (Apple Silicon) ou cynative_Darwin_x86_64.pkg (Intel) da página de releases e instale com sudo installer -pkg <file> -target / (ou clique duas vezes). Eles são assinados, notarizados e carimbados - sem prompt do Gatekeeper na primeira execução. Os arquivos brutos cynative_Darwin_*.tar.gz permanecem para scripts/CI; o primeiro lançamento da GUI de um binário de tarball em quarentena precisa de internet para a verificação de notarização online (uso em terminal/install.sh/Homebrew não é afetado).

Linux / Windows (manual): baixe um binário pré-compilado e checksums.txt da página de releases, verifique o SHA-256 e coloque o binário no seu PATH. Binário estático único, sem dependências.

Verifique uma assinatura de release (opcional). Novos releases incluem checksums.txt.sigstore.json, um pacote Sigstore que assina checksums.txt com um certificado sem chave vinculado ao fluxo de trabalho de release deste repositório. Autentique o manifesto e, em seguida, verifique seu arquivo contra ele:```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

Isto cobre os arquivos nomeados em checksums.txt. Os instaladores .pkg são assinados com Developer ID, notarizados e carimbados, e cada artefato é adicionalmente coberto pela atestação de lançamento do GitHub (gh release verify <tag>). Dois limites que vale a pena conhecer: cosign busca a raiz de confiança do Sigstore pela rede, a menos que você passe --trusted-root, e como os nomes dos arquivos não carregam versão, a assinatura prova origem e integridade, mas não qual lançamento um conjunto solto de arquivos veio — a URL do lançamento ou gh release verify é o que vincula uma versão.

Provedores de LLM

A Cynative conversa com LLMs por meio do SDK Bifrost incorporado e suporta quase qualquer provedor de IA prontamente (OpenAI, Anthropic, Azure OpenAI, Amazon Bedrock, Google Vertex/Gemini, Cohere, Mistral, Groq, Ollama, vLLM e mais). Escolha um em docs/providers/README.md e siga o guia desse provedor.

Exemplos 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 Avançado</strong></summary>

Para balanceamento de carga com múltiplas chaves, comportamento personalizado de novas tentativas, configuração de proxy,
ou qualquer outro recurso do Bifrost, escreva um arquivo 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

Consulte docs/providers/ para a referência de configuração de cada provedor suportado.

Sessões e aprovações

O cynative abre uma sessão interativa (edição completa de linha e histórico com setas); cynative "tarefa" executa a tarefa e permanece interativo; -p / --print executa uma única tarefa de forma não interativa e sai - para scripts e pipes (ex.: cat main.tf | cynative -p "revise este Terraform para misconfigurações"). O código de saída carrega o veredito para scripts: 0 quando um relatório foi produzido, 2 quando a execução terminou sem resposta (o aviso indica o motivo - orçamento de iterações ou tokens, resposta do modelo vazia ou filtrada), 130 em interrupção, 143 em SIGTERM e 1 para qualquer outra falha.

O Cynative chama sua stack usando as credenciais já presentes no seu shell - ele não mantém um armazenamento separado de credenciais. Sempre forneça a credencial somente-leitura com privilégios mínimos necessária.

Aprovações: cada chamada de ferramenta aguarda uma única tecla: y executa uma vez, a libera todas as chamadas posteriores àquela ferramenta na sessão (scripts ainda imprimem antes de executar), qualquer outra tecla nega. Sem terminal de controle, use --auto-approve.

Parando no meio da tarefa: enquanto uma tarefa está em execução, pressione Esc ou Ctrl-C uma vez para interrompê-la graciosamente (o agente finaliza qualquer chamada já em andamento, então para e imprime ⏸ Parado). Quando o agente encontra erros ou rejeições repetidos de ferramentas, ele para automaticamente, resume o que está bloqueando e pede as informações ausentes.

Bash Completion: Consulte cynative completion <shell> --help para as instruções completas de instalação de cada shell.

O Cynative imprime um rodapé operacional curto (tempo, uso de tokens) em stderr - redirecionar stdout (cynative -p "..." > out.txt) mantém a resposta capturada limpa. --version imprime versão, commit, data de build, versão do Go e plataforma.

cynative doctor valida a configuração e a prontidão dos conectores sem iniciar uma sessão de pesquisa. Passe --live-llm para também testar o modelo configurado com uma ida e volta sem ferramentas.

Controles de recursos e custos para execuções não supervisionadas

Controles de recursos e custos: para execuções não supervisionadas, agendadas ou de horizonte longo - integradas a cron, CI ou qualquer gatilho - limite o trabalho explicitamente. Os principais controles (chaves de configuração / variáveis de ambiente):

Chave de configuração / env varPadrãoEfeito
max_total_tokens
CYNATIVE_MAX_TOTAL_TOKENS
0 (ilimitado)Teto de tokens por sessão, compartilhado entre o loop principal, subagentes de tarefa, o verificador sempre ativo e acompanhamentos interativos.
max_iterations
CYNATIVE_MAX_ITERATIONS
32Máximo de iterações de chamadas de ferramentas do loop principal por turno.
max_subagent_iterations
CYNATIVE_MAX_SUBAGENT_ITERATIONS
10Máximo de iterações dentro de um subagente de tarefa.
max_consecutive_failures
CYNATIVE_MAX_CONSECUTIVE_FAILURES
5Chamadas de ferramentas consecutivas sem progresso antes de parar e resumir (0 desativa).
sandbox_max_concurrency
CYNATIVE_SANDBOX_MAX_CONCURRENCY
16Máximo de chamadas de ferramentas simultâneas no sandbox.

A verificação de achados (ferramenta verify_findings) faz chamadas extras ao modelo - reserve orçamento para elas em qualquer execução que produza achados.

Conectores

Além das credenciais no seu shell, o Cynative impõe somente-leitura em três camadas:

  • Rede - cada host de requisição é fixado ao seu serviço e região mapeados e o IP resolvido é verificado antes de conectar - seu agente pode alcançar sua infraestrutura e nada mais.
  • Portão de ações - cada operação é resolvida para suas ações IAM necessárias, derivadas das definições de API dos próprios provedores, e então autorizada por uma política somente-leitura antes de qualquer credencial ser anexada: SecurityAudit (AWS), roles/viewer (GCP), Reader (Azure). A cobertura acompanha as APIs de nuvem conforme crescem, e o portão falha fechado em qualquer coisa que classifique como escrita. Para Kubernetes, a política é o papel RBAC view ativo do próprio cluster, obtido em tempo de execução e aplicado por requisição. GitHub e GitLab são somente-leitura por padrão; uma configuração connectors.{github,gitlab}.permissions pode permitir escrita em categorias específicas onde um fluxo de trabalho precisar, aplicada por requisição antes de o token ser anexado. Mesmo em modo somente-leitura, os endpoints de varredura de segredos do GitHub permanecem bloqueados e a API GraphQL do GitLab é negada.
  • Credencial (AWS) - para identidades de função assumida, as credenciais são reemitidas via STS AssumeRole, limitadas a uma política gerenciada (SecurityAudit por padrão), para que o IAM da AWS também aplique o limite. Identidades de usuário IAM e raiz executam com suas credenciais base, controladas pelo portão de ações acima.

O Cynative conecta AWS, GCP, Azure, EKS/GKE/AKS, Kubernetes autogerenciado, GitHub e GitLab. Consulte docs/connectors/README.md para descoberta de credenciais, endurecimento, limitações e exemplos específicos de conectores.

Execução de código e orquestração de ferramentas

Para trabalho em massa - "verifique cada bucket S3 público", "liste clusters EKS em cada região" - o Cynative pode escrever e executar JavaScript em um sandbox em vez de emitir uma chamada de ferramenta por vez. As ferramentas do agente (ex.: http_request) são expostas como funções JavaScript async, para que ele faça loops, filtre e encadeie chamadas em código - e execute chamadas independentes simultaneamente com o auxiliar integrado mapConcurrent(items, fn, limit) (ou await Promise.all([...]) para conjuntos fixos pequenos). Somente o que o script registra com console.log retorna ao modelo, mantendo a pesquisa rápida e eficiente em 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));

- **Assíncrono e concorrente**: as funções da ferramenta retornam Promises - use `await` nelas, distribua
  por muitos recursos com `mapConcurrent(items, fn, limit)` (limitado,
  preservando a ordem), ou use `await Promise.all([...])` para conjuntos fixos pequenos.
- **Respostas estruturadas**: `http_request` resolve para `{ status, statusText,
  headers, body }`; `body` é a string bruta - `JSON.parse(resp.body)` para APIs
  JSON ou leia diretamente para XML.
- **Em sandbox**: um script só pode chamar as ferramentas que o Cynative expõe - ele não tem
  acesso próprio à rede ou ao host.
- **Você vê o script inteiro**: cada chamada `code_execution` é exibida por completo para
  aprovação antes de ser executada (pule com `--auto-approve`; transmita cada chamada interna
  com `-v`).
- **Com estado dentro de uma sessão**: valores salvos em `globalThis` persistem entre
  chamadas durante uma sessão interativa, desde que a chamada seja concluída
  (uma que expire ou fique suspensa os redefine); `let`/`const`/`var`/`function`
  de nível superior são limitados a uma única chamada.
- **Limitado**: os scripts são executados com um tempo limite (padrão 120s) e um tamanho
  de saída limitado.

## Registro de auditoria

Cada chamada de ferramenta é registrada em um registro de auditoria JSONL persistente (`~/.cynative/audit.log`, ativado por padrão). O registro é à prova de falhas: se uma chamada não puder ser registrada, a execução é abortada. Cada entrada de uma execução de agente também registra o nome do agente, a origem e o digest do arquivo, para que uma descoberta possa ser rastreada até o prompt exato que a produziu.

Os resultados das ferramentas são editados antes de serem gravados, mas os argumentos do prompt de aprovação são armazenados literalmente - o registro pode conter valores sensíveis. Ele só pode ser lido pelo usuário que executou o Cynative. A rotação e a retenção são configuráveis.

Configure em `audit:` em `~/.cynative/config.yaml`, ou via env:

| Chave | Env | Padrão |
|---|---|---|
| `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` |

## Perguntas e feedback

[Discussions](https://github.com/cynative/cynative/discussions) é o melhor lugar para compartilhar seu feedback - para onde você o apontou, o que voltou e o que está faltando. Estrelas ajudam as pessoas a encontrar o projeto.

## Contribuindo

Contribuições são bem-vindas - novos agentes, conectores, conjuntos de dados de avaliação e
melhorias em geral. Veja [CONTRIBUTING.md](https://github.com/cynative/cynative/blob/main/CONTRIBUTING.md) para a configuração de
desenvolvimento, o gate `make check` e as convenções de PR, e [SECURITY.md](https://github.com/cynative/cynative/blob/main/SECURITY.md)
para relatar vulnerabilidades.

## Licença

Licença Apache-2.0. Veja [LICENSE](https://github.com/cynative/cynative/blob/main/LICENSE) para o texto completo.

Categorias