VideoDB의 Call.md는 회의를 로컬에서 녹음하고, 나와 상대방의 음성을 분리해 실시간 전사하며, 통화 중 AI 보조·MCP 도구 호출을 제공하고, 종료 후 요약·액션 아이템·Markdown export·워크플로 전송까지 수행하는 Electron 데스크톱 앱이다.

한눈에 보기

  • 제품 형태: Electron 34 + React 19 + TypeScript 5.8 기반의 macOS/Windows용 데스크톱 앱으로 README에 소개되어 있다.
  • 핵심 흐름: 회의 준비 → 녹음·듀얼 채널 전사 → 실시간 보조·메트릭·MCP 호출 → 3종 요약 → Markdown export와 webhook 전송.
  • 데이터 경계: 로컬 SQLite/Drizzle에 녹음·전사·메트릭을 저장하지만, VideoDB API를 통한 전사·AI 기능에는 인터넷과 API key가 필요하다.
  • 에이전트 관점: 단순한 회의 녹음기가 아니라, 최근 대화 맥락을 유지하며 외부 도구를 호출하는 짧은 에이전트 루프를 회의 UI 안에 배치한 사례다.

공식 확인 — 제품과 구성

데스크톱 애플리케이션 구조

package.jsonsrc/main/index.ts를 보면 애플리케이션은 Electron main process, React renderer, preload bridge, 로컬 HTTP 서버로 나뉜다. main process는 contextIsolation: true, nodeIntegration: false로 창을 만들고, 개발 모드에서는 Vite renderer를 로드하며, 데이터 계층은 Drizzle ORM과 SQLite를 사용한다. tRPC 11과 Hono가 main/renderer 사이의 타입 안전한 API 표면을 구성한다.

README가 제시하는 주요 의존성은 다음과 같다.

계층구성
데스크톱 런타임Electron 34
UIReact 19, Tailwind CSS, shadcn/ui, Zustand
언어·빌드TypeScript 5.8, Vite
APIHono, tRPC 11
로컬 데이터SQLite, Drizzle ORM, better-sqlite3
미디어·전사VideoDB SDK 및 @videodb/recorder
도구 연결Model Context Protocol SDK 1.0
LLMOpenAI SDK를 통한 VideoDB OpenAI-compatible API proxy

녹음과 듀얼 채널 전사

src/main/ipc/capture.ts는 VideoDB CaptureClient와 WebSocket 연결을 사용한다. 마이크와 system audio에 별도 WebSocket을 만들고, 각각의 메시지를 micsystem_audio 채널로 구분해 renderer에 transcript 이벤트로 전달한다. 별도의 screen WebSocket은 scene_index/visual_index 이벤트를 받아 화면 맥락으로 전달한다. 녹음 시작·종료·업로드 진행·오류도 IPC 이벤트로 전달한다.

데이터베이스 스키마에는 recordings, transcript_segments, bookmarks, call_metrics_history, nudges_history, playbooks, playbook_sessions, mcp_servers 등이 정의되어 있다. 전사 세그먼트는 me/them 채널, 시작·종료 시각, 최종 전사 여부, agent 처리 여부, sentiment와 trigger를 저장할 수 있다.

VideoDBService는 API key로 연결을 캐시하고, 사용자별 call.md Recordings collection을 찾거나 생성한다. capture session과 session token을 만들고, 영상의 spoken-word index·transcript·AI insight·download URL을 다루는 래퍼 역할을 한다.

회의 중 실시간 보조

LiveAssistService는 시작 직후와 20초마다 최근 transcript를 처리한다. 버퍼에는 최근 60초의 마이크/system audio와 화면 분석 결과가 남는다. LLM 프롬프트는 사용자를 [User], 상대를 [Them]으로 구분하고, 사용자가 실제로 말하거나 물어볼 만한 say_thisask_this를 각각 0~3개 반환하도록 한다. 이전 제안은 소문자 비교로 중복 제거하며 최근 20개씩만 추적한다.

README가 말하는 conversation metrics와 coaching nudges는 별도 copilot 서비스로 구성되어 있으며, 스키마에는 talk ratio, WPM, 질문 수, monologue 감지, sentiment trend, nudge severity와 dismiss 상태를 저장할 수 있는 필드가 있다.

회의 준비와 종료 후 분석

회의 시작 전 MeetingSetupService는 회의명·설명과 사용자의 응답을 바탕으로 LLM에 probing questions와 discussion checklist를 요청한다.

회의 종료 후 SummaryGeneratorService는 로컬 DB에서 전체 전사를 읽고 다음 3개 작업을 병렬 실행한다.

  1. Short overview: 3~5문장의 서술형 개요
  2. Key points: 주제별 핵심 논점과 발화자 귀속
  3. Post-meeting checklist: 담당자·후속 조치·미해결 질문·기한

프롬프트에는 회의명·설명·사전 Q&A·체크리스트·전사가 함께 들어가며, JSON 응답은 markdown fence가 있어도 파싱하도록 구현되어 있다.

MCP 도구 연결과 에이전트 루프

MCP 설정 화면에서 stdio 또는 HTTP transport를 선택할 수 있다. MCPClientService는 stdio, Streamable HTTP, legacy SSE transport를 지원하고, HTTP 연결은 Streamable HTTP를 먼저 시도한 뒤 실패하면 SSE로 fallback한다. 401·unauthorized를 감지하면 OAuth 인증 필요 이벤트를 renderer에 알린다. 환경 변수와 HTTP header credential은 암호화된 값으로 저장·복호화할 수 있다.

