<p align="center">
<img src="https://raw.githubusercontent.com/dbarabashh/nod-monorepo/HEAD/apps/desktop/build/icon.png" alt="" width="96" height="96">
</p>
<h1 align="center">Nod</h1>
로컬 우선 회의 기록 도구입니다. 사용자의 대화는 기기에 암호화되어 저장되며, 모든 장치 간에 종단 간(end to end)으로 동기화됩니다.
License: Apache-2.0
Relay: AGPL-3.0
REUSE compliant
Platforms
Nod는 회의를 녹화하고, 전사(transcribe)하며, 메모를 작성하는 모든 과정을 사용자의 컴퓨터나 휴대폰에서 처리합니다. 사용자의 회의 내용을 읽을 수 있는 계정이나 서버가 없습니다. 각 회의는 장치에서 암호화되며, 기기들은 암호화된 파일만 보는 폴더 또는 릴레이(relay)를 통해 이를 공유합니다. 오디오는 메모리에서 처리되며 디스크에 절대 기록되지 않습니다.
✨ 주요 기능
- 장치에서 전사: Parakeet TDT 0.6B v3 또는 Whisper를 사용하며, whisper.cpp를 통해 로컬로 실행됩니다. 오디오는 기기를 벗어나지 않습니다.
- 장치에서 메모 작성: 회의가 끝날 때 Qwen3 4B Instruct가 요약, 결정 사항 및 실행 항목을 작성합니다.
- 저장 시 암호화: 회의당 하나의 암호화된 파일이 생성되며, 키는 운영체제의 키체인(keychain)에 보관됩니다.
- 종단 간 동기화: 이미 사용 중인 폴더 또는 직접 실행할 수 있는 릴레이를 통해 동기화됩니다. 볼트 키(vault key)는 사용자가 보관하는 24개의 단어입니다.
- 휴대폰은 QR 코드로 페어링: iPhone 및 Android 앱이 휴대폰에서 녹음하고 전사하며, 컴퓨터와 동기화됩니다.
- 목적에 따라 공유: 한 사람 또는 소유자(owners), 관리자(admins), 작성자(writers), 독자(readers)가 있는 팀에게 회의 제목과 요약을 보낼 수 있습니다. 전사 기록은 사용자 본인과 함께 합니다.
- AI 비서와 연동: localhost에서 읽기 전용 MCP 서버를 통해, 각 비서별 키로 사용자가 허용한 회의 내용을 검색할 수 있게 합니다.
- 원격 측정(telemetry) 없음: 콘텐츠가 포함된 분석(analytics), 충돌 보고서(crash reports), 계정이 없습니다.
📚 목차
🚦 상태 (Status)
Nod는 활발하게 개발 중입니다. 아직 공식 출시된 릴리스가 없습니다. 사용해 보려면 아래 설명된 대로 소스에서 빌드해야 합니다. 데스크톱 앱은 macOS, Windows 및 Linux에서 실행되며, 휴대폰 앱은 동일한 코어 기반으로 진행 중입니다.
🗂 저장소 레이아웃 (Repository layout)
| 경로 (Path) | 내용 (What it is) |
|---|
apps/desktop | macOS, Windows 및 Linux용 앱 (Electron, React) |
| ... | |
🛠 사전 요구 사항 (Prerequisites)
- Node.js 24 이상 버전
- pnpm 11 (
package.json에 명시된 버전)
- Rust 1.90부터
rustup을 통해 설치: 테스트와 휴대폰 앱은 네이티브 Automerge 라이브러리를 빌드합니다.
휴대폰 앱의 경우, 다음도 필요합니다:
- iOS: Xcode
- Android: JDK 17 및 NDK가 포함된 Android SDK, 그리고
JAVA_HOME과 ANDROID_HOME 환경 변수 설정
자세한 내용은 apps/mobile/README.md를 참조하세요.
🏗 소스에서 빌드하기 (Building from source)
git clone <this repository>
cd nod-monorepo
pnpm install
...
변경 사항을 테스트하려면:
pnpm typecheck && pnpm lint && pnpm test
음성 및 요약 모델은 저장소에 포함되어 있지 않습니다. 앱은 첫 사용 시 고정된 리비전(pinned revision)에서 이를 다운로드하며, 사용되기 전에 각 파일의 크기와 SHA-256을 확인합니다.
🔄 동기화 리레이 실행하기 (Running a sync relay)
리레이는 장치용 암호화된 파일을 저장하며 내용을 읽을 수 없습니다. 자체 서버에서 하나를 실행하세요:
pnpm --filter @nod/relay build
PORT=8787 RELAY_DATA=/var/lib/nod-relay node apps/relay/dist/server.js
이를 HTTPS 뒤에 배치하세요. apps/relay/README.md에는 리버스 프록시(reverse proxy), 팀 금고(team vaults), 제한 사항 및 Vercel 배포에 대한 내용이 포함되어 있습니다.
🔒 개인 정보 보호 및 보안
- 오디오는 메모리에서 처리되며 저장되지 않습니다.
- 회의 내용은 장치에서 AES-256-GCM으로 암호화됩니다. 동기화(Sync) 시에는 암호화된 파일만 전송되므로, 폴더나 릴레이가 열 수 없습니다.
- 사용자가 직접 기능을 활성화하지 않는 한 제3자에게 아무것도 전송되지 않으며, 앱은 데이터가 어디로 가는지 명시합니다.
설계 문서는 docs/decisions에 기록되어 있습니다. 0001-sync.md와 0003-sharing.md부터 시작합니다. 보안 문제가 발견되면 공개 이슈가 아닌 관리자에게 비공개로 보고해 주십시오.
🤝 기여 (Contributing)
풀 리퀘스트(Pull request)는 받지 않으며, 이슈 제기는 환영합니다. CONTRIBUTING.md에서 작성 방법을 확인하십시오. 코드 작업 규칙은 사람과 코딩 에이전트 모두에게 적용되며, AGENTS.md와 .agents에 있습니다.
📄 라이선스 (License)
Nod는 Apache License 2.0 하에 라이선스가 부여되지만, 한 가지 예외가 있습니다: apps/relay의 동기화(sync) 릴레이는 [GNU Affero General Public License v3.0] 하에만 라이선스가 부여됩니다. 수정된 릴레이를 서비스로 실행하는 경우, 사용자에게 그 소스 코드를 제공해야 합니다.
| 경로 (Path) | 라이선스 (License) |
|---|
apps/desktop | Apache-2.0 |
| ... | |
폴더 자체가 라이선스를 결정하지 않습니다. REUSE.toml은 모든 파일의 라이선스를 명시하며, 각 릴레이 파일은 AGPL-3.0-only라는 SPDX 라이선스 헤더를 포함합니다. 빌드된 릴레이는 릴레이와 @nod/core(Apache-2.0)를 결합하며 전체적으로 AGPL 하에 라이선스가 부여됩니다. 이 과정에서 배너, 라이선스 텍스트 및 제3자 고지 사항이 함께 작성됩니다. 라이선스 텍스트는 LICENSES에 있습니다. 앱 내부에 포함된 제3자 소프트웨어는 각 앱에 그 라이선스와 함께 나열되어 있습니다.
Copyright 2026 Dima Barabash. "Nod"라는 이름과 로고는 본 라이선스에서 보호되지 않습니다. NOTICE를 참조하십시오.