
cynative v1.9.2
読み取り専用の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`、パイプされた stdin と組み合わせて使用できるため、開発中は同じファイルを対話的に実行し、安定したら非対話的に実行できます。
エージェントは `~/.cynative/agents/` とバイナリに組み込まれたセットから読み込まれます。同名の組み込みエージェントよりユーザーファイルが優先されます。`cynative agents list` はすべてのエージェントをソース付きで表示し、シャドウされたコピーにマークを付けます。`cynative agents show <name>` は実際に実行される正確なファイルを表示します。
## MCP を備えたコーディングエージェントではダメなのか?
| | コーディングエージェント + MCPs | Cynative |
|---|---|---|
| スループット | 呼び出しごとに1アクション | サンドボックス化されたコードを書き、呼び出しを並行に展開 - 少ないトークン、高速な回答 |
| 検出結果 | 未検証の出力 | 検証器がすべての検出結果を実証エビデンスと照合 |
| 読み取り専用 | オプトインの読み取りフィルター | デフォルトでオン、フェイルクローズ - 必要な IAM アクションをセキュリティ監査ポリシーと照合。`secretsmanager:GetSecretValue` は IAM の*読み取り*です。フィルターは許可し、`SecurityAudit` はブロックします |
| 認証情報 | 環境そのまま、変更なし | 読み取り専用にスコープされた STS セッション - AWS も境界を強制 |
| ブラスト半径 | 自分のシェル、任意のネットワーク | 調査コードはホストアクセスなしのサンドボックスで実行され、ネットワークはマッピングされたサービスに限定 |
| シークレット | モデルにそのまま送信 | モデルに送信される前にツール出力から秘匿化 |
| サプライチェーン | サードパーティの MCP やスキルが自分の認証情報で実行 | オープンソースの単一バイナリ、コネクタ内蔵 |
| 監査証跡 | 散在するセッションログ、ベストエフォート | すべてのツール呼び出しのフェイルクローズ JSONL ログ - 記録できない場合は中断 |
バイナリ1つ、あなたのモデルエンドポイント、あなたのアカウント。監査対象のクラウド上のインスタンスで、そのクラウドのマネージド推論を介して実行すれば、環境の外に出るものは何もありません。あなたのインフラのセキュリティを、あなたのインフラの中から実現します。
## インストール
**Homebrew** (macOS / Linux - 推奨):```bash
brew install cynative/tap/cynative
インストールスクリプト (macOS / Linux - リリースの checksums.txt に対してダウンロードの SHA-256 を検証し、失敗時は停止します):```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の詳細、バージョン固定、手動ダウンロード
更新 / アンインストール
| Method | Update | Uninstall |
|---|---|---|
| Homebrew | brew upgrade cynative | brew uninstall cynative |
| Install script | ワンライナーを再実行 | 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 (手動): releases page から 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 (手動): releases page からプリビルドバイナリと checksums.txt をダウンロードし、SHA-256 を検証して、バイナリを PATH に配置します。単一の静的バイナリで、依存関係はありません。
リリース署名の検証 (任意)。 新しいリリースには checksums.txt.sigstore.json が同梱されます。これは、このリポジトリのリリースワークフローに紐づいたキーレス証明書で checksums.txt に署名する Sigstore バンドルです。マニフェストを認証し、それに対してアーカイブを確認してください:
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 "review this Terraform for misconfigurations")。
Cynative は、シェルに既にある認証情報を使ってスタックを呼び出します。個別の認証情報ストアは保持されません。常に、必要な最小権限の読み取り専用認証情報を提供してください。
承認: 各ツール呼び出しは単一のキー入力待ちになります。y は一度だけ実行し、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) - assumed-role アイデンティティの場合、認証情報は STS
AssumeRoleを介して再発行され、 管理ポリシー(デフォルトではSecurityAudit)にスコープされるため、AWS IAM も境界を強制します。 IAM ユーザーとルートアイデンティティは基本認証情報で実行され、 上記のアクションゲートによって制御されます。
Cynative は AWS、GCP、Azure、EKS/GKE/AKS、セルフマネージド Kubernetes、GitHub、GitLab に接続します。 認証情報の検出、堅牢化、制限事項、コネクター固有の例については、docs/connectors/README.md を参照してください。
コード実行とツールオーケストレーション
大量の処理(「すべてのパブリック S3 バケットを確認する」、「すべてのリージョンの EKS クラスターを一覧表示する」など)では、Cynative は1回につき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));
- **Async & concurrent**: ツール関数は Promise を返します - `await` で待機し、
`mapConcurrent(items, fn, limit)` で多数のリソースに並列展開できます(上限付き、
順序保持)。または、小さな固定セットには `await Promise.all([...])` を使用します。
- **Structured responses**: `http_request` は `{ status, statusText,
headers, body }` に解決されます。`body` は生の文字列です。JSON API では `JSON.parse(resp.body)` を使用し、
XML では直接読み取ります。
- **Sandboxed**: スクリプトは Cynative が公開するツールのみを呼び出せます。スクリプト自体には
ネットワークやホストへのアクセス権はありません。
- **You see the whole script**: 各 `code_execution` 呼び出しは、実行前に承認用として全体が
表示されます(`--auto-approve` でスキップ、`-v` で各内部呼び出しを
ストリーミング表示)。
- **Stateful within a session**: インタラクティブセッション中、`globalThis` に保存された値は
呼び出しをまたいで保持されます。トップレベルの `let`/`const`/`var`/
`function` は単一の呼び出し内にスコープされます。
- **Bounded**: スクリプトはタイムアウト(デフォルト 120 秒)と、
出力サイズ上限の下で実行されます。
## 監査ログ
すべてのツール呼び出しは、永続的な JSONL 監査ログ(`~/.cynative/audit.log`、デフォルトで有効)に記録されます。このログはフェイルクローズ方式です。呼び出しを記録できない場合、実行は中止されます。エージェント実行の各エントリには、エージェント名、ソース、ファイルダイジェストも記録されるため、検出結果をそれを生成した正確なプロンプトまで遡ることができます。
ツールの結果は書き込まれる前に編集(redact)されますが、承認プロンプトの引数はそのまま保存されるため、ログには機密値が含まれる可能性があります。ログは 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/HEAD/CONTRIBUTING.md) を、脆弱性の報告については [SECURITY.md](https://github.com/cynative/cynative/blob/HEAD/SECURITY.md) を参照してください。
## ライセンス
Apache-2.0 ライセンス。全文は [LICENSE](https://github.com/cynative/cynative/blob/HEAD/LICENSE) を参照してください。