seCall은 AI 에이전트 세션을 위한 로컬 퍼스트 검색 엔진입니다. Claude Code, Codex CLI, Gemini CLI, claude.ai의 대화 로그를 수집하고, 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 신규 |
- BM25 전문 검색: SQLite FTS5 + 한국어 형태소 분석 (Lindera ko-dic)
- 벡터 시맨틱 검색: ONNX Runtime + BGE-M3 임베딩 + HNSW ANN 인덱스 (usearch)로 O(log n) 탐색
- Reciprocal Rank Fusion (RRF): 두 결과를 결합 (k=60)
- LLM 쿼리 확장: Claude Code를 통한 자연어 쿼리 확장
Git을 통해 여러 기기에서 지식 볼트를 동기화합니다:
# 원격 저장소 설정
secall init --git git@github.com:you/obsidian-vault.git
# 전체 동기화: git pull → reindex → ingest → wiki → git push
secall sync
# 로컬 전용 모드 (git 생략, Claude Code hook에 적합)
secall sync --local-only
# 볼트 마크다운에서 DB 복구
secall reindex --from-vault- MD가 원본 — DB는 파생 캐시이며, 볼트에서 완전 복구 가능
- 호스트 추적 — 각 세션이 어떤 기기에서 수집되었는지 기록 (frontmatter
host필드) - 충돌 없음 — 세션은 기기별 유니크하므로 git 머지 충돌 없음
Obsidian 호환 마크다운 볼트 (2계층 구조):
vault/
├── raw/sessions/ # 불변 세션 원본
│ └── YYYY-MM-DD/ # 날짜별 정리
└── wiki/ # AI 생성 지식 페이지
├── projects/ # 프로젝트별 요약
├── topics/ # 기술 주제 페이지
└── decisions/ # 아키텍처 의사결정 기록
- 위키 생성: Claude Code 메타에이전트 기반 (
secall wiki update) - Obsidian 백링크 (
[[]])로 세션 ↔ 위키 페이지 연결 - Dataview 쿼리를 위한 frontmatter 메타데이터
MCP 호환 AI 에이전트에 세션 인덱스를 노출합니다:
# stdio 모드 (Claude Code, Cursor 등)
secall mcp
# HTTP 모드 (웹 클라이언트)
secall mcp --http 127.0.0.1:8080제공 도구: recall, get, status, wiki_search — AI 에이전트가 자신의 대화 이력과 위키 지식을 검색할 수 있습니다.
내장 린트 규칙으로 인덱스 ↔ 볼트 정합성을 검증합니다:
secall lint
# L001: 누락된 볼트 파일
# L002: 고아 볼트 파일
# L003: FTS 인덱스 갭
# ...- Rust 1.75+
- Claude Code, Codex CLI, Gemini CLI 중 하나 이상
git clone https://github.com/hang-in/seCall.git
cd seCall
cargo install --path crates/secall# Obsidian 볼트(또는 원하는 디렉토리)를 지정
secall init --vault ~/Documents/Obsidian\ Vault/seCall
# 선택: 멀티 기기 동기화를 위한 Git 연동
secall init --git git@github.com:you/obsidian-vault.git# Claude Code 세션 자동 감지
secall ingest --auto
# Codex CLI 세션 수집
secall ingest ~/.codex/sessions
# Gemini CLI 세션 수집
secall ingest ~/.gemini/sessions
# claude.ai export 수집 (ZIP 또는 추출된 JSON)
secall ingest ~/Downloads/data-2026-04-06.zip
# 또는 한 명령으로 전체 동기화 (pull + reindex + ingest + push)
secall sync# BM25 전문 검색
secall recall "BM25 인덱싱 구현"
# 프로젝트, 에이전트, 날짜 필터
secall recall "에러 처리" --project seCall --agent claude-code --since 2026-04-01
# 벡터 시맨틱 검색
secall recall "검색 파이프라인 동작 방식" --vec
# LLM 쿼리 확장
secall recall "검색 정확도 개선" --expand# 요약 보기
secall get <session-id>
# 전체 마크다운
secall get <session-id> --full
# 특정 턴
secall get <session-id>:5# Claude Code가 세션을 분석하고 위키 페이지를 생성
secall wiki update
# 위키 상태 확인
secall wiki status┌─────────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ Claude Code │ │ Codex CLI │ │Gemini CLI│ │claude.ai │
│ (JSONL) │ │ (JSONL) │ │ (JSON) │ │JSON (ZIP)│
└──────┬───────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │ │
└───────┬───────┴─────────────┴──────────────┘
│
┌─────▼──────┐
│ 파서들 │ claude.rs / codex.rs / gemini.rs / claude_ai.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 형태소 분석 |
| 임베딩 | ONNX Runtime + BGE-M3 (384차원) |
| MCP 서버 | rmcp (stdio + Streamable HTTP / axum) |
| 볼트 | Obsidian 호환 Markdown |
| 위키 엔진 | Claude Code 메타에이전트 |
| 명령 | 설명 |
|---|---|
secall init [--git <remote>] |
볼트, 설정, 데이터베이스 초기화 |
secall ingest [path] --auto [--min-turns N] |
에이전트 세션 파싱 및 인덱싱 |
secall sync [--local-only] [--no-wiki] |
전체 동기화: git pull → reindex → ingest → wiki → git push |
secall reindex --from-vault |
볼트 마크다운에서 DB 재구축 |
secall recall <query> |
하이브리드 검색 |
secall get <id> |
세션 상세 조회 |
secall status |
인덱스 통계 |
secall embed [--all] |
미임베딩 세션 벡터 생성 |
secall lint |
인덱스/볼트 정합성 검증 |
secall mcp |
MCP 서버 시작 |
secall model download |
BGE-M3 ONNX 모델 다운로드 |
secall wiki update |
Claude Code 메타에이전트로 위키 생성 |
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 볼트 동기화 가이드를 참고하세요.
이 프로젝트는 다음 아이디어와 프로젝트를 기반으로 합니다:
- LLM Wiki (Andrej Karpathy) — LLM을 사용하여 원본 소스로부터 지속적이고 상호 연결된 지식 베이스를 점진적으로 구축하는 패턴. seCall의 2계층 볼트 아키텍처(원본 세션 + AI 생성 위키)는 이 컨셉을 직접 구현한 것입니다. Tobi Lütke의 구현도 참고.
- qmd (Tobi Lütke) — 마크다운 파일을 위한 로컬 검색 엔진으로, BM25/벡터 하이브리드 검색을 지원합니다. seCall의 검색 파이프라인(FTS5 BM25, 벡터 임베딩, RRF k=60)은 qmd의 접근 방식을 참고하여 설계되었습니다.
이 프로젝트는 AI 코딩 에이전트(Claude Code, Codex)를 tunaFlow 멀티에이전트 워크플로우 플랫폼으로 오케스트레이션하여 개발되었습니다.
한국어 · English
seCall is a local-first search engine for AI agent sessions. It ingests conversation logs from Claude Code, Codex CLI, Gemini CLI, and claude.ai, indexes them with hybrid BM25 + vector search, and exposes them via CLI, MCP server, and an Obsidian-compatible knowledge vault.
Your AI conversations are a knowledge base. seCall makes them searchable, browsable, and interconnected.
- You've discussed architecture, debugging steps, and design decisions across hundreds of agent sessions — but they're scattered in opaque JSONL files.
- seCall turns those sessions into a structured, searchable knowledge graph you can query from any MCP-compatible AI agent or browse in Obsidian.
Parse and normalize sessions from multiple AI coding agents into a unified format:
| Agent | Format | Status |
|---|---|---|
| Claude Code | JSONL | ✅ Stable |
| Codex CLI | JSONL | ✅ Stable |
| Gemini CLI | JSON | ✅ Stable |
| claude.ai | JSON (ZIP) | ✅ New in v0.2 |
- BM25 full-text search powered by SQLite FTS5 with Korean morpheme tokenization (Lindera ko-dic)
- Vector semantic search using ONNX Runtime with BGE-M3 embeddings + HNSW ANN index (usearch) for O(log n) lookups
- Reciprocal Rank Fusion (RRF) combining both results (k=60)
- LLM query expansion for natural language queries via Claude Code
Sync your knowledge vault across machines via Git:
# Initialize with a remote repository
secall init --git git@github.com:you/obsidian-vault.git
# Full sync: git pull → reindex → ingest → wiki → git push
secall sync
# Local-only mode (skip git, useful for Claude Code hooks)
secall sync --local-only
# Recover DB from vault markdown files
secall reindex --from-vault- MD as source of truth — DB is a derived cache, fully recoverable from vault
- Host tracking — each session records which machine ingested it (
hostfield in frontmatter) - No conflicts — sessions are unique per device, so git merges are always clean
Obsidian-compatible markdown vault with two layers:
vault/
├── raw/sessions/ # Immutable session transcripts
│ └── YYYY-MM-DD/ # Organized by date
└── wiki/ # AI-generated knowledge pages
├── projects/ # Per-project summaries
├── topics/ # Technical topic pages
└── decisions/ # Architecture decision records
- Wiki generation via Claude Code meta-agent (
secall wiki update) - Obsidian backlinks (
[[]]) connecting sessions ↔ wiki pages - Frontmatter metadata for Dataview queries
Expose your session index to any MCP-compatible AI agent:
# stdio mode (for Claude Code, Cursor, etc.)
secall mcp
# HTTP mode (for web clients)
secall mcp --http 127.0.0.1:8080Tools provided: recall, get, status, wiki_search — letting your AI agent search its own conversation history and wiki knowledge pages.
Built-in lint rules verify index ↔ vault consistency:
secall lint
# L001: Missing vault files
# L002: Orphan vault files
# L003: FTS index gaps
# ...- Rust 1.75+
- At least one of: Claude Code, Codex CLI, Gemini CLI
git clone https://github.com/hang-in/seCall.git
cd seCall
cargo install --path crates/secall# Point to your Obsidian vault (or any directory)
secall init --vault ~/Documents/Obsidian\ Vault/seCall
# Optional: enable Git sync for multi-device use
secall init --git git@github.com:you/obsidian-vault.git# Auto-detect Claude Code sessions
secall ingest --auto
# Ingest Codex CLI sessions
secall ingest ~/.codex/sessions
# Ingest Gemini CLI sessions
secall ingest ~/.gemini/sessions
# Ingest claude.ai export (ZIP or extracted JSON)
secall ingest ~/Downloads/data-2026-04-06.zip
# Or sync everything in one command (pull + reindex + ingest + push)
secall sync# BM25 full-text search
secall recall "BM25 인덱싱 구현"
# Filter by project, agent, date
secall recall "에러 처리" --project seCall --agent claude-code --since 2026-04-01
# Vector-only semantic search
secall recall "how does the search pipeline work" --vec
# LLM-expanded query
secall recall "검색 정확도 개선" --expand# Summary view
secall get <session-id>
# Full markdown content
secall get <session-id> --full
# Specific turn
secall get <session-id>:5# Claude Code analyzes sessions and generates wiki pages
secall wiki update
# Check wiki status
secall wiki status┌─────────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ Claude Code │ │ Codex CLI │ │Gemini CLI│ │claude.ai │
│ (JSONL) │ │ (JSONL) │ │ (JSON) │ │JSON (ZIP)│
└──────┬───────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │ │
└───────┬───────┴─────────────┴──────────────┘
│
┌─────▼──────┐
│ Parsers │ claude.rs / codex.rs / gemini.rs / claude_ai.rs
└─────┬──────┘
│
┌─────────▼─────────┐
│ Unified Session │ Session → Turn → Action
└─────────┬─────────┘
│
┌────────────┼────────────┐
│ │ │
┌────▼────┐ ┌────▼────┐ ┌────▼────┐
│ SQLite │ │ Vault │ │ Vector │
│ FTS5 │ │ (MD) │ │ Store │
│ BM25 │ │Obsidian │ │BGE-M3 │
└────┬────┘ └─────────┘ └────┬────┘
│ │
└───────────┬───────────┘
│
┌──────▼──────┐
│ Hybrid RRF │ k=60
└──────┬──────┘
│
┌────────┼────────┐
│ │ │
┌────▼──┐ ┌──▼───┐ ┌──▼──┐
│ CLI │ │ MCP │ │Wiki │
│recall │ │Server│ │Agent│
└───────┘ └──────┘ └─────┘
| Category | Technology |
|---|---|
| Language | Rust 1.75+ (2021 edition) |
| Database | SQLite with FTS5 (rusqlite, bundled) |
| Korean NLP | Lindera ko-dic + Kiwi-rs morpheme analysis |
| Embeddings | ONNX Runtime + BGE-M3 (384-dim) |
| MCP Server | rmcp (stdio + Streamable HTTP via axum) |
| Vault | Obsidian-compatible Markdown |
| Wiki Engine | Claude Code meta-agent |
| Command | Description |
|---|---|
secall init [--git <remote>] |
Initialize vault, config, and database |
secall ingest [path] --auto [--min-turns N] |
Parse and index agent sessions |
secall sync [--local-only] [--no-wiki] |
Full sync: git pull → reindex → ingest → wiki → git push |
secall reindex --from-vault |
Rebuild DB from vault markdown files |
secall recall <query> |
Hybrid search across sessions |
secall get <id> |
Retrieve session details |
secall status |
Show index statistics |
secall embed [--all] |
Generate vector embeddings for un-embedded sessions |
secall lint |
Verify index/vault integrity |
secall mcp |
Start MCP server |
secall model download |
Download BGE-M3 ONNX model |
secall wiki update |
Generate wiki via Claude Code |
Add to your Claude Code settings (~/.claude/settings.json):
{
"mcpServers": {
"secall": {
"command": "secall",
"args": ["mcp"]
}
}
}For auto-sync on session start/end:
{
"hooks": {
"PreToolUse": [{
"matcher": "Initialize",
"hooks": [{"type": "command", "command": "secall sync --local-only"}]
}],
"PostToolUse": [{
"matcher": "Exit",
"hooks": [{"type": "command", "command": "secall sync"}]
}]
}
}See GitHub Vault Sync Guide for detailed setup instructions.
This project is built on ideas from:
- LLM Wiki by Andrej Karpathy — The pattern of using LLMs to incrementally build and maintain a persistent, interlinked knowledge base from raw sources. seCall's two-layer vault architecture (raw sessions + AI-generated wiki) directly implements this concept. See also Tobi Lütke's implementation.
- qmd by Tobi Lütke — A local search engine for markdown files with hybrid BM25/vector search. seCall's search pipeline (FTS5 BM25, vector embeddings, Reciprocal Rank Fusion with k=60) was designed with reference to qmd's approach.
This project was developed using AI coding agents (Claude Code, Codex) orchestrated via tunaFlow, a multi-agent workflow platform.
Contact: d9ng@outlook.com
