27개 공개 OSINT 소스를 로컬에서 통합 시각화하는 개인 인텔리전스 HUD
Crucix는 27개 공개 데이터 소스를 15분 주기로 병렬 수집해 로컬에서 실시간 대시보드와 알림을 제공하는 오픈소스 인텔리전스 터미널이다.
TL;DR
Crucix는 27개의 공개 OSINT 피드를 병렬 수집해 로컬에서 합성·시각화하고 스윕 간 델타를 산출해 실시간 알림을 제공하는 오픈소스 인텔리전스 대시보드이다. Promise.allSettled 기반의 병렬 수집과 델타 엔진으로 일부 소스 실패를 허용하면서도 의미있는 변동만을 필터링하고 Server-Sent Events로 클라이언트에 즉시 푸시한다. Telegram과 Discord 양방향 봇을 통해 수동 명령과 등급화된 경보를 주고받을 수 있으며 LLM을 선택적으로 연결하면 자연어 브리핑과 거래 아이디어 생성이 가능하다. 로컬 실행과 최소 의존성 설계로 프라이버시와 재현성을 확보했으나 핵심 위성·경제 소스의 완전한 활성화를 위해서는 일부 무료 API 키를 추가해야 한다.
주요 기능
- 실시간 스윕을 병렬로 실행해 27개 소스를 약 30초 내외로 수집하고 합성된 데이터를 대시보드로 즉시 전송하는 아키텍처를 제공한다. 이 동작은 Promise.allSettled 기반으로 구현되어 일부 소스 실패가 전체 스윕을 중단시키지 않는다. 결과는 Server-Sent Events로 클라이언트에 푸시되어 브라우저 측 폴링을 제거한다.
- 시각화 계층은 3D WebGL globe와 평면 지도를 모두 지원하며 Globe.gl을 이용해 대기광과 회전, 비행 아크 애니메이션을 렌더링한다. 렌더링 품질을 조절하는 VISUALS FULL과 VISUALS LITE 모드가 있어 저사양 환경에서는 배경 효과와 애니메이션을 끄고 핵심 데이터만 유지한다. 모바일에서는 라이트 모드가 자동으로 평면 지도로 강제되어 성능을 확보한다.
- 알림 및 상호작용 계층은 Telegram과 Discord 양쪽을 네이티브로 지원하며 두 플랫폼에서 명령어로 스윕을 트리거하거나 요약을 요청할 수 있다. 알림은 FLASH, PRIORITY, ROUTINE의 다중 등급 체계를 사용하고 LLM과 결합하면 신호 평가가 문맥화된 점수와 함께 전달된다. 웹훅을 이용한 단방향 모드도 제공되어 외부 의존성을 최소화할 수 있다.
어떻게 동작하는가
Crucix는 브리핑 오케스트레이터가 27개 소스의 모듈별 briefing 함수를 병렬 호출해 원시 피드를 표준화한 후 델타 엔진으로 전 스윕과 비교해 변경점을 산출한다. 산출된 델타는 대시보드의 Sweep Delta 패널과 알림 엔진으로 전달되며 LLM 제공자가 구성되면 추가로 자연어 기반의 무역 아이디어나 신호 등급화를 생성한다. 모든 통신은 Express 기반 서버를 통해 SSE로 푸시되며 로컬 파일 시스템에 스윕 결과가 보관되어 장애 시에도 복구가 가능하다.
해결 문제
공공 데이터가 여러 기관에 흩어져 있어 개별 API를 지속적으로 모니터링하기 어렵다는 문제를 해결한다. Crucix는 27개 공개·무인증 및 키 기반 소스를 병렬 탐지하고 표준화한 단일 대시보드로 합쳐서 교차 도메인 상관관계를 산출한다. 이 과정은 로컬에서 실행되고 외부 클라우드 의존성이나 원격 텔레메트리 없이도 자동 알림과 인터랙티브 요약을 가능하게 한다.
지금 주목받는 이유
공개 OSINT에 대한 관심 증대와 로컬에서 운영 가능한 실시간 인텔리전스 도구 수요가 결합되어 주목받고 있다. README에 라이브 데모와 27개 소스라는 구체적 수치가 명시되어 있어 사용자가 빠르게 기능을 확인할 수 있다. 또한 최소 의존성과 도커 지원으로 즉시 시도해볼 수 있다는 진입 장벽 낮음이 확산에 기여했다.
차별점
- 로컬 온프레미스 실행을 기본 전제로 하여 '노 클라우드' 정책을 유지하고 스윕 데이터가 로컬 runs 디렉터리에 지속 저장되도록 설계되어 프라이버시와 데이터 주권을 보장한다. Express만을 런타임 의존성으로 사용해 설치 복잡도를 낮췄으며 도커 컴포즈로 배포할 수 있어 환경 차이를 최소화한다. LLM 통합은 선택사항으로 구성되어 있어 LLM 실패가 전체 워크플로를 중단시키지 않는다.
- 각 소스는 독립 실행 가능한 모듈로 구현되어 단일 소스만 개별 테스트하거나 교체할 수 있다. node apis/sources/<source>.mjs를 직접 실행해 소스 무결성을 검증할 수 있고 브리핑 오케스트레이터는 모든 소스 호출 실패를 포괄적으로 처리한다. 이 구조는 새로운 피드를 추가하거나 기존 피드를 유지보수하는 비용을 낮춘다.
- 델타 엔진은 시맨틱 중복 제거와 임계값 기반 심각도 점수를 적용해 잡음이 많은 OSINT 환경에서 의미있는 신호만 추려낸다. 델타 결과는 다중 등급 알림으로 매핑되어 Telegram과 Discord로 전송되며, LLM이 구성되면 자연어로 요약된 브리핑과 실행가능한 아이디어가 함께 제공된다. 덕분에 단순 노티피케이션이 아닌 교차 도메인 상관관계 중심의 판단을 빠르게 얻을 수 있다.
사용 사례
- 저널리즘 환경에서 여러 공개 소스를 동시에 교차 검증해 사건의 시간선과 지리적 확산을 빠르게 파악하는 용도로 활용할 수 있다. 대시보드는 위성 화재, 항공·해운 트래픽, 제재 리스트, 방사선 측정 등을 한 화면에서 비교 가능하게 하여 취재 초기 단계의 가설 검증 시간을 단축한다. 델타 엔진을 통해 변화가 감지될 때만 알림을 받도록 설정하면 지속 모니터링 비용을 줄일 수 있다.
- 금융 트레이더는 실시간 시장 데이터와 공급망 압력 지표를 함께 관찰해 단기 이벤트 기반 트레이드 아이디어를 생성할 수 있다. LLM이 연결되어 있으면 여러 신호를 근거로 5~8개의 실행 가능한 아이디어를 자연어로 생성하며, LLM 미구성 시에는 규칙 기반 경보로 대체된다. 포트폴리오 연동 기능을 활성화하면 간단한 포지션 상태 조회와 알림 연동이 가능하다.
- OSINT 연구자는 텔레그램, Reddit, Bluesky 등 소셜 피드와 위성·공공 데이터의 상관관계를 장기 관찰하며 패턴을 탐지할 수 있다. 각 스윕 결과가 로컬에 축적되어 시계열 분석이나 커스텀 파이프라인 연동을 위한 데이터 소스로 활용 가능하다. 독립 모듈 설계로 특정 채널만 활성화해 경량 스윕을 구성할 수 있다.
시작하기
리포지토리를 클론한 뒤 npm install로 의존성을 설치하고 .env.example을 .env로 복사해 필요한 키를 추가하면 node --trace-warnings server.mjs 또는 npm run dev로 서버를 기동할 수 있다. 대시보드는 기본적으로 http://localhost:3117에 열리며 첫 스윕이 완료될 때까지 30~60초 정도 기다려야 데이터가 채워진다. 도커를 선호하면 docker compose up -d로 전체 스택을 백그라운드 실행할 수 있으며 runs 폴더에 스윕 결과가 지속 저장된다.
요구사항
- Node.js 22 이상이 필요하며 이는 ESM과 네이티브 fetch 사용을 전제로 한다. 구버전 Node에서는 모듈 로드 실패나 문법 오류가 발생하므로 로컬 환경에 맞는 Node 업그레이드가 선행되어야 한다. 일부 소스는 별도 API 키를 요구하므로 README에 명시된 주요 키(FRED, FIRMS, EIA)를 설정하면 핵심 데이터가 활성화된다.
- 옵션으로 Discord 봇 기능을 사용하려면 discord.js 설치가 필요하고 환경변수에 DISCORD_BOT_TOKEN 및 DISCORD_CHANNEL_ID를 설정해야 한다. webhook 방식으로는 discord.js 없이도 단방향 알림을 사용할 수 있어 의존성을 줄일 수 있다. Telegram 양방향 봇은 TELEGRAM_BOT_TOKEN과 TELEGRAM_CHAT_ID가 필요하며 권한 제한으로 지정된 채팅만 명령을 수용한다.
이미지 분석




10.8k
Stars
1.7k
Forks
+208
Trending
3
조회수
관련 토론
아직 관련 토론이 없습니다.
댓글
댓글을 작성하려면 로그인이 필요합니다.