MCPAgentService는 다음 순서로 외부 도구를 호출한다.

  1. 최근 전사 세그먼트와 연결된 MCP tool 목록을 받는다.
  2. MCP 입력 schema를 OpenAI function-calling 형식으로 변환한다.
  3. LLM이 tool call을 반환하면 연결 orchestrator를 통해 실제 MCP 서버의 도구를 실행한다.
  4. 결과를 tool 메시지로 conversation history에 넣고 다시 LLM을 호출한다.
  5. 텍스트 응답이 나오거나 최대 5회 tool-call iteration에 도달하면 종료한다.

기본 trigger keyword에는 documentation, CRM, customer, calendar, schedule, look up, search, remember, Notion, Jira, pricing 등이 포함된다. IntentDetectorService는 정규식으로 CRM·일정·문서·경쟁사·가격·기억 회상 의도를 빠르게 감지하고, 필요하면 LLM 기반 판별로 fallback한다. 같은 intent는 30초 cooldown으로 반복 호출을 억제한다.

Markdown export와 저장 경로

MarkdownExportService~/.call_md/ 아래에 전체 회의를 AI 에이전트나 다른 도구가 읽을 수 있는 Markdown으로 내보낸다.

~/.call_md/
├── index.md
└── meetings/YYYY/MM/DD/<meeting-name>/
    ├── summary.md
    ├── transcript.md
    ├── visual.md
    └── metrics.md

요약 파일에는 날짜·시간·길이·개요·주제별 논점·액션 아이템이, 전사 파일에는 시각별 You/Them 발화가, visual 파일에는 장면 설명이, metrics 파일에는 talk ratio와 WPM 등이 들어간다. README는 회의 종료 시 n8n·Zapier·CRM으로 데이터를 보내는 workflow webhook도 기능으로 소개한다. webhook의 외부 서비스 전달 성공 여부는 이번 인제스트에서 실행하지 않았다.

보안·개인정보 경계

  • 로컬 우선: README와 스키마는 녹음 이력·전사·메트릭을 로컬 SQLite에 저장하는 구조를 보여준다.
  • 외부 의존: 실시간 전사와 AI insight에는 VideoDB 연결과 API key가 필요하다. 실제 API key 값은 이 노트에 기록하지 않았다.
  • MCP credential 보호: src/main/utils/encryption.ts는 Electron user-data 경로의 .mcp-encryption-key를 사용해 AES-256-GCM으로 환경 변수와 HTTP header credential을 암호화한다. 키 파일은 생성 시 0600 권한으로 기록된다.
  • 앱 권한: macOS에서는 Microphone와 Screen Recording 권한이 필요하다. 설치 스크립트는 현재 Darwin만 통과시키고 arm64/x86_64 DMG를 선택한다.
  • 검증 한계: 암호화 키가 로컬 user-data 디렉터리에 함께 존재하고, sandbox 탈출·권한 상승·데이터 유출에 대한 독립 보안 감사나 침투 테스트는 확인하지 않았다.

사용자 제공 요청

사용자는 https://github.com/video-db/call.md 저장소를 위키에 저장하도록 요청했다. 별도의 기능 주장이나 성능 수치는 제공하지 않았으므로, 이 노트의 기능 설명은 고정 커밋의 README·메타데이터·선택 소스 파일에서 확인한 범위로 한정한다.

미검증 또는 추가 확인 필요

이번 작업에서는 GitHub API, 고정 커밋의 README, 저장소 tree, package.json, 녹음·VideoDB·MCP·LLM·요약·export·암호화 구현 파일을 정적으로 읽었다. 다음은 실행하지 않았다.

  • npm install, native Electron module rebuild, npm run build
  • TypeScript typecheck와 ESLint lint
  • 실제 VideoDB API key를 사용한 녹음·전사·AI insight
  • 마이크·system audio·screen recording WebSocket의 실시간 동작
  • MCP stdio/HTTP/OAuth 서버 연결과 실제 tool call
  • n8n·Zapier·CRM webhook 전송
  • Google Calendar OAuth 연동
  • packaged macOS/Windows 애플리케이션 설치와 권한 승인
  • 보안 침투 테스트 및 license discrepancy 해소

따라서 “지원한다”는 표현은 README나 소스에 해당 표면이 기술되어 있다는 뜻이며, 캡처 커밋에서 실제 실행 성공을 재현했다는 뜻은 아니다.

변화하는 저장소 스냅샷

GitHub REST API를 2026-08-08 09:30 KST에 조회했다.

  • 607 stars · 79 forks · 6 open issues
  • TypeScript · archived 아님
  • 기본 브랜치: main
  • 확인 커밋: a738410d5ff2cc0bf6a6bfb271a995e96a6bdd6f
  • 커밋 시각: 2026-05-05T08:05:42Z
  • README byte SHA-256: 63727434a5686ab02266a62ef2a8749974ae96a850f9f69cc302e385c7b84477
  • 저장 raw body SHA-256: 0b88274eab6934a3d670abe4d0d79473e2d79f6bdbf53b86e4fa689974cff30c

관련 노트

  • raw source: github-video-db-call-md — 고정 커밋·README byte hash·선택 구현 파일 provenance pointer
  • moc-ai-agents — AI 에이전트 전체 지도
  • moc-ai-agents-orchestration — 에이전트 플랫폼·워크플로우·연결 구조
  • moc-mcp — MCP 서버·인증·전송·보안 노트 맵
  • moc-ai-agents-harness — 에이전트 실행 경계와 하네스 보안 설계

출처 및 검증

  • 공식 저장소: video-db/call.md
  • 고정 커밋: a738410
  • README pinned raw: README.md, byte SHA-256 63727434a5686ab02266a62ef2a8749974ae96a850f9f69cc302e385c7b84477
  • REST metadata: GitHub API
  • 구현 파일 포인터와 다운로드 해시는 raw source: github-video-db-call-md에 기록했다.