
オープンソースのリンク分析&OSINTフレームワーク
<div align="center"> <img src="https://assets.kitploit.com/production/public/readmes/12241/4d60ae367bb5f1d9b7d1d95df2b16186f01454c9610e40703f636923a0a70ced.png" alt="OGI マスコット" width="200" /> # OpenGraph Intel (OGI) **オープンソースのビジュアルリンク分析およびOSINTフレームワーク。** **無料で自己ホスティング可能、コミュニティ主導。** [](https://www.gnu.org/licenses/agpl-3.0) [](https://github.com/khashashin/ogi/actions/workflows/ci.yml) [](https://github.com/khashashin/ogi/actions/workflows/docker-publish.yml) [](https://www.python.org) [](https://www.typescriptlang.org) [](https://react.dev) [](https://fastapi.tiangolo.com)  [機能](#features) • [スクリーンショット](#screenshots) • [クイックスタート](#quick-start) • [Docker](#docker) • [Transform Hub](#transform-hub) • [アーキテクチャ](#architecture) • [コントリビューション](#contributing) </div> --- > **注意:** このプロジェクトは活発に進化しています。中核機能とテストカバレッジは確立されていますが、リリースごとにドキュメント、堅牢性、機能の充実を継続的に改善しています。コントリビューション、バグ報告、フィードバックを歓迎します。 ## 機能 - **ビジュアルグラフ調査** — エンティティのドラッグ&ドロップ、インタラクティブな接続探索 - **20以上のビルトイントランスフォーム** — DNS、WHOIS、SSL証明書、ジオロケーション、Web/メール/ハッシュ/ソーシャルエンリッチメントなど - **Transform Hub** — [レジストリ](https://github.com/opengraphintel/ogi-transforms)からコミュニティトランスフォームをブラウズ・インストール - **AI Investigator** — トランスフォーム実行を計画し、進行状況をライブストリームし、監査可能な要約を生成するプロンプト駆動のエージェント調査 - **インポート / エクスポート** — JSON、CSV、GraphML、MTGX形式のインポート - **グラフ分析** — 中心性、コミュニティ検出、最短経路 - **リアルタイムコラボレーション** — Supabase Realtimeによるプロジェクト、共有、ライブ同期 - **非同期トランスフォームジョブ** — WebSocket進捗更新付きのRedis/RQキュー - **プラグインシステム** — YAMLマニフェストによるディレクトリベースのプラグイン検出 - **CLIツール** — ターミナルからのトランスフォーム検索、インストール、管理 - **どこでも実行可能** — ローカルSQLiteモード(設定不要)またはチーム/クラウド向けPostgreSQL + Supabase - **Docker対応** — `docker compose up` でワンコマンドデプロイ ## スクリーンショット <div align="center"> | グラフ調査 | エンティティエンリッチメント | | :----------------------------------: | :-----------------------------------------------------: | |  |  | | Transform Hub | エクスポート / インポート | | :-----------------------------------: | :-----------------------------------------------: | |  |  | </div> ## クイックスタート ### 前提条件 | ツール | バージョン | | -------------------------------- | ---------- | | [Python](https://www.python.org) | 3.14+ | | [uv](https://docs.astral.sh/uv/) | 最新 | | [Node.js](https://nodejs.org) | 20+ | | [pnpm](https://pnpm.io) | 最新 | ### バックエンド```bash cd backend uv sync uv run uvicorn ogi.main:app --reload ``` The API will be available at `http://localhost:8000`. For local transform execution, Redis and the transform worker must also be running. Redis alone is not enough. Start Redis:```bash docker run -d --name ogi-redis -p 6379:6379 redis:7-alpine ``` 2番目のターミナルで変換ワーカーを起動してください。```bash cd backend uv run python -m ogi.worker.run_worker ``` `Job queue not available` または `Redis not available` が表示された場合は、以下を確認してください: - `OGI_REDIS_URL` がローカルホストベースの実行では `redis://localhost:6379/0` を指していること - Redis が起動した後にバックエンドが再起動されたこと - 別のワーカープロセスが実行中であること - Docker Compose の外部で Docker 専用のホスト名 `redis` を使用していないこと PostgreSQL (`OGI_USE_SQLITE=false`) に対してバックエンドを実行する場合、起動時にリクエストを処理する前に Alembic マイグレーションが自動的に適用されます。Docker デプロイでも、バックエンドコンテナのエントリポイントで同様の処理が行われます。 AI Investigator の実行は、別のワーカーによって処理されます:```bash cd backend uv run python -m ogi.agent.run_worker ``` ### フロントエンド```bash cd frontend pnpm install pnpm dev ``` Open http://localhost:5173 を開く。以上です。 ### AI Investigator AI Investigatorは、プロバイダーを利用したオプションのワークフローで、変換シーケンスの計画、承認の要求、ワークスペース内での調査進捗の要約を行うことができます。 - プロジェクト内の`AI Investigator`タブを開く - 調査設定ダイアログでプロバイダーとモデルを設定する - プロバイダーのAPIキーを`API Keys`に保存する - バックエンドと一緒に別個の`agent-worker`プロセスを実行する 現在の実装では、ユーザーごとのプロバイダー設定と、メインAPIサーバーから独立して調査ステップを実行する専用ワーカーをサポートしています。 ### CLI CLIを実行するための2つのサポート方法: **推奨**(アクティベーション不要):```bash cd backend uv sync uv run ogi --help ``` **アクティブ化されたvirtualenv** (プレーン `ogi` コマンド):```bash cd backend uv venv # PowerShell: .\.venv\Scripts\Activate.ps1 uv pip install -e . ogi --help ``` ## Docker ### 開発```bash cp .env.example .env docker compose up ``` ### 本番 事前にビルドされたGHCRイメージを使用してください。 重要: [docker-compose.prod.yml](https://github.com/khashashin/ogi/blob/main/docker-compose.prod.yml) は外部のPostgreSQLデータベースが必要です。`db`サービスは含まれていません。 すべてを内蔵したローカルDockerスタック(PostgresとRedisが組み込まれている)が必要な場合は、以下を使用してください:```bash docker compose up -d ``` 既に到達可能なPostgreSQLインスタンスがあり、それに応じて `OGI_DATABASE_URL` を設定している場合にのみ、本番用のcomposeファイルを使用してください:```bash docker compose -f docker-compose.prod.yml pull docker compose -f docker-compose.prod.yml up -d ``` `.env`内の`OGI_IMAGE_TAG`を設定して、特定のリリースイメージタグ(例:`v0.2.6`)を固定します。デフォルトは`latest`です。 ### Hetzner Cloud [](https://hetzner.cloud/?ref=LspEGc99USBa) [](https://console.hetzner.com/deploy/docker-ce) 新しいHetznerユーザーは、最初のリンクを使用してHetzner Cloudのクレジットを利用してサインアップできます。これは紹介リンクであり、紹介が条件を満たした場合、OGIメンテナーもHetzner Cloudクレジットを受け取ることがあります。サーバーを作成した後、上記のDockerデプロイコマンドを使用してOGIを実行してください。 ### 設定可能な変換上限 OGIには、`max_results`、`max_links`、`max_urls`、`max_content_chars`などの項目に対して、適切なtransformごとの最大値が組み込まれていますが、これらの上限は中央で上書き可能になり、クラウドデプロイメントがローカル制限をハードコーディングせずに適用できるようになりました。 `.env`内の`OGI_TRANSFORM_SETTING_MAX_OVERRIDES`を使用します:```env OGI_TRANSFORM_SETTING_MAX_OVERRIDES=max_results=50,max_urls=25,max_links=40,max_content_chars=20000 ``` ローカルファーストデプロイメントで特定の制限を解除するには:```env OGI_TRANSFORM_SETTING_MAX_OVERRIDES=max_results=none,max_urls=none,max_links=none,max_content_chars=none ``` オーバーライドはトランスフォーム設定名をキーとしており、ビルトイン・トランスフォームやOGIの共有トランスフォームベース/ランタイムを使用するコミュニティプラグインに適用されます。 ### ホスト型クラウドインスタンスとサポータープラン [ogi.khas.app](https://ogi.khas.app) のホスト型クラウドバージョンは、ユーザーがセルフホストする前にOGIをすばやく試せるように当初構築されました。その後、このプロジェクトで最も人気のある利用方法となり、350人以上のアクティブなクラウドユーザーがいます。 その利用により、このサイドプロジェクトのインフラコストも増加しました。そのため、リポジトリにはクラウド専用のサポーターサブスクリプションとトランスフォーマー実行のクールダウンシステムが含まれています。パブリッククラウドインスタンスでは、無料ユーザーはトランスフォーマーの実行間にタイムアウト制限を受けることがありますが、サポーターユーザーはSupabaseとVPSの費用を賄うために象徴的な月額3米ドルで購読できます。 サポーターサブスクリプションは、プロファイルの課金コントロールまたはStripeの課金ポータルからキャンセルできます。キャンセルすると将来の請求は停止されますが、支払い済みのサブスクリプション期間は返金または日割り計算されません。 この課金コードは設定によって意図的にガードされています。`OGI_DEPLOYMENT_MODE=cloud` かつ `OGI_CLOUD_BILLING_ENABLED=true` の場合にのみ効果を発揮します。セルフホストデプロイメントでは課金を無効にしたままにし、課金やペイウォールの動作は一切表示されないようにしてください。 ### テレメトリー OGIには、特にセルフホストデプロイメント全体での実際の利用状況を把握するための、インストールレベルの製品テレメトリーが含まれています。 - `OGI_TELEMETRY_ENABLED=true` でテレメトリー収集を有効化 - `OGI_TELEMETRY_LEVEL=full` がデフォルトの収集レベル - `OGI_TELEMETRY_ENABLED=false` と設定するとテレメトリーを完全に無効化 - `OGI_TELEMETRY_LEVEL=basic` と設定すると送信内容を削減 `basic` では以下が送信されます: - OGIバージョン - 毎日のアクティブインストールping `full` ではさらに以下が送信されます: - インスタンス作成日 - 期間内のプロジェクト、エンティティ、エッジ、トランスフォーム実行、調査官実行、アクティブユーザーの集計数 - インストールされているトランスフォームとそのバージョン テレメトリーは、グラフの内容、エンティティ値、APIキー、プロンプト、その他の調査データを送信しないように設計されています。現在のポリシーの詳細は[プライバシーポリシー](https://ogi.khas.app/privacy#telemetry)にも公開されています。 <details> <summary><strong>開発用Composeサービス</strong></summary> | サービス | 説明 | ポート | | ---------------- | ----------------------------- | ------ | | `backend` | FastAPIアプリケーションサーバー | 8000 | | `worker` | RQ非同期ジョブワーカー | - | | `agent-worker` | AI調査官ワーカー | - | | `frontend` | nginxで配信されるReactアプリ | 80 | | `db` | PostgreSQL 16 | 5432 | | `redis` | Redis 7(ジョブキュー) | 6379 | </details> <details> <summary><strong>本番用Composeサービス</strong></summary> | サービス | 説明 | ポート | | ---------------- | ----------------------------- | ------ | | `backend` | FastAPIアプリケーションサーバー | 8000 | | `worker` | RQ非同期ジョブワーカー | - | | `agent-worker` | AI調査官ワーカー | - | | `frontend` | nginxで配信されるReactアプリ | 80 | | `redis` | Redis 7(ジョブキュー) | 6379 | `docker-compose.prod.yml` は `OGI_DATABASE_URL` を介して外部のPostgreSQLデータベースを想定しています。 </details> --- <details> <summary><strong>起動時プラグイン依存関係</strong></summary> プリビルドイメージを使用していて、プラグインに追加のPythonライブラリが必要な場合、OGIはコンテナ起動時に以下の場所からプラグインの依存関係をインストールします: 1. `plugins/requirements.txt`(推奨)、または 2. `requirements.txt`がない場合、`plugins/ogi-lock.json` から自動生成された要件 **環境変数:** | 変数 | デフォルト | 説明 | | ---------------------------------- | -------------------------------- | ----------------------------------------- | | `OGI_BOOT_REQUIREMENTS_ENABLE` | `true` | 起動時インストールの有効/無効 | | `OGI_BOOT_REQUIREMENTS_FILE` | `/app/plugins/requirements.txt` | requirementsファイルへのパス | | `OGI_BOOT_LOCK_FILE` | `/app/plugins/ogi-lock.json` | ロックファイルへのパス | | `OGI_BOOT_REQUIREMENTS_STRICT` | `false` | 要件がない場合に起動を失敗させる | | `OGI_BOOT_REQUIREMENTS_CACHE_DIR` | `/tmp/ogi-boot` | 生成された要件の一時/キャッシュディレクトリ | </details> --- ## トランスフォームハブ OpenGraph Intelにはビルトインのトランスフォームマーケットプレイスがあります。[コミュニティレジストリ](https://github.com/opengraphintel/ogi-transforms)からトランスフォームを参照、インストール、管理できます。 > **セキュリティに関する注意:** APIキーを必要とするプラグインは特権コードとして扱う必要があります。プラグインがシークレットにアクセスし、アウトバウンドのネットワークリクエストを行える場合、それらのシークレットを悪用または流出させる可能性があります。サードパーティのプラグインをインストールまたは実行する前に、信頼レベル、権限、必要なサービスを確認してください。```bash # Search for transforms uv run ogi transform search dns # Install a transform uv run ogi transform install shodan-host-lookup ``` ### 組み込み変換カテゴリ | カテゴリ | 例 | | -------- | ------------------------------------- | | DNS | A, AAAA, MX, NS, CNAME レコード | | IP & ASN | GeoIP, リバースIP, ASN 情報 | | SSL/TLS | 証明書透過性, SSL ラボ | | Email | メールサーバー検証, 侵害チェック | | Web | WHOIS, ドメイン情報, Web 抽出 | | Social | ユーザー名列挙, ソーシャルプロフィール | | Hash | MD5, SHA1, SHA256 ルックアップ | | Location | ジオコーディング, 天気, 近隣の ASN データ | ### サポートされているエンティティタイプ `Person` • `Username` • `Domain` • `IPAddress` • `EmailAddress` • `PhoneNumber` • `Organization` • `URL` • `SocialMedia` • `Hash` • `Document` • `Location` • `ASNumber` • `Network` • `MXRecord` • `NSRecord` • `Nameserver` • `SSLCertificate` • `Subdomain` • `HTTPHeader` ### 独自の変換を作成する 独自に作成したいですか?[貢献ガイド](https://github.com/opengraphintel/ogi-transforms/blob/main/CONTRIBUTING.md) を参照してください。 変換で外部サービスの認証情報が必要な場合は、`api_keys_required` で宣言してください。変換設定にシークレットを保存しないでください。OGI はそれらを `API Keys` の下で管理し、シークレットを使用するプラグインは特権コードと見なされます。 変換が `max_results` や `max_content_chars` などの上限付き設定を公開する場合は、可能な限り特注の一回限りの名前よりも安定した設定名を優先してください。OGI は `OGI_TRANSFORM_SETTING_MAX_OVERRIDES` を使用して中央で最大値を上書きでき、クラウドデプロイメントが制限を強制し、ローカルユーザーがそれらを削除するのに役立ちます。 各プラグインは `plugin.yaml` マニフェストを含むディレクトリです:```yaml name: my-transform version: "1.0.0" display_name: My Transform description: What it does author: Your Name license: MIT category: dns input_types: [Domain] output_types: [IPAddress] permissions: network: true filesystem: false subprocess: false ``` ## アーキテクチャ ### 技術スタック | 層 | 技術 | | ----------------- | --------------------------------------------------------------------------- | | バックエンド | Python 3.14+, FastAPI, SQLModel, asyncpg / aiosqlite | | フロントエンド | React 19, TypeScript 5.9, Sigma.js (graphology), Zustand, Tailwind CSS 4 | | データベース | PostgreSQL 16 (primary) / SQLite (local fallback) | | 認証・リアルタイム | Supabase Auth + JWT + Realtime (optional in local mode) | | ジョブキュー | Redis 7 + RQ (async transforms) | | AI ランタイム | Provider-backed AI Investigator worker with audited transform orchestration | | パッケージマネージャー | uv (backend), pnpm (frontend) | | デプロイ | Docker, nginx, GHCR | ### プロジェクト構造``` ogi/ ├── backend/ │ └── ogi/ │ ├── api/ # REST API routes │ ├── cli/ # CLI tool (Typer) │ ├── db/ # Database layer (asyncpg + aiosqlite) │ ├── engine/ # Graph engine & transform engine │ ├── models/ # SQLModel definitions │ ├── store/ # Data stores │ ├── transforms/ # Built-in transforms │ │ ├── dns/ # DNS resolution transforms │ │ ├── cert/ # SSL certificate transforms │ │ ├── email/ # Email enrichment │ │ ├── hash/ # Hash lookups │ │ ├── ip/ # IP/ASN/geolocation │ │ ├── org/ # Organization info │ │ ├── social/ # Social media │ │ └── web/ # Web scraping/extraction │ ├── worker/ # Async job queue (RQ) │ ├── config.py # Pydantic settings │ └── main.py # FastAPI entry point ├── frontend/ │ └── src/ │ ├── api/ # API client │ ├── components/ # React components │ ├── hooks/ # Custom hooks (realtime sync, etc.) │ ├── stores/ # Zustand state management │ ├── types/ # TypeScript types │ └── App.tsx # Main application ├── plugins/ # Community plugins directory ├── docs/ # Documentation & images ├── docker-compose.yml # Development deployment ├── docker-compose.prod.yml # Production deployment └── .env.example # Environment template ``` ### 設定 OGIは、`.env`ファイルをサポートする[pydantic-settings](https://docs.pydantic.dev/latest/concepts/pydantic_settings/)を使用します。ランタイム/バックエンド変数には`OGI_`プレフィックスが付きます。 リスト形式の設定は、次のいずれかを受け付けます。 - JSON配列(例:`["plugins","../plugins"]`) - カンマ区切りの文字列(例:`plugins,../plugins`) <details> <summary><strong>主要な環境変数</strong></summary> | 変数 | 説明 | デフォルト | | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | | `OGI_APP_NAME` | アプリケーション名 | `OGI` | | `OGI_HOST` | バックエンドのバインドホスト | `0.0.0.0` | | `OGI_PORT` | バックエンドのポート | `8000` | | `OGI_CORS_ORIGINS` | 許可されるフロントエンドのオリジン | `http://localhost:5173,http://localhost:3000` | | `OGI_USE_SQLITE` | PostgreSQLの代わりにSQLiteを使用する | `true` | | `OGI_DB_PATH` | SQLiteデータベースファイルのパス | `ogi.db` | | `OGI_DATABASE_URL` | PostgreSQL接続文字列 | `postgresql://postgres:postgres@localhost:5432/ogi` | | `OGI_REDIS_URL` | RQ/ジョブ用のRedis接続文字列 | `redis://localhost:6379/0` | | `OGI_RQ_QUEUE_NAME` | 変換ジョブのキュー名 | `transforms` | | `OGI_TRANSFORM_TIMEOUT` | 変換ジョブごとのタイムアウト(秒) | `300` | | `OGI_AGENT_WORKER_POLL_INTERVAL_SEC` | AI Investigatorワーカーのポーリング間隔 | `2.0` | | `OGI_AGENT_CLAIM_TIMEOUT_SEC` | AI Investigatorステップ回復のための古いクレームのタイムアウト | `120` | | `OGI_AUTO_RUN_MIGRATIONS` | ローカルの非SQLiteアプリ起動時にAlembicを自動実行 | `true` | | `OGI_RUN_DB_MIGRATIONS` | コンテナエントリポイントでDBマイグレーションを実行 | `false` | | `OGI_DB_MIGRATION_RETRIES` | エントリポイントのマイグレーション再試行回数 | `30` | | `OGI_DB_MIGRATION_DELAY_SECONDS` | エントリポイントのマイグレーション再試行間の遅延 | `2` | | `OGI_PLUGIN_DIRS` | プラグインの検索ディレクトリ | `plugins,../plugins` | | `OGI_DEPLOYMENT_MODE` | デプロイメントモード(`self-hosted` または `cloud`) | `self-hosted` | | `OGI_CLOUD_BILLING_ENABLED` | クラウド専用のSupporter請求と変換クールダウンを有効にする | `false` | | `OGI_FREE_TRANSFORM_COOLDOWN_SECONDS` | 無料クラウドユーザーのトランスフォーマー実行間のクールダウン | `1800` | | `OGI_PAID_TRANSFORM_COOLDOWN_SECONDS` | 有料クラウドユーザーのトランスフォーマー実行間のクールダウン | `0` | | `OGI_STRIPE_SECRET_KEY` | Checkoutおよびポータルセッション用のStripeサーバー側シークレットキー | 未設定 | | `OGI_STRIPE_WEBHOOK_SECRET` | Stripe Webhook署名シークレット | 未設定 | | `OGI_STRIPE_SUPPORTER_PRICE_ID` | SupporterプランのStripe定期購入価格ID | 未設定 | | `OGI_STRIPE_SUPPORTER_AMOUNT_CENTS` | Supporterプランの表示金額 | `300` | | `OGI_STRIPE_SUPPORTER_CURRENCY` | Supporterプランの表示通貨 | `usd` | | `OGI_BILLING_SUCCESS_URL` | オプションのStripe Checkout成功リダイレクト | リクエストから導出 | | `OGI_BILLING_CANCEL_URL` | オプションのStripe Checkoutキャンセルリダイレクト | リクエストから導出 | | `OGI_BILLING_PORTAL_RETURN_URL` | オプションのStripe請求ポータル戻りURL | リクエストから導出 | | `OGI_REGISTRY_REPO` | 変換レジストリのGitHubリポジトリ | `opengraphintel/ogi-transforms` | | `OGI_REGISTRY_CACHE_TTL` | レジストリキャッシュのTTL(秒) | `3600` | | `OGI_TRANSFORM_SETTING_MAX_OVERRIDES` | オプションの変換設定のグローバル最大オーバーライドマップ | 空 | | `OGI_GITHUB_TOKEN` | オプションのレジストリ/APIレート制限用GitHubトークン | 未設定 | | `OGI_SUPABASE_URL` | SupabaseプロジェクトURL | 未設定 | | `OGI_SUPABASE_ANON_KEY` | Supabase匿名/公開キー | 未設定 | | `OGI_SUPABASE_SERVICE_ROLE_KEY` | Supabaseサービスロールキー | 未設定 | | `OGI_SUPABASE_JWT_SECRET` | Supabase JWTシークレット | 未設定 | ``` --- [Read more](https://github.com/khashashin/ogi)