
오픈소스 링크 분석 & 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 인증서, 지리적 위치, 웹/이메일/해시/소셜 인리치먼트 등 - **Transform Hub** — 레지스트리에서 커뮤니티 변환 탐색 및 설치 - **AI 조사관** — 프롬프트 기반 에이전트 조사로 변환 실행 계획, 실시간 진행 스트리밍, 감사 가능한 결과 요약 - **가져오기 / 내보내기** — 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 ``` API는 `http://localhost:8000`에서 사용할 수 있습니다. 로컬 변환 실행을 위해서는 Redis와 변환 작업자도 실행 중이어야 합니다. Redis만으로는 충분하지 않습니다. Redis 시작:```bash docker run -d --name ogi-redis -p 6379:6379 redis:7-alpine ``` 두 번째 터미널에서 변환 작업자를 시작하십시오:```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가 실행된 후 백엔드가 재시작되었는지 - 별도의 worker 프로세스가 실행 중인지 - Docker Compose 외부에서 Docker 전용 호스트명 `redis`를 사용하지 않는지 PostgreSQL (`OGI_USE_SQLITE=false`)에 대해 백엔드를 실행하면 시작 시 요청을 처리하기 전에 Alembic 마이그레이션이 자동으로 적용됩니다. Docker 배포도 백엔드 컨테이너 진입점에서 동일하게 수행합니다. AI Investigator 실행은 또 다른 별도의 worker에 의해 처리됩니다:```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를 실행하는 두 가지 지원 방식: **권장** (활성화 불필요):```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` 서비스를 포함하지 않습니다. 내장 Postgres 및 Redis가 포함된 올인원 로컬 Docker 스택을 원하신다면 다음을 사용하세요:```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`와 같은 항목에 대해 합리적인 변환별 최대값을 제공하지만, 이제 이러한 상한을 중앙에서 재정의할 수 있어 클라우드 배포에서 로컬 제한을 하드코딩하지 않고도 적용할 수 있습니다. `.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의 공유 변환 기반/런타임을 사용하는 내장 변환 및 커뮤니티 플러그인에 적용됩니다. ### Hosted cloud instance and Supporter plan [ogi.khas.app](https://ogi.khas.app)에서 제공되는 호스티드 클라우드 버전은 사용자가 셀프 호스팅 여부를 결정하기 전에 OGI를 빠르게 사용해볼 수 있도록 처음 구축되었습니다. 이후 350명 이상의 활성 클라우드 사용자를 보유한 이 프로젝트의 가장 인기 있는 사용 방식이 되었습니다. 이러한 사용량은 이 사이드 프로젝트의 인프라 비용도 증가시켰습니다. 따라서 저장소에는 클라우드 전용 Supporter 구독 및 변환 실행 쿨다운 시스템이 포함되어 있습니다. 공용 클라우드 인스턴스에서 무료 사용자는 변환 실행 간 시간 제한이 있을 수 있으며, Supporter 사용자는 Supabase 및 VPS 비용을 지원하기 위해 상징적인 월 3 USD의 구독료를 낼 수 있습니다. Supporter 구독은 프로필 청구 컨트롤 또는 Stripe 청구 포털에서 취소할 수 있습니다. 취소는 향후 청구를 중단하지만, 유료 구독 기간은 환불되지 않거나 비례 배분되지 않습니다. 이 청구 코드는 의도적으로 구성에 의해 보호됩니다. `OGI_DEPLOYMENT_MODE=cloud` 및 `OGI_CLOUD_BILLING_ENABLED=true`인 경우에만 효과가 있습니다. 자체 호스팅 배포는 청구를 비활성화된 상태로 두어야 하며, 청구 또는 페이월 동작이 표시되지 않아야 합니다. ### Telemetry OGI에는 실제 사용 현황, 특히 자체 호스팅 배포 전반에 걸친 사용을 이해하는 데 도움이 되는 설치 수준의 제품 텔레메트리가 포함되어 있습니다. - `OGI_TELEMETRY_ENABLED=true`는 텔레메트리 수집을 활성화합니다. - `OGI_TELEMETRY_LEVEL=full`은 기본 수집 레벨입니다. - `OGI_TELEMETRY_ENABLED=false`로 설정하면 텔레메트리 수집을 완전히 비활성화합니다. - `OGI_TELEMETRY_LEVEL=basic`으로 설정하면 전송되는 데이터를 줄입니다. `basic` 전송 내용: - OGI 버전 - 일일 활성 설치 핑 `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` | 요구 사항 파일 경로 | | `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 랩스 | | 이메일 | 메일 서버 검증, 침해 점검 | | 웹 | WHOIS, 도메인 정보, 웹 추출 | | 소셜 | 사용자명 열거, 소셜 프로필 | | 해시 | MD5, SHA1, SHA256 조회 | | 위치 | 지오코딩, 날씨, 인근 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 (기본) / SQLite (로컬 대체) | | 인증 및 실시간 | Supabase Auth + JWT + Realtime (로컬 모드에서 선택 사항) | | 작업 큐 | Redis 7 + RQ (비동기 변환) | | AI 런타임 | 공급자 지원 AI 조사 워커 (감사된 변환 오케스트레이션 포함) | | 패키지 관리자 | uv (백엔드), pnpm (프론트엔드) | | 배포 | 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 ``` ### Configuration 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` | 허용된 프론트엔드 출처(origin) | `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 조사관 워커의 폴링 간격 | `2.0` | | `OGI_AGENT_CLAIM_TIMEOUT_SEC` | AI 조사관 단계 복구를 위한 스테일 클레임 제한 시간 | `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` | 클라우드 전용 서포터 청구 및 변환 쿨다운 시행 활성화 | `false` | | `OGI_FREE_TRANSFORM_COOLDOWN_SECONDS` | 무료 클라우드 사용자의 변환기 실행 간 쿨다운(초) | `1800` | | `OGI_PAID_TRANSFORM_COOLDOWN_SECONDS` | 유료 클라우드 사용자의 변환기 실행 간 쿨다운(초) | `0` | | `OGI_STRIPE_SECRET_KEY` | Checkout 및 포털 세션을 위한 Stripe 서버 측 비밀 키 | 설정되지 않음 | | `OGI_STRIPE_WEBHOOK_SECRET` | Stripe 웹훅 서명 비밀 | 설정되지 않음 | | `OGI_STRIPE_SUPPORTER_PRICE_ID` | 서포터 플랜을 위한 Stripe 정기 가격 ID | 설정되지 않음 | | `OGI_STRIPE_SUPPORTER_AMOUNT_CENTS` | 서포터 플랜 표시 금액(센트) | `300` | | `OGI_STRIPE_SUPPORTER_CURRENCY` | 서포터 플랜 표시 통화 | `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 시크릿 | 설정되지 않음 | | `OGI_SUPABASE_REDIRECT_URL` | 프론트엔드 인증 흐름에서 사용하는 리디렉션 URL | 설정되지 않음 | | `OGI_ADMIN_EMAILS` | 레지스트리/플러그인 관리를 위한 관리자 사용자 | 설정되지 않음 | | `OGI_TELEMETRY_ENABLED` | 설치 수준 텔레메트리 활성화 또는 비활성화 | `true` | | `OGI_TELEMETRY_LEVEL` | 텔레메트리 수준 (`basic` 또는 `full`) | `full` | | `OGI_API_KEY_ENCRYPTION_KEY` | 암호화된 API 키 저장소를 위한 Fernet 키 | 설정되지 않음 (강력 권장) | | `OGI_API_KEY_INJECTION_ALLOW_COMMUNITY_PLUGINS` | 커뮤니티 플러그인이 저장된 API 키를 받도록 허용 | `true` | | `OGI_API_KEY_INJECTION_TRUSTED_TIERS_ONLY` | 저장된 키 주입을 신뢰할 수 있는 등급으로만 제한 | `false` | | `OGI_API_KEY_INJECTION_ALLOWED_TIERS` | 신뢰 전용 모드에서 허용되는 등급 | `official,verified` | | `OGI_API_KEY_SERVICE_ALLOWLIST` | 저장된 키 주입을 위한 선택적 허용 서비스 | 비어 있음 | | `OGI_API_KEY_SERVICE_BLOCKLIST` | 저장된 키 주입을 위한 선택적 차단 서비스 | 비어 있음 | | `OGI_LLM_PROVIDER` | 기본 AI 조사관 제공자 대체 | `openai` | ``` --- [Read more](https://github.com/khashashin/ogi)