관계를 읽을 수 있는 위키로 — Wiki Agent
graph.json은 기계용 데이터다. 사람이 읽을 수 있는 형태가 필요했다. Raw 노트와 관계 데이터를 Wikipedia 스타일 서술 위키로 변환하는 Wiki Agent의 설계와 동작 원리.
- 배경: 노트 사이의 관계를 추출했는데, 그 결과물이 JSON이었어요. 기계는 읽을 수 있지만 사람은 못 읽는 데이터
- 핵심 인사이트: Wikipedia 에디터처럼 “1 article = 1 concept”로 서술하고, cross-reference로 네트워크를 짜면 사람이 읽을 수 있는 지식 베이스가 만들어져요
- 이런 분에게: 노트를 많이 모았는데 “이걸 어떻게 활용하지?”에서 멈춰 있는 분. 또는 LLM으로 개인 위키를 만들어보고 싶은 분
JSON 파일을 열어본 적 있나요
이전 편에서 Graphify가 노트 더미에서 관계를 추출해서 graph.json이라는 파일을 만드는 과정을 이야기했어요. “이 노트와 저 노트가 연결돼 있다”, “이 개념들이 하나의 군집을 이루고 있다” — 이런 구조 데이터가 담긴 파일이에요.
근데 한번 열어보면 알아요. 이걸 사람이 읽을 수는 없다는 걸.
{
"nodes": [{"id": "에이전트-설계", "community_id": 2, ...}],
"links": [{"source": "에이전트-설계", "target": "역할-분리", "type": "EXTRACTED", ...}],
"hyperedges": [...]
}노드가 몇 개고, 어디에 연결돼 있고, 어떤 군집에 속하는지는 알 수 있어요. 그런데 “그래서 이 개념이 뭔데?”, “왜 이 둘이 연결돼 있는데?” — 이런 질문에는 답을 못 해요. 뼈대는 있는데 살이 없는 상태라고 할까요.
그래서 필요했어요. 이 뼈대에 살을 붙여서, 사람이 읽을 수 있는 형태로 바꿔주는 무언가가.
이전 편의 Graphify가 산출하는 graph.json은 노드(개념/엔티티), 엣지(관계), 하이퍼엣지(다대다 관계)로 구성된 그래프 데이터예요. Leiden 클러스터링으로 커뮤니티를 분류하고, 각 관계에 EXTRACTED(원문 근거 있음) / INFERRED(추론) / AMBIGUOUS(불명확) 신뢰도 태그를 붙여요.
이 데이터의 한계는 명확해요:
- 구조만 있고 맥락이 없어요 — “A와 B가 연결돼 있다”는 알지만 “왜 연결돼 있는지”는 모름
- 원문 접근이 필요해요 — 실제 내용을 확인하려면 Raw 노트를 다시 열어봐야 함
- 탐색이 어려워요 — 특정 개념의 배경, 관련 개념, 맥락을 한눈에 볼 수 없음
wiki-schema.md에서 이 관계를 이렇게 정의하고 있어요:
| Graphify | Wiki Agent | |
|---|---|---|
| 본질 | 구조 컴파일러 (뼈대) | 서술 합성기 (살) |
| 연산 | 결정론 + 통계 | LLM 호출 |
| 질문 | ”무엇이 무엇과 연결되어 있나" | "왜 연결되었고 무엇을 의미하나” |
Graphify가 뼈대를 만들면, Wiki Agent가 Raw 노트와 그래프 데이터를 함께 읽고 사람이 탐색할 수 있는 서술 위키로 변환하는 구조예요.
Wikipedia 에디터라는 역할
Wiki Agent에게 부여한 역할은 단순해요. Wikipedia 에디터. 정보를 수집해서 새로 만드는 게 아니라, 이미 있는 자료를 정리하고 연결해서 사람이 읽을 수 있는 백과사전 항목으로 만드는 역할이에요.
Wikipedia에서 하나의 항목을 열면 어떤 구조인지 생각해보세요:
- 첫 문단에서 “이것은 무엇이다”를 바로 설명하고
- 배경과 맥락을 서술하고
- 관련 항목으로 링크를 걸어서 탐색할 수 있게 하고
- 출처를 명시해요
Wiki Agent가 만드는 위키도 이 패턴을 따라요. 하나의 개념이 하나의 문서가 되고, [[다른 개념]] 형태의 cross-reference로 개념끼리 연결돼요. 원래 그 내용이 담긴 노트(원전)도 밑에 명시하고요.
핵심 규칙이 하나 있는데요 — 원문을 복사하지 않아요. Raw 노트에 쓴 내용을 그대로 가져오는 게 아니라, 여러 노트에 흩어진 내용을 종합해서 하나의 맥락으로 서술해요. 짧은 인용은 괜찮지만, 복사 붙여넣기는 안 돼요. 원문이 필요하면 원전 링크를 따라가면 되니까요.
Wiki Agent의 article 포맷은 Wikipedia 패턴을 엄격하게 따라요:
# {개념/엔티티/주제 이름}
> {1~3문장 정의. 이 항목이 무엇인지 즉시 이해되게.}
## 배경
{역사적·문제적·문맥적 배경}
## {주제별 섹션 2~5개}
{구조, 특징, 비교, 적용, 원칙 등 — 주제에 따라 자유 구성}
## 관련 항목
- [[Graphify]] — {관계 한 줄 서술}
- [[RAG]] — {관계 한 줄 서술}
## 원전
- Self/Raw/2026-04-06_agent-design.md파일 단위 규칙은 “1 article = 1 concept”이에요. 하나의 노드 또는 강한 응집 커뮤니티 하나가 하나의 문서가 돼요. Raw 노트 하나가 추가되면 보통 2~5개의 article이 새로 생기거나 갱신돼요(Fan-out).

