트렌딩 딥다이브 · 2026-07-19 · OSSInsight #41

vectorize-io/self-driving-agents 딥다이브
— 179명의 "기억하는 직원"을 한 줄 명령으로 고용하기

self-driving-agents디자인·엔지니어링·마케팅·세일즈 등 13개 부서에 걸친 179개의 전문가 페르소나(AI 에이전트)를, npm 명령 한 줄로 원하는 AI 실행 환경에 설치해 주는 CLI다. 단순 프롬프트 모음과 다른 점은 설치된 에이전트가 전부 "Hindsight"라는 기억 서버에 연결되어, 세션이 끝나도 배운 것을 기억하고 스스로 지식을 다시 써 내려간다는 것 — 그래서 이름이 "self-driving(자율주행)"이다. CLI 자체는 AI 추론을 전혀 하지 않는다. 이건 "기억을 붙여주는 설치기"이지, 에이전트 그 자체가 아니다. 진짜 볼거리는 두 가지 — (1) 한 CLI가 5개의 서로 다른 실행 환경(Claude Chat/Cowork·Claude Code·OpenClaw·NemoClaw·Hermes)을 어떻게 하나로 다루는가, (2) "생 기억(memory)"과 "정리된 지식(knowledge page)"을 어떻게 분리하는가.

(저장소: vectorize-io/self-driving-agents · TypeScript · MIT(README 기준) · npm CLI @vectorize-io/self-driving-agents v0.0.26 · 페르소나 179개 · GitHub ⭐ 약 1.7k)
목차
  1. 프로젝트 한 줄 요약
  2. 왜 주목받는가 — "기억하는 프롬프트 모음"
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 — 기억 vs 지식, 그리고 5개 하네스
  5. 디렉토리 구조 해부
  6. 학습 포인트 — 여기서 훔쳐올 설계
  7. 시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한 줄 요약

한 문장으로 압축하면

"미리 잘 써둔 179명의 전문가 프롬프트를, 세션이 끝나도 기억을 잃지 않는 '진짜 직원'으로 만들어 원하는 AI 툴에 꽂아주는 설치기"다.

용어
에이전트(agent) · 하네스(harness)
여기서 에이전트는 특정 직무를 맡은 페르소나 프롬프트(마크다운 파일 하나 + 기억 설정 JSON)를 말한다. 하네스는 그 에이전트를 실제로 굴리는 실행 환경(Claude Code, OpenClaw 등)이다. 같은 에이전트라도 어떤 하네스에 설치하느냐에 따라 기억을 붙이는 방식이 완전히 달라진다.
비유로 먼저

파견 직원 + 인수인계 노트

당신이 "SEO 담당자 한 명 보내줘"라고 파견 회사(=이 CLI)에 전화한다. 회사는 이미 훈련된 SEO 전문가(=페르소나 마크다운)를 당신 사무실(=하네스)로 보낸다.

보통의 파견 직원은 계약이 끝나면 배운 걸 다 잊는다. 그런데 이 직원은 매번 퇴근하며 "오늘 배운 것"을 회사 서버(=Hindsight)의 자기 노트에 적어두고, 다음 출근 때 그 노트를 먼저 읽고 시작한다. 노트는 시간이 지나며 자동으로 다시 정리·요약된다.

self-driving-agents가 하는 일이 정확히 이것이다. "직원을 보내는" 부분(CLI)과 "기억을 저장하는" 부분(Hindsight 서버)이 분리돼 있다는 게 핵심이다.

구체적으로 CLI가 하는 일은 세 가지다. ① 179개 페르소나 중 원하는 것을 골라(부서/직무 경로로 지정), ② 지정한 하네스에 맞는 형식(스킬 zip · 플러그인 · MCP · Python 툴)으로 변환·설치하고, ③ 그 에이전트를 Hindsight 메모리 뱅크에 연결한다. CLI 자체는 LLM을 호출하지 않는다 — 어디까지나 준비·배선(wiring) 작업만 한다.

# 마케팅 부서의 SEO 에이전트를 Claude(Chat/Cowork) 하네스에 설치
npx @vectorize-io/self-driving-agents install marketing/seo --harness claude

