
cynative v1.8.0
読み取り専用のAIエージェントが、クラウド、コード、およびランタイムインフラストラクチャをクエリし、設定ミス、漏洩したシークレット、特権昇格パスを、検証済みの証拠に基づく発見とともに表面化します。

独自のセキュリティエージェントを構築
インフラストラクチャへのライブかつ読み取り専用アクセスを備えたセキュリティエージェントのためのオープンソースフレームワーク。
インフラストラクチャに何でも質問できます。 Cynativeは、コード、クラウド、ランタイム全体にわたってフロンティアモデルを実行し、GitHub、GitLab、AWS、GCP、Azure、Kubernetesを単一のシステムとして推論し、検証済みの回答を返します。```bash cynative "what in my cloud is publicly exposed that shouldn't be?"
エフェメラルサンドボックス内でコードを記述・実行し、APIを並列に照会するため、1つの質問がスタック全体に広がります。すべての発見は相互検証され、その発生源まで追跡されます。
コーディングエージェントや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"
## 最初のエージェント
エージェントはマークダウンファイルです。1行の説明の後にプロンプトが続きます。ファイル名が名前になります。独自のエージェントを追加するには、`~/.cynative/agents/` を作成し、その中に1つ書き込んでください。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 |
|---|---|---|
| スループット | 呼び出しごとに1アクション | サンドボックス化されたコードを書き、呼び出しを並行して展開 - トークン削減、高速な回答 |
| 調査結果 | 未検証の出力 | 検証者が各調査結果をライブの証拠と照合 |
| 読み取り専用 | オプトインの読み取りフィルター | デフォルトでオン、フェイルクローズ - 必要なIAMアクションをセキュリティ監査ポリシーと照合。`secretsmanager:GetSecretValue` はIAM *読み取り* です:フィルターは許可しますが、`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の詳細、バージョン固定、手動ダウンロード
更新 / アンインストール
| 方法 | 更新 | アンインストール |
|---|---|---|
| Homebrew | brew upgrade cynative | brew uninstall cynative |
| インストールスクリプト | ワンライナーを再実行 | curl -fsSL https://raw.githubusercontent.com/cynative/cynative/main/install.sh | sh -s -- --uninstall |
| Scoop | scoop update cynative | scoop 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用に残されています。隔離されたtarballバイナリの初回GUI起動時には、オンライン公証チェックのためインターネット接続が必要です(ターミナル/install.sh/Homebrewの使用には影響しません)。
Linux / Windows(手動): リリースページ からプリビルドバイナリと checksums.txt をダウンロードし、SHA-256を検証して、バイナリを PATH に配置します。依存関係のない単一の静的バイナリです。
リリース署名の検証(任意)。 新しいリリースには checksums.txt.sigstore.json が同梱されています。これは、このリポジトリのリリースワークフローに紐付けられたキーレス証明書で checksums.txt に署名する Sigstore バンドルです。マニフェストを認証してから、アーカイブをそれに対して確認します:```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 署名、公証(notarized)、およびステープル(stapled)処理が施されており、さらにすべてのアセットは GitHub リリースのアテステーション(gh release verify <tag>)によっても保護されています。知っておくべき制限が2つあります。cosign は --trusted-root を渡さない限り、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 から1つを選び、そのプロバイダのガイドに従ってください。
クイック例
```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.jsonOpenAI
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 "このTerraformを設定ミスについてレビューして")。終了コードはスクリプト向けに判定結果を伝えます: レポートが生成された場合は0、回答なしで実行が完了した場合は2(通知に理由が記載されます - 反復回数やトークン予算、空またはフィルタリングされたモデル応答など)、割り込み時は130、SIGTERM時は143、その他の失敗は1です。
Cynative は、シェル内の既存の認証情報を使用してスタックを呼び出します。別途認証情報ストアは保持しません。常に最小権限の読み取り専用認証情報を提供してください。
承認: 各ツール呼び出しは単一のキー入力を待ちます: y は1回実行、a はセッション中のそのツールへの以降のすべての呼び出しを許可(スクリプトは実行前に出力されます)、その他のキーは拒否します。制御端末がない場合は --auto-approve を使用してください。
タスク途中の停止: タスク実行中に Esc または Ctrl-C を1回押すと、グレースフルに停止します(エージェントは実行中の呼び出しを完了させてから停止し、⏸ Stopped と表示します)。エージェントが繰り返しツールエラーや拒否に遭遇すると自動的に停止し、何がブロックされているかを要約して、不足情報を求めます。
Bash 補完: 各シェルの完全なインストール手順は cynative completion <shell> --help を参照してください。
Cynative は短い運用フッター(タイミング、トークン使用量)を stderr に出力します。stdout をリダイレクト(cynative -p "..." > out.txt)すると、取得した回答をクリーンに保てます。--version はバージョン、コミット、ビルド日、Go バージョン、プラットフォームを出力します。
cynative doctor は、リサーチセッションを開始せずに設定とコネクタの準備状態を検証します。--live-llm を渡すと、ツールなしのラウンドトリップで設定済みモデルもプローブします。
無人実行のためのリソース & コスト制御
リソース & コスト制御: cron、CI、その他のトリガーに組み込まれた無人・スケジュール・長時間実行では、作業を明示的に制限してください。主な設定項目(設定キー / 環境変数):
| 設定キー / 環境変数 | デフォルト | 効果 |
|---|---|---|
max_total_tokensCYNATIVE_MAX_TOTAL_TOKENS | 0(無制限) | セッションあたりのトークン上限。メインループ、タスクサブエージェント、常時稼働の検証器、対話型フォローアップで共有されます。 |
max_iterationsCYNATIVE_MAX_ITERATIONS | 32 | ターンあたりのメインループのツール呼び出し反復の最大数。 |
max_subagent_iterationsCYNATIVE_MAX_SUBAGENT_ITERATIONS | 10 | タスクサブエージェント内の最大反復回数。 |
max_consecutive_failuresCYNATIVE_MAX_CONSECUTIVE_FAILURES | 5 | 停止して要約するまでの連続した進捗なしツール呼び出し数(0で無効)。 |
sandbox_max_concurrencyCYNATIVE_SANDBOX_MAX_CONCURRENCY | 16 | サンドボックス内ツール呼び出しの最大同時実行数。 |
検証結果の確認(verify_findings ツール)は追加のモデル呼び出しを行います。検出結果を生成する実行では、その分の予算を確保してください。
コネクタ
シェル内の認証情報に加えて、Cynative は3つのレイヤーで読み取り専用を強制します:
- ネットワーク - すべてのリクエストホストは、マッピングされたサービスとリージョンに固定され、接続前に解決された IP が検証されます。エージェントはインフラストラクチャにのみ到達でき、それ以外には到達できません。
- アクションゲート - すべての操作は、プロバイダー自身の API 定義から導出された必要な IAM アクションに解決され、認証情報が添付される前に読み取り専用ポリシーによって承認されます:
SecurityAudit(AWS)、roles/viewer(GCP)、Reader(Azure)。カバレッジはクラウド API の成長に追従し、ゲートは書き込みと分類されるものすべてに対してフェイルクローズします。Kubernetes の場合、ポリシーはクラスター自身の稼働中のviewRBAC ロールであり、実行時に取得され、リクエストごとに強制されます。GitHub と GitLab はデフォルトで読み取り専用です。connectors.{github,gitlab}.permissions設定により、ワークフローで必要な特定のカテゴリへの書き込みを許可できます。これはトークンが添付される前にリクエストごとに強制されます。読み取り専用モードでも、GitHub のシークレットスキャンエンドポイントはブロックされたままになり、GitLab の GraphQL API は拒否されます。 - 認証情報(AWS) - 引き受けたロール ID の場合、認証情報は STS
AssumeRoleを介して再発行され、管理ポリシー(デフォルトではSecurityAudit)にスコープされるため、AWS IAM も境界を強制します。IAM ユーザーとルート ID は、上記のアクションゲートによって制御された基本認証情報で実行されます。
Cynative は AWS、GCP、Azure、EKS/GKE/AKS、セルフマネージド Kubernetes、GitHub、GitLab に接続します。認証情報の検出、堅牢化、制限、コネクタ固有の例については docs/connectors/README.md を参照してください。
コード実行とツールオーケストレーション
「すべてのパブリック S3 バケットを確認」「すべてのリージョンの EKS クラスターを一覧表示」などの一括作業では、Cynative は一度に1つのツール呼び出しを発行する代わりに、サンドボックス内で 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` |
## 質問とフィードバック
[Discussions](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) を参照してください。