Skip to content

hang-in/seCall

Repository files navigation

seCall

AI 에이전트와 나눈 대화를 로컬 위키로 정리하고 검색하세요.

Your AI agent conversations, as a searchable local wiki.

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 의 세션 로그를 수집하고, LLM 으로 Obsidian 호환 위키를 정리해 두고, BM25 + 벡터 하이브리드 검색을 CLI / MCP 서버 / REST API / 내장 웹 UI 로 제공합니다.

왜 필요한가?

  • 아키텍처 결정·디버깅 흔적·설계 메모가 에이전트 JSONL 파일들에 흩어져 있어, "지난번에 그 업스트림 에러 어떻게 패치했더라?" 를 다시 찾는 게 번거롭습니다.
  • seCall 은 원본 transcript 를 그대로 보존하면서 위에 LLM 이 정리한 위키를 얹고, 둘 다 검색합니다 — CLI / 웹 UI / Obsidian / MCP 호환 AI 에이전트 어디서든.

주요 기능

멀티 에이전트 수집

여러 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/   # 불변 세션 원본 (dot-prefix → obsidian 자동 hidden, v0.5.0+)
│   └── YYYY-MM-DD/  # 날짜별 정리
├── wiki/            # AI 생성 지식 페이지
│   ├── projects/    # 프로젝트별 요약
│   ├── topics/      # 기술 주제 페이지
│   └── decisions/   # 아키텍처 의사결정 기록
└── graph/           # Knowledge Graph 출력
    └── graph.json   # 노드/엣지 데이터
  • 위키 생성: pluggable LLM backend 기반 (secall wiki update --backend claude|codex|haiku|ollama|lmstudio)
  • Obsidian 백링크 ([[]])로 세션 ↔ 위키 페이지 연결
  • Dataview 쿼리를 위한 frontmatter 메타데이터 (summary 필드로 세션 내용 즉시 파악)

Knowledge Graph

세션 간 관계를 추출하여 지식 그래프를 구축합니다:

  • 노드 타입: session, project, agent, tool — frontmatter에서 자동 추출
  • 규칙 기반 엣지: belongs_to, by_agent, uses_tool, same_project, same_day (LLM 불필요)
  • 시맨틱 엣지 (Gemini/Ollama/LM Studio): fixes_bug, modifies_file, introduces_tech, discusses_topic — LLM이 세션 내용을 분석하여 추출
  • 증분 빌드: 신규 세션만 노드 추가, 관계 엣지는 전체 재계산으로 정확성 보장
  • MCP 도구: graph_query — AI 에이전트가 세션 간 관계를 탐색 (BFS, 최대 3홉)

Web UI + REST API + Obsidian 플러그인

secall serve는 REST API와 웹 UI를 동일 포트(8080)에서 제공하며, Obsidian 플러그인과도 동일 API를 공유합니다.

# REST API + Web UI 서버 시작
secall serve --port 8080
# 브라우저: http://127.0.0.1:8080

엔드포인트:

  • 읽기 (Phase 0): /api/recall, /api/get, /api/status, /api/daily, /api/graph, /api/wiki (검색)
  • 위키 본문 (Phase 1): GET /api/wiki/{project}
  • 세션 메타 (Phase 0): /api/sessions, /api/projects, /api/agents, PATCH /api/sessions/{id}/{tags,favorite}
  • 세션 노트 (Phase 2): PATCH /api/sessions/{id}/notes
  • 태그 목록 (Phase 3): GET /api/tags?with_counts={true|false}
    • true (기본): { "tags": [{ "name": "rust", "count": 12 }, ...] }
    • false: { "tags": ["rust", "search", ...] }
  • 명령 (Phase 1): POST /api/commands/{sync,ingest,wiki-update}
  • 그래프 재구축 (P37): POST /api/commands/graph-rebuild
    • body: { since?, session?, all?, retry_failed? }
    • 응답: { job_id, status: "started" }
    • 단일 큐 정책: 다른 mutating job 실행 중이면 409 Conflict
  • Job 관리 (Phase 1): GET /api/jobs, GET /api/jobs/{id}, GET /api/jobs/{id}/stream (SSE)
  • Job 취소 (P36): POST /api/jobs/{id}/cancel
    • 200: { "cancelled": true, "job_id": "..." } — 활성 job 취소 성공 (이미 완료/취소된 job 도 동일 응답으로 idempotent)
    • 404: { "error": "job not found or already evicted" } — 미등록 / evict 됨

