하네스가 실행하고, 옵시디언이 기억합니다
예전에 하네스 만드는 게 재밌다는 글을 쓴 적이 있어요. 그 하네스(S-skills)를 계속 다듬다가, 이번에 구조를 크게 개편했습니다. 한 줄로 요약하면 이렇습니다 — 하네스가 실행하고, 옵시디언이 기억합니다.
문제 — 세션은 휘발된다
하네스 자체는 잘 굴러갔어요. PM이 요구사항을 정리하고, Tech Lead가 전문 에이전트를 병렬로 디스패치하고, 독립 QA가 판정까지 내립니다. 그런데 세션이 끝나면 그 과정에서 쌓인 맥락 — 왜 이 설계를 골랐는지, 디자인에서 뭘 거부당했는지, QA가 뭘 지적했는지 — 이 전부 사라졌습니다. 다음 세션의 에이전트는 매번 백지에서 시작했어요. 아무리 실행 루프가 좋아도, 기억이 없으면 같은 실수를 반복합니다.
개편 — 읽고, 일하고, 남긴다
그래서 하네스와 옵시디언 볼트를 양방향으로 순환하게 묶었습니다. 작업 전에는 볼트에서 태스크 도메인의 축적된 지식을 먼저 읽고, 작업 후에는 보고서 정리본을 볼트에 남깁니다.
┌─ 읽기 (작업 전) ─ 도메인 지식 참조 → 산출물에 [OBSIDIAN: 경로]
하네스 ─┤
└─ 쓰기 (작업 후) ─ 보고서 정리본 → 40_프로젝트/{프로젝트}/보고서/읽기는 역할마다 참조하는 폴더가 다릅니다. 라우팅·기술 스택 판단은 시스템 폴더의 기술 결정 가이드를, 기획은 기획 지식을, 디자인은 축적된 디자인 시스템 문서를, 구현은 설계 원칙과 해당 도메인 지식을 먼저 읽고 시작해요. 매 작업이 과거의 결정 위에서 출발합니다.
쓰기는 사용자가 읽는 보고서를 볼트에 그 자체로 읽히는 정리본으로 저장하는 겁니다. Tech Lead의 완료 보고, QA 판정, 주간 회고, 디버깅 조사 결과, 보안 감사 요약, 릴리즈 보고 — 전부요. 나중에 위키링크로 연결하고, 미래의 제가 같은 정신 모형을 다시 로드할 수 있게요.
설계하면서 정한 것들
- MCP를 경유하지 않습니다 — 볼트 접근은 파일 도구(Read/Grep)로 직접 합니다. 서버 한 겹이 없으니 멈춤 없이 빠르고, 옵시디언이 결국 그냥 마크다운 폴더라는 점을 그대로 활용한 거예요.
- 볼트가 없어도 정상 동작합니다 — 참조·저장만 건너뛰고 산출물에 '미수행:'으로 정직하게 기록합니다. 조용히 넘어가는 것과 안 했다고 말하는 건 다르니까요.
- 쓰는 역할을 분리했습니다 — 보고서 저장은 각 스킬이 자동으로, 지식 문서를 직접 작성하는 건 obsidian-writer 스킬이 담당합니다. 읽기 → 보고서 쓰기 → 지식 쓰기가 순환하며 볼트가 점점 두꺼워집니다.
느낀 것
에이전트의 장기 기억이라고 하면 벡터 DB나 전용 메모리 스토어부터 떠올리기 쉬운데, 해보니 사람이 읽는 문서 그 자체가 꽤 훌륭한 기억 장치더라고요. 에이전트가 남긴 보고서를 제가 읽고, 제가 정리한 지식을 에이전트가 읽습니다. 사람과 에이전트가 같은 기억을 공유하는 셈이라, 어느 쪽이 봐도 맥락이 이어져요.
물론 아직 다듬을 게 많습니다. 어떤 지식을 몇 개나 읽게 할지, 보고서가 쌓이면 어떻게 압축할지 같은 문제들이 남아 있어요. 그래도 방향은 확실해진 것 같습니다. 진행하면서 또 기록할게요.