返回更新列表
新发布Jul 29, 2026

cynative v1.8.0

只读 AI 代理,可查询你的云、代码和运行时基础设施,以发现错误配置、泄露的机密和权限提升路径,并提供经过验证、有证据支持的结果。

分享

cynative

构建你自己的安全代理

用于安全代理的开源框架,可对您的基础设施进行实时、只读访问。

CI Release License: Apache-2.0 OpenSSF Best Practices

快速开始 · 你的第一个代理 · 文档

向你的基础设施询问任何问题。 Cynative 在您的代码、云和运行时环境中运行前沿模型——将 GitHub、GitLab、AWS、GCP、Azure 和 Kubernetes 作为一个系统进行推理——并返回经过验证的答案。```bash cynative "what in my cloud is publicly exposed that shouldn't be?"

它会在一个临时沙箱中编写并运行代码,并行查询你的 API,因此一个问题就能扩散到你的整个技术栈。每一条发现都会被交叉验证,并追溯到其来源。

与编码代理和 MCP 服务器不同,它在**构造上就是只读的**:每一次调用在附加凭据*之前*都会经过门控和授权——可以放心地将其指向生产环境。
<!-- END agent-about -->

<p align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/9087/1b3db179a03479f5951d624c8adbb4890465aa86d038d3312dc9aec9801bcfb9.gif"
       alt="cynative 审计从 CI 到云端的权限提升"
       width="900">
</p>

## 你的代理能获得什么

- **代码到运行时**:可推理 AWS、GCP、Azure、任意 K8s、GitHub 和 GitLab
- **沙箱**:生成并运行代码以进行规模化研究,自身不拥有网络或主机访问权限
- **操作门控**:将每次调用解析为其所需的 IAM 操作,并在附加凭据之前应用只读策略
- **证据支撑**:通过交叉验证来核实每一条发现
- **自主可控**:单一二进制文件,你的模型、你的数据始终归你所有

## 快速开始

安装并设置一个 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=...

它会自动获取你 shell 中已有的凭据。随便问它什么:```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"

## 你的第一个代理

代理是一个 Markdown 文件:一行描述,然后是提示词。文件名即名称。要添加你自己的代理,请创建 `~/.cynative/agents/` 并在其中写入一个。Cynative 不会为你创建此目录:```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

参见 docs/agents.md 了解格式。

运行代理```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` 与 `-p`、`--auto-approve`、`--config` 以及管道标准输入组合使用,因此同一个文件在开发时可交互运行,一旦稳定后即可非交互运行。

代理从 `~/.cynative/agents/` 以及内置在二进制文件中的集合中读取;用户文件优先于同名的内置文件。`cynative agents list` 显示每个代理及其来源,并标记被遮蔽的副本,而 `cynative agents show <name>` 打印将要运行的确切文件。

## 带 MCP 的编码代理难道做不到吗?

| | 编码代理 + MCP | Cynative |
|---|---|---|
| 吞吐量 | 每次调用一个操作 | 编写沙箱化代码,并发分发调用——更少的令牌,更快的答案 |
| 发现结果 | 未经验证的输出 | 验证器将每个发现与实时证据交叉核对 |
| 只读 | 可选加入的读取过滤器 | 默认开启,失败即关闭——所需 IAM 操作会对照安全审计策略进行检查。`secretsmanager:GetSecretValue` 是 IAM *读取*:过滤器允许它,`SecurityAudit` 阻止它 |
| 凭据 | 环境原样,未更改 | STS 会话限定为只读——AWS 也强制执行该边界 |
| 爆炸半径 | 你的 shell,任何网络 | 研究代码在沙箱中运行,无主机访问权限,网络固定到你映射的服务 |
| 机密 | 按原样发送给模型 | 在发送给模型之前,从工具输出中编辑掉 |
| 供应链 | 使用你的凭据运行的第三方 MCP 和技能 | 一个开源二进制文件,连接器内置 |
| 审计追踪 | 分散的会话日志,尽力而为 | 每次工具调用的失败即关闭 JSONL 日志——如果无法记录,则中止 |

一个二进制文件,你的模型端点,你的账户。在它所审计的云中的实例上运行它,通过该云托管的推理,一切都不会离开你的环境:在你的基础设施上,从你的基础设施内部,保障安全。

## 安装

**Homebrew**(macOS / Linux——推荐):```bash
brew install cynative/tap/cynative

