seCall 소개
Claude Code, Codex CLI, Gemini CLI, claude.ai, ChatGPT 등 여러 AI 에이전트와 주고받은 대화는 각자의 형식과 위치에 흩어져 저장됩니다. 어제 디버깅하면서 합의한 아키텍처 결정이나 의존성 업그레이드 시 적용했던 패치 노트가 어느 세션에 있었는지 다시 찾으려고 하면, 결국 폴더를 뒤지고 grep을 돌리는 일이 반복됩니다. AI 에이전트가 늘어날수록 이 흩어짐 문제는 더 커지고, "지난번에 그 업스트림 에러 어떻게 패치했더라"를 추적하는 것 자체가 부담이 됩니다.
seCall은 이 문제를 로컬 퍼스트(local-first) 도구로 풀어내는 Rust 기반 오픈소스입니다. 여러 에이전트의 세션 로그를 통일된 형식으로 파싱하여 SQLite와 Obsidian 호환 마크다운 볼트(vault)에 저장하고, 그 위에 LLM이 정리한 위키(wiki) 페이지를 얹어 두 계층을 모두 검색할 수 있게 합니다. 검색은 BM25 전문 검색과 BGE-M3 임베딩(embedding) 기반 시맨틱 검색을 동시에 사용하는 하이브리드 방식이며, CLI, 내장 웹 UI, REST API, MCP 서버, Obsidian 플러그인 등 어디서든 같은 인덱스에 접근할 수 있습니다.
seCall 프로젝트는 Andrej Karpathy의 LLM Wiki 컨셉(원본 소스를 보존한 채 LLM이 점진적으로 위키를 빌드하는 패턴)과 Tobi Lütke의 마크다운 검색 도구 qmd를 직접적인 출발점으로 삼고 있으며, 그래프 추출 부분은 Safi Shamsi의 graphify에서 영감을 받았습니다. 자체 멀티 에이전트 워크플로우 도구인 tunaFlow로 Claude Code와 Codex를 오케스트레이션해 개발된 것도 특징입니다.
seCall의 멀티 에이전트 수집 파이프라인
seCall은 코딩 에이전트별로 다른 세션 포맷을 통합 모델(Session → Turn → Action)로 정규화하여 다룹니다. 현재 안정 단계로 지원되는 에이전트는 다음과 같습니다.
| 에이전트 | 형식 | 비고 |
|---|---|---|
| Claude Code | JSONL | 자동 감지 (--auto) |
| Codex CLI | JSONL | 디렉토리 직접 지정 |
| Gemini CLI | JSON | 디렉토리 직접 지정 |
| claude.ai | JSON (ZIP) | v0.2 export 지원 |
| ChatGPT | JSON (ZIP) | v0.2.3 매핑 트리 선형화 |
수집 시점에서는 정규식 규칙 기반 세션 분류기가 동작하여 첫 번째 user turn을 매칭한 뒤 interactive/automated 등의 타입을 부여하고, skip_embed_types에 들어 있는 타입은 벡터 임베딩을 생략하여 토큰/시간 비용을 줄입니다. recall 검색은 기본적으로 automated 세션을 제외하므로, 자동화 잡(job)들이 검색 결과를 어지럽히지 않습니다.
seCall의 하이브리드 검색 구조
검색 파이프라인은 BM25와 시맨틱 검색을 독립적으로 실행한 뒤 Reciprocal Rank Fusion(RRF, k=60)으로 결합하는 형태입니다. 한국어 처리를 위해 Lindera ko-dic과 Kiwi-rs 형태소 분석기를 선택할 수 있고, 시맨틱 쪽은 Ollama BGE-M3 임베딩(1024차원)에 usearch HNSW(macOS/Linux)로 ANN 인덱스를 붙여 O(log n) 탐색을 수행합니다. RRF 결합 후에는 세션당 최대 2개 턴까지만 통과시키는 다양성 강제 규칙이 들어가 있어, 같은 세션의 여러 턴이 결과를 점령하는 현상을 막습니다.
# BM25 전문 검색 + 필터
secall recall "에러 처리" --project seCall --agent claude-code --since 2026-04-01
# 벡터 시맨틱 검색 (Ollama 필요)
secall recall "검색 파이프라인 동작 방식" --vec
# Claude Code로 자연어 쿼리 확장
secall recall "검색 정확도 개선" --expand
전체 데이터 흐름은 README의 아키텍처 도식에서 확인할 수 있는데, 파서 → 통합 세션 모델 → SQLite FTS5 / Obsidian 볼트 / 벡터 스토어 3계층으로 분기된 뒤 다시 RRF 단계에서 합쳐져 CLI, MCP, 위키 에이전트로 흘러가는 구조입니다.
Claude Code Codex CLI Gemini CLI claude.ai ChatGPT
└────────────┬────────┴───────────┴───────────┘
파서 (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 · 위키 에이전트
seCall의 지식 볼트와 위키 백엔드
볼트는 두 계층으로 구성됩니다. vault/raw/sessions/는 날짜별로 정리된 불변(immutable) 세션 원본이고, vault/wiki/는 LLM이 정리한 프로젝트별 요약, 기술 주제 페이지, 아키텍처 의사결정 기록(ADR)을 담습니다. 두 계층은 Obsidian 백링크([[]])로 연결되어 세션과 위키 페이지를 양방향으로 탐색할 수 있고, 각 마크다운 파일에는 Dataview 쿼리에 쓰일 frontmatter 메타데이터가 붙습니다. seCall은 MD가 원본이라는 원칙을 지키며, DB는 파생 캐시이므로 secall reindex --from-vault로 언제든 완전 복구할 수 있습니다.
위키 생성은 플러그인 방식 LLM 백엔드를 채택해 Claude Code(기본), Codex CLI, Anthropic Haiku API 직접 호출, Ollama, LM Studio를 모두 사용할 수 있습니다. 즉, 클라우드 모델을 쓰고 싶을 때와 로컬 모델로 비용/프라이버시를 우선하고 싶을 때를 동일 인터페이스로 전환할 수 있다는 의미입니다.
# Claude Code로 위키 업데이트 (기본값)
secall wiki update
# 로컬 LLM
secall wiki update --backend lmstudio
secall wiki update --backend ollama
# 특정 세션만 증분 업데이트
secall wiki update --backend lmstudio --session <id>
seCall의 Knowledge Graph
세션과 프로젝트, 에이전트, 도구, 파일 사이의 관계를 추출해 별도의 그래프(vault/graph/graph.json)를 만듭니다. frontmatter에서 자동 추출하는 노드 외에, 규칙 기반 엣지(belongs_to, by_agent, uses_tool, same_project, same_day)는 LLM 없이 결정적으로 계산되고, 시맨틱 엣지(fixes_bug, modifies_file, introduces_tech, discusses_topic)는 Gemini, Ollama, LM Studio 백엔드가 세션 내용을 분석해 채워 넣습니다. 신규 세션에 대해서는 노드만 증분으로 추가하고, 관계 엣지는 정확성을 위해 전체를 다시 계산하는 정책입니다.
DB 스키마 v8부터는 sessions.semantic_extracted_at 컬럼으로 시맨틱 추출 상태를 추적하기 때문에, 모델이나 프롬프트를 교체한 뒤 secall graph rebuild --retry-failed로 미처리 세션만 backfill하거나, --all로 전체를 다시 만들 수 있습니다. MCP 측에는 graph_query 도구가 노출되어 AI 에이전트가 BFS(최대 3홉)로 세션 사이의 관계를 따라가며 컨텍스트를 모을 수 있습니다.
seCall의 웹 UI, REST API, MCP 서버
secall serve --port 8080을 실행하면 같은 포트 위에 REST API와 다크 모드 우선 웹 UI가 함께 올라옵니다. UI는 좌측 검색/리스트, 우측 상세의 2-pane 레이아웃에 그래프 폴딩 오버레이, 태그/즐겨찾기 편집, Sync/Ingest/Wiki Update/Graph Rebuild 명령 트리거, SSE 진행 스트리밍, 키보드 단축키(?, /, j/k, [/], g d/w/s/c/g, f, e)를 갖추고 있습니다. 명령은 백그라운드 Job으로 실행되어 단일 큐 + 7일 cleanup + 서버 재시작 시 interrupted 보정이 적용되고, POST /api/jobs/{id}/cancel로 활성 잡을 안전 지점에서 중단해 부분 결과를 보존할 수 있습니다.
# REST API + Web UI 서버 시작
secall serve --port 8080
# 브라우저에서 http://127.0.0.1:8080 접속
MCP 측은 stdio와 Streamable HTTP 두 모드를 모두 제공하며, recall, get, status, wiki_search, graph_query 다섯 개의 도구를 노출합니다. 같은 인덱스를 Claude Code, Cursor 같은 MCP 호환 에이전트에서 그대로 호출할 수 있어, 새로운 세션 안에서도 과거의 결정과 코드 변경을 자연스럽게 끌어올 수 있습니다.
{
"mcpServers": {
"secall": {
"command": "secall",
"args": ["mcp"]
}
}
}
seCall의 멀티 기기 동기화와 정합성 검증
여러 기기에서 같은 볼트를 공유하기 위해 git을 1차 동기화 채널로 사용합니다. secall sync는 init → pull → reindex → ingest → wiki_update → graph → push 순서로 phase를 진행하며, 각 phase 완료마다 SSE 이벤트(initial_state, phase_start, progress, phase_complete, done, failed, KeepAlive 15초)를 발행합니다. push가 실패해도 ingest까지의 결과는 그대로 보존되며 결과 JSON에 "partial_failure": "push: <error>" 형태로 명시됩니다. 세션은 기기별로 유니크하기 때문에 머지 충돌이 발생하지 않고, 각 세션은 frontmatter host 필드로 어떤 기기에서 수집되었는지 추적됩니다.
데이터 무결성은 secall lint가 책임집니다. 누락된 볼트 파일(L001), 고아 볼트 파일(L002), FTS 인덱스 갭(L003) 등을 검출하며, --fix 옵션으로 stale DB 항목을 정리할 수 있습니다.
설치 및 사용법
GitHub Releases에서 OS에 맞는 바이너리를 받아 실행하는 것이 가장 간단합니다. 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에서는 usearch HNSW와 Kiwi-rs는 비활성화되며 BLOB 코사인 스캔과 Lindera ko-dic으로 fallback됩니다.
# Cargo (CLI/MCP/REST API만)
cargo install --path crates/secall --no-default-features
# 웹 UI 포함 빌드 (Node 22 + pnpm 9 + just 필요)
git clone https://github.com/hang-in/seCall.git && cd seCall
just build
cp target/release/secall ~/.local/bin/
# 대화형 온보딩 (vault, 토크나이저, 임베딩 백엔드 설정)
secall init
# Claude Code 세션 자동 수집
secall ingest --auto
# 또는 한 명령으로 전체 동기화
secall sync
설정 파일은 macOS의 ~/Library/Application Support/secall/config.toml, Linux의 ~/.config/secall/config.toml, Windows의 %APPDATA%\secall\config.toml 위치에 있고, secall config show|set|path로 직접 편집 없이 관리할 수 있습니다.
라이선스
seCall은 AGPL-3.0 라이선스로 공개되어 있습니다. 네트워크를 통해 서비스 형태로 제공할 경우에도 사용자에게 소스 코드를 제공해야 하는 강한 카피레프트(strong copyleft) 라이선스이므로, 사내/상용 환경에 통합할 때는 배포 및 서비스 형태에 따른 의무 사항을 미리 검토할 필요가 있습니다.
seCall 프로젝트 GitHub 저장소
더 읽어보기
-
QMD(Query Markup Documents): 로컬 환경을 위한 의미 기반의 작고 가벼운 지식 검색 엔진
-
Graphify: 복잡한 코드베이스를 한눈에 - AI 코딩 어시스턴트를 위한 지식 그래프(Knowledge Graph) 도구
-
LightRAG: 지식 그래프 기반의 이중 검색 구조로 GraphRAG보다 빠른 RAG 프레임워크 (feat. EMNLP 2025)
이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. ![]()
파이토치 한국 사용자 모임
이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일
로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)
아래
쪽에 좋아요
를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ ![]()

