Назад к обновлениям
New releaseJul 29, 2026

cynative v1.8.0

ИИ-агент с доступом только на чтение, который опрашивает вашу облачную инфраструктуру, код и среду выполнения, чтобы выявлять неверные конфигурации, утёкшие секреты и пути повышения привилегий, предоставляя проверенные результаты, подкреплённые доказательствами.

Поделиться

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=...

Он подхватывает учётные данные, уже находящиеся в вашей оболочке. Спросите его о чём угодно:```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` и передаваемым через stdin вводом, поэтому один и тот же файл работает интерактивно, пока вы его разрабатываете, и неинтерактивно, когда он стабилизируется.

Агенты читаются из `~/.cynative/agents/` и из набора, встроенного в бинарник; пользовательский файл имеет приоритет над встроенным с тем же именем. `cynative agents list` показывает каждого агента с его источником и помечает скрытые копии, а `cynative agents show <name>` выводит точный файл, который будет запущен.

## Разве кодинг-агент с MCP не справится с этим?

| | Кодинг-агент + MCP | Cynative |
|---|---|---|
| Пропускная способность | Одно действие за вызов | Пишет код в песочнице, который разворачивает вызовы параллельно — меньше токенов, быстрее ответы |
| Результаты | Непроверенный вывод | Верификатор перепроверяет каждый результат на основе живых доказательств |
| Только чтение | Опциональный фильтр чтения | Включён по умолчанию, закрывается при сбое — требуемые действия IAM проверяются по политике аудита безопасности. `secretsmanager:GetSecretValue` — это IAM *Read*: фильтр его разрешает, `SecurityAudit` блокирует |
| Учётные данные | Окружающие, без изменений | STS-сессия ограничена только чтением — AWS также обеспечивает соблюдение границы |
| Радиус поражения | Ваша оболочка, любая сеть | Исследовательский код выполняется в песочнице без доступа к хосту, сеть привязана к вашим сопоставленным сервисам |
| Секреты | Отправляются модели как есть | Редактируются из вывода инструмента до отправки модели |
| Цепочка поставок | Сторонние 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). Скрипт проверяет аттестацию релиза GitHub, когда установлен gh (по умолчанию — предупреждение); установите 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>). Стоит знать о двух ограничениях: cosign загружает доверенный корень Sigstore по сети, если не передать --trusted-root, а поскольку имена файлов не содержат версию, подпись подтверждает происхождение и целостность, но не то, из какого релиза взят тот или иной набор файлов — привязку к версии обеспечивает URL релиза или gh release verify.

Поставщики LLM

Cynative взаимодействует с LLM через встроенный SDK Bifrost и поддерживает практически любого поставщика ИИ из коробки (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 — при прерывании, 143 — при SIGTERM и 1 — при любой другой ошибке.

Cynative обращается к вашему стеку, используя учётные данные, уже присутствующие в вашей оболочке, — он не хранит отдельное хранилище учётных данных. Всегда предоставляйте учётные данные с минимальными привилегиями и доступом только на чтение.

Подтверждения: каждый вызов инструмента ожидает одно нажатие клавиши: y выполняет его один раз, a снимает все последующие вызовы этого инструмента на время сеанса (скрипты по-прежнему печатаются перед выполнением), любая другая клавиша отклоняет. При отсутствии управляющего терминала используйте --auto-approve.

Остановка в середине задачи: пока задача выполняется, нажмите Esc или Ctrl-C один раз для корректной остановки (агент завершает уже выполняющийся вызов, затем останавливается и выводит ⏸ Stopped). Когда агент сталкивается с повторяющимися ошибками инструментов или отклонениями, он останавливается автоматически, резюмирует, что его блокирует, и запрашивает недостающую информацию.

Автодополнение Bash: Полные инструкции по установке для каждой оболочки см. в cynative completion <shell> --help.

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) требует дополнительных вызовов модели — учитывайте их в бюджете при любом запуске, который создаёт находки.

Коннекторы

