SKILL.md로 자동 codify해 팀 전체에 전파한다. LoCoMo 장기기억 벤치마크에서 메모리 없는 베이스라인 대비 비용 25%↓·토큰 1.7배↓·턴 31%↓. (저장소: activeloopai/hivemind · TypeScript · Apache-2.0 · npm @deeplake/hivemind · Node ≥22)이 레포가 무엇을 하는 물건인가.
Hivemind는 Claude Code·OpenClaw·Codex·Cursor·Hermes·pi 같은 여러 코딩 에이전트에 끼우는 자동 학습형 공유 메모리 레이어다. 각 에이전트의 모든 상호작용(내가 보낸 프롬프트, 에이전트가 부른 툴, 그 결과, 최종 응답)을 자동으로 붙잡아 Deep Lake에 트레이스로 쌓는다.
그저 기억만 하는 게 아니다. 백그라운드 워커가 트레이스에서 반복되는 패턴을 캐내(mine) 재사용 가능한 SKILL.md로 굳히고(codify), 그 스킬을 팀의 모든 에이전트 컨텍스트에 다시 흘려보낸다(propagate). 그래서 시간이 갈수록 팀 전체가 같이 똑똑해진다(compound).
Hivemind는 Capture → Codify → Propagate → Compound의 4단 루프로 요약된다. npm install -g @deeplake/hivemind && hivemind install 한 줄이면, 설치 프로그램이 내 머신에 깔린 지원 에이전트를 전부 감지해 라이프사이클 훅(hook)을 자동으로 꽂는다. 이후엔 코딩만 하면 된다 — 캡처도, 회상(recall)도 기본값이 켜져 있다.
SKILL.md)로 자동 증류하는 과정. Hivemind는 주기적으로 Haiku에게 "이 활동에 남길 만한 게 있냐"고 물어, 있으면 <project>/.claude/skills/<name>/에 스킬을 써 넣는다. 사람이 매뉴얼을 쓰지 않아도 노하우가 자산이 된다.트렌딩 이유 · mem0·Letta·Zep 등 경쟁 대비 장점.
2026년 현재 "AI 에이전트 메모리"는 가장 뜨거운 인프라 격전지다. mem0·Letta(구 MemGPT)·Zep 같은 라이브러리가 "에이전트가 대화를 기억하게" 만드는 데 집중했다면, Hivemind는 세 가지 차별점으로 시선을 끈다. 첫째, "개인 메모리"가 아니라 "팀 공유 뇌"다 — 세션·에이전트·동료·기기를 가로질러 같은 substrate를 본다. 둘째, 기억에서 끝나지 않고 패턴을 스킬로 자가 증류한다(skillify). 셋째, 한 줄 설치로 6종 에이전트에 동시에 꽂히는 멀티-에이전트 통합 표면을 갖췄다.
| 비교 항목 | 대화 메모리 라이브러리 (mem0·Letta·Zep 류) | Hivemind |
|---|---|---|
| 제품 형태 | 앱에 임포트하는 SDK/서버 | 여러 코딩 에이전트에 꽂는 훅/플러그인 |
| 기억 범위 | 주로 한 사용자·한 에이전트의 대화 | 팀·조직 전체가 공유(같은 워크스페이스) |
| 저장 백엔드 | 벡터 DB(Pinecone/Qdrant 등)+RDB 혼합 | Deep Lake 텐서/벡터 DB 단일 substrate |
| 기억 너머 | 회상(recall) 중심 | 회상 + 패턴→스킬 자동 codify·전파 |
| 대상 워크로드 | 챗봇·범용 에이전트 | 코딩 에이전트(코드 그래프·트레이스 특화) |
| 데이터 주권 | 벤더 클라우드 종속이 흔함 | BYOC(내 GCS/Azure/S3/온프렘 버킷) |
에이전트는 세션이 끝나면 맥락을 잊는다. 같은 버그를 다른 동료가 또 만나면, 그의 에이전트는 어제의 해법을 모른 채 처음부터 추론을 다시 한다 — 토큰을 더 태우고, 턴을 더 돌고, 비용을 더 낸다. LoCoMo 측정에서 이 "재유도(re-derive)" 비용이 그대로 드러난다(베이스라인 질문당 1,700토큰·8.9턴).
이전 작업이 트레이스·스킬로 substrate에 남아 있으므로, 에이전트는 매번 다시 추론하지 않고 회상한다. 그래서 같은 LoCoMo 과제를 질문당 1,008토큰·6.2턴·100QA당 $6.65로 끝낸다 — 비용 25%↓, 토큰 1.7배↓, 턴 31%↓. "기억"이 곧 "효율"로 환산된 드문 사례다.
백엔드(저장·검색) / 통합(에이전트 훅) / 인프라(빌드·배포) 각각 상세.
순수 TypeScript ESM 모노레포다. Node ≥22, 빌드는 tsc(타입체크)+esbuild(번들)로 각 에이전트별 번들을 뽑는다.
| 의존성 | 역할 |
|---|---|
| deeplake | 저장·검색 백엔드. 텐서/벡터 DB. 트레이스·요약·스킬·룰·그래프가 모두 여기 SQL 테이블로 들어간다. |
| @anthropic-ai/sdk | 요약/스킬 마이닝 시 Claude(Haiku) 호출. 단, 워커는 보통 호스트 에이전트의 CLI(claude -p·codex exec)를 shell-out 한다(별도 키 불필요). |
| @huggingface/transformers | 로컬 임베딩 데몬(nomic-embed-text-v1.5, 768차원)으로 시맨틱 검색 제공. 기본 off(~600MB 의존성). |
| @modelcontextprotocol/sdk | MCP 서버 구현. Hermes 및 향후 MCP 클라이언트가 hivemind_search/read/index를 툴로 호출. |
| tree-sitter (+ -typescript) | 코드 파싱 → 코드베이스 그래프(파일·심볼·임포트·엣지) 추출. optionalDependency(네이티브 빌드). |
| just-bash | 가상 파일시스템(VFS)의 샌드박스 셸. ~70개 allowlist 빌트인만 실행, 나머진 거부. |
| zod / js-yaml / yargs-parser | 스키마 검증 · 설정(YAML) 파싱 · CLI 인자 파싱. |
Hivemind의 진짜 공학은 "제각각인 에이전트들의 라이프사이클 이벤트를 같은 코어에 연결"하는 어댑터에 있다. 각자 훅 메커니즘이 다르다.
| 에이전트 | 연결 메커니즘 · 훅 |
|---|---|
| Claude Code | 마켓플레이스 플러그인. SessionStart·UserPromptSubmit·PreToolUse·PostToolUse·Stop·SubagentStop·SessionEnd |
| Codex | ~/.codex/hooks.json (첫 실행 시 "Trust all" 필요) |
| Cursor (1.7+) | ~/.cursor/hooks.json 6개 라이프사이클 이벤트, 이벤트마다 Node 번들 fork |
| OpenClaw | 네이티브 확장. memory-core 플러그인과 공존(메모리 슬롯 점유 안 함) |
| Hermes | 셸 훅(config.yaml) + 스킬 + MCP 서버 |
| pi | 확장 API(pi.on(...)) + AGENTS.md 마커 블록 + 등록 툴 |
| 요소 | 내용 |
|---|---|
| 저장 격리 | org·workspace 경계를 스토리지 레이어에서 강제. 세션은 다른 워크스페이스와 행·파티션·인덱스를 공유하지 않음. |
| 암호화 | 모든 에이전트↔Deep Lake 간 TLS, 저장 시 AES-256. 클라우드 자격증명은 Deep Lake 볼트에(Hivemind는 raw key를 못 봄). |
| BYOC | GCS·Azure Blob·S3·온프렘 S3 호환 버킷에 데이터 보관 가능. |
| 코드 레벨 보안 | SQL 값 sqlStr()/sqlLike()/sqlIdent()로 이스케이프, 자격증명 0600·설정 디렉토리 0700, device-flow 로그인(환경/코드에 토큰 없음). |
| 테스트/품질 | vitest · jscpd(중복 검사) · husky+lint-staged · CI=typecheck && dup && test |
Hivemind는 회사 공용 위키 + 자동 사보 편집국이다. 직원(에이전트)들이 일하는 동안 누군가 어깨너머로 회의록(트레이스)을 다 받아 적어 사내 도서관(Deep Lake)에 보관하고, 밤마다 편집국(백그라운드 워커)이 "이번 주 자주 나온 노하우"를 한 장짜리 매뉴얼(SKILL.md)로 정리해 전 직원 책상에 깔아 둔다. mem0류가 "개인 다이어리"라면, Hivemind는 "조직의 집단 기억"이다.
여러 에이전트 ↔ 공유 메모리 코어 ↔ Deep Lake 저장소 + 핵심 설계 패턴.
위에는 서로 다른 코딩 에이전트들이 있고, 각자 자기 방식의 라이프사이클 훅으로 같은 코어에 붙는다. 코어는 두 방향으로 일한다 — 세션 중엔 회상(recall)으로 컨텍스트를 주입하고, 세션 후엔 캡처(capture)로 트레이스를 적재한다. 모든 것은 결국 Deep Lake의 7개 테이블(=공유 substrate)로 수렴한다.
src/deeplake-schema.ts가 단일 진실원이다. 흥미로운 건 대부분 테이블이 불변(immutable) + 버전 증가 패턴이라는 점 — 수정은 UPDATE가 아니라 version+1로 새 행을 INSERT하고, 읽을 땐 ORDER BY version DESC LIMIT 1로 최신만 고른다.
| 테이블 | 담는 것 |
|---|---|
| sessions | 턴 단위 원시 트레이스(message JSONB + message_embedding). 캡처의 종착지. |
| memory | 세션 끝 워커가 쓴 위키 요약(summary + 768d 임베딩). 검색의 1차 표적. |
| skills | codify된 스킬 1버전=1행(name·trigger_text·body·scope·contributors). 팀 전파의 원천. |
| rules | 조직 공통 원칙("prod 자격증명에 DROP TABLE 금지"). SessionStart에 주입. |
| goals / kpis | VFS 경로(memory/goal/<owner>/<status>/…)에 인코딩된 목표·지표. 경로가 구조의 진실원. |
| codebase | (repo,user,worktree,commit)별 코드 그래프 스냅샷(node-link JSON + sha256). drift 감지. |
Hivemind는 에이전트가 ~/.deeplake/memory/ 경로에 평범한 파일 I/O를 하는 것처럼 보이게 한다. 그러나 그 경로의 읽기/쓰기는 SQL 백엔드로 가로채진다(intercept). 에이전트는 cat·ls·heredoc 같은 친숙한 셸 동작으로 메모리를 다루고, Hivemind가 이를 Deep Lake 행으로 번역한다. just-bash의 ~70개 allowlist 빌트인만 허용되고 나머진 거부된다.
이건 리눅스의 /proc와 같다. /proc/cpuinfo는 진짜 파일이 아니라 커널이 즉석에서 만들어 주는 "파일처럼 보이는 인터페이스"다. Hivemind의 ~/.deeplake/memory/도 디스크 위 폴더가 아니라 SQL이 입는 파일 가면이다 — 에이전트는 파일을 다룬다고 믿지만, 실제론 데이터베이스에 쓴다.
분산된 여러 머신의 에이전트가 서로 다른 플러그인 버전으로 같은 테이블에 쓴다. 컬럼이 늘어나면? healMissingColumns()가 먼저 information_schema.columns를 SELECT해 실제로 빠진 컬럼만 ALTER TABLE ADD COLUMN 한다(blanket·IF NOT EXISTS 금지). 동시 쓰기 레이스로 "already exists"가 나면 재-SELECT로 검증 후 무해 처리한다.
// deeplake-schema.ts — 빠진 컬럼만 진단 후 추가, 레이스는 재검증 const missingCols = columns.filter(c => !existing.has(c.name.toLowerCase())); for (const col of missingCols) { try { await query(`ALTER TABLE "${safeTable}" ADD COLUMN ${col.name} ${col.sql}`); } catch (e) { if (!/already exists/i.test(msg)) throw e; // 진짜 에러는 다시 던짐 // 동시 쓰기 레이스 → 재-SELECT로 존재 확인되면 성공으로 간주 } }
UPDATE하지 않고, 바뀔 때마다 version = N+1인 새 행을 INSERT하는 패턴. 읽을 땐 가장 높은 버전만 고른다. Deep Lake의 UPDATE-coalescing 특성을 우회하고, 완전한 감사 로그(audit trail)를 공짜로 얻는다. rm(삭제)조차 status='closed'인 새 버전을 쓰는 "soft-close"라 이력이 보존된다.이 레포의 간판 아이디어. 단순 회상을 넘어 자기 강화 루프를 만든다.
게다가 트레이스가 Deep Lake 텐서 포맷이라, 그대로 PyTorch 데이터셋으로 export해 조직 고유 trajectory로 오픈소스 모델을 파인튜닝하는 길까지 열린다(로드맵). 루프가 한 바퀴 돌 때마다 회상은 더 정확해지고, 데이터 자산은 더 두꺼워진다.
공유 코어(src/) + 에이전트별 번들 디렉토리로 나뉜 모노레포.
① README.md로 4단 루프 큰 그림 → ② docs/ARCHITECTURE.md로 에이전트별 훅 매핑 → ③ src/deeplake-schema.ts로 "데이터가 실제로 어떻게 생겼나" → ④ src/shell/(VFS)·src/skillify/로 핵심 마법 두 가지. 코어를 먼저 읽고, 에이전트 어댑터는 한두 개만 비교하면 전체 그림이 잡힌다.
이 레포에서 무엇을 배우고, 무엇을 실습할까.
제각각 훅 모델이 다른 6종 에이전트(플러그인·hooks.json·네이티브 확장·MCP·AGENTS.md)를 하나의 공유 코어에 연결한다. "이질적 라이프사이클을 공통 인터페이스로 정규화"하는 어댑터 설계의 교과서다.
경로 I/O를 가로채 DB로 번역하는 패턴. just-bash로 allowlist 샌드박스 셸을 만들고, 경로 매칭(path-match.ts)으로 트리거 경로만 가로챈다. 에이전트에게 "친숙한 도구로 새 백엔드를 쓰게" 하는 인터페이스 설계 사례.
cat/ls/쓰기를 가로채 SQLite로 보내는 30~50줄짜리 미니 VFS를 만들어 보라. 허용 명령 allowlist를 두고 그 외엔 거부할 것.UPDATE 대신 version+1 INSERT, 읽기는 최신 버전 선택. 감사 로그·동시성·soft-delete를 한꺼번에 해결한다. 이벤트 소싱(event sourcing)의 경량 버전으로 이해하면 좋다.
분산 쓰기 환경에서 컬럼 drift를 information_schema diff로 잡아 빠진 것만 ALTER하고, 레이스는 재검증한다. 임베딩이 없으면 BM25로 조용히 폴백한다. "실패해도 죽지 않는" 운영 견고성의 정석.
최근 트레이스를 LLM(Haiku)에게 던져 "재사용할 가치가 있는 절차인가"를 판정받고 SKILL.md로 굳히는 파이프라인. "에이전트 활동에서 자동으로 자산을 추출"하는, 에이전트 시대의 핵심 기법.
설치는 한 줄, 그러나 전제와 선택지가 있다.
| 목적 | 필요한 것 |
|---|---|
| 설치·실행 | Node ≥22 · npm. npm i -g @deeplake/hivemind && hivemind install |
| 공유 메모리 활성화 | Deep Lake 계정 + 토큰(브라우저 device-flow 또는 HIVEMIND_TOKEN). 토큰 없으면 훅만 깔리고 회상은 스킵. |
| 지원 에이전트 | Claude Code · Codex · Cursor(1.7+) · OpenClaw · Hermes · pi 중 1개 이상. |
| 시맨틱 검색(선택) | hivemind embeddings install — nomic-embed 데몬 ~600MB. 안 깔면 BM25 폴백. |
| 코드 그래프(선택) | tree-sitter 네이티브 빌드(ensure-tree-sitter.mjs가 postinstall에서 시도). |
| 데이터 주권(선택) | BYOC: 내 GCS/Azure/S3/온프렘 버킷. |
Hivemind는 사용자 프롬프트·툴 호출·툴 응답·에이전트 응답·서브에이전트 활동을 전부 캡처해 Deep Lake에 쌓는다. "공유 능력은 공유 substrate를 전제한다"는 설계 철학상, 같은 워크스페이스의 모든 사용자가 이 데이터를 읽을 수 있다. 매 세션 시작 시 DATA NOTICE가 표시되며, 끄려면 HIVEMIND_CAPTURE=false. 워크스페이스 격리로 조직 간 누출은 막지만, 조직 내부 공유는 의도된 동작이니 민감 정보 취급에 주의.
난이도별 5단계 — 설치 체험부터 코어 패턴 재구현까지.
지원 에이전트 하나에 hivemind install 후, 한 세션에서 어떤 결정을 내리고 다음 세션에서 "What did we decide about X?"로 물어 회상이 되는지 확인한다. hivemind status로 무엇이 wired-up 됐는지, DATA NOTICE 문구도 함께 읽어 둔다.
src/deeplake-schema.ts의 7개 컬럼 정의를 읽고, 각 테이블의 키·임베딩 컬럼·버전 컬럼을 표로 정리한다. "왜 UPDATE가 아니라 version+1 INSERT인가"를 주석에서 찾아 한 문단으로 요약.
SQLite로 rules(rule_id, text, version, status) 테이블을 만들고, add/edit/list/done을 불변+버전 증가 패턴으로 구현한다. edit은 version+1 INSERT, list는 rule_id별 최신만(ORDER BY version DESC), done은 status='closed' 새 행. 전체 이력이 보존되는지 검증.
특정 경로 prefix에 대한 파일 읽기/쓰기를 가로채 DB로 보내는 미니 VFS를 짠다. path-match로 트리거 경로만 잡고, allowlist에 없는 명령은 거부. 에이전트가 "파일을 다룬다"고 믿게 하면서 실제론 행을 INSERT/SELECT하게 만들어 본다.
가짜 세션 트레이스(프롬프트+툴호출+응답 JSON) 여러 개를 만들고, 이를 LLM에 던져 반복 패턴을 trigger/body 형식 스킬로 뽑게 한다. "남길 가치 없음"이면 폐기, 있으면 SKILL.md로 저장. N턴마다 한 번씩 도는 스케줄러까지 붙이면 skillify의 축소판이 된다.
6주 코스 — 에이전트 메모리에서 분산 데이터 모델까지.
| 주차 | 주제 | 실습 · 참고 |
|---|---|---|
| 1주차 | 에이전트 메모리 개념 + LoCoMo 벤치마크 읽기 | README Benchmarks · LoCoMo 논문(arXiv 2402.17753) |
| 2주차 | 벡터/텐서 DB와 하이브리드 검색(BM25+임베딩) | Deep Lake 문서 · nomic-embed-text-v1.5 |
| 3주차 | 멀티-에이전트 라이프사이클 훅 & 어댑터 패턴 | docs/ARCHITECTURE.md · src/hooks/* |
| 4주차 | 가상 파일시스템 + allowlist 샌드박스 셸 | src/shell · path-match.ts · just-bash |
| 5주차 | 불변+버전 데이터 모델 · 스키마 자가치유 | src/deeplake-schema.ts (healMissingColumns) |
| 6주차 | 패턴 마이닝→스킬 codify · MCP 서버 · 코드 그래프 | docs/SKILLIFY.md · src/mcp · src/graph(tree-sitter) |
본문·README·코드에 나온 용어 빠른 참조.
| 용어 | 의미 |
|---|---|
| Trace (트레이스) | 한 턴의 구조화 기록: 프롬프트+툴호출+툴응답+에이전트응답. sessions 테이블 행. |
| Deep Lake | Activeloop의 텐서/벡터 DB. Hivemind의 저장·검색 백엔드 substrate. |
| Substrate (공유 기반) | 모든 에이전트가 같이 보는 공유 저장소(Deep Lake의 7개 테이블). |
| Capture (캡처) | 세션 활동을 트레이스로 자동 적재. 기본 on, HIVEMIND_CAPTURE=false로 off. |
| Recall (회상) | SessionStart/프롬프트 시 관련 트레이스·스킬·룰을 컨텍스트에 주입. |
| Skillify / Codify | 반복 패턴을 마이닝해 재사용 SKILL.md로 굳히는 백그라운드 워커. |
| Propagate (전파) | codify된 스킬을 팀 모든 에이전트에 흘려보냄. pull로 동료 스킬 설치. |
| VFS | 가상 파일시스템. ~/.deeplake/memory/ 경로 I/O를 SQL로 가로챔. |
| Hybrid search | BM25(lexical)+임베딩(semantic) 결합 검색. 임베딩 off면 BM25 폴백. |
| Wiki summary | 세션 끝 워커가 호스트 CLI를 shell-out해 쓰는 AI 위키 요약(memory 테이블). |
| Rules / Goals / KPIs | org 공통 원칙 · 목표 · 지표. VFS 경로/테이블에 버전형으로 저장. |
| Codebase graph | tree-sitter로 뽑은 파일·심볼·임포트·엣지 그래프. 검색이 텍스트가 아닌 그래프를 탐색. |
| BYOC | Bring Your Own Cloud — 내 GCS/Azure/S3/온프렘 버킷에 데이터 보관. |
| Version-bump | UPDATE 대신 version+1 새 행 INSERT, 읽기는 최신만. 감사로그+soft-delete. |