Claude를 활용해 Obsidian Vault를 자동화하는 방법 — 이제 밤샘 작업도 문제없습니다
요약
Obsidian 사용자가 겪는 지식 합성의 어려움을 해결하기 위해 Claude를 활용한 자동화 시스템 'vault-os'를 구축하는 방법을 소개합니다. Telegram 봇을 통한 데이터 포착과 야간 에이전트를 통한 자동 요약 및 브리핑 프로세스를 다룹니다.
핵심 포인트
- Telegram 봇을 활용한 태그 기반 노트 자동 라우팅
- Claude를 이용한 야간 지식 합성 및 패턴 분석 자동화
- 음성 메모 전사 및 데일리 노트 문맥 자동 생성
- 인지적 거리를 극복하는 자동화된 생산성 워크플로우
나는 내 노트의 홍수에 빠져 있었다
약 2년 동안 나는 Obsidian 안에서 살았다. 데일리 노트 (Daily notes), 스쳐 지나가는 생각들, 회의 요약, 새벽 2시의 미완성 아이디어들, 그리고 직접 받아 적어야 했던 음성 메모들까지. 나의 Vault (보관함)에는 3,000개가 넘는 노트가 있었다.
그리고 나는 그중 거의 아무것도 기억하지 못했다.
매일 아침 노트북을 열고 어제의 데일리 노트를 뚫어지게 쳐다보며, 내가 어디까지 진행했었는지 재구성하려고 애썼다. Vault는 가득 차 있었다 — 결코 합성 (Synthesis)되지 않은 기록들, 다음으로 이어지지 못한 태스크 (Tasks), _inbox라는 폴더 안에서 죽어버린 아이디어들로 가득했다. 나는 지식 노동자 (Knowledge worker)로서의 일을 하고 있었지만, 복리 효과 (Compounding returns)는 전혀 얻지 못하고 있었다. 노트는 들어오기만 할 뿐, 아무것도 나오지 않았다.
더 나쁜 점은, 내가 직접 합성을 해야 한다는 사실을 알고 있었다는 것이다. 노트를 검토하고, 아침 브리핑을 작성하고, 점들을 연결해야 한다. 하지만 온종일 업무를 마친 후, 내가 가장 하고 싶지 않은 일은 앉아서 편집자 역할을 하는 것이었다. 그래서 하지 않았다. 그리고 Vault는 무덤으로 남았다.
진짜 문제는 노트 테이킹 (Note-taking)이 아니다
결국 내가 깨달은 것은 이것이다: 나는 노트 테이킹에 실패한 것이 아니었다. 나는 합성 (Synthesis)에 실패하고 있었으며, 가장 최악의 시간에 그 일을 하려고 스스로를 몰아붙이고 있었다.
합성에는 인지적 거리 (Cognitive distance)가 필요하다. 당신은 포착한 내용을 새로운 시각으로 바라봐야 한다. 문제는 "새로운 시각"은 아침에 생기는데, 합성 작업은 하루가 끝난 뒤에 이루어져야 한다는 점이다. 이것은 구조적 불일치이며, 생산성 시스템 그 어떤 것도 이를 해결할 수 없다. 왜냐하면 이것은 생산성의 문제가 아니기 때문이다.
이것은 타이밍의 문제다. 그리고 타이밍 문제는 바로 자동화 (Automation)가 해결하는 영역이다.
모든 것을 바꾼 생각: Claude는 밤 11시에도 지치지 않는다. Claude는 인지적 거리가 필요하지 않다. 하루 전체를 한 번에 읽고 중요한 내용을 뽑아낼 수 있다. 그래서 나는 그 작업을 넘겨주기 위해 vault-os를 구축했다.
vault-os가 실제로 하는 일
vault-os는 두 가지 주요 임무를 수행한다: 무엇이든, 어디서든 포착(Capture)하는 것, 그리고 당신이 잠든 동안 모든 것을 합성(Synthesize)하는 것이다.
Telegram 봇을 통한 포착 (Capture). Obsidian을 열지 않고도 휴대폰에서 노트를 보내고 싶었습니다. 이 봇은 태그 기반 라우팅 (tag-based routing)을 사용합니다. 즉, 당신이 보내는 모든 것은 데일리 노트 (daily note)의 적절한 섹션으로 자동 분류됩니다. #idea는 'Content Ideas'로, #signal은 'Research Signals'로 이동합니다. #link 또는 일반 URL은 'Links to Process'로 분류되며, 일반 텍스트는 'Captures'로 들어갑니다. 음성 메시지는 로컬에서 전사 (transcribe)된 후 동일한 방식으로 라우팅됩니다.
23:00의 야간 에이전트 (Nightly agent). PowerShell 스크립트가 12단계의 프로세스를 실행합니다. 이 스크립트는 당신의 하루를 읽고, Claude를 사용하여 포착된 내용들을 처리하며, 패턴을 합성 (synthesize)하고, 저녁 리뷰를 작성하며, 아침 브리핑을 준비하고, 완료되지 않은 모든 작업을 다음으로 이월합니다. 당신이 잠에서 깨어날 때쯤이면, 새 날을 위한 데일리 노트에는 이미 문맥 (context)이 로드되어 있습니다.
아침 요약 API (Morning digest API). REST 엔드포인트 (endpoint)가 아침 브리핑을 제공하므로, 홈 화면 위젯, 터미널 스크립트, Raycast 확장 프로그램 등 당신의 설정에 맞는 어디에서나 이를 표시할 수 있습니다.
아키텍처 (Architecture): 두 가지 구성 요소
server.js — Node.js + Express + Telegraf
서버는 Telegram과 REST API를 처리합니다. 핵심은 각 메시지가 데일리 노트의 어디로 갈지 결정하는 라우팅 (routing) 함수입니다:
function routeMessage(text) {
const t = text.trim();
if (/^#(idea|fikir)\b/i.test(t)) return '## Content Ideas';
...
단순한 정규 표현식 (regex) 매칭입니다. 저는 생각하는 도중에 언어를 끊임없이 바꾸기 때문에 터키어/아제르바이잔어 별칭(fikir, sinyal)을 추가했습니다. 당신의 뇌가 사용하는 어떤 태그로든 이를 확장할 수 있습니다.
여러 줄로 된 메시지는 줄 단위로 처리됩니다. 만약 다섯 개의 아이디어가 담긴 텍스트 블록을 붙여넣으면, 각 줄이 독립적으로 라우팅됩니다. 이는 생각보다 중요합니다. 즉, Telegram에 브레인 덤프 (brain dump)를 쏟아부어도 분류된 상태로 안착한다는 의미입니다.
음성 파이프라인 (voice pipeline)은 다음과 같이 작동합니다: OGG (Telegram 형식) → ffmpeg가 16kHz 모노 WAV로 변환 → whisper-cli가 전사 (transcribe) → 텍스트가 동일한 라우팅 함수를 통과합니다. 제 컴퓨터에서 이 모든 과정은 동기식 (synchronous)으로 실행되며, 30초 분량의 음성 메모를 처리하는 데 약 4초가 소요됩니다.
REST 엔드포인트 (endpoints)는 최소한으로 구성되어 있습니다: GET /morning-brief는 준비된 브리핑을 JSON 형식으로 반환하며, POST /capture를 통해 다른 도구들이 콘텐츠를 직접 푸시할 수 있습니다.
nightly-agent.ps1 — PowerShell, 12단계
제가 이것을 PowerShell로 작성한 이유는 Windows 작업 스케줄러 (Task Scheduler) 작업으로 실행되길 원했고, 실행 중인 Node 프로세스에 대한 의존성을 만들고 싶지 않았기 때문입니다. 단계는 다음과 같습니다:
- FAZ 1-2: 환경 점검, 날짜 설정, 오늘의 노트 위치 파악
- FAZ 3 (Claude Think): 캡처된 모든 콘텐츠를 읽고, 종합 프롬프트 (synthesis prompt)를 실행하여 핵심 테마를 추출하며, 무엇이 실제로 중요했는지와 노이즈를 식별
- FAZ 4-5: 작업 추출, 미완료 항목에 대한 이월 (carry-forward) 로직
- FAZ 6 (Morning Brief): 내일의 시작 섹션 작성 — 어제의 요약이 아니라, 내일을 위한 발판을 만드는 것입니다. 무엇이 중요한 단 한 가지인가? 어떤 작업이 우선적인 주의를 기울일 가치가 있는가? 어떤 아이디어가 발전시킬 가치가 있는가?
- FAZ 7-10: 링크 처리, 리서치 신호 소화, 콘텐츠 관점 (angle) 추출
- FAZ 11 (Evening Review): 오늘의 노트에 추가됨 — 잠들기 전에 읽을 수 있는, 사람이 읽기 쉬운 형태의 짧은 하루 종합 요약
- FAZ 12: 정리, 로그 로테이션 (log rotation), 오류 보고
Claude API 호출은 일관된 패턴을 따릅니다: 프롬프트를 임시 파일에 쓰고, --max-turns 1 옵션과 함께 claude --print를 호출한 뒤, 표준 출력 (stdout)을 캡처하고 정리합니다.
$prompt | Out-File -FilePath $tmpFile -Encoding UTF8
$result = & claude --print --max-turns 1 $tmpFile 2>$null
Remove-Item $tmpFile -ErrorAction SilentlyContinue
저는 nightly agent의 모든 곳에서 --max-turns 1을 사용하는데, 그 이유는 주고받는 대화 (back-and-forth)를 원하지 않기 때문입니다. 저는 각 단계마다 하나의 집중된 출력물을 원합니다. 이는 비용을 예측 가능하게 유지해 주기도 합니다. 적당히 활동적인 날의 전체 nightly 실행 비용은 약 $0.04 정도 소요됩니다.
데일리 노트 (daily note)의 실제 모습
데일리 노트 템플릿에는 자동화가 준수하는 고정된 섹션들이 있습니다:
# 2026-05-29
## Morning Brief
...
낮 동안 당신은 그저 메시지만 보낼 뿐입니다. 구조는 스스로 채워집니다. Obsidian을 열었을 때 Morning Brief(모닝 브리프)는 이미 작성되어 있습니다. Evening Review(이브닝 리뷰)는 에이전트가 실행된 후에 나타납니다. 당신이 원하지 않는 한, 노트를 직접 수정할 일은 전혀 없습니다.
이 점은 시스템 도입에 있어 매우 중요합니다. 만약 자동화가 당신에게 구조를 유지하도록 요구한다면, 당신은 2주 안에 그 시스템을 망가뜨릴 것입니다. 구조는 아무 생각 없이 Telegram(텔레그램)에 텍스트를 쏟아붓는 정신없는 하루 속에서도 견딜 수 있을 만큼 견고해야 합니다.
음성 캡처와 로컬 실행이 중요한 이유
처음에는 전사(Transcription)를 위해 OpenAI Whisper API를 사용할 뻔했습니다. 설정이 더 쉽고 정확도도 매우 뛰어납니다. 하지만 제가 whisper.cpp로 전환한 데에는 한 가지 이유가 있었습니다. 바로 음성 노트의 내용 때문입니다.
휴대폰에 대고 생각을 소리 내어 말할 때, 당신은 연기를 하는 것이 아닙니다. 당신은 결정을 내리기 위한 초안을 작성하고, 좌절감을 처리하며, 문서에 담기에는 미완성된 아이디어들을 정리하고 있는 것입니다. 그 내용은 진정으로 사적인 것입니다. 편집되지 않은 당신의 사고 과정이기 때문입니다.
해당 오디오를 API로 전송한다는 것은 당신이 제어할 수 없는 서버를 거친다는 것을 의미합니다. whisper.cpp를 로컬(Local)에서 실행한다는 것은 오디오가 당신의 기기를 절대 떠나지 않음을 의미합니다. 모델은 디스크 상의 파일(ggml-small.bin, 466MB)이며, 프로세스는 서브프로세스(Subprocess)에서 실행되고, 네트워크를 통해 전송되는 것은 아무것도 없습니다.
small 모델의 정확도는 대부분의 음성 노트에 충분합니다. 고유 명사나 혼용된 문장에서 가끔 잘못 듣는 경우가 발생하긴 하지만, 의미는 전달됩니다. 주로 단일 언어로 받아쓰기를 한다면 small이 적절한 절충안입니다. 다국어 환경에서는 medium (1.5GB) 모델이 눈에 띄게 더 좋습니다.
내가 아침에 마주하는 것
실제 아침에 Morning Brief 섹션이 어떻게 보이는지는 다음과 같습니다:
## Morning Brief
Carry-forward: vault-os README 완성하기 (어제 시작함, 설정 섹션에서 멈춤).
...
브리프(Brief)는 요약이 아닙니다. 그것은 발사대(Launch pad)입니다. 이 둘에는 차이가 있습니다. 요약은 무슨 일이 일어났는지 알려주지만, 발사대는 어디서부터 시작해야 하는지를 알려줍니다.
시작하기
사전 요구 사항: Node.js 18+, PowerShell 7+, Claude CLI 인증 완료, PATH에 ffmpeg 설정됨, whisper.cpp 컴파일 완료.
git clone https://github.com/sabahattink/vault-os
cd vault-os
./setup.sh
...
야간 에이전트 (nightly agent)를 위해, scripts/nightly-agent.ps1을 23:00에 실행되는 Windows 작업 스케줄러 (Windows Task Scheduler) 작업으로 등록하세요:
pwsh -File scripts/install-scheduler.ps1
다음 단계
저는 이 프로젝트를 공개적으로 빌드(building in public)하고 있습니다. 로드맵에서 제가 실제로 필요로 하는 세 가지는 다음과 같습니다:
의사결정 지능 엔드포인트 (Decision intelligence endpoint). 특정 날짜 범위에서 의사결정을 추출합니다. 단순히 요약하는 것이 아니라, 실제로 내려진 선택과 그 주변에 기록된 추론 과정을 포착합니다.
주간 합성 에이전트 (Weekly synthesis agent). 7일간의 저녁 검토 내용을 살펴보고 맥락을 찾아냅니다. 이번 주에 내가 실제로 무엇을 하고 있었는지, 그리고 내가 무엇을 하고 있다고 말했는지 사이의 차이를 발견합니다.
모바일 단축어 통합 (Mobile shortcut integration). 오디오를 녹음하여 캡처 엔드포인트로 직접 POST 요청을 보내는 iOS 단축어(Shortcut)입니다. 음성 전용 워크플로우를 위해 Telegram을 완전히 우회합니다.
만약 당신이 Obsidian을 사용하고 있는데 당신의 Vault가 제대로 작동하지 않는다면 — 그것은 당신이 못해서가 아니라, 합성 (synthesis) 과정이 실제로 지속하기 매우 어렵기 때문입니다 — vault-os를 시도해 볼 가치가 있을 것입니다.
GitHub: github.com/sabahattink/vault-os
유용해 보인다면 Star를 눌러주세요. 이슈(Issues)와 PR(Pull Requests)은 언제나 환영합니다.
태그: obsidian, productivity, ai, opensource
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기