Web UI (web/, P32 Phase 0 + P33 Phase 1):

  • 다크 모드 우선 모던 UI (Tailwind + shadcn/ui + Pretendard/Geist Sans)
  • 2-pane 레이아웃 (좌: 검색/리스트, 우: 상세)
  • 그래프 폴딩 오버레이 (노드 클릭 → 세션 로드 + 자동 폴딩)
  • 태그 / 즐겨찾기 편집
  • 사이드바 Commands 메뉴 — Sync / Ingest / Wiki Update 트리거 (Phase 1)
  • 글로벌 진행 배너 + SSE 진행 스트리밍 + 완료/실패 toast (Phase 1)

Obsidian 플러그인 (obsidian-secall/):

  • 검색 뷰 — 키워드/시맨틱 세션 검색
  • 데일리 뷰 — 날짜별 작업 요약, 프로젝트별 세션 그룹핑, 노트 생성
  • 그래프 뷰 — 노드 관계 탐색 (depth 1-3, 관계 필터)
  • 세션 뷰 — 전체 마크다운 렌더링
  • 상태바 — 세션 수 + 임베딩 상태 표시 (5분 갱신)

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. 설치

GitHub Releases (권장) — 웹 UI 포함된 단일 바이너리:

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)

Cargo (개발자용):

# CLI/MCP/REST API만 (웹 UI 미포함)
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         # web/dist 빌드 → cargo build --release
cp target/release/secall ~/.local/bin/

cargo install secall은 npm 빌드를 자동으로 수행하지 않습니다. 웹 UI를 사용하려면 Releases 바이너리 또는 위의 직접 빌드를 사용하세요.

Homebrew (예정 — tap 등록 작업 진행 중):

brew install hang-in/tap/secall

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

Web UI

secall serve는 REST API와 함께 웹 UI를 동일 포트에서 제공합니다 (단일 진입점).

secall serve --port 8080
# 브라우저에서 http://127.0.0.1:8080 접속

Phase 0 기능 (P32, 읽기 전용):

  • 검색 / 세션 브라우징 (2-pane 레이아웃)
  • 일일 일기 / 위키 페이지 열람 (전체 본문 — Phase 1에서 위키 본문 fetch 추가)
  • 그래프 탐색 (사이드바 Graph 버튼 → 풀스크린 오버레이)
  • 태그 / 즐겨찾기 편집

Phase 1 기능 (P33, 명령 트리거):

  • 사이드바 Commands 메뉴 — Sync / Ingest / Wiki Update 버튼 + 옵션 다이얼로그
  • SSE 진행 스트리밍 — phase별 실시간 표시
  • 글로벌 진행 배너 — 어떤 페이지에서든 활성 작업 추적 (sticky top)
  • 완료/실패/중단 자동 toast 알림
  • 부분 성공 명시 (예: "ingest까지 OK / push 실패")
  • 한 번에 하나의 mutating 작업만 실행 (단일 큐)
  • 탭 닫고 재접속 시 진행 중 작업 자동 복원

Phase 2 기능 (P34, 뷰어 강화):

  • 시맨틱 검색 모드 토글 (Ollama 사용 시)
  • 검색어 하이라이트 — 리스트 + 마크다운 본문 양쪽
  • 다중 태그 AND 필터 + 날짜 quick range (오늘/이번 주/이번 달)
  • 키보드 단축키 — ? 도움말, j/k 리스트 이동, / 검색 포커스, g d/w/s/c 라우트, [/] 세션 prev/next, f 즐겨찾기, e 노트
  • 관련 세션 패널 — 그래프 인접 + 같은 프로젝트/태그 추천 (세션 상세 하단)
  • 그래프 시각화 강화 — dagre 자동 레이아웃 + 노드 타입별 색상/아이콘 + 엣지 라벨 토글 + 범례
  • 세션 메타 mini-chart — turn role 분포 (user/assistant/system) + tool 사용 빈도 top 5
  • 사용자 노트 편집 — 세션별 markdown 노트 (autosave 1s, PATCH /api/sessions/{id}/notes)