frontmatter에는 그래프 메타데이터(커뮤니티 ID, God Node 여부, 신뢰도 통계)를 넣지만, 본문에는 절대 안 넣어요. 이건 이전에 실패했던 경험에서 나온 규칙이에요. (6 connections), cohesion: 0.40 같은 그래프 통계가 본문에 들어가면 사람이 읽는 위키가 아니라 기계 리포트가 돼버려요.
본문에서 금지하는 것:
- 그래프 통계 서술 (
N connections,cohesion수치) - Raw 본문 그대로 반복
- 한영 혼용
- 원문에 없는 개념 확장이나 가치 판단
허용하는 것:
[[...]]cross-reference (필수 — 최소 1개)- Raw에 없는 맥락 서술 (배경, 역사, 관련 개념의 관계)
- 짧은 원문 인용 (1~2문장)
- INFERRED 관계의 완화 표현 (“~로 연결될 수 있다”)
두 개의 위키, 두 개의 시선
사실 Wiki Agent는 하나가 아니라 둘이에요. 같은 Wikipedia 에디터인데, 다루는 자료가 달라요.
Wiki Agent A는 내가 쓴 노트를 다뤄요. 일기, 회고, 아이디어, 작업 기록 — 이런 것들을 읽고 “이 사람은 어떤 주제에 반복적으로 돌아오는가”, “어떤 개념들이 서로 얽혀 있는가”를 정리해요. 이걸 정체성 위키라고 불러요. 내 사고 패턴을 구조화한 것이니까요.
여기서 중요한 규칙이 하나 있어요. Wiki Agent A는 “당신은 이런 사람이에요”라고 말하면 안 돼요. 패턴을 서술하고, 관계를 기술하고, 변화를 보여주되 — 의미를 부여하거나 해석을 붙이는 건 금지예요. “이 주제가 반복적으로 등장한다”는 사실만 기술하고, 그게 무슨 뜻인지는 본인이 판단하는 거예요.
이건 셀포지 전체의 설계 원칙이기도 해요. “AI는 해석하지 않는다, 드러낸다.” 연결과 패턴을 표면화할 뿐, 의미 부여는 사람의 몫이에요.
Wiki Agent B는 외부에서 가져온 자료를 다뤄요. 아티클, 논문, 트윗 — 이런 외부 자료를 읽고 개념을 정의하고 구조화해요. 이건 지식 위키예요. 여기서도 비슷한 규칙이 있어요. “이 자료가 좋다, 나쁘다” 같은 가치 판단은 하지 않아요. “저자는 이걸 말하려 한 것이다” 같은 의도 추측도 안 하고요. 구조화만 해요.
| Wiki Agent A (정체성 위키) | Wiki Agent B (지식 위키) | |
|---|---|---|
| 다루는 자료 | 내 생각, 회고, 아이디어 | 외부 아티클, 논문, 자료 |
| 초점 | 내 사고 패턴, 반복 주제 | 외부 개념, 트렌드, 소재 |
| 금지 | 정체성 규정, 의미 부여 | 가치 판단, 의도 추측 |
두 위키가 따로 존재하는 이유가 있어요. “내가 한 생각”과 “외부에서 배운 것”은 성격이 달라요. 섞이면 “이게 내 생각이었나, 어디서 읽은 건가?” 구분이 안 돼요. 그래서 물리적으로 분리해두고, 각각 다른 시선으로 정리하는 거예요.
두 Wiki Agent는 동일한 스키마(wiki-schema.md)를 따르지만, 서술 방식과 특화 기능이 달라요.
Wiki Agent A — 정체성 위키
경로 구조:
Self/
├── Raw/ # 내가 쓴 노트 (캡처, 회고, 작업 기록)
├── wiki/ # Wiki Agent A가 쓴다
│ ├── articles/ # Wikipedia 스타일 페이지
│ ├── index.md # 네비게이션 허브
│ ├── signals.md # 콘텐츠 신호 리포트
│ └── gaps.md # 갭 리포트
└── graphify-out/ # Graphify 산출물
└── graph.json # 관계 데이터Vault A만의 특화 기능:
- 반복 주제 프레이밍: God Node(많은 연결을 가진 중심 개념)가 있으면 “이 주제가 반복적으로 돌아온다”는 사실을 기술해요. 해석은 하지 않아요.
- 관점 진화 섹션: 이전 스냅샷 대비 변화가 있으면
## 관점 진화섹션을 추가해요. “최근 연결된 개념”, “약해진 연결”을 보여줘요. - 긴장 표시: 한 군집 안에 상반된 개념이 공존하면 본문에 긴장 표시만 해요. 해석은 안 해요.
서술 규칙:
- 허용: 패턴 기술, 관계 기술, 변화 기술
- 금지: “당신은 이런 사람입니다” (규정), “이 패턴은 X를 의미합니다” (해석), “좋은/나쁜 패턴” (가치 평가)
Wiki Agent B — 지식 위키
경로 구조는 동일하되 External/ 아래에 위치해요.
Vault B만의 특화 기능:
- 개념 정의 중심: 각 article이 “이 개념은 무엇인가”를 원문 근거로 정의해요
- 비교 섹션: 같은 군집에 여러 개념이 있으면 공통점과 차이점을 정리해요
- Surprising Connection 확장: 예상 밖의 연결이 발견되면 구조적 근거를 서술하되, 추측은 금지. “~로 연결될 수 있다”는 완화 표현을 써요
서술 규칙:
- EXTRACTED 관계(원문 근거 있음)는 단정적 기술
- INFERRED 관계(추론)는 완화 표현 사용
- 가치 판단, 의도 추측, 원문에 없는 개념 확장 금지
매번 전체를 다시 쓰지 않아요
노트가 하나 추가될 때마다 위키 전체를 처음부터 다시 쓴다면 비효율적이잖아요. Wiki Agent는 변경된 부분만 찾아서 갱신해요.
과정을 간단히 설명하면 이래요:
- Graphify가 새로운
graph.json을 만들면, 이전 스냅샷과 비교해서 “뭐가 바뀌었지?” 확인 - 바뀐 노드와 연결된 항목들만 추려서 영향 범위를 정함
- 영향받는 원본 노트만 다시 읽음
- 해당 위키 문서만 다시 작성
이전 편에서 Graphify가 graph.json을 만들 때도 비슷한 원리가 있었죠. --update 옵션으로 변경분만 추출하는 것. Wiki Agent도 같은 방식이에요. 매일 자정에 크론이 돌면서 Graphify가 먼저 그래프를 갱신하고, 그래프가 실제로 바뀌었을 때만 Wiki Agent가 뒤이어 돌아가요.
노트가 많아질수록 이 구조의 효과가 커져요. 노트가 10개일 때는 전부 다시 읽어도 괜찮지만, 100개가 넘으면 바뀐 부분만 골라서 처리하는 게 중요해지거든요.
Ingest 프로토콜은 9단계로 구성돼 있어요. 핵심은 Graphify의 스코핑 효과를 활용해서 읽기 비용을 줄이는 것이에요.
Step 0. Graphify 완료 상태 확인
Step 1. 변경 감지 — graph.json vs .last_graph_snapshot.json Diff
Step 2. 영향 범위 산정 — 변경된 노드 + 같은 커뮤니티 멤버
Step 3. Raw 스코프 재독 — 영향받는 파일만
Step 4. Article Fan-out 재작성 — 체크리스트 검증 후 저장
Step 5. index.md 재생성
Step 6. signals.md 재계산
Step 7. log.md append
Step 8. 스냅샷 저장
Step 9. 숙성/페르소나 시그널 알림Step 2의 영향 범위 산정이 핵심이에요:
affected_articles = {}
for node in changed_nodes:
affected_articles.add(node_to_article(node))
for community in node.communities:
for member in community.members:
affected_articles.add(member_to_article(member))변경된 노드뿐 아니라 같은 커뮤니티에 속한 멤버까지 포함해요. 한 개념이 바뀌면 관련 개념의 서술에도 영향을 줄 수 있으니까요. 그리고 affected_raw_files 크기에 따라 전략이 달라져요:
- 볼트가 10개 미만이면 → 전체 Raw를 읽어도 OK (스코핑 이득이 작아요)
- 볼트가 30개 이상이면 → 반드시 스코프 내로 제한
자정 크론(sullivan-graphify)의 실행 흐름을 보면 이 최적화가 더 잘 보여요:
- Graphify가
--update플래그로 변경분만 추출 - graph.json의 SHA256 해시를 이전 값과 비교
- 해시가 같으면(변경 없으면) Wiki Agent 호출 자체를 스킵
- 해시가 다르면 +
.wiki_enabled파일이 있으면 → Wiki Agent 실행
이 게이팅 구조 덕분에 “변경 없는 날에는 아무것도 안 하고, 변경이 있는 날에만 영향받는 부분만 처리”하는 효율적인 파이프라인이 돼요.
Step 4에서 article을 재작성한 뒤에는 반드시 체크리스트를 돌려요:
- 그래프 통계가 본문에 없는지
- Raw 본문을 그대로 복사하지 않았는지
- cross-reference가 최소 1개 있는지
- 원전 링크가 있는지
- 깨진 문자가 없는지
체크리스트 실패 시 자가 수정 1회. 그래도 실패하면 그 article은 저장을 포기하고 log.md에 에러를 기록해요. 품질이 안 되면 차라리 안 쓰는 게 나으니까요.
signals.md — 위키가 만드는 부산물
Wiki Agent가 만드는 건 위키 문서만이 아니에요. signals.md라는 리포트도 같이 만들어요. 이게 뭐냐면, “이 주제는 이제 글을 쓸 만큼 익었어요” 같은 신호를 정리한 파일이에요.
예를 들어볼게요. 외부 자료를 계속 모으다 보면, 어느 순간 “에이전트 설계”라는 주제에 관련 자료가 5개, 6개 쌓여요. 각 자료가 서로 연결되기 시작하고, 하나의 군집이 충분히 두꺼워져요. 그때 Wiki Agent B가 신호를 보내요 — “이 주제, 글감으로 쓸 만큼 익었어요.”
Wiki Agent A 쪽에서는 다른 종류의 신호가 나와요. “최근 회고에서 이 주제에 대한 관점이 달라졌어요”, “이 두 개념이 함께 등장하는데 긴장 관계에 있어요” — 이런 변화 신호요.
이 signals.md가 왜 중요하냐면, 시리즈의 다음 이야기와 연결되기 때문이에요. 위키에서 정리된 지식이 콘텐츠로 변환되는 과정에서, 이 “숙성 시그널”이 출발점이 되거든요. 뭘 쓸지 고민할 필요가 없어요. 시스템이 “이게 익었다”고 알려주니까요.
signals.md는 매 Ingest 후 자동으로 재계산되는 부속 리포트예요. 콘텐츠 파이프라인(Content Strategy 에이전트)이 읽는 정형 인터페이스 역할을 해요.
---
type: wiki-signals
vault: A | B
generated: YYYY-MM-DD HH:MM
---
# 콘텐츠 신호
## God Node 변화
- [[개념]]: N edges → M edges (변화량)
## 숙성 시그널 (글 쓸 시점)
- [[article]] — 멤버 N개 도달
- [[God Node]] — 엣지 N개 돌파
## Surprising Connection (confidence 0.7 이상)
- [[A]] ↔ [[B]] — {간단 해석 제안}
## 최근 관점 진화 (Vault A 전용)
- {커뮤니티}에 {새 개념} 합류 → 반복 주제 변화 감지Vault A와 B에서 숙성 시그널을 판단하는 기준이 달라요:
Vault B (지식 위키)의 숙성 판단:
- 특정 군집의 멤버가 5개 이상 모이면 → “이 주제로 글을 쓸 수 있을 만큼 자료가 모였다”
- 중심 개념(God Node)의 연결이 8개 이상이면 → “이 주제에 충분한 깊이가 생겼다”
- 예상 밖 연결(Surprising Connection)의 신뢰도가 0.8 이상이면 → “독자에게 놀라움을 줄 수 있는 소재”
Vault A (정체성 위키)의 변화 감지:
- 중심 개념의 순위가 바뀌면 → “반복적으로 생각하는 주제가 달라졌다”
- 새로운 군집이 등장하면 → “새로운 관심 영역”
- 기존 중심 개념에 연결된 노드가 3개 이상 바뀌면 → “관점이 진화하고 있다”
이 시그널들이 자산화 레이어의 입력이 돼요. Wiki Agent A는 “각도”(어떤 관점으로 쓸지)를, Wiki Agent B는 “소재”(무슨 내용을 쓸지)를 제공해요.
텔레그램으로 오는 알림
시그널이 발생하면 텔레그램으로 알림이 와요. 근데 알림 메시지에 “God Node 엣지 8개 돌파”라고 쓰면 무슨 말인지 모르잖아요. 그래서 알림은 철저하게 일상 언어로 쓰여요.
Wiki Agent B에서 오는 알림은 이런 느낌이에요:
외부 지식 위키 — 글감이 익었어요
왜 알려드리냐면: 최근 포착한 글들이 하나의 주제로 모이고 있어요.
어떤 주제가 익었냐면:
- “프롬프트 엔지니어링” — 관련 글이 충분히 모여서 정리할 수 있어요
이걸로 뭘 할 수 있냐면:
- 이 주제로 글을 써볼 수 있어요
- 더 깊이 파고 싶으면 물어보세요
- 지금은 넘겨도 돼요 — 다음에 더 익으면 다시 알려드릴게요
Wiki Agent A에서 오는 알림은 조금 달라요. 내 사고 패턴의 변화를 알려주는 거라, “이 패턴이 맞다면 반영할 수 있어요, 아니라고 기각해도 괜찮아요”라고 선택지를 줘요. 자동으로 뭘 바꾸지는 않아요. 제안하고, 사람이 승인해야 반영돼요.
이 알림 설계에서 제일 신경 쓴 부분은 시스템 용어를 쓰지 않는 것이에요. node, community, cohesion, ingest — 이런 단어가 알림에 나오면 안 돼요. “노트를 다시 살펴봤는데, 최근 2주간 ‘만드는 모드’와 ‘정리하는 모드’를 오가는 패턴이 반복되고 있어요” — 이런 식으로, 사람이 자연스럽게 읽을 수 있는 말이어야 해요.
알림은 Ingest 프로토콜의 마지막 단계(Step 9)에서 발생해요. 두 에이전트의 알림 채널은 모두 Sullivan 채널(telegram-sullivan)이에요.
알림 작성 규칙:
God Node,community,edge,cohesion,ingest,affected_articles같은 시스템 용어 절대 노출 금지- 패턴명은 사용자가 쓴 표현이나 원문 그대로 사용
- 구조: “왜 보냈는지 → 뭘 알면 좋은지 → 뭘 할 수 있는지” 순서 필수
Wiki Agent A의 알림에는 “승인/기각/수정” 3단 선택지가 자연어로 포함돼요. 페르소나 파일을 직접 수정하지 않고, 제안만 하고 흐민이 승인해야 반영되는 구조예요. 이 역시 “AI는 해석하지 않는다, 드러낸다”는 원칙의 연장선이에요.
얇은 위키도 괜찮아요
처음에 이런 고민이 있었어요. 기존 노트 대부분이 이미 잘 정리된 고품질 문서였거든요. 이걸 위키로 변환하면 오히려 원본보다 얇아질 수 있어요. “위키가 원본보다 빈약한데 이게 의미가 있나?” 싶을 수 있잖아요.
결론은 — 그래도 괜찮아요.
원본이 잘 정리돼 있으면 위키 문서가 얇아지는 건 자연스러운 거예요. 그때 위키의 역할은 깊은 서술이 아니라 허브예요. “이 개념은 이런 거고, 관련된 건 이거고, 원본은 여기 있어요” — 이걸 알려주는 것만으로 가치가 있어요.
반대로, 파편적인 메모나 즉석 캡처 같은 날것의 노트가 들어오면 위키 문서가 두꺼워져요. 여기저기 흩어진 조각들을 종합해서 하나의 맥락으로 엮어야 하니까요. 이때 위키의 진가가 발휘돼요.
그래서 지금은 자동 실행을 보류하고 있어요. 고품질 문서만 있는 상태에서 돌리면 “위키가 잘 작동하는지” 판단하기 어려우니까요. 날것의 캡처가 하나 들어왔을 때 수동으로 돌려보고, 그 결과를 보고 검증하는 게 계획이에요.
wiki-schema.md에서 이 문제를 “article 두께 자동 조절”이라고 정의해요:
- Raw가 이미 잘 정리된 문서: article은 얇게 나와요 (정의 + 관련 항목 + 원전). 허브 역할.
- Raw가 파편적·원재료적 (즉석 캡처, 발췌, 대화 로그): article이 종합 역할을 해서 두꺼워져요.
스키마는 동일하지만 두께가 자연스럽게 달라지는 거예요. “얇음을 문제 삼지 말 것”이 명시된 규칙이에요.
현재 구현 상태와 검증 계획:
- 크론 등록은 돼 있지만 실행은 보류 중 —
.wiki_enabled게이트 스위치가 없으면 Wiki Agent가 호출돼도 로그만 남기고 종료해요 - 수동 트리거는 허용 — “Vault A 재컴파일”이라고 직접 요청하면 실행돼요
- 검증 기준: (a) Raw 대비 article 가독성이 높은지 (b) 다른 Raw와의 맥락이 드러나는지 (c) Raw 반복 서술이 없는지
- 첫 실증 조건: 원재료성 Raw 1건(트윗 캡처, 논문 발췌, 대화 로그)이 들어왔을 때 수동 ingest → 결과 확인
전체 흐름을 한눈에
지금까지의 시리즈 흐름을 정리하면 이래요:
노트를 쓴다 (Raw)
↓
Graphify가 관계를 추출한다 (graph.json)
↓
Wiki Agent가 서술 위키를 만든다 (wiki/articles/)
├── Wiki Agent A: 내 사고 패턴 → 정체성 위키
└── Wiki Agent B: 외부 개념 → 지식 위키
↓
signals.md: 숙성 시그널 + 변화 감지
↓
텔레그램 알림: "글감이 익었어요" / "패턴이 보여요"