安装脚本(macOS / Linux - 将下载内容的 SHA-256 与发布版 checksums.txt 进行校验,失败即中止):```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
更新、卸载、Windows 详情、版本固定及手动下载

更新 / 卸载

方法更新卸载
Homebrewbrew upgrade cynativebrew uninstall cynative
安装脚本重新运行单行命令curl -fsSL https://raw.githubusercontent.com/cynative/cynative/main/install.sh | sh -s -- --uninstall
Scoopscoop update cynativescoop uninstall cynative

Windows(PowerShell 脚本): irm https://raw.githubusercontent.com/cynative/cynative/main/install.ps1 | iex;使用 & ([scriptblock]::Create((irm https://raw.githubusercontent.com/cynative/cynative/main/install.ps1))) -Uninstall 卸载。

安装脚本选项: 使用 CYNATIVE_VERSION=v1.0.0 固定版本;使用 CYNATIVE_INSTALL_DIR 更改目标目录(默认 ~/.local/bin,无需 sudo)。当安装了 gh 时,脚本会检查 GitHub 发布证明(默认仅作提示);设置 CYNATIVE_REQUIRE_ATTESTATION=1 可将检查失败视为致命错误。如需高完整性安装,请从不可变标签而非 main 分支获取脚本。

macOS(手动):发布页面下载 cynative_Darwin_arm64.pkg(Apple Silicon)或 cynative_Darwin_x86_64.pkg(Intel),并使用 sudo installer -pkg <file> -target / 安装(或双击)。这些包已签名、公证并盖章——首次运行不会出现 Gatekeeper 提示。原始 cynative_Darwin_*.tar.gz 归档仍可用于脚本/CI;被隔离的压缩包二进制文件首次 GUI 启动需要联网以进行在线公证检查(终端/install.sh/Homebrew 使用不受影响)。

Linux / Windows(手动):发布页面下载预构建二进制文件和 checksums.txt,验证 SHA-256,并将二进制文件放入你的 PATH。单个静态二进制文件,无依赖。

验证发布签名(可选)。 新版本附带 checksums.txt.sigstore.json,这是一个 Sigstore 捆绑包,使用绑定到本仓库发布工作流的无密钥证书对 checksums.txt 进行签名。先验证清单,再对照它检查你的归档文件:```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

本部分涵盖 checksums.txt 中列出的归档文件。.pkg 安装程序采用 Developer ID 签名、公证并盖章,此外每个资产还受 GitHub 发布证明(gh release verify <tag>)的额外保护。有两个值得了解的局限:除非传入 --trusted-root,否则 cosign 会通过网络获取 Sigstore 的信任根;另外,由于文件名不携带版本号,签名只能证明来源和完整性,而无法证明一组散乱文件来自哪个发布版本——发布 URL 或 gh release verify 才是绑定版本的方式。

LLM 提供商

Cynative 通过内置的 Bifrost SDK 与 LLM 通信,并开箱即用地支持几乎所有 AI 提供商(OpenAI、Anthropic、Azure OpenAI、Amazon Bedrock、Google Vertex/Gemini、Cohere、Mistral、Groq、Ollama、vLLM 等)。从 docs/providers/README.md 中选择一个,并按照该提供商的指南操作。