# 내가 만든 로컬 에이전트를 Claude Code에, 기억 뱅크는 비운 채로 설치
npx @vectorize-io/self-driving-agents install ./my-agent --harness claude-code --empty

2왜 주목받는가 — "기억하는 프롬프트 모음"

흔한 awesome-prompts 저장소와 무엇이 다른가

GitHub에는 "복사해서 쓰는 프롬프트 100선" 류 저장소가 넘친다. 이들의 치명적 한계는 기억이 없다는 것이다. 어제 이 에이전트에게 "우리 코드베이스는 pnpm을 쓴다"고 알려줘도, 오늘 새 세션에서는 다시 npm을 제안한다. 매번 처음부터 설명해야 한다.

이 저장소의 차별점은 모든 에이전트를 Hindsight 기억 서버에 자동 연결한다는 점이다. 대화 내용에서 "안정적인 사실"만 걸러 저장하고, 그것을 바탕으로 지식 페이지를 스스로 갱신한다. 여기에 더해 한 번의 install 명령이 성격이 전혀 다른 5개 실행 환경을 모두 지원한다.

비교

보통 프롬프트 저장소 = 요리 레시피 카드 묶음. 매번 처음부터 읽어야 하고, 내 주방 사정은 카드가 모른다.

self-driving-agents = 레시피 카드 + 내 냉장고 사정과 지난번 실패를 적어두는 요리 일지. 다음에 만들 땐 일지를 먼저 펴본다.

항목보통 프롬프트 저장소self-driving-agents
세션 간 기억없음 (매번 초기화)Hindsight 뱅크에 축적·자가 갱신
설치 방식수동 복붙npx install 한 줄
지원 환경보통 1개(대개 그냥 붙여넣기)5개 하네스 자동 분기
규모수십 개13개 부서 · 179 페르소나
핵심 의존없음Hindsight 서버(별도 제품)
냉정하게
"기억"이 이 저장소 가치의 전부 — 그리고 그 기억은 남의 서버에 있다

Hindsight 엔드포인트가 없으면 이 179개 에이전트는 그냥 정적 프롬프트 파일 더미에 불과하다. 즉 이 프로젝트의 진짜 엔진은 같은 회사(vectorize-io)의 별도 제품 Hindsight이고, self-driving-agents는 그것을 손쉽게 붙여주는 프런트다. 자율주행이라는 이름값은 Hindsight에 달려 있다.

3기술 스택 전체 지도

무엇으로 만들어졌나 — 소스에서 확인한 실제 의존성

핵심을 먼저 짚으면, 이 저장소는 "작은 TypeScript CLI + 수백 개의 마크다운/JSON 데이터 파일 + 별도 문서 사이트" 구조다. 무거운 로직은 거의 없고, 대부분이 사람이 읽는 프롬프트와 설정이다.

① CLI 본체 (TypeScript)

구성내용
언어/타깃TypeScript (ES2022, strict), tsc로 빌드 → dist/cli.js
진입점src/cli.ts — 약 1,428줄. 설치 로직 전부가 여기 있다
대화형 프롬프트@clack/prompts (터미널 질문 UI), picocolors (색상)
기억 클라이언트@vectorize-io/hindsight-client ^0.5.6
테스트vitestsrc/tests/cli.test.ts, lint.test.ts
배포npm 패키지 @vectorize-io/self-driving-agents, 버전 0.0.26

② 기억 백엔드 (Hindsight — 별도 저장소)

CLI가 연결하는 대상. github.com/vectorize-io/hindsight에 있는 별도 서버 제품이며, 두 가지 데이터 원소를 다룬다 — Memories(추가만 되는 원자적 사실)와 Knowledge pages(배경에서 다시 쓰여지는 마크다운 문서). 클라우드(api.hindsight.vectorize.io) 또는 셀프호스팅으로 띄운다.

③ 하네스별 통합 코드

④ 문서/마케팅 사이트

⑤ 검증 도구

