Skip to content

its-lim/secall

 
 

Repository files navigation

seCall

AI 에이전트와 나눈 모든 대화를 검색하세요.

Search everything you've ever discussed with AI agents.

Rust SQLite MCP License: AGPL-3.0 ONNX Runtime Obsidian


한국어 · English · 日本語 · 中文


목차


seCall Obsidian 볼트

seCall이란?

seCall은 AI 에이전트 세션을 위한 로컬 퍼스트 검색 엔진입니다. Claude Code, Codex CLI, Gemini CLI, claude.ai, ChatGPT의 대화 로그를 수집하고, BM25 + 벡터 하이브리드 검색으로 인덱싱하며, CLI/MCP 서버/Obsidian 호환 지식 볼트로 제공합니다.

AI와의 대화는 곧 지식 자산입니다. seCall은 그것을 검색 가능하고, 탐색 가능하며, 서로 연결된 형태로 만듭니다.

왜 필요한가?

  • 수백 개의 에이전트 세션에 걸쳐 아키텍처, 디버깅, 설계 결정을 논의했지만 — 불투명한 JSONL 파일에 흩어져 있습니다.
  • seCall은 이 세션들을 구조화되고 검색 가능한 지식 그래프로 변환합니다. MCP 호환 AI 에이전트에서 쿼리하거나 Obsidian에서 탐색할 수 있습니다.

주요 기능

멀티 에이전트 수집

여러 AI 코딩 에이전트의 세션을 통합 형식으로 파싱하고 정규화합니다:

에이전트 형식 상태
Claude Code JSONL ✅ 안정
Codex CLI JSONL ✅ 안정
Gemini CLI JSON ✅ 안정
claude.ai JSON (ZIP) ✅ v0.2 신규
ChatGPT JSON (ZIP) ✅ v0.2.3 신규

하이브리드 검색

  • BM25 전문 검색: SQLite FTS5 + 한국어 형태소 분석 (Lindera ko-dic / Kiwi-rs 선택 가능)
  • 벡터 시맨틱 검색: Ollama BGE-M3 임베딩 (1024차원) + HNSW ANN 인덱스 (usearch)로 O(log n) 탐색
  • Reciprocal Rank Fusion (RRF): BM25/벡터 독립 실행 후 결합 (k=60) + 세션 다양성 강제 (세션당 최대 2개 턴)
  • LLM 쿼리 확장: Claude Code를 통한 자연어 쿼리 확장

지식 볼트

Obsidian 호환 마크다운 볼트 (2계층 구조):

vault/
├── raw/sessions/    # 불변 세션 원본
│   └── YYYY-MM-DD/  # 날짜별 정리
├── wiki/            # AI 생성 지식 페이지
│   ├── projects/    # 프로젝트별 요약
│   ├── topics/      # 기술 주제 페이지
│   └── decisions/   # 아키텍처 의사결정 기록
└── graph/           # Knowledge Graph 출력
    └── graph.json   # 노드/엣지 데이터
  • 위키 생성: Claude Code 메타에이전트 기반 (secall wiki update)
  • Obsidian 백링크 ([[]])로 세션 ↔ 위키 페이지 연결
  • Dataview 쿼리를 위한 frontmatter 메타데이터 (summary 필드로 세션 내용 즉시 파악)

Knowledge Graph

세션 간 관계를 결정적으로 추출하여 지식 그래프를 구축합니다 (LLM 호출 불필요):

  • 노드 타입: session, project, agent, tool — frontmatter에서 자동 추출
  • 엣지 타입: belongs_to, by_agent, uses_tool, same_project, same_day
  • 증분 빌드: 신규 세션만 노드 추가, 관계 엣지는 전체 재계산으로 정확성 보장
  • MCP 도구: graph_query — AI 에이전트가 세션 간 관계를 탐색 (BFS, 최대 3홉)

MCP 서버

MCP 호환 AI 에이전트에 세션 인덱스를 노출합니다:

# stdio 모드 (Claude Code, Cursor 등)
secall mcp

# HTTP 모드 (웹 클라이언트)
secall mcp --http 127.0.0.1:8080

제공 도구: recall, get, status, wiki_search, graph_query

멀티 기기 볼트 동기화

Git을 통해 여러 기기에서 지식 볼트를 동기화합니다:

# 전체 동기화: git pull → reindex → ingest → wiki → graph → git push
secall sync

# 로컬 전용 모드 (git 생략, Claude Code hook에 적합)
secall sync --local-only
  • MD가 원본 — DB는 파생 캐시이며, secall reindex --from-vault로 완전 복구 가능
  • 호스트 추적 — 각 세션이 어떤 기기에서 수집되었는지 기록 (frontmatter host 필드)
  • 충돌 없음 — 세션은 기기별 유니크하므로 git 머지 충돌 없음

데이터 무결성

내장 린트 규칙으로 인덱스 ↔ 볼트 정합성을 검증합니다:

secall lint
# L001: 누락된 볼트 파일
# L002: 고아 볼트 파일
# L003: FTS 인덱스 갭

빠른 시작

사전 요구사항

  • Rust 1.75+ (소스 빌드 시)
  • Claude Code, Codex CLI, Gemini CLI 중 하나 이상
  • Ollama — 벡터 검색용 (선택사항, 없으면 BM25만 사용)
  • Windows: MSVC 툴체인 (Visual Studio Build Tools)

Step 1. 설치

소스 빌드:

git clone https://github.com/hang-in/seCall.git
cd seCall
cargo install --path crates/secall

사전 빌드 바이너리 (Releases):

  • macOS: secall-aarch64-apple-darwin.tar.gz / secall-x86_64-apple-darwin.tar.gz
  • Windows: secall-x86_64-pc-windows-msvc.zip (secall.exe + onnxruntime.dll)

Windows 사용자: 핵심 기능(파싱, BM25 검색, vault, MCP)은 동일하게 동작합니다. 아래 기능은 MSVC 미지원으로 비활성화:

  • HNSW ANN 인덱스 (usearch) — BLOB 코사인 스캔 fallback
  • Kiwi-rs 형태소 분석 — Lindera ko-dic fallback

Step 2. 초기화

# 대화형 온보딩 (권장)
secall init

# 또는 인자 직접 지정
secall init --vault ~/Documents/Obsidian\ Vault/seCall
secall init --git git@github.com:you/obsidian-vault.git

secall init을 인자 없이 실행하면 대화형 위저드가 시작됩니다:

  • Vault 경로 설정
  • Git remote (선택)
  • 토크나이저 선택 (lindera/kiwi)
  • 임베딩 백엔드 선택 (ollama/none)
  • Ollama 설치 확인 + bge-m3 모델 자동 pull

Step 3. 세션 수집

# Claude Code 세션 자동 감지
secall ingest --auto

# Codex CLI / Gemini CLI
secall ingest ~/.codex/sessions
secall ingest ~/.gemini/sessions

# claude.ai / ChatGPT export (ZIP)
secall ingest ~/Downloads/data-export.zip

# 또는 한 명령으로 전체 동기화
secall sync

Step 4. 검색

# BM25 전문 검색
secall recall "BM25 인덱싱 구현"

# 프로젝트, 에이전트, 날짜 필터
secall recall "에러 처리" --project seCall --agent claude-code --since 2026-04-01

# 벡터 시맨틱 검색 (Ollama 필요)
secall recall "검색 파이프라인 동작 방식" --vec

# LLM 쿼리 확장
secall recall "검색 정확도 개선" --expand

사용법

세션 조회

# 요약 보기
secall get <session-id>

# 전체 마크다운
secall get <session-id> --full

# 특정 턴
secall get <session-id>:5

임베딩 생성

시맨틱 검색(--vec)을 사용하려면 벡터 인덱스가 필요합니다. Ollama가 설치되어 있으면 secall embed 또는 secall sync 실행 시 자동으로 임베딩됩니다.