快速示例```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</strong></summary>

如需多键负载均衡、自定义重试行为、代理配置,
或任何其他 Bifrost 功能,请编写一个 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

参见 docs/providers/ 了解每个受支持提供商的配置参考。

会话与审批

cynative 会打开一个交互式会话(支持完整行编辑及方向键历史记录);cynative "task" 会先运行任务,然后保持交互状态;-p / --print 以非交互方式运行单个任务并退出——适用于脚本和管道(例如 cat main.tf | cynative -p "review this Terraform for misconfigurations")。退出码会为脚本传达判定结果:生成报告时为 0,运行完成但未得到答案时为 2(提示信息会说明原因——迭代或令牌预算耗尽、模型响应为空或被过滤),中断时为 130,SIGTERM 时为 143,其他任何失败为 1。

Cynative 使用你 shell 中已有的凭据调用你的技术栈——它不单独保存凭据存储。始终提供所需的最低权限、只读凭据

审批: 每次工具调用都会等待一次按键:y 运行一次,a 清除该会话中对该工具的后续所有调用(脚本在运行前仍会打印),任何其他键则拒绝。若没有控制终端,请使用 --auto-approve

任务中途停止: 任务运行期间,按一次 EscCtrl-C 可优雅停止(代理会完成当前正在运行的调用,然后停止并打印 ⏸ Stopped)。当代理反复遇到工具错误或被拒绝时,它会自动停止,总结其受阻的原因,并请求缺失的信息。

Bash 补全: 参见 cynative completion <shell> --help 获取各 shell 的完整安装说明。

Cynative 会将简短的操作页脚(耗时、令牌用量)打印到 stderr——重定向 stdout(cynative -p "..." > out.txt)可保持捕获的答案干净。--version 会打印版本、提交、构建日期、Go 版本和平台。

cynative doctor 会验证配置和连接器就绪状态,而无需启动研究会话。传入 --live-llm 还可通过一次无工具的往返来探测所配置的模型。

无人值守运行时的资源与成本控制

资源与成本控制: 对于无人值守、定时或长周期运行——接入 cron、CI 或任何触发器——请明确限制工作范围。关键旋钮(配置键 / 环境变量):

配置键 / 环境变量默认值作用
max_total_tokens
CYNATIVE_MAX_TOTAL_TOKENS
0(无限制)每次会话的令牌上限,在主循环、任务子代理、常驻验证器及交互式追问之间共享。
max_iterations
CYNATIVE_MAX_ITERATIONS
32每轮主循环工具调用迭代的最大次数。
max_subagent_iterations
CYNATIVE_MAX_SUBAGENT_ITERATIONS
10任务子代理内部的最大迭代次数。
max_consecutive_failures
CYNATIVE_MAX_CONSECUTIVE_FAILURES
5连续无进展的工具调用达到该次数后停止并总结(0 表示禁用)。
sandbox_max_concurrency
CYNATIVE_SANDBOX_MAX_CONCURRENCY
16沙箱内并发工具调用的最大数量。

发现验证(verify_findings 工具)会产生额外的模型调用——在任何会产生发现的运行中,请为其预留预算。

连接器

除了你 shell 中的凭据之外,Cynative 还在三个层面强制实施只读:

  • 网络——每个请求的主机都被固定到其映射的服务和区域,并在连接前验证解析出的 IP——你的代理只能访问你的基础设施,其他任何内容都无法访问。
  • 操作门控——每个操作都会被解析为其所需的 IAM 操作(根据提供商自身的 API 定义推导),然后在附加任何凭据之前由只读策略授权:SecurityAudit(AWS)、roles/viewer(GCP)、Reader(Azure)。覆盖范围会随云 API 的增长而跟进,并且门控会对任何其归类为写入的操作采取失败关闭策略。对于 Kubernetes,该策略是集群自身实时的 view RBAC 角色,在运行时获取并按请求强制执行。GitHub 和 GitLab 默认只读;connectors.{github,gitlab}.permissions 设置可在特定类别上允许写入(当工作流需要时),并在附加令牌之前按请求强制执行。即使在只读模式下,GitHub 的密钥扫描端点仍保持阻止状态,GitLab 的 GraphQL API 也被拒绝。
  • 凭据(AWS)——对于采用角色身份,凭据会通过 STS AssumeRole 重新签发,并限定到托管策略(默认为 SecurityAudit),因此 AWS IAM 也会强制执行该边界。IAM 用户和根身份使用其基础凭据运行,并由上述操作门控把关。

Cynative 可连接 AWS、GCP、Azure、EKS/GKE/AKS、自管理 Kubernetes、GitHub 和 GitLab。参见 docs/connectors/README.md 了解凭据发现、加固、限制及连接器特定示例。

代码执行与工具编排

对于批量工作——例如“检查每个公共 S3 存储桶”“列出每个区域的 EKS 集群”——Cynative 可以在沙箱中编写并运行 JavaScript,而不是一次发出一个工具调用。代理的工具(例如 http_request)以 async JavaScript 函数的形式暴露,因此它可以在代码中循环、过滤和串联调用——并使用内置的 mapConcurrent(items, fn, limit) 辅助函数(或对小型固定集合使用 await Promise.all([...]))并发运行独立调用。 只有脚本通过 console.log 输出的内容才会返回给模型,从而保持研究快速且令牌高效。```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));