용어
bank-template.json
각 부서/직무 폴더에 놓이는 기억 설정 파일. "무엇을 기억으로 저장할지(retain_mission)", "무엇을 안정적 사실로 볼지(observations_mission)", "어떤 지식 페이지를 유지할지(mental_models)"를 선언한다. 상위 부서 → 하위 직무 순으로 겹쳐서(nesting) 적용된다.

4아키텍처 심화 — 기억 vs 지식, 그리고 5개 하네스

전체 흐름과 핵심 설계 결정

큰 그림

사용자 ↔ 에이전트 (하네스 안에서 실행: Claude Chat/Code, OpenClaw, NemoClaw, Hermes) │ 세션 시작 시 지식 읽기 │ 대화 뒤 기억 저장(자동 or 자가-저장) ▼ ▼ ┌──────────────────────────────────────────────┐ │ Hindsight (서버측 기억 저장소) │ │ │ │ Memories ──consolidate──▶ Refresh Engine │ │ (원자적·타입 있는 │ │ │ 추가 전용 사실 이력) regenerate │ │ ▼ │ │ Knowledge Pages │ │ (긴 마크다운 문서, │ │ 세션 시작 때 읽음, │ │ source_query로 재생성) │ └──────────────────────────────────────────────┘
용어
Memories vs Knowledge pages
Memories = 대화에서 뽑아낸 낱개의 사실. 지우지 않고 계속 쌓기만 한다(append-only). Knowledge pages = 그 사실들을 모아 사람이 읽기 좋게 정리한 긴 문서. 주기적으로 "통합(consolidation)" 사이클마다 통째로 다시 생성된다.

핵심 설계 1 — source_query로 페이지를 "다시 답하기"

각 지식 페이지에는 source_query가 붙어 있다. 이건 "이 페이지가 답해야 하는 질문"이다. 새 기억이 쌓여 통합 사이클이 돌면, 시스템은 그 질문을 다시 답해서 페이지를 새로 써 내려간다. 즉 페이지는 "손으로 고치는 문서"가 아니라 "질문의 최신 답변"으로 취급된다. src/skill/SKILL.md의 설명을 그대로 보면:

---
name: agent-knowledge
description: Your long-term knowledge pages. Read them at session start...
---
**How it works:** Your conversations are automatically retained into a
Hindsight memory bank. The system extracts observations and uses them to
keep your pages current. Each page has a "source query" — a question the
system re-answers after every consolidation cycle to rebuild the page.

핵심 설계 2 — "무엇을 기억하지 말지"를 선언하기

좋은 기억 시스템의 절반은 버릴 것을 정하는 규칙이다. engineering/bank-template.json은 "안정적 사실만 남기고 일회성 디버깅은 무시하라"고 못박는다:

"observations_mission": "Observations are stable facts about the codebase,
stack, conventions, ownership, deployment topology, performance baselines,
and recurring failure modes. Ignore one-off debugging sessions and
ephemeral build issues."

핵심 설계 3 — 하나의 CLI, 다섯 개의 서로 다른 배선

src/cli.ts는 하네스마다 완전히 다른 방식으로 기억을 붙인다. 이게 이 저장소에서 가장 배울 만한 엔지니어링이다.

하네스기억 붙이는 방식뱅크 범위(granularity)
Claude Chat/CoworkSKILL.md(zip) 안에 raw curl로 Hindsight REST 직접 호출. 자동 훅 없음 → LLM이 스스로 "self-retain"agent
Claude Codehindsight-memory 플러그인 + SessionStart/UserPromptSubmit/Stop/SessionEnd 훅으로 턴 전 회상·턴 후 저장 자동화agent::project (cwd 기반)
OpenClaw / NemoClawhindsight-openclaw 플러그인 설치·설정["agent"]
Hermes활성 프로필의 hindsight/config.json 공유 읽기 + Python 툴 플러그인agent
눈여겨볼 점
훅이 없는 환경을 위한 "자가 저장(self-retain)" 폴백

Claude Chat/Cowork처럼 세션 수명주기 훅이 없는 하네스에서는, 스킬 문서가 LLM에게 직접 "중요한 대화 뒤에는 retain API를 호출하라"고 지시한다. 시스템이 못 하면 모델에게 시키는 실용적 우회 — 훅 없는 환경에 기능을 이식할 때 참고할 만한 패턴이다.