Phase 3 기능 (P35, 성능 + 정확도):

  • /api/tags 엔드포인트 — 모든 태그 + 사용 빈도 정확 노출 (sessions 100건 휴리스틱 제거)
  • SessionList 무한 스크롤 — IntersectionObserver 기반 자동 로드 (page_size=100)
  • Code-split — 라우트별 + vendor (react/query/radix/viz) chunk 분리, 초기 진입 JS ≤ 250 kB (gzip)

Job Cancellation (P36, 실행 중 작업 취소):

  • 실행 중 sync / ingest / wiki-update 작업을 안전하게 중단 가능
  • tokio_util::sync::CancellationToken 기반 — JobRegistry / JobExecutor / BroadcastSink 통합, ProgressSink::is_cancelled() 노출
  • 어댑터(sync/ingest/wiki) 가 안전 지점에서 polling — phase 사이, file/session 루프 시작, LLM 호출 직전
  • 부분 결과 보존 — 예: ingest 100건 중 50건 처리 후 취소 → 결과 JSON 에 ingested=50 그대로 기록
  • 취소 시 최종 SSE 이벤트: Failed { error: "cancelled by user", partial_result: None }, job 상태는 Interrupted 로 강제
  • REST: POST /api/jobs/{id}/cancel — 활성 200, idempotent 200, 미등록/evict 404
  • Web UI: JobBanner 와 활성 JobItem취소 버튼 + window.confirm 다이얼로그 (useCancelJob mutation hook)

Graph Sync 자동화 (P37, 시맨틱 그래프 재구축):

  • 이미 ingest 된 세션의 시맨틱 그래프를 별도로 재구축 가능 — embedding 만 끝낸 세션 backfill, 모델/프롬프트 교체 후 일괄 재처리 등
  • DB 스키마 v8: sessions.semantic_extracted_at 컬럼으로 시맨틱 추출 상태 추적 (NULL = 미처리)
  • CLI: secall graph rebuild [--since DATE] [--session ID] [--all] [--retry-failed]
  • REST: POST /api/commands/graph-rebuild — P33 Job 시스템 + P36 cancel 통합
  • Web UI: Commands 페이지 4번째 카드 "Graph Rebuild" + 옵션 다이얼로그 (since / session / all / retry-failed)
  • 우선순위: --session > --all > --retry-failed > --since (동시 지정 시 위 순서로 적용) — CLI / REST / Web UI 모두 동일

키보드 단축키 (Phase 2)

동작
? 단축키 도움말
/ 검색 포커스
j / k 리스트 다음/이전 항목
[ / ] 세션 prev/next
g d Daily 화면
g w Wiki 화면
g s Sessions 화면
g c Commands 화면
g g 그래프 오버레이 토글
f 현재 세션 즐겨찾기 토글
e 현재 세션 노트 편집
Esc 다이얼로그/오버레이 닫기

명령 사용

웹 UI에서 좌측 사이드바 Commands 메뉴 → 원하는 명령 + 옵션 → 시작.

CLI에서도 동일하게 사용 가능 (Job 시스템은 웹 UI 전용):

secall sync --local-only --dry-run
secall sync --no-graph         # graph 자동 증분 비활성 (sync 기본은 활성)
secall ingest --auto --auto-graph   # ingest 시 graph 자동 증분 활성 (기본 비활성)
secall wiki update --backend claude

# P37 — 시맨틱 그래프 재구축 (semantic_extracted_at 상태 추적)
secall graph rebuild --retry-failed              # 미처리(NULL) 세션 일괄 backfill
secall graph rebuild --since 2026-04-01          # 특정 날짜 이후 세션
secall graph rebuild --session abc12345          # 단일 세션
secall graph rebuild --all                       # 전체 재구축 (기존 결과 덮어쓰기)
# 우선순위: --session > --all > --retry-failed > --since (동시 지정 시 위 순서로 적용)