# 신규/변경된 세션만 임베딩
secall embed

# 전체 재임베딩
secall embed --all

# 성능 옵션 (M1 Max 기준 권장값)
secall embed --concurrency 4 --batch-size 32

ONNX Runtime을 사용하려면 secall config set embedding.backend ortsecall model download로 모델을 다운로드하세요.

세션 분류

config에서 정의한 regex 규칙으로 수집 시 세션을 자동 태깅합니다:

[ingest.classification]
default = "interactive"
skip_embed_types = ["automated"]   # 이 타입은 벡터 임베딩 생략

[[ingest.classification.rules]]
pattern = "^\\[당월 rawdata\\]"
session_type = "automated"

[[ingest.classification.rules]]
pattern = "^# Wiki Incremental Update Prompt"
session_type = "automated"
  • 수집 시 자동 분류 — 첫 번째 user turn 내용을 rules 순서대로 매칭 (첫 번째 매칭 적용)
  • 임베딩 선택적 스킵skip_embed_types에 지정된 타입은 벡터 임베딩 생략으로 비용 절감
  • 검색 필터recall 및 MCP recall 도구가 기본적으로 automated 세션 제외 (--include-automated 플래그로 포함 가능)
  • 소급 분류secall classify --dry-run / secall classify로 기존 세션 일괄 재분류

위키 생성

# Claude Code로 위키 업데이트 (기본값)
secall wiki update

# 로컬 LLM 백엔드 사용
secall wiki update --backend ollama
secall wiki update --backend lmstudio

# 특정 세션만 증분 업데이트
secall wiki update --backend lmstudio --session <id>

# 위키 상태 확인
secall wiki status

백엔드는 config로도 설정할 수 있습니다:

[wiki]
default_backend = "lmstudio"   # "claude" | "ollama" | "lmstudio"

[wiki.backends.lmstudio]
api_url = "http://localhost:1234"
model = "lmstudio-community/gemma-4-e4b-it"
max_tokens = 3000

[wiki.backends.ollama]
api_url = "http://localhost:11434"
model = "gemma3:27b"

[wiki.backends.claude]
model = "sonnet"   # "opus" 도 가능

Knowledge Graph

# 전체 그래프 빌드
secall graph build

# 통계 확인
secall graph stats

# graph.json 내보내기
secall graph export

설정

secall config 명령으로 설정을 관리합니다. config.toml을 직접 편집할 필요가 없습니다.

# 현재 설정 확인
secall config show

# 설정 변경
secall config set output.timezone Asia/Seoul
secall config set search.tokenizer kiwi
secall config set embedding.backend ollama

# 설정 파일 경로 확인
secall config path

설정 키 목록

설명 기본값
vault.path Obsidian vault 경로 ~/obsidian-vault/seCall
vault.git_remote Git remote URL (없음)
vault.branch Git 브랜치 이름 main
search.tokenizer 토크나이저 (lindera / kiwi) lindera
search.default_limit 검색 결과 수 10
embedding.backend 임베딩 백엔드 (ollama / ort / none) ollama
embedding.ollama_model Ollama 모델 이름 bge-m3
output.timezone 타임존 (IANA) UTC
ingest.classification.default 분류 규칙 미매칭 시 기본 session_type interactive
ingest.classification.skip_embed_types 임베딩을 스킵할 session_type 목록 []
wiki.default_backend 위키 생성 백엔드 (claude / ollama / lmstudio) claude
wiki.backends.<name>.api_url 백엔드 API 엔드포인트 (기본값 사용)
wiki.backends.<name>.model 백엔드 모델 이름 (기본값 사용)
wiki.backends.<name>.max_tokens 최대 생성 토큰 수 4096

설정 파일 경로:

  • macOS: ~/Library/Application Support/secall/config.toml
  • Linux: ~/.config/secall/config.toml
  • Windows: %APPDATA%\secall\config.toml

CLI 레퍼런스