설치 시 에이전트를 어디서 가져오나

에이전트 소스는 세 가지다 — ① 내장 뱅크(저장소 자체), ② 로컬 디렉터리, ③ org/repo/path 형식의 GitHub 경로. GitHub의 경우 git clone이 아니라 archive/refs/heads/main.tar.gzcurl | tar xz로 받아 푼다(설치 시점에 git 불필요).

5디렉토리 구조 해부

폴더 한 층씩 뜯어보기
self-driving-agents/ ├── README.md, package.json, tsconfig.json ← CLI 패키지 루트 ├── src/ │ ├── cli.ts ← 1,428줄 설치기(하네스 분기·Hindsight 배선) │ ├── skill/SKILL.md ← Claude Code에 심는 "agent-knowledge" 스킬 │ ├── scripts/ │ │ ├── lint-bank-templates.mjs ← 모든 bank-template.json 검증 │ │ └── release.sh │ └── tests/cli.test.ts, lint.test.ts ├── hermes-plugin/ ← __init__.py + plugin.yaml (Hermes 기억 툴) │ ├── design/ engineering/ finance/ game-development/ ┐ │ marketing/ paid-media/ product/ project-management/ │ 13개 "부서" │ sales/ spatial-computing/ specialized/ support/ testing/ ┘ │ └── <직무>/ │ ├── bank-template.json ← 기억 설정(부서·직무 두 층으로 겹침) │ └── *.md ← 에이전트 페르소나 1개 = 파일 1개 (총 179개) │ └── website/ ← 별도 Next.js 문서/마케팅 사이트 └── src/app/concept/, harnesses/, agents/ ← 개념·하네스·에이전트 설명

포인트는 "코드는 src/에만 조금 있고, 저장소 대부분은 부서 폴더 안의 마크다운·JSON 데이터"라는 것이다. 즉 이건 소프트웨어라기보다 잘 구조화된 프롬프트 데이터셋 + 얇은 설치 도구에 가깝다.

주요 파일과 실제 역할

파일역할
README.md179 로스터 표 · 설치 원라이너 · 하네스 매트릭스
src/cli.ts설치기 전부 — 에이전트 해석, 하네스별 설정, 뱅크/플러그인 배선
src/skill/SKILL.md모든 Claude Code 설치에 심기는 범용 "agent-knowledge" 스킬
hermes-plugin/__init__.pyPython 툴 등록(list_pages/get_page/create_page/recall/ingest_files)
*/bank-template.json부서별 기억 스키마(retain/observations/mental_models)
specialized/exec-ops/agents-orchestrator.md하위 에이전트를 QA 게이트로 굴리는 "메타 에이전트"
engineering/workflow/code-reviewer.md대표적인 단일 페르소나 파일(프런트매터 + 미션 + 체크리스트)
website/src/lib/harnesses.ts하네스별 정확한 기술 명세(훅 이름·설정 경로)

페르소나 파일은 어떻게 생겼나

에이전트 하나는 프런트매터(이모지·색·성격) + 미션 + 체크리스트로 된 마크다운이다. 예를 들어 code-reviewer.md의 리뷰 원칙 부분:

1. **Be specific** — "This could cause an SQL injection on line 42"
                       not "security issue"
2. **Explain why** — Don't just say what to change, explain the reasoning
3. **Suggest, don't demand** — "Consider using X because Y" not "Change this to X"
4. **Prioritize** — Mark issues as 🔴 blocker, 🟡 suggestion, 💭 nit

그리고 specialized/exec-ops/agents-orchestrator.md는 여러 하위 에이전트를 하나의 개발 파이프라인으로 지휘하는 "메타 에이전트"인데, 품질 게이트를 통과해야만 다음 단계로 넘어가는 루프를 명시한다:

### Implement Continuous Quality Loops
- **Task-by-task validation**: Each task must pass QA before proceeding
- **Automatic retry logic**: Failed tasks loop back to dev with feedback
- **Quality gates**: No phase advancement without meeting standards
- **Failure handling**: Maximum retry limits with escalation procedures

