● Quin: 技術セットアップ
Quin は
こうスキャンする。
CLI を導入し、リポジトリを指定するだけで、監査対応の構造化されたレポートが得られます。コードの計装も、エージェント側の変更も不要です。
3ステップで使い始められます。
Pip でインストール
pip install quin-scanner
設定
cp .env.example .env cp scanner-config.yaml my-scanner-config.yaml
実行と確認
quin-scanner scan <target> --config my-scanner-config.yaml quin-scanner scan-org <org> --config my-scanner-config.yaml
スキャン中に何が起きているのか。
リポジトリ → 13のスキャナー → 脆弱性照会 → 2回のLLMパス → レポート。
13のスキャナー(並列)
依存関係、設定、コードパターン、ファイル構成、フレームワーク、プロンプト検出、Dockerfile、Jupyter、IaC、CI、MCP、エージェントインスタンス、ツール定義の各スキャナーが、リポジトリに対してローカルで実行されます。この時点ではLLM呼び出しは発生しません。
脆弱性の照会
フレームワークとベースバージョンが特定されると(例: CrewAI 0.80.0)、Quin は OSV.dev に照会し(認証不要、フレームワーク名とバージョンのみ送信)、必要に応じてウェブ検索付きのLLMで最新のアドバイザリを確認します。
パス1: 分類
LLM呼び出しでシステム種別(standard_ai、agentic_ai、mcp_enabled、multi_agent)を分類し、OWASP LLM Top 10、OWASP Agentic Top 10、OWASP MCP Top 10、MAESTRO、Databricks DASF に基づく分類体系から該当する脅威を特定します。
パス2: 要約
2回目のLLM呼び出しで、各エージェントを分類体系に照らしてプロファイルし、ツール利用をサービス分類に対応付け、レポートに載る説明文を生成します。
所要時間はリポジトリの規模と選択したLLMプロバイダーの応答時間に応じて変動し、固定ではありません。--no-llm を指定すると、スキャナーのみを実行し、2回のLLMパスをスキップします。
コードは実際にどこへ送られるのか。
セキュリティエンジニアが最初に尋ねる問いに、率直にお答えします。
お客様のAPIキー、お客様のプロバイダー
Quin は、お客様が設定したLLM APIキー(Anthropic、OpenAI、Google、またはローカルの Ollama モデル)を使用します。抽出されたコードとプロンプトは、お客様のマシンからそのプロバイダーへ直接送信され、Gaincontrol に送られることはありません。
完全ローカルモードも利用可能
--no-llm を指定すると、2回のLLMパスを完全にスキップします。スキャナーは引き続き実行され検出結果を生成します。このモードで発生する唯一の通信は認証不要の OSV.dev 照会のみで、--no-vuln-check を併用すればそれも行われません。
脆弱性照会は最小限
OSV.dev への照会で送信されるのは、検出されたフレームワーク名とバージョンのみで、ソースコードは含まれません。アドバイザリ確認のためのウェブ検索は、お客様の既存のプロバイダーAPIキーを利用します。
ベータ版です。鵜呑みにせず、検証してご利用ください。
Quin は現在 v0.1.0b2 であり、活発に開発が進む初期公開リリースです。
Quin は セマンティックバージョニング に従っています。すべての変更は プロジェクトの changelog で追跡されています。
パイプラインにそのまま使える、構造化されたレポート。
すべてのスキャンで、信頼度スコア、能力タグ、エージェントの意図の要約、リスク要因を含む JSON または YAML のレポートが生成され、SIEM への取り込みや手動レビューにそのまま利用できます。
- ファイル単位の、信頼度スコア付き検出結果
- 能力タグ(llm-api、rag、multi-agent、tool-use)
- エージェントの意図とリスク要因の要約
- スキャン日時とリポジトリのメタデータ
{
"repo_path": "./payments-service",
"scan_timestamp": "2026-03-30T09:00:00Z",
"is_ai_application": true,
"confidence": 0.92,
"capability_tags": [
"llm-api", "rag", "multi-agent", "tool-use"
],
"agent_intents": [
{
"agent_name": "ResearcherAgent",
"goal": "Search and synthesize from web sources",
"capabilities": ["web-search", "summarization"],
"risk_signals": [
"has internet access",
"writes files"
]
}
]
}