바이브 코딩으로 나만의 오픈 클로 만들기 – 자연어 리마인더와 옵시디언 데일리 노트 연동

2026년 03월 26일 by CRYUN in AI & Agents, Agent Build Logs
OpenAI Codex

바이브 코딩으로 나만의 오픈 클로 만들기 – 텔레그램으로 원격 개발 기능 붙이기가 됐으니 이제 본격적으로 하나씩 기능을 붙여볼 차례였다. 처음 붙여볼 기능은 리마인더이다. 나같은 경우는 옵시디언을 통해서 일정들을 관리하고 있다. 나름 엄격하게 잘 관리하긴 하지만 그래도 매번 옵시디언을 열어서 일정을 확인하는 것 보다는 알림을 통해 일정을 환기시켜주는게 필요했다.

데일리 노트의 프론트매터와 Base를 통한 일정 관리

1회성 일정 뿐만 아니라 반복적으로 나에게 노티를 주는 기능도 필요한데 구글 캘린더나 이런 저런 리마인더 앱도 많지만 은근히 내 마음에 쏙 드는건 없었다. 거기다가 옵시디언 노트 외에 추가로 일정 관리를 이중으로 하는 것도 은근히 귀찮고 피곤한 일이기도 하고.

텔레그램 챗봇이 알림을 주는 리마인더를 만들자


리눅스에는 크론이라는 시스템이 있다. 특정 명령이나 스크립트를 정해진 시간에 자동으로 실행해주는 스케쥴러이다. 오픈 클로에서도 스케쥴링은 이 시스템을 이용하는걸로 알고 있기도 하고, 크론을 이용하면 리마인더는 쉽게 구현되지 않을까? 물론 코드를 쓰는건 내가 아니지만 말이다.

텔레그램 챗봇을 통해 리마인더를 등록하고 알림을 받는건 여러 장점이 있다. 서버 머신이 따로 있기 때문에 디바이스에 구애받지 않고, 그 서버 머신이 내 소유이기 때문에 데이터에 대한 소유권도 나한테 있다는 것이다. 한 시간전, 5분전 사전 알림도 내 입맛대로 설정할 수 있는 것도 좋고. 더해서 푸쉬같은 알림이면 더 좋을 것 같은데 그건 차차 생각해보기로 했다.

자연어 리마인더부터 시작


기본 동작은 바로 구현됐다. 역시… 갓 코덱스. 하지만 시작은 좀 거칠긴 하다. 처음에는 슬래시 명령어로만 등록할 수 있었는데, 자연어로도 등록하게 해달라고 하니 바로 자연어를 파싱해서 슬래시 명령어로 연결하는 레이어를 만들어줬다. 그래도 여전히 거칠다.

5분뒤 자라고 알림 줘.

라고 요청을 했더니 정말 자라고로 리마인더가 등록됐다. “5분 뒤에 잘 시간이라고 알려줘”가 아니라 문장을 그대로 파싱해서 자라고가 리마인더 메시지가 된 것이다. 이런 미묘한 자연어 처리의 허점이 재미있으면서도 아쉽다.

하나 수정 요청하고 테스트 해보고, 하나 또 수정 요청하고 테스트 해보면서 다듬고 나니 그럭저럭 쓸만한 리마인더가 완성되었다.

이번엔 휘발성이 문제


당연히 크론을 통해서 구현되었을거라고 생각했다. 그래서 서비스를 재시작해도 등록한 리마인더가 남아있지 않을까 했는데 그렇지 않았다. 서비스를 재시작하면 등록해뒀던 리마인더들은 전부 사라졌다. 코덱스에게 물어보니 크론이 아니라 별도의 스케쥴링 프로세스가 돌고 있었고, 리마인더는 메모리에만 들고 있었던 것이다.

이 부분을 해결하라고 했더니 JSON 파일로 리마인더 메타 데이터를 저장하는 방식으로 바꿔줬다. 리마인더가 많아봐야 수십개 내외로 유지될 것이므로 이정도면 충분하겠다 싶어서 OK하고 넘어갔다.

옵시디언 데일리 노트 연동


리마인더가 잘 동작하기 시작했으니 다음은 이원화되어 있는 일정 관리를 하나로 통합할 차례다. 바로 옵시디언을 연동하는 것. 리마인더를 통해 일정을 예약하거나 삭제하면 옵시디언 데일리 노트의 프론트매터를 함께 수정하는 것이다. 텔레그램에서 일정 리스트를 따로 확인할 수 있긴 하지만, 옵시디언도 내가 항상 쓰고 있으니 굳이 텔레그램으로 갈 것 없이 바로 확인할 수 있는게 좋다.

옵시디언 CLI를 이용하자


마침 옵시디언이 업데이트 되면서 CLI가 추가됐다. 옵시디언 CLI가 추가되면서 가지는 장점들은 옵시디언 CLI 후기 – AI 에이전트와 찰떡 궁합인 이유에 적어두었다.