6학습 포인트 — 여기서 훔쳐올 설계

이 저장소에서 실제로 배울 것
패턴 1

"생 기억"과 "정리된 지식"을 분리하라

추가만 되는 원자적 사실(Memories)과, 주기적으로 통째 재생성되는 긴 문서(Knowledge pages)를 나눈 것 — 그리고 각 문서를 다시 답할 수 있는 질문(source_query)으로 정의한 것. 이건 이 저장소를 넘어 RAG 시스템, 개인 지식 베이스, 노트 앱 설계에 그대로 재사용할 수 있는 발상이다.

패턴 2

기억 시스템엔 "무시 규칙"이 절반이다

observations_mission이 "일회성 디버깅·임시 빌드 문제는 무시하라"고 못박듯, 무엇을 저장할지만큼 무엇을 버릴지를 선언적으로 정한다. 기억이 쓰레기로 오염되는 걸 막는 가장 값싼 장치.

패턴 3

페르소나 = 자유 마크다운 + 작은 타입드 설정

에이전트를 "프롬프트 파일(자유 형식) + 기억이 무엇을 뽑을지 알려주는 작은 JSON"으로 나눴다. 게다가 그 JSON은 부서→직무로 겹쳐지는(nesting) 구조라, 공통 설정은 위에서 한 번만 쓴다. 설정을 계층으로 상속시키는 깔끔한 예.

패턴 4

멀티 타깃 통합 = 분기 + 멱등한 설정 병합

한 CLI가 5개 하네스를 지원하려고 각기 다른 방식(플러그인 vs MCP vs 스킬 vs Python 툴)으로 분기한다. 특히 기존 JSON 설정을 덮어쓰지 않고 읽어서 병합하는 멱등(idempotent) 패턴은 로컬 설정을 건드리는 모든 CLI가 배워야 할 습관이다.

패턴 5

린트를 "계약"으로 쓰기

lint-bank-templates.mjs가 40여 개 설정 파일의 스키마·폐기 필드를 CI처럼 강제한다. 데이터가 코드보다 많은 저장소에서 데이터의 일관성을 기계로 지키는 좋은 예.

7시스템 요구사항

돌리려면 무엇이 필요한가
항목요구
기본Node.js (npx 실행 가능)
기억(필수)도달 가능한 Hindsight 인스턴스 — 클라우드(api.hindsight.vectorize.io) 또는 셀프호스팅. 공개 URL 필요(문서 왈 "Claude는 localhost에 접근 못 함")
Claude Code 하네스Claude Code CLI(npm i -g @anthropic-ai/claude-code)
기타 하네스각각 OpenClaw / NemoClaw / Hermes 설치본
주의
알아둘 함정 세 가지

① Claude Chat/Cowork 경로는 자동 기억 캡처가 없다 — 모델이 스스로 저장하기를 "기억"해야 한다. ② Claude Code의 기억 뱅크는 cwd(현재 폴더)에 묶인다 — 폴더를 옮기면 조용히 다른 뱅크가 생긴다(CLI가 경고는 해준다). ③ shallow clone에는 LICENSE 파일이 없다 — README 배지와 package.json은 MIT라고 표기.

8직접 해볼 수 있는 실습 과제

난이도별 5개 — 손으로 익히기
난이도 ★☆☆

1. 페르소나 파일 한 개 해부하기 읽기만

engineering/workflow/code-reviewer.md를 열어 프런트매터·미션·체크리스트가 어떻게 나뉘는지 표로 정리한다. 그리고 "이 파일에서 LLM에게 실제로 지시하는 문장"과 "메타데이터"를 색으로 구분해 본다.

난이도 ★☆☆

2. bank-template.json 스키마 복제 설정 이해

engineering/bank-template.jsonretain_mission·observations_mission·mental_models를 그대로 베껴, "나의 사이드 프로젝트 코드베이스"용 기억 스키마를 하나 만든다. 무엇을 저장하고 무엇을 무시할지 3줄로 정의해 본다.

난이도 ★★☆

3. 나만의 에이전트 만들어 설치 CLI 실습