Job 시스템

명령 트리거(sync/ingest/wiki update)는 백그라운드 Job으로 실행됩니다:

  1. POST /api/commands/{kind} → 즉시 { job_id, status: "started" } 응답 (HTTP 202)
  2. 진행 중 상태는 메모리에 저장되어 빠른 SSE/폴링 가능 (Arc<RwLock<HashMap>>)
  3. 완료/실패 시 jobs 테이블에 영구 기록
  4. 단일 큐: 동시에 mutating 작업은 1개만 — 두 번째 요청은 409 Conflict + {"error":"another mutating job is running","current_kind":"sync|ingest|wiki_update"}
  5. Read 작업 (검색, 세션 조회 등)은 동시 무제한
  6. 서버 재시작 시 running/started 상태 jobs는 자동으로 interrupted로 갱신
  7. 7일 이상된 완료/실패/중단 jobs는 시작 시 자동 cleanup
  8. Cancellation 지원 (P36) — POST /api/jobs/{id}/cancel 로 활성 job 취소 (200 idempotent / 404 unknown). 어댑터가 phase 사이·루프·LLM 호출 직전 안전 지점에서 polling 하여 부분 결과를 보존하고, job 상태는 Interrupted 로 종료

Phase 분리 (sync 예시)

sync = init → pull → reindex → ingest → wiki_update → graph → push

각 phase 완료마다 SSE 이벤트 발행 (type discriminator: initial_state, phase_start, message, progress, phase_complete, done, failed, KeepAlive 15초). push 실패 시 ingest까지의 결과는 보존되며 결과 JSON에 명시:

{
  "pulled": 3,
  "reindexed": 5,
  "ingested": 2,
  "wiki_updated": 1,
  "graph_nodes_added": 12,
  "graph_edges_added": 34,
  "pushed": null,
  "partial_failure": "push: <error>"
}

개발 모드

just dev    # Vite dev server (5173) + axum (8080) 동시 실행