Помимо учётных данных в вашей оболочке, Cynative обеспечивает доступ только на чтение на трёх уровнях:

  • Сеть — каждый хост запроса привязан к своему сопоставленному сервису и региону, а разрешённый IP проверяется перед подключением — ваш агент может достичь вашей инфраструктуры и ничего больше.
  • Шлюз действий — каждая операция сопоставляется с требуемыми действиями IAM, полученными из собственных определений API провайдеров, затем авторизуется политикой только на чтение до прикрепления любых учётных данных: SecurityAudit (AWS), roles/viewer (GCP), Reader (Azure). Покрытие отслеживает облачные API по мере их роста, и шлюз закрывается с ошибкой на всём, что он классифицирует как запись. Для Kubernetes политикой является собственная активная RBAC-роль view кластера, получаемая во время выполнения и применяемая к каждому запросу. GitHub и GitLab доступны только на чтение по умолчанию; параметр connectors.{github,gitlab}.permissions может разрешить запись в конкретных категориях, где это требуется рабочему процессу, и применяется к каждому запросу до прикрепления токена. Даже в режиме только на чтение конечные точки секретного сканирования GitHub остаются заблокированными, а GraphQL API GitLab отклоняется.
  • Учётные данные (AWS) — для идентификаторов с предполагаемой ролью учётные данные повторно выдаются через STS AssumeRole, ограниченные управляемой политикой (SecurityAudit по умолчанию), поэтому AWS IAM также обеспечивает соблюдение границы. Идентификаторы IAM-пользователей и root работают со своими базовыми учётными данными, ограниченными вышеуказанным шлюзом действий.

Cynative подключается к AWS, GCP, Azure, EKS/GKE/AKS, самоуправляемому Kubernetes, GitHub и GitLab. См. docs/connectors/README.md для получения информации об обнаружении учётных данных, усилении защиты, ограничениях и примерах для конкретных коннекторов.

Выполнение кода и оркестрация инструментов

Для массовой работы — «проверить каждый публичный S3-бакет», «перечислить кластеры EKS во всех регионах» — Cynative может писать и выполнять JavaScript в песочнице вместо выдачи по одному вызову инструмента за раз. Инструменты агента (например, http_request) представлены как асинхронные функции 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));

- **Асинхронность и параллелизм**: функции инструментов возвращают Promises — используйте `await` для них, распределяйте нагрузку по множеству ресурсов с помощью `mapConcurrent(items, fn, limit)` (ограниченный, сохраняющий порядок), или используйте `await Promise.all([...])` для небольших фиксированных наборов.
- **Структурированные ответы**: `http_request` разрешается в `{ status, statusText, headers, body }`; `body` — это необработанная строка — используйте `JSON.parse(resp.body)` для JSON API или читайте её напрямую для XML.
- **Изолированная среда**: скрипт может вызывать только те инструменты, которые предоставляет Cynative — у него нет собственного доступа к сети или хосту.
- **Вы видите весь скрипт**: каждый вызов `code_execution` отображается полностью для одобрения перед запуском (пропустите с помощью `--auto-approve`; транслируйте каждый внутренний вызов с `-v`).
- **С сохранением состояния в рамках сессии**: значения, сохранённые на `globalThis`, сохраняются между вызовами во время интерактивной сессии, пока вызов выполняется до конца (тот, который истёк по таймауту или остался приостановленным, сбрасывает их); `let`/`const`/`var`/`function` верхнего уровня ограничены одним вызовом.
- **Ограниченность**: скрипты выполняются с таймаутом (по умолчанию 120 секунд) и ограниченным размером вывода.

## Журнал аудита

Каждый вызов инструмента записывается в постоянный JSONL-журнал аудита (`~/.cynative/audit.log`, включён по умолчанию). Журнал работает по принципу fail-closed: если вызов не может быть записан, выполнение прерывается. Каждая запись из запуска агента также фиксирует имя агента, источник и хэш файла, чтобы результат можно было проследить до точного промпта, который его создал.

Результаты инструментов редактируются перед записью, но аргументы промптов на одобрение сохраняются дословно — журнал может содержать чувствительные значения. Он доступен для чтения только пользователю, запустившему Cynative. Ротация и срок хранения настраиваются.

Настройка в разделе `audit:` в `~/.cynative/config.yaml` или через переменные окружения:

| Ключ | Переменная окружения | По умолчанию |
|---|---|---|
| `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) — лучшее место, чтобы поделиться отзывами: на что вы его направляли, что получили в ответ и чего не хватает. Звёзды помогают людям найти проект.

## Участие в разработке

Приветствуются любые вклады — новые агенты, коннекторы, наборы данных для оценки и улучшения во всех областях. См. [CONTRIBUTING.md](https://github.com/cynative/cynative/blob/main/CONTRIBUTING.md) для настройки разработки, проверки `make check` и соглашений о PR, а также [SECURITY.md](https://github.com/cynative/cynative/blob/main/SECURITY.md) для сообщения об уязвимостях.

## Лицензия

Лицензия Apache-2.0. Полный текст см. в [LICENSE](https://github.com/cynative/cynative/blob/main/LICENSE).

Категории