Cogni: Claude Code로 만든 PKM 에이전트
이전에 AI 에이전트와 함께 블로그를 만든다고 썼다. 그때는 Claude Code를 일반적인 협업 도구로 소개했는데, 지금은 한 단계 더 나아갔다. Cogni라는 이름의 PKM(Personal Knowledge Management) 에이전트를 만들어서 쓰고 있다.
⸻
왜 만들었나
Claude Code와 대화하다 보면 아이디어가 떠오른다. 문제 해결 과정에서 배운 것들, 나중에 써먹을 패턴들, 블로그 글감이 될 법한 생각들. 그런데 대화가 끝나면 사라진다.
Notion이나 Obsidian을 따로 열어서 적자니 흐름이 끊기고, 대화창에 그냥 두자니 며칠 후면 묻힌다. 맥락 전환 비용이 너무 높았다.
원하는 건 단순했다. 대화 흐름을 끊지 않고 “기록해줘”라고 말하면 저장되고, “뭐 배웠지?”라고 물으면 과거 기록을 찾아주고, 공개해도 되는 내용은 자동으로 블로그와 RAG에 반영되는 것. Claude Code 플러그인 시스템이 이걸 가능하게 해줬다.
⸻
구조
~/.claude/
├── agents/cogni.md # 복잡한 노트 작업용
└── skills/cogni/ # 간단한 커맨드용
~/.cogni/notes/
├── persona/ # Persona API 동기화 (RAG)
├── daily/ # 일일 노트
├── fleeting/ # 임시 메모
└── *.md # 영구 노트
Agent는 복잡한 작업을 처리한다. 노트 구조화, 연결 분석, 태그 관리 등.
Skill은 간단한 커맨드를 제공한다. /cog-daily로 오늘 노트를 열고, /cog-note로 새 노트를 만들고, /cog-search로 검색한다.
이 구조 위에서 세 가지 핵심 기능이 동작한다.
⸻
핵심 기능
1. 암시적 활성화
특정 키워드에 반응해서 자동으로 활성화된다:
| 트리거 | 동작 |
|---|---|
| ”기록해줘” | daily 노트에 추가 |
| ”정리해줘” | 노트 구조화 |
| ”뭐 배웠지?” | 노트 검색 |
명시적으로 호출할 필요 없이, 자연스러운 대화 흐름 속에서 동작한다.
2. 태그 기반 자동 동기화
노트를 저장할 때 태그를 물어본다:
| 태그 | 효과 |
|---|---|
persona | Persona API에 임베딩 → RAG 챗봇에서 검색 가능 |
blog | 블로그 저장소에 동기화 → 배포 대상 |
민감한 정보가 있으면 태그 없이 저장. 공개해도 되는 내용만 persona나 blog 태그를 붙인다.
3. Zettelkasten 연결
고립된 노트는 죽은 노트다. Cogni는 Zettelkasten 원칙을 따른다. 하나의 노트에는 하나의 아이디어만 담고, [[노트명]] 형식으로 다른 노트와 연결한다. 폴더 계층 대신 링크 네트워크로 구조화하는 방식이다.
새 노트를 만들 때 Cogni가 관련 노트를 탐색해주고, 최소 1개 이상 연결하도록 유도한다.
⸻
실제 워크플로우
지금 이 글을 쓰는 과정을 예로 들면:
나: "Cogni 소개 글 써야겠다. 기록해둬"
Cogni: 오늘 daily 노트에 추가했습니다:
- [ ] Cogni 소개 블로그 글 작성
나: "Cogni 관련해서 뭐 적어뒀지?"
Cogni: 관련 노트를 찾았습니다:
- [[ai-native-mindset]] - AI와 협업하는 마인드셋
- [[working-with-agents]] - 에이전트와 일하는 방식
- ...
글을 완성하면:
나: "이 내용으로 블로그 글 만들어줘"
Cogni: 태그를 선택해주세요:
□ persona (RAG에 공개)
□ blog (블로그에 배포)
☑ 둘 다
→ 파일 저장 후 자동 동기화 실행
이렇게 쓰다 보니 한계도 느끼게 됐다.
⸻
현재 한계와 개선 방향
솔직히 말하면 아직 부족한 점이 많다.
한계
1. 연결 추천이 수동적
새 노트를 만들 때 관련 노트를 찾아주긴 하지만, 적극적으로 “이 노트와 연결하면 좋겠다”고 제안하진 않는다. grep 기반 검색이라 의미적 유사성은 못 잡는다.
2. 고아 노트 관리 부재
연결이 없는 노트(orphan)를 자동으로 감지하고 알려주는 기능이 없다. 주기적으로 직접 확인해야 한다.
3. 동기화 실패 처리 미흡
Persona API나 블로그 동기화가 실패했을 때 알림이나 재시도 로직이 없다. 성공을 가정하고 진행한다.
4. 멀티 디바이스 미지원
~/.cogni/가 로컬에만 있어서 다른 기기에서 접근하려면 수동 동기화가 필요하다.
개선 방향
가장 시급한 건 의미 기반 연결 추천이다. 지금은 grep 검색이라 키워드가 없으면 못 찾는다. 임베딩을 활용해서 “이 노트와 비슷한 주제의 노트”를 찾아주는 게 목표다.
그다음은 동기화 안정성. 실패 시 알림과 재시도 로직, 고아 노트 감지 리포트 같은 것들. 장기적으로는 로컬 임베딩 모델로 프라이버시를 보장하면서 지식 그래프를 시각화하고 싶다.
⸻
배운 것
Cogni를 만들면서 느낀 건, 좋은 도구는 사용자의 워크플로우에 녹아든다는 것이다.
“노트 앱 열어서 → 새 파일 만들고 → 제목 쓰고 → 내용 작성”하는 게 아니라, 그냥 “기록해줘”라고 말하면 된다. 마찰이 줄어들면 기록하는 횟수가 늘어난다.
Claude Code 플러그인 시스템이 이걸 가능하게 했다. Agent, Skill, Hook을 조합하면 꽤 복잡한 자동화도 자연스럽게 구현할 수 있다.
⸻
Related
- [[ai-native-mindset]] - AI와 협업하는 마인드셋
- [[working-with-agents]] - 에이전트와 일하는 방식
- [[claude-code-plugin-hands-on-guide-build-your-own]] - 플러그인 직접 만들기