Raw에서 시작해서 Graphify가 뼈대를 만들고, Wiki Agent가 살을 붙이고, signals.md가 “이제 써도 돼”라는 신호를 보내는 거예요. 노트 → 그래프 → 위키 → 시그널. 각 단계가 다음 단계의 입력이 되는 파이프라인이에요.
그다음 질문
여기까지 오면 자연스럽게 드는 질문이 있어요.
Wiki Agent A가 만든 정체성 위키와 Wiki Agent B가 만든 지식 위키 — 이 둘은 지금까지 완전히 분리돼 있어요. 각자의 세계에서 각자의 관계를 정리하고 있을 뿐이에요.
근데 “내가 반복적으로 고민하는 주제”(A)와 “외부에서 모은 관련 자료”(B)를 교차하면 뭐가 보일까요? 내 질문에 답이 될 수 있는 외부 패턴이 있을 수도 있고, 내가 만든 설계와 닮은 원리의 외부 사례가 있을 수도 있어요.
다음 편에서는 이 두 세계를 잇는 교차 수분(cross-pollination)을 다뤄볼게요. 내 생각과 외부 지식이 만나는 순간의 이야기예요.
이 시리즈의 다른 글
- 노트가 쌓이기만 한다 — Raw의 구조와 한계
- 쌓인 노트를 지식으로 — LLM Wiki와 Graphify
- 관계를 읽을 수 있는 위키로 — Wiki Agent
- 내 생각과 외부 지식이 만나는 순간 — Insight Agent
- 익은 지식이 콘텐츠가 되기까지 — 자산화 파이프라인