just dev는 Vite를 5173에서 띄우고 axum이 8080으로 reverse proxy합니다.

  • 8080 접속: 단일 포트로 모든 것 동작 (HMR은 새로고침 필요)
  • 5173 직접 접속: HMR 동작, /api/*는 8080으로 프록시됨

빌드

just build          # web/dist 빌드 + cargo build --release
# 또는 수동:
cd web && pnpm install && pnpm build && cd ..
cargo build --release

사전 요구사항 (개발 시)

  • Node 22 + pnpm 9 — corepack enable 또는 npm i -g pnpm
  • justbrew install just (선택, 명령 통합용)

사용법

세션 조회

# 요약 보기
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

# Codex CLI 백엔드
secall wiki update --backend codex

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

# Anthropic API (haiku — 직접 API 호출)
secall wiki update --backend haiku

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

# 오프라인 / 수동 sync 모드
secall wiki update --no-pull

# 위키 상태 확인
secall wiki status

Cross-host 동기화 (다중 머신 vault)

secall wiki update 는 시작 시 vault git repo 를 감지하면 자동으로 auto_commit + pull --rebase 를 시도합니다.

시나리오 동작
같은 토픽 wiki 가 양쪽 머신에서 갱신됨 wiki/*.md 충돌 감지 후 양쪽 sources 합집합으로 해당 페이지 자동 재생성
wiki 외 파일 (raw/, log/, graph/ 등) 충돌 자동 중단 후 수동 해결 안내
오프라인 또는 수동 sync secall wiki update --no-pull 로 git 작업 skip
같은 토픽 재호출 기존 본문 누적 없이 새 본문으로 교체, sources 만 합집합 유지

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

[wiki]
default_backend = "lmstudio"   # "claude" | "codex" | "haiku" | "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" 도 가능

Wiki review (다중 backend)

secall wiki update --review 는 review backend 를 별도로 선택할 수 있습니다.

Backend 인증 JSON 신뢰성 비용
anthropic ANTHROPIC_API_KEY 높음 API 과금
haiku ANTHROPIC_API_KEY 높음 API 과금
claude claude CLI 중간 subscription
codex codex CLI 중간 subscription
ollama 없음 모델별 차이 로컬
lmstudio 없음 모델별 차이 로컬

우선순위:

  1. CLI --review-backend
  2. [wiki].review_backend
  3. [wiki].default_backend
  4. fallback "haiku"
secall wiki update --review --review-backend ollama
secall config set wiki.review_backend ollama

로컬 backend (ollama, lmstudio) 는 docs/prompts/wiki-review-strict-json.md 의 strict JSON suffix 를 자동으로 붙여 재시도합니다.

작업 일기

날짜별 작업 일기를 자동으로 생성합니다:

# 오늘 날짜 일기 생성
secall log

# 특정 날짜 지정
secall log 2026-04-15
  • 프로젝트별로 세션을 그룹핑하고, 토픽 노드를 Knowledge Graph에서 추출
  • Ollama/Gemini LLM으로 산문 정리 (LLM 미설정 시 템플릿 fallback)
  • 결과를 vault/log/{date}.md에 저장

Knowledge Graph

# 전체 그래프 빌드
secall graph build

# 통계 확인
secall graph stats

# graph.json 내보내기
secall graph export

설정

secall config 명령으로 설정을 관리합니다. 필요하면 Web UI /settings 와 REST /api/config 로도 같은 설정을 볼 수 있습니다.

# 현재 설정 확인
secall config show
secall config llm show

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

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

# Web UI에서 설정 편집 (기본은 read-only)
secall serve --port 8080 --allow-config-edit

설정 키 목록

설명 기본값
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 / openai / openvino / ollama_cloud) ollama
embedding.ollama_model Ollama 모델 이름 bge-m3
embedding.pool_size ORT session pool 크기 (미설정 = RAM 기반 자동) null
embedding.cloud_host Ollama Cloud API 호스트 https://ollama.com
embedding.cloud_model Ollama Cloud embedding 모델 이름 null
output.timezone 타임존 (IANA) UTC
ingest.classification.default 분류 규칙 미매칭 시 기본 session_type interactive
ingest.classification.skip_embed_types 임베딩을 스킵할 session_type 목록 []
graph.semantic_backend 시맨틱 엣지 추출 백엔드 (ollama_cloud / ollama / lmstudio / anthropic / none) none
graph.cloud_model Ollama Cloud 시맨틱 모델 gemma4:31b-cloud
graph.cloud_host Ollama Cloud API 호스트 https://ollama.com
graph.ollama_model Ollama/LM Studio 시맨틱 모델 gemma4:e4b / gemma-4-e4b-it
wiki.default_backend 위키 생성 백엔드 (claude / codex / haiku / ollama / lmstudio) claude
wiki.review_backend 위키 review 백엔드 (anthropic / claude / codex / haiku / ollama / lmstudio) wiki.default_backend 폴백
wiki.review_model 위키 review 모델 override sonnet
wiki.backends.<name>.api_url 백엔드 API 엔드포인트 (기본값 사용)
wiki.backends.<name>.model 백엔드 모델 이름 (기본값 사용)
wiki.backends.<name>.max_tokens 최대 생성 토큰 수 4096
log.backend Daily diary 백엔드 (claude / codex / haiku / ollama / lmstudio) graph.semantic_backend 폴백
log.model Daily diary 모델 override backend 기본값
log.api_url Daily diary API URL override backend 기본값
log.max_tokens Daily diary 최대 생성 토큰 수 backend 기본값

설정 파일 경로:

  • 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 [--auto-graph] 에이전트 세션 파싱 및 인덱싱 (--auto-graph로 graph 자동 증분 활성, 기본 비활성)
secall sync [--local-only] [--no-wiki] [--no-semantic] [--no-graph] 전체 동기화: init → pull → reindex → ingest → wiki_update → graph → push (--no-graph로 graph 단계 생략)
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 config llm show|set|where LLM 관련 설정만 조회/변경
secall graph build|stats|export Knowledge Graph 관리
secall graph rebuild [--since <date>|--session <id>|--all|--retry-failed] 시맨틱 그래프 재구축 (P37) — 우선순위: --session > --all > --retry-failed > --since
secall wiki update [--backend claude|codex|haiku|ollama|lmstudio] [--review] [--review-backend <name>] 위키 생성 + optional review
secall wiki status 위키 상태 확인
secall log [YYYY-MM-DD] [--backend <name>] [--model <name>] 날짜별 작업 일기 생성
secall serve [--port <port>] [--allow-config-edit] REST API + Web UI 서버 시작 (/settings 저장은 flag 필요)
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": {
    "SessionStart": [{
      "matcher": "startup|resume",
      "hooks": [{"type": "command", "command": "secall sync --local-only"}]
    }],
    "SessionEnd": [{
      "hooks": [{"type": "command", "command": "secall sync"}]
    }]
  }
}

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

아키텍처

seCall 아키텍처

기술 스택

분류 기술
언어 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
REST API axum (CORS 지원)
위키 엔진 Claude Code / Codex CLI / Ollama / LM Studio / Gemini (플러그인 방식 백엔드)
Obsidian 플러그인 obsidian-secall (TypeScript, esbuild)

출처

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

  • 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

업데이트 이력

NOTE: git tag (v0.x.x) 가 SSOT. 아래 표의 P34P44 는 v0.4.0 release 의 내부 phase, P49P56 는 v0.5.0 release 의 phase.

날짜 버전/Phase 변경사항
2026-05-15 v0.5.0 누적 release (P49~P56) — TMPDIR/secall-prompt 노이즈 ingest 차단 (P49) + raw/sessions/raw/.sessions/ rename (obsidian 자동 hidden, breaking), LlmBackend trait + 4 백엔드 통합 (P50-B), wiki/ingest 거대 함수 분해 (P50-C/D/E), graph/log default ollama_cloud (P51, breaking), wiki 4 backend generate() 300s timeout — kill_on_drop (P52), wiki --since target 표시 정확화 (P53), secall lint --fix-orphan-vault (P54), ollama_cloud wiki review/generation backend (P55), WikiBackendConfig.cloud_* 필드 + claude CLI haiku alias (P56)
2026-05-10 P44 (v0.4.0+) Wiki cross-host merge: wiki update 시작 시 자동 auto_commit + pull, wiki/*.md 충돌 시 양쪽 sources 합집합 기반 자동 재생성, --no-pull 추가, merge_with_existing() 본문 누적 제거
2026-05-09 P43 (v0.4.0+) Wiki review backend 확장: wiki update --reviewclaude / codex / haiku / ollama / lmstudio / anthropic backend 를 지원, [wiki].review_backend + --review-backend 추가, toml_edit 기반 config 저장으로 사용자 주석 보존, docs/reference/llm-config.md 추가
2026-05-09 P41 (v0.4.0+) LLM 설정 통합: secall log --backend/--model, 신규 [log] 섹션, hard-coded default model 상수화 + warning, GET /api/config / PATCH /api/config/{section}, Web /settings, secall config llm show|set|where
2026-05-06 P40 (v0.4.0) Wiki 검색 하이브리드 모드: wiki_vectors 테이블 (DB v9, page-level 임베딩, bge-m3 + Ollama), SHA-256 content-hash 기반 idempotent 인덱싱 + orphan 정리의 WikiIndexer, do_wiki_searchmode={keyword|semantic|hybrid} 파라미터 (기본 keyword — 호환), hybrid 는 RRF (k=60) 결합, Ollama 불가 / 임베딩 실패 시 자동 keyword fallback, 신규 CLI secall wiki vectorize [--force] [--model bge-m3] [--ollama-url ...] 로 일회성 backfill, 회귀 커버리지 tests/{db_migrations,wiki_indexer,wiki_search_modes}.rs
2026-05-05 P39 (v0.4.0) wiki 파이프라인 baseline + sync auto-commit fix + dotenv autoload: VaultGit::auto_commitgit add -A 로 SCHEMA.md / graph/ / log/ 등 모두 stage (crates/secall-core/src/vault/git.rs:146, 8 회귀 tests tests/vault_auto_commit.rs), secall 바이너리 부팅 시 dotenvy::dotenv() autoload (crates/secall/src/main.rs:382 — Gemini/OpenAI 키 환경변수 자동 주입), 683 세션 sync baseline 측정 (docs/baseline/p39-wiki-baseline.md / p39-wiki-quality.md / p39-p40-decision.md), graph rebuild --since 2026-05-05 28 sessions / 840 edges 백필
2026-05-03 P38 (v0.4.0) 테스트 갭 메우기: tests/rest_routes.rs (REST 22 엔드포인트 라우트 레벨 회귀, 45 tests) + tests/session_repo_helpers.rs (P32~P37 누적 helper 회귀, 29 tests) — 총 74 P38 신규 tests 추가, Insight TES-session_repo finding 해소
2026-05-03 P37 (v0.4.0) Graph Sync 자동화: DB 스키마 v8 (sessions.semantic_extracted_at 컬럼으로 시맨틱 추출 상태 추적), secall graph rebuild [--since|--session|--all|--retry-failed] CLI (extract_one_session_semantic helper 분리, 우선순위: --session > --all > --retry-failed > --since), POST /api/commands/graph-rebuild REST (JobKind::GraphRebuild, P33 단일 큐 + P36 cancel 통합), web UI Commands 페이지 4번째 카드 "Graph Rebuild" + 옵션 다이얼로그
2026-05-02 P36 (v0.4.0) Job Cancellation: tokio_util::sync::CancellationToken 통합 (JobRegistry/JobExecutor/BroadcastSink), ProgressSink::is_cancelled() 추가, sync/ingest/wiki 어댑터 safe-point polling (phase 사이·file/session 루프·LLM 호출 직전), 부분 결과 보존, POST /api/jobs/{id}/cancel 활성화 (200 idempotent / 404 unknown, 최종 이벤트 Failed { error: "cancelled by user" } + status=Interrupted), web UI 취소 버튼 (JobBanner/JobItem, useCancelJob + window.confirm)
2026-05-02 P35 (v0.4.0) Web UI Phase 3: /api/tags 엔드포인트 (with_counts 옵션, 100세션 휴리스틱 제거), SessionList 무한 스크롤 (IntersectionObserver, page_size=100), Code-split (vendor react/query/radix/viz + per-route chunk, 초기 진입 JS ≤ 250 kB gzip)
2026-05-02 P34 (v0.4.0) Web UI Phase 2: 시맨틱 검색 모드 활성, 검색어 하이라이트, 다중 태그 + 날짜 quick range, 키보드 단축키 (?///j/k/[/]/g d/w/s/c/g/f/e), 관련 세션 패널, 그래프 시각화 강화 (dagre + 노드 색상/아이콘 + 범례), 세션 메타 mini-chart, 사용자 노트 편집 (PATCH /api/sessions/{id}/notes), DB 스키마 v7
2026-05-02 v0.4.0 Web UI Phase 1 (P33): 명령 트리거 (Sync/Ingest/Wiki Update), SSE 진행 스트리밍 (phase별), Job 시스템 (단일 큐 + 7일 cleanup + interrupted 보정), 글로벌 진행 배너 + toast, 그래프 자동 증분 (secall ingest --auto-graph, secall sync --no-graph), 위키 본문 GET 엔드포인트 (/api/wiki/{project}), DB v6 (jobs 테이블)
2026-04-17 v0.3.3 LM Studio (OpenAI 호환) 시맨틱 백엔드 추가 (--backend lmstudio, #35), secall sync --no-semantic 플래그 추가 — GPU 메모리 경합 방지 (#34), Gemini Web ZIP ingest 지원 (#31), graph semantic CLI 백엔드 설정 옵션 (#30)
2026-04-15 v0.3.2 Gemini API 백엔드 (시맨틱 그래프 + 일기 생성), Codex wiki 백엔드 (PR #29), REST API 서버 (secall serve), Obsidian 플러그인 (검색/데일리/그래프 뷰), 작업 일기 (secall log), 시맨틱 엣지 (fixes_bug, modifies_file, introduces_tech, discusses_topic), BM25-only 모드 시 graph semantic 자동 비활성화 (#25)
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