명령 설명
secall init 대화형 온보딩 (vault, 토크나이저, 임베딩 설정)
secall ingest [path] --auto 에이전트 세션 파싱 및 인덱싱
secall sync [--local-only] [--no-wiki] 전체 동기화: git pull → reindex → ingest → wiki → graph → git push
secall recall <query> 하이브리드 검색 (기본: automated 세션 제외)
secall recall <query> --include-automated automated 세션 포함하여 검색
secall get <id> [--full] 세션 상세 조회
secall status 인덱스 통계 + 설정 요약
secall embed [--all] 벡터 임베딩 생성
secall classify [--dry-run] config 규칙으로 기존 세션 일괄 재분류
secall lint 인덱스/볼트 정합성 검증
secall mcp [--http <addr>] MCP 서버 시작
secall config show|set|path 설정 확인/변경
secall graph build|stats|export Knowledge Graph 관리
secall wiki update [--backend claude|ollama|lmstudio] 위키 생성 (백엔드 선택 가능)
secall wiki status 위키 상태 확인
secall model download|info|check ONNX 모델 관리
secall reindex --from-vault 볼트에서 DB 재구축
secall migrate summary summary frontmatter 일괄 추가

MCP 연동

Claude Code 설정 (~/.claude/settings.json)에 추가:

{
  "mcpServers": {
    "secall": {
      "command": "secall",
      "args": ["mcp"]
    }
  }
}

세션 시작/종료 시 자동 동기화:

{
  "hooks": {
    "PreToolUse": [{
      "matcher": "Initialize",
      "hooks": [{"type": "command", "command": "secall sync --local-only"}]
    }],
    "PostToolUse": [{
      "matcher": "Exit",
      "hooks": [{"type": "command", "command": "secall sync"}]
    }]
  }
}

자세한 설정 안내는 GitHub 볼트 동기화 가이드를 참고하세요.

아키텍처

┌─────────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐
│  Claude Code │  │ Codex CLI │  │Gemini CLI│  │claude.ai │  │ ChatGPT  │
│    (JSONL)   │  │  (JSONL)  │  │  (JSON)  │  │JSON (ZIP)│  │JSON (ZIP)│
└──────┬───────┘  └────┬─────┘  └────┬─────┘  └────┬─────┘  └────┬─────┘
       │               │             │              │              │
       └───────┬───────┴─────────────┴──────────────┴──────────────┘
               │
         ┌─────▼──────┐
         │   파서들     │  claude.rs / codex.rs / gemini.rs / claude_ai.rs / chatgpt.rs
         └─────┬──────┘
                    │
          ┌─────────▼─────────┐
          │   통합 세션 모델    │  Session → Turn → Action
          └─────────┬─────────┘
                    │
       ┌────────────┼────────────┐
       │            │            │
  ┌────▼────┐ ┌────▼────┐ ┌────▼────┐
  │ SQLite  │ │  볼트   │ │  벡터   │
  │  FTS5   │ │  (MD)   │ │  스토어 │
  │  BM25   │ │Obsidian │ │ BGE-M3  │
  └────┬────┘ └─────────┘ └────┬────┘
       │                       │
       └───────────┬───────────┘
                   │
            ┌──────▼──────┐
            │ 하이브리드 RRF │  k=60
            └──────┬──────┘
                   │
          ┌────────┼────────┐
          │        │        │
     ┌────▼──┐ ┌──▼───┐ ┌──▼──┐
     │  CLI  │ │ MCP  │ │위키 │
     │recall │ │서버   │ │에이전트│
     └───────┘ └──────┘ └─────┘

기술 스택

분류 기술
언어 Rust 1.75+ (2021 에디션)
데이터베이스 SQLite + FTS5 (rusqlite, bundled)
한국어 NLP Lindera ko-dic + Kiwi-rs 형태소 분석 (macOS/Linux)
플랫폼 macOS, Windows (x86_64), Linux (CI)
임베딩 Ollama BGE-M3 (1024차원) / ONNX Runtime (선택)
ANN 인덱스 usearch HNSW (macOS/Linux)
MCP 서버 rmcp (stdio + Streamable HTTP / axum)
볼트 Obsidian 호환 Markdown
위키 엔진 Claude Code / Ollama / LM Studio (플러그인 방식 백엔드)

