Obsidian에서 편집 가능한 AI 에이전트의 '두뇌' 만들기: 초보자를 위한 양방향 동기화 가이드
요약
오픈 소스 AI 에이전트인 Hermes Agent의 메모리를 Obsidian과 양방향 동기화하여 관리하는 방법을 소개합니다. Python을 활용해 에이전트의 메모리 파일을 마크다운 형식으로 변환함으로써 사용자가 직접 메모리를 편집하고 버전 관리를 할 수 있는 환경을 구축합니다.
핵심 포인트
- Hermes Agent의 메모리 파일(USER, MEMORY, SOUL)을 Obsidian과 동기화
- Python의 re.split()을 사용하여 멀티바이트 구분자(§)를 안전하게 처리
- Git과 Obsidian을 결합하여 AI 메모리의 버전 관리 및 시각적 편집 가능
- 별도의 설치 없이 Python 기본 라이브러리만으로 구현된 동기화 엔진
“내 AI 에이전트는 실제로 나에 대해 무엇을 기억하고 있을까?”라는 생각을 해본 적이 있나요? 만약 그렇다면, 이 글이 당신을 위한 것입니다.
문제점: AI 메모리는 블랙박스다
장기 메모리 (persistent memory)를 가진 AI 에이전트를 사용한다면, 다음과 같은 이유로 불편함을 느꼈을 수 있습니다:
- AI가 나에 대해 정확히 무엇을 기억하고 있는지 알 수 없음
- 파일이 어디에 저장되어 있는지 알 수 없음
- 채팅을 통해 명령어를 입력하지 않고는 그 메모리를 편집할 수 없음
- 메모리 파일이 손상되면 모든 정보가 그냥 사라져 버릴까 봐 두려움
이 글의 사례 연구에서는 Nous Research에서 만든 오픈 소스 에이전트인 Hermes Agent를 사용합니다. 익숙하지 않은 분들을 위한 배경 설명: Hermes Agent는 사용자의 자체 서버에서 독립적인 프로세스 (daemon)로 실행되는 오픈 소스 AI 에이전트로, 세션 간 메모리를 수집하고, 예약된 작업을 수행하며, 수십 개의 메시징 플랫폼에 연결되고, 경험을 통해 스스로 기술을 작성합니다. MIT 라이선스 프레임워크인 이 프로젝트는 2026년 2월에 출시되었으며 오픈 소스 AI 커뮤니티의 관심을 빠르게 끌었습니다.
Hermes는 메모리를 두 가지 주요 파일에 저장합니다: USER.md (사용자에 대한 프로필)와 MEMORY.md (작업 환경, 습관 및 학습된 교훈에 대한 에이전트의 기록), 그리고 에이전트의 "성격"을 위한 SOUL.md 파일 하나가 더 있습니다. 모든 것은 § 문자로 구분된 일반 텍스트 형식으로 저장되며, 다음과 같습니다:
사용자 선호도: 짧고 직접적인 의사소통
§
이름은 Budi, 30대 초반, 수라바야 거주
...
이 형식은 기능적이지만 몇 가지 단점이 있습니다:
- 직접 편집하기 어려움: 인간 친화적인 형식이 아니기 때문입니다.
- 버전 기록이 없음: 한 번 잘못 편집하면 정보가 영원히 사라질 수 있습니다.
- 시각적 디스플레이가 없음: 모든 기록을 한꺼번에 보기 어렵습니다.
- 그래픽 인터페이스(GUI)가 없음: 에이전트와의 채팅을 통하거나 원시 파일을 직접 편집해야 합니다.
해결책: 이 메모리를 git을 통해 버전 기록을 지원하고 자유롭게 편집할 수 있는 마크다운 (markdown) 기반 노트 앱인 Obsidian으로 옮기는 것입니다.
시스템 아키텍처
이 동기화 시스템은 네 가지 계층으로 구성됩니다:
┌──────────────────┐
│ Memori Hermes │ ~/.hermes/memories/{USER,MEMORY}.md (§ 형식)
│ ditulis agent │ ~/.hermes/SOUL.md (일반 텍스트)
...
핵심 포인트는 bash가 아닌 Python을 사용하는 것입니다. § 문자는 UTF-8에서 멀티바이트 (multi-byte)이며, bash를 구분자 (delimiter)로 사용할 경우 잘못 잘라낼 위험이 큽니다. Python (re.split())은 이를 올바르게 처리하므로, 전체 동기화 엔진은 별도의 설치 없이 Python 기본 라이브러리만 사용하는 하나의 Python 파일(약 400행)로 작성되었습니다.
작동 방식
Export: Hermes에서 Obsidian으로
스크립트는 §로 구분된 Hermes 메모리 파일을 읽어 각각의 항목으로 분리한 다음, 메타데이터 (YAML frontmatter) 아래에 각 항목을 ## Entry N 헤딩으로 작성합니다:
---
source: hermes-agent
type: user
...
그 결과 Obsidian에서 즉시 편집할 수 있게 됩니다. 또한 Vault에는 다음 항목들이 자동으로 생성됩니다:
SOUL.md— 에이전트의 정체성/캐릭터, 글자 수 제한 없음skills-index.md— 설치된 모든 스킬의 테이블, 커스텀 스킬은 별표로 표시skills/*.md— 에이전트가 직접 생성한 스킬의 전체 파일
Import: Obsidian에서 Hermes로 다시
방향을 반대로 바꿀 수 있습니다. 스크립트는 ## Entry N 헤딩을 읽고, 메타데이터를 제거한 뒤, 항목들을 § 구분자로 다시 결합하여 Hermes 메모리 파일을 덮어씁니다. 덮어쓰기 전에 기존 파일은 자동으로 백업 파일(.bak.<timestamp>)로 복사되므로 데이터가 완전히 손실될 염려가 없습니다.
한 가지 중요한 점은, Hermes는 컨텍스트 윈도우 (context window)를 효율적으로 유지하기 위해 글자 수 제한(USER는 1,375자, MEMORY는 2,200자)을 두고 있다는 것입니다. 임포트 (import) 과정에서 스크립트는 초과된 항목을 잘라내지만, 전체 복사본은 Obsidian vault에 그대로 보관됩니다.
Git을 통한 버전 기록
Hermes에는 6시간마다 실행되는 예약된 작업 (cron)이 있습니다:
hermes cron create name=memories-to-obsidian \
schedule='0 */6 * * *' \
prompt='Run ~/.hermes/scripts/hermes-memory-sync.sh sync'
실행될 때마다의 순서는 다음과 같습니다: export → git add -A → git commit. 결과적으로, 모든 메모리 변경 사항에 대한 완전한 git log를 보유하게 됩니다. 이전 버전으로 되돌려야 할 경우, 다음을 수행하면 됩니다:
git log --oneline _hermes/USER.md # 복구할 버전 찾기
git show <hash>:_hermes/USER.md > /tmp/restored.md
cp /tmp/restored.md _hermes/USER.md
...
설정 가이드 (약 10분 소요)
1. Vault 폴더 생성
mkdir -p ~/Documents/Obsidian\ Vault/_hermes
cd ~/Documents/Obsidian\ Vault
git init
...
2. Vault 위치 설정
echo 'OBSIDIAN_VAULT_PATH=$HOME/Documents/Obsidian Vault' >> ~/.hermes/.env
이 줄은 동기화 스크립트에 마크다운 (Markdown) 파일이 어디에 작성되어야 하는지 알려줍니다.
3. 동기화 스크립트 준비
메모리 동기화 소스 코드: hermes-memory-sync.py
핵심 엔진은 ~/.hermes/scripts/hermes-memory-sync.py (Python)에 있습니다. 또한 환경을 설정한 뒤 해당 Python 스크립트를 호출하는 셸 (Shell) 래퍼(wrapper)인 hermes-memory-sync.sh도 있습니다:
#!/usr/bin/env bash
DIR="$(cd "$(dirname "$0")" && pwd)"
exec python3 "$DIR/hermes-memory-sync.py" "$@"
실행 권한을 부여하는 것을 잊지 마세요:
chmod +x ~/.hermes/scripts/hermes-memory-sync.sh
참고: Python 스크립트의 전체 내용(약 400줄)은 Hermes Agent를 실제로 운영하는 경우 기술 참조용으로 제공됩니다.
4. 첫 번째 내보내기 (Export)
bash ~/.hermes/scripts/hermes-memory-sync.sh sync
이 명령은 현재 존재하는 모든 메모리를 Vault로 내보내는 동시에 첫 번째 Git 커밋 (commit)을 생성합니다.
5. 자동 백업을 위한 cron 설정
hermes cron create name=memories-to-obsidian \
schedule='0 */6 * * *' \
prompt='Run ~/.hermes/scripts/hermes-memory-sync.sh sync'
6. 결과 확인
hermes-memory-sync.sh status
엔트리 수, 문자 사용량, 그리고 최신 git 로그를 확인할 수 있습니다.
무엇을 할 수 있나요?
| 하고 싶은 작업 | 방법 |
|---|---|
| AI가 기억하는 모든 내용 보기 | Obsidian에서 _hermes/USER.md와 _hermes/MEMORY.md를 엽니다 |
| ... |
고급 단계: 멀티 볼트(Multi-Vault) 및 메모리 아카이브
두 개의 볼트 동시 사용
이 동기화 프로세스를 하나 이상의 볼트에 실행할 수 있습니다. 예를 들어, 하나의 메인 볼트와 PARA 메서드를 사용하는 별도의 "Second Brain" 볼트를 동시에 운영할 수 있습니다. 각 볼트는 자신만의 래퍼 스크립트(wrapper script)와 cron 작업을 가집니다:
# ~/.hermes/scripts/hermes-memory-sync-second-brain.sh
#!/usr/bin/env bash
export OBSIDIAN_VAULT_PATH="$HOME/Documents/Second Brain"
...
cron 작업은 토큰을 전혀 소모하지 않도록 "no-agent" 모드로 실행할 수 있습니다:
hermes cron create name=second-brain-sync \
schedule='0 */6 * * *' \
no_agent=true \
...
메모리 아카이브 (Cold Storage)
메모리가 가득 차면, 자주 사용되지 않는 엔트리를 아카이브용 볼트로 이동시키는 보조 스크립트를 사용할 수 있습니다:
hermes-memory-archive.py archive USER "detail proyek lama"
hermes-memory-archive.py search USER "proyek"
hermes-memory-archive.py promote USER entry-id
아카이브된 엔트리는 _hermes/archive/에 타임스탬프가 찍힌 마크다운(markdown) 파일로 저장됩니다. 이는 언제든지 사람이 읽고, 검색하고, 복구할 수 있습니다.
얻을 수 있는 교훈
-
Bash는
§문자에 적합하지 않습니다. 이 문자는 UTF-8에서 멀티바이트(multi-byte, 바이트C2 A7)인 반면, Bash의IFS는 바이트 단위로 분할하기 때문에 파일에 엔트리가 많을 경우 결과가 잘못될 수 있습니다. Python (re.split())은 이를 올바르게 처리합니다. -
"드리프트(drift)" 감지 메커니즘이 있습니다. Hermes 메모리 도구는
§구분자를 통해 파일을 일관되게 분할 및 결합할 수 있는지 확인합니다. 만약 Hermes 메모리 파일에 직접 가공되지 않은 마크다운(markdown)을 작성하면, 도구가 다음 변경 사항 저장을 거부하고 자동으로 백업 스냅샷(snapshot)을 생성합니다. 이 동기화 스크립트는 파일을 덮어쓰기 전에 원본 파일 이름을.bak로 변경하여 이 문제를 방지합니다. -
임포트(import) 후에는 반드시 새 세션(
/new)을 시작해야 합니다. 메모리 파일은 세션 시작 시 한 번만 로드되는 "스냅샷(snapshot)"일 뿐입니다. 변경 사항을 방금 임포트했더라도 현재 실행 중인 세션은 여전히 이전 스냅샷을 사용하고 있으므로, 반드시 새 세션을 시작해야 합니다. -
글자 수 제한은 엄격하지만 유용합니다. 1,375자(USER) 및 2,200자(MEMORY)의 제한은 에이전트(agent)의 컨텍스트 윈도우(context window)를 효율적으로 유지합니다. Vault에 저장된 복사본에는 이러한 제한이 없으므로, Hermes는 요약된 버전만 보유하는 동안 Vault에는 전체 버전을 저장할 수 있습니다.
사용 전 보안 권장 사항
이 설정을 적용하기 전에 몇 가지 보안 위험을 먼저 고려해야 합니다. 특히 동기화되는 파일에 개인 정보(이름, 위치, 습관, 프로젝트 세부 정보 등)가 암호화되지 않은 평문(plain text) 형태로 포함되어 있기 때문입니다.
-
Vault를 공개 GitHub 저장소(repo)에 푸시하지 마세요.
_hermes/USER.md및_hermes/MEMORY.md파일에는 귀하의 개인 프로필이 있는 그대로 포함되어 있습니다. 저장소가 공개되어 있다면 누구나 Git 히스토리를 읽을 수 있습니다. 여기에는 이미 "삭제된" 이전 버전도 포함되는데, Git은 커밋 히스토리를 계속 보관하기 때문입니다. 만약 GitHub에 백업하고 싶다면 **비공개 저장소(private repo)**를 사용해야 하며, 이상적으로는 공개적으로 공유하는 다른 노트 Vault와 분리된 별도의 저장소를 사용하는 것이 좋습니다. -
_hermes/폴더에 대한 저장 시 암호화 (encryption at-rest)를 고려하세요. 포함된 내용이 개인 데이터이므로, 이 폴더는 별도로 암호화하기에 아주 좋은 대상입니다. 예를 들어, Git에서 투명한 암호화를 위해git-crypt나age를 사용하거나, 노트북/서버를 다른 사람과 함께 사용한다면 암호화된 파티션에 저장하세요. -
OS 레벨에서 파일 권한(permission)을 제한하세요. Hermes 메모리 파일과
_hermes/폴더는 동일한 머신의 다른 사용자가 내용을 읽을 수 없도록600/700권한(chmod 600 ~/.hermes/memories/*.md)을 부여하는 것이 좋습니다. -
메모리를 통한 프롬프트 인젝션 (prompt injection)을 주의하세요. 이 메모리 파일들은 에이전트가 매 세션마다 다시 읽기 때문에, Obsidian을 통해 "편집된" 내용은 본질적으로 에이전트에게 새로운 지침이 됩니다. 만약 Vault에 다른 프로세스, 플러그인 또는 완전히 신뢰할 수 없는 협업자가 접근할 수 있다면, 누군가
## Entry N에 프롬프트 인젝션 역할을 하는 텍스트를 삽입할 수 있습니다. 예를 들어, 다음 세션이 시작될 때 에이전트가 귀하의 의도와 다르게 행동하도록 만드는 숨겨진 지침을 넣을 수 있습니다._hermes/폴더를 자격 증명(credentials)처럼 취급하세요. 제3자 동기화(sync) 플러그인이나 공유된 Vault에 함부로 접근 권한을 주지 마세요. -
동일한 Vault에 설치된 Obsidian 플러그인도 확인하세요. Obsidian 커뮤니티 플러그인은
_hermes/폴더를 포함한 전체 Vault에 대해 완전한 읽기/쓰기 권한을 가집니다. 만약 해당 플러그인 중 하나에 버그가 있거나 악의적인 의도가 있다면, 귀하가 인지하지 못하는 사이에 AI 메모리를 읽거나 수정할 수 있습니다.
새로운 플러그인을 많이 테스트해 볼 계획이라면 _hermes/ 전용 별도 볼트(vault)를 고려해 보세요.
- cron 백업 또한 새로운 "단일 장애점 (Single Point of Failure)"을 의미합니다. 6시간마다 실행되는 cron 작업은 귀하의 메모리에 읽기/쓰기 권한을 가진 자동화된 프로세스가 존재함을 의미합니다. 동일한 머신 내의 다른 프로세스가 자동으로 실행되는 스크립트에 코드를 삽입할 수 없도록,
hermes-memory-sync.sh및hermes-memory-sync.py스크립트는 반드시 귀하의 사용자 본인만 쓸 수 있어야 합니다 (world-writable이 아니어야 함).
위의 사항들이 이 설정이 사용하기에 위험하다는 뜻은 아닙니다. 하지만 기존에 에이전트 시스템 내부에 "잠겨" 있던 데이터를 일반적인 파일 시스템(filesystem) 및 git 레이어로 이동시키는 것이므로, 보안을 유지해야 하는 책임 또한 귀하에게 넘어온다는 것을 의미합니다.
가치가 있을까?
만약 귀하가 이미 장기 메모리 (long-term memory)를 가진 AI 에이전트를 사용 중이고, 동시에 일상적으로 Obsidian을 사용하고 있다면 — 대답은 "네, 시도해 볼 가치가 있습니다"입니다. 변화는 단순합니다:
- 채팅 명령을 통해 AI에게 무엇을 기억해야 할지 알려주는 것에서
- 일반적인 마크다운 (markdown) 노트를 통해 AI가 기억하는 내용을 직접 편집하는 것으로
- 그리고 AI가 메모리 시스템을 통해 그 편집 내용을 다시 반영하는 것으로
이렇게 하면 AI의 메모리가 구성 파일 (configuration file) 속에 숨겨진 블랙박스가 아니라, 귀하 소유의 지식 베이스처럼 느껴지게 됩니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기