- **异步与并发**:工具函数返回 Promise——使用 `await` 等待它们,通过 `mapConcurrent(items, fn, limit)` 在多个资源上并行展开(有界、保持顺序),或对小型固定集合使用 `await Promise.all([...])`。
- **结构化响应**:`http_request` 解析为 `{ status, statusText, headers, body }`;`body` 是原始字符串——对 JSON API 使用 `JSON.parse(resp.body)`,或直接读取以处理 XML。
- **沙箱化**:脚本只能调用 Cynative 暴露的工具——它本身没有网络或主机访问权限。
- **你看到整个脚本**:每次 `code_execution` 调用在运行前都会完整显示以供批准(使用 `--auto-approve` 跳过;使用 `-v` 流式查看每个内部调用)。
- **会话内有状态**:在交互式会话期间,只要调用运行到完成,保存在 `globalThis` 上的值就会在多次调用间持续存在(超时或保持挂起的调用会重置它们);顶层 `let`/`const`/`var`/`function` 仅作用于单个调用。
- **有界**:脚本在超时(默认 120 秒)和输出大小上限下运行。

## 审计日志

每次工具调用都会记录到持久化的 JSONL 审计日志(`~/.cynative/audit.log`,默认开启)。该日志采用故障关闭策略:如果调用无法被记录,运行将中止。来自代理运行的每条条目还会记录代理的名称、来源和文件摘要,因此发现结果可以追溯到生成它的确切提示词。

工具结果在写入前会被编辑,但批准提示参数会原样存储——日志可能包含敏感值。只有运行 Cynative 的用户才能读取该日志。轮转和保留策略可配置。

在 `~/.cynative/config.yaml` 的 `audit:` 下配置,或通过环境变量:

| 键 | 环境变量 | 默认值 |
|---|---|---|
| `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` |

## 问题与反馈

[讨论区](https://github.com/cynative/cynative/discussions) 是分享反馈的最佳场所——你让它指向了什么、返回了什么结果,以及缺少什么。星标有助于更多人发现该项目。

## 贡献

欢迎各种贡献——新代理、连接器、评估数据集以及全面的改进。开发环境搭建、`make check` 门槛和 PR 约定请参阅 [CONTRIBUTING.md](https://github.com/cynative/cynative/blob/main/CONTRIBUTING.md),报告漏洞请参阅 [SECURITY.md](https://github.com/cynative/cynative/blob/main/SECURITY.md)。

## 许可证

Apache-2.0 许可证。完整文本请参阅 [LICENSE](https://github.com/cynative/cynative/blob/main/LICENSE)。

分类