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-native-mindset/) - AI와 협업하는 마인드셋
- [working-with-agents](/working-with-agents/) - 에이전트와 일하는 방식
- ...
글을 완성하면:
나: "이 내용으로 블로그 글 만들어줘"
Cogni: 태그를 선택해주세요:
□ persona (RAG에 공개)
□ blog (블로그에 배포)
☑ 둘 다
→ 파일 저장 후 자동 동기화 실행
이렇게 쓰다 보니 한계도 느끼게 됐다.
⸻
현재 한계와 개선 방향
솔직히 말하면 아직 부족한 점이 많다.
한계
1. 연결 추천이 수동적
새 노트를 만들 때 관련 노트를 찾아주긴 하지만, 적극적으로 “이 노트와 연결하면 좋겠다”고 제안하진 않는다. grep 기반 검색이라 의미적 유사성은 못 잡는다.
2. 고아 노트 관리 부재
연결이 없는 노트(orphan)를 자동으로 감지하고 알려주는 기능이 없다. 주기적으로 직접 확인해야 한다.
3. 동기화 실패 처리 미흡
Persona API나 블로그 동기화가 실패했을 때 알림이나 재시도 로직이 없다. 성공을 가정하고 진행한다.
4. 멀티 디바이스 미지원
~/.cogni/가 로컬에만 있어서 다른 기기에서 접근하려면 수동 동기화가 필요하다.
개선 방향
가장 시급한 건 의미 기반 연결 추천이다. 지금은 grep 검색이라 키워드가 없으면 못 찾는다. 임베딩을 활용해서 “이 노트와 비슷한 주제의 노트”를 찾아주는 게 목표다.
그다음은 동기화 안정성. 실패 시 알림과 재시도 로직, 고아 노트 감지 리포트 같은 것들. 장기적으로는 로컬 임베딩 모델로 프라이버시를 보장하면서 지식 그래프를 시각화하고 싶다.
⸻
배운 것
Cogni를 만들면서 느낀 건, 좋은 도구는 사용자의 워크플로우에 녹아든다는 것이다.
“노트 앱 열어서 → 새 파일 만들고 → 제목 쓰고 → 내용 작성”하는 게 아니라, 그냥 “기록해줘”라고 말하면 된다. 마찰이 줄어들면 기록하는 횟수가 늘어난다.
Claude Code 플러그인 시스템이 이걸 가능하게 했다. Agent, Skill, Hook을 조합하면 꽤 복잡한 자동화도 자연스럽게 구현할 수 있다.
⸻
- ai-native-mindset - AI와 협업하는 마인드셋
- working-with-agents - 에이전트와 일하는 방식
- claude-code-plugin-hands-on-guide-build-your-own - 플러그인 직접 만들기