빈 폴더에 my-agent.md(간단한 페르소나) + bank-template.json을 만들고 npx @vectorize-io/self-driving-agents install ./my-agent --harness claude-code --empty로 설치. CLI가 ~/.hindsight/에 무엇을 써넣는지 관찰한다.

난이도 ★★☆

4. "source_query" 사고 실험 설계 감각

지식 페이지 하나를 골라, 그 source_query가 무엇이면 좋을지 직접 써본다. "이 문서는 어떤 질문의 최신 답변인가?"를 5개 페이지에 대해 채우면, 기억이 문서로 응결되는 감각이 잡힌다.

난이도 ★★★

5. 하네스 분기 로직 읽고 다이어그램화 소스 독해

src/cli.ts에서 하네스별 분기(claude / claude-code / openclaw / hermes)를 찾아, 각 경우가 어떤 파일을 어디에 쓰는지 흐름도로 그린다. 특히 기존 JSON 설정을 병합하는 부분을 찾아 "덮어쓰기가 아니라 병합"인 이유를 설명해 본다.

9관련 기술 심화 학습 로드맵

이 저장소를 발판 삼아 넓히기 — 주차별
주차주제할 것
1주차에이전트 스킬의 기본Claude Code / Cowork의 "스킬(SKILL.md)" 구조를 익히고, 이 저장소의 src/skill/SKILL.md를 그 렌즈로 읽기
2주차에이전트 메모리 개념단기(컨텍스트) vs 장기(외부 저장) 기억의 차이, "회상(recall)→행동→저장(retain)" 루프. Hindsight의 Memories/Pages 모델을 정리
3주차RAG와 지식 재생성임베딩·검색 기반 RAG와 이 저장소의 "source_query로 페이지 재생성" 방식 비교. 언제 무엇이 유리한가
4주차MCP / 플러그인 훅Claude Code의 SessionStart·Stop 등 수명주기 훅과 MCP 툴 등록(Hermes의 Python 플러그인)을 직접 만들어 보기
5주차CLI 설계 · 멱등 설정@clack/prompts로 대화형 CLI 만들기 + 로컬 JSON 설정을 안전하게 병합(멱등)하는 패턴 구현
6주차멀티 에이전트 오케스트레이션agents-orchestrator.md의 "QA 게이트 + 재시도 루프"를 실제 하위 에이전트 호출로 구현해 보기

10핵심 키워드 사전

이 문서에 나온 용어 총정리
용어
Hindsight
vectorize-io의 기억 서버 제품. 에이전트 대화에서 사실을 뽑아 뱅크에 쌓고, 지식 페이지를 자동 갱신한다. self-driving-agents의 "자율주행"을 실제로 굴리는 엔진.
용어
뱅크(bank)
한 에이전트(또는 에이전트×프로젝트)의 기억이 담기는 논리적 저장 단위. 하네스마다 범위가 다르다(agent, agent::project 등).
용어
retain / recall
retain = 대화 뒤 사실을 뱅크에 저장. recall = 새 턴 시작 시 관련 기억을 불러와 컨텍스트에 넣기. 훅이 있으면 자동, 없으면 모델이 스스로 호출(self-retain).
용어
source_query
지식 페이지가 "답해야 하는 질문". 통합 사이클마다 이 질문을 다시 답해 페이지를 재생성한다. 문서를 "고치는 대상"이 아니라 "질문의 최신 답변"으로 다룬다.
용어
consolidation(통합)
쌓인 낱개 기억(Memories)을 모아 지식 페이지로 응결시키는 배경 처리 사이클. Refresh Engine이 수행한다.
용어
멱등(idempotent)
같은 명령을 여러 번 실행해도 결과가 같은 성질. 이 CLI가 로컬 설정을 덮어쓰지 않고 병합하는 이유 — 재설치해도 기존 설정이 깨지지 않는다.
용어
하네스(harness)
에이전트를 실행하는 런타임 환경. 여기선 Claude Chat/Cowork, Claude Code, OpenClaw, NemoClaw, Hermes 5종.

11참고 링크

더 파고들 곳

원본

기반 개념