하지만 리눅스의 에이전트 봇이 옵시디언 CLI를 사용하는데에는 이슈가 있었다. 봇 서비스는 systemd로 등록된 시스템 서비스라 데스크톱 사용자 세션과 완전히 분리된 환경에서 돌아간다. 시스템 서비스에서 사용자 데스크톱 세션의 옵시디언을 호출하는 것은 그냥은 안 되는 것이다. 결국 obsidian-session-cli.sh라는 셸 스크립트를 만들어서 sudoers에 좁은 권한을 열어주는 방식을 이용하는 듯한데, 조금 불안정해보이긴 하지만 어쨌든 우여곡절 끝에 동작은 한다.

데일리 노트 경로 추론 문제


옵시디언 CLI의 daily:path 명령은 오늘 날짜의 데일리 노트 경로만 반환한다. 리마인더는 미래 날짜에도 걸릴 수 있는데, 예를 들어 “다음 주 화요일 오전 10시 치과 알림줘”라고 하면 미래 날짜의 데일리 노트에 써야 한다. 그런데 그 경로를 어떻게 알아낼까?

처음엔 환경 변수로 strftime 템플릿을 받아서 경로를 구성하는 방식으로 만들었다. 그런데 내 볼트의 날짜 폴더 구조가 2025/3분기/09/3주/2025-09-16.md 같은 식이라, 단순한 날짜 템플릿으로는 처리가 안 됐다. 코덱스에게 “볼트 안에 있는 기존 데일리 노트 파일들을 보고 패턴을 추론해서 경로를 만들어줘”라고 요청했더니, 인접한 날짜의 기존 노트를 찾아서 경로 패턴을 유추하는 방식으로 구현해줬다. 그런데 이 로직이 몇 가지 엣지 케이스에서 틀렸고, 같은 날 오후에만 세 번 연속으로 수정됐다.

세션 에이전트 구조로 해결


근본적인 해결을 위해 구조를 바꿨다. 데스크톱 사용자 세션 안에서 작은 세션 에이전트 데몬을 띄우고, 시스템 서비스는 Unix socket을 통해 그 에이전트에게 요청을 보내는 방식이다. 에이전트가 실제 데스크톱 환경에서 obsidian CLI를 실행하고 결과를 socket으로 돌려준다.

obsidian_session_agent.py라는 꽤 묵직한 모듈이 새로 생겼고, cry-agent-bot-obsidian-agent.service라는 user systemd 서비스도 별도로 등록했다. 구조가 복잡해졌지만 안정성은 훨씬 올라갔다.

완성된 리마인더 워크플로


클로드가 시각화 해준 리마인더 워크플로우

여전히 리마인더 개별 항목의 id를 보여주는 등 거친 면은 있지만 훌륭한 자연어 기반의 리마인더 관리가 완성되었다. 자연어로 리마인더를 등록 / 수정 / 삭제까지 모두 가능하고, 옵시디언과 연계해서 데일리 노트 프론트매터까지 함께 수정해주니 더할나위 없이 훌륭한 사용성이다. 깊은 고민 없이 일주일전, 하루전, 한시간전 사전 알림 기능을 추가해달라고 하니 바로 기능이 추가된다. 반복 유형을 가지는 알림도 마찬가지.

나한테 필요한 기능을 하나 추가하려고 해도 코드를 보면서 고민하고 공부해야 하니, 개발 자체가 재미있더라도 그 과정은 충분히 고통스럽기 마련이다. 하지만 에이전트가 알아서, 그리고 빠르게 해주니 기능 하나 붙이는게 그렇게 재미있다. 평소 이런게 하나 있었으면 좋겠는데 했던 것들이 이제 정말 말하면 구현이 되는 세상이다.

다음 기능은 브라우저 자동화


다음은 브라우저 자동화 기능을 추가하려고 한다. 사실 GPT나 클로드나 채팅에서 웹 기반 검색을 기본으로 제공하니 브라우저 자동화가 그렇게까지 유용한 기능은 아니다. 그래도 뭐, 이번주 토요일에 미용실 예약해줘와 같은게 하나 있으면 편하지 않을까?

더해서 브라우저 기반으로 자동화가 완성되면 스케쥴러를 덧붙여 자동 예약도 멋지게 할 수 있을 것 같다. 이렇게 하나씩 기능을 붙이다보면 정말 밀착형 에이전트 봇이 되지 않을까 싶다.

AD

이 글과 같이 보기 좋은 주제

비슷한 흐름의 글을 더 보고 싶다면 아래 주제부터 이어서 보면 됩니다. 관련 글과 글 묶음을 한곳에서 볼 수 있습니다.

이어 읽기

AI 코딩 에이전트 실사용기

이 글은 AI 코딩 에이전트 실사용기에서 1번째 글입니다. 앞뒤 글을 같이 보면 흐름을 더 편하게 따라갈 수 있습니다.

시리즈 페이지에서 전체 순서 보기