출처

이 프로젝트는 다음 아이디어와 프로젝트를 기반으로 합니다:

  • LLM Wiki (Andrej Karpathy) — LLM을 사용하여 원본 소스로부터 점진적으로 지식 베이스를 구축하는 패턴. seCall의 2계층 볼트 아키텍처(원본 세션 + AI 생성 위키)는 이 컨셉을 직접 구현한 것입니다. Tobi Lütke의 구현도 참고.
  • qmd (Tobi Lütke) — 마크다운 파일을 위한 로컬 검색 엔진. seCall의 검색 파이프라인(FTS5 BM25, 벡터 임베딩, RRF k=60)은 qmd의 접근 방식을 참고하여 설계되었습니다.
  • graphify (Safi Shamsi) — 파일 폴더를 knowledge graph로 변환하는 도구. seCall P16의 결정적 그래프 추출과 confidence 라벨링은 이 프로젝트에서 영감을 받았습니다.

이 프로젝트는 AI 코딩 에이전트(Claude Code, Codex)를 tunaFlow 멀티에이전트 워크플로우 플랫폼으로 오케스트레이션하여 개발되었습니다.

라이선스

AGPL-3.0

업데이트 이력

날짜 버전 변경사항
2026-04-12 v0.3.1 secall lint --fix stale DB 정리 (#15), wiki_search created/updated 필드 (#13), P20 테스트 커버리지 강화 (+16 tests)
2026-04-12 v0.3.0 세션 분류 (regex 규칙, secall classify), 위키 플러그인 백엔드 (Ollama, LM Studio), --include-automated 플래그
2026-04-10 P17 대화형 온보딩 (secall init 위저드), secall config CLI, git 브랜치 설정
2026-04-10 P16 Knowledge Graph — frontmatter 기반 결정적 그래프 추출, secall graph build/stats/export, MCP graph_query, sync Phase 3.7
2026-04-09 P15 Windows 런타임 수정 — Ollama NaN 허용, 크로스플랫폼 command_exists, sync 충돌 사전 검사
2026-04-09 P14 검색 품질 — 독립 벡터 실행, 세션 레벨 결과 다양성
2026-04-09 P13 Windows 빌드 지원 — x86_64-pc-windows-msvc CI/Release, ORT DLL 번들
2026-04-09 v0.2.3 ChatGPT 내보내기 파서 — conversations.json (ZIP), 매핑 트리 선형화
2026-04-08 v0.2.2 타임존 설정 — IANA 타임존 변환으로 볼트 타임스탬프 현지화
2026-04-08 v0.2.1 --force 재수집 + Dataview :: 이스케이프 + AGPL-3.0 LICENSE
2026-04-07 P11 임베딩 성능 — ORT 세션 풀, 배치 추론, 병렬화 (49h → ~3-4h)
2026-04-07 P10 세션 summary frontmatter — 첫 번째 user turn에서 자동 생성
2026-04-06 P8 안정화 + GitHub Actions 릴리즈 워크플로우
2026-04-06 P7 --min-turns, embed --all, wiki_search MCP 도구, --no-wiki
2026-04-05 v0.2 claude.ai 내보내기 파서, ZIP 자동 압축 해제
2026-04-05 P6 ANN 인덱스 (usearch HNSW)
2026-04-04 P5 멀티 기기 볼트 Git 동기화, secall sync, reindex --from-vault
2026-03-31 MVP 최초 릴리즈 — Claude Code/Codex/Gemini 파서, BM25+벡터 검색, MCP 서버, Obsidian 볼트

Contact: d9ng@outlook.com

About

recall your second brain

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Rust 100.0%