본문으로 건너뛰기
5분 AI.
TrendShift · Personal AI Super-Intelligence

OpenHuman — 개인 AI
슈퍼인텔리전스의 해부

앱·라이브러리

빠른 판단

무엇
Rust 에이전트 코어를 라이브러리와 데스크톱·CLI·TUI로 제공하며 도구·메모리·외부 서비스 연결을 관리하는 하네스
이럴 때
여러 에이전트가 runtime을 공유하게 하거나, Rust 앱에 에이전트 기능을 내장하고 데스크톱 환경에서 도구와 메모리를 함께 쓸 때
도입 전 확인
개발은 Rust 1.99.1·Node 24 이상. Docker RPC는 토큰·backend 설정과 영속 볼륨 확인 필요

Rust 에이전트 하네스와 타입 있는 임베딩 API. 데스크톱 앱과 CLI·TUI 호스트가 같은 코어를 서로 다른 방식으로 사용한다.

tinyhumansai/openhuman · Rust + TypeScript · GPL-3.0-only 2026-10-31 소스 대조 · 최초 분석 2026-05-20
00 — 들어가며Context

먼저, "에이전트 하네스"란 뭔가?

왜 LLM 단독으로는 부족하고, 왜 메모리 트리가 필요한가.

2024~2026년 사이 ChatGPT·Claude·Gemini는 점점 똑똑해졌지만, "내 일상을 진짜로 이해하고 대신 일해주는" 에이전트는 여전히 부족했다. 이메일·노션·슬랙·캘린더가 다 흩어져 있고, 모델은 매 대화마다 컨텍스트를 처음부터 다시 배워야 했기 때문이다.

해법은 LLM을 둘러싸는 "외골격(harness)"이다. 도구 호출, 외부 데이터 자동 수집, 장기 기억, 모델 라우팅, UI까지 책임지는 운영 레이어. OpenHuman은 이 외골격을 데스크톱 네이티브 앱으로 끝까지 밀어붙인 첫 사례다.

Term · 용어
Agent Harness (에이전트 하네스)
LLM 자체가 아니라 LLM을 둘러싼 "외골격". 도구 호출, 메모리, 모델 선택, UI를 다 책임진다. OpenHuman은 openhuman-core(Rust)가 하네스를 맡고, Tauri 앱이 UI를 맡는다.
Term · 용어
Memory Tree (메모리 트리)
외부 데이터를 ≤3k 토큰 청크로 잘라 계층적으로 요약해 만드는 트리. 상위 노드는 자식 노드들의 요약. LLM이 "최근 이메일 요약" 요청 시 트리 상단만 읽고, 필요하면 자식으로 내려간다. Karpathy의 obsidian-wiki 트윗을 코드화한 결과.
Term · 용어
TokenJuice (토큰주스 — 압축 레이어)
모든 도구 호출 결과를 LLM에 보내기 전 통과하는 압축 단계. HTML→Markdown, 긴 URL 단축, 비-ASCII 제거 등으로 토큰·비용을 최대 80%까지 절감.
Term · 용어
Mascot (마스코트)
데스크톱 위에 떠 있는 캐릭터 형태의 AI 인터페이스. 립싱크해 말하고, Google Meet에 실제 참가자로 입장해 사용자를 대리한다. 단순 챗봇 UX와 격이 다른 몰입감이 목적.
01 — 한 줄 요약TL;DR

이 프로젝트의 핵심 메시지

한 문장으로 줄이면.

Core Message

사람에게는 데스크톱 앱, 개발자에게는 Rust 라이브러리.

현재 README는 앱 사용 경로와 자체 프로그램에 코어를 내장하는 경로를 함께 소개한다. 공통 runtime을 재사용하면서 에이전트별 도구·작업 디렉터리·접근 권한을 나누는 구조가 핵심 학습 대상이다.

아래 초기 소개의 메모리·마스코트 경험과 현재 코어 구조를 구분한다. 재검토한 모듈 경계와 개발 조건은 3·4·5·7절에 반영했다.

02 — 왜 주목받는가Why now

2026년 5월, 트렌딩 8위에 오른 이유

시대적 배경 + 경쟁 우위.

시대적 배경 — 콜드 스타트 문제의 정면 돌파

기존 에이전트(Hermes, OpenClaw 등)는 사용자를 학습하는 데 며칠~몇 주가 걸렸다. 매일 대화하며 선호도를 알아내야 했기 때문. OpenHuman은 OAuth 한 번으로 118+ 서비스를 한꺼번에 흡수해 이 콜드 스타트 시간을 분 단위로 단축한다.

또 하나 — "BYOK(Bring Your Own Key) 지옥" 탈출. 보통 에이전트는 OpenAI·Anthropic·ElevenLabs 키를 각각 발급받아야 했지만, OpenHuman은 구독 하나 + 자동 모델 라우팅(reasoning/fast/vision)으로 끝낸다. Karpathy가 X에 올린 "obsidian-style wiki + memory tree" 워크플로우를 실제 작동하는 데스크톱 앱으로 구현한 첫 사례라는 점이 화제의 핵심.

경쟁 비교 — Claude Cowork · OpenClaw · Hermes vs OpenHuman

비교 항목Claude CoworkOpenClaw / HermesOpenHuman
오픈소스독점MITGPL-3.0
시작 난이도데스크톱+CLI터미널 우선클린 UI, 수 분 내
비용구독+애드온BYO 모델 키구독 1 + TokenJuice 압축
메모리채팅 스코프플러그인/자가학습Memory Tree + Obsidian 미러
통합 수소수BYO118+ OAuth 빌트인
오토페치없음없음20분 주기 자동
모델 라우팅단일수동빌트인 (reasoning/fast/vision)
네이티브 도구코드만코드만코드+검색+스크래핑+음성+Meet
Analogy · "콜드 스타트"란?

새로 산 스마트폰을 떠올려보라. 처음 며칠은 자동완성이 멍청하고, 추천 앱도 엉터리다. AI 에이전트도 똑같았다 — 너를 모르니까. OpenHuman은 그 며칠을 OAuth 한 클릭으로 압축한다. 마치 새 폰에 백업을 통째로 복원하는 것과 같다.

03 — 기술 스택Stack

전체 기술 지도

2026-10-31의 고정 소스는 Rust 라이브러리와 데스크톱·CLI·TUI 호스트를 분리한 모노레포다. 루트 Cargo workspace 버전은 0.64.20, edition은 2021, 라이선스 선언은 GPL-3.0-only다.

계층실제 위치·역할
핵심 라이브러리crates/openhuman-core: 도메인 로직·runtime·도구, 라이브러리 이름 openhuman_core
임베딩openhuman-embed: Runtime·Agent·Core의 타입 있는 인터페이스
호스팅 연결openhuman-tinyhumans: backend transport·로그인·세션 소유권
통신openhuman-rpc: JSON-RPC envelope·client·server·session store
클라이언트openhuman-cli·openhuman-tui; 데스크톱 openhuman-app은 별도 Cargo workspace
화면app/: React 19·Vite·Tauri 2·Zustand와 Redux 계열 의존성

루트 package.json은 pnpm 10.10.0을 고정한다. app/package.json의 Node 조건은 24 이상이다. 예전 루트 src/ 중심 구조와 다른 위치이므로 아래 새 맵을 기준으로 소스를 찾는다.

04 — 아키텍처Design

시스템 구조와 5가지 설계 패턴

핵심과 호스트의 의존 경계

core → embed → tinyhumans → rpc → app / cli / tui
도메인·도구   타입 facade   hosted 연결   통신·세션   사용자 진입점

이 화살표는 낮은 계층에서 높은 계층으로 쌓이는 구조를 뜻한다. 루트 Cargo.toml은 호스트가 rpc를 의존하고 core가 TinyHumans SDK를 직접 의존하지 않도록 경계를 설명한다. 데스크톱 앱은 코어를 프로세스 안에 연결하며, app/package.json의 core:stage는 sidecar가 제거되어 no-op이라고 명시한다. Docker의 7788 서버를 모든 데스크톱 실행의 필수 별도 프로세스로 그리면 현재 구조와 맞지 않는다.

타입 facade와 호스트 port

openhuman-embed/src/lib.rs에서 호스트가 코어를 호출할 때는 구체적 Core와 하위 facade를 쓰고, 코어가 호스트 기능을 호출할 때는 주입된 trait port를 쓴다. 기능이 컴파일에서 빠지면 accessor 자체가 없고, runtime DomainSet에서 꺼졌다면 Unavailable을 반환한다. 설정 실패와 기능 미제공을 구분하는 설계를 배울 수 있다.

한 runtime의 여러 에이전트

Runtime은 공통 초기화를 소유하고 Agent마다 MCP·스킬·작업 디렉터리·접근 수준·공급자를 달리 구성한다. README의 성능 수치는 제작자의 공개 벤치마크 조건에 따른 주장이다. 가격·동시 실행 규모를 임의의 하드웨어에 보장하는 사양으로 사용하지 않는다.

05 — 디렉토리Repo map

레포 구조 해부

openhuman/
├── crates/
│   ├── openhuman-core/       # 순수 핵심 라이브러리
│   ├── openhuman-embed/      # 타입 있는 임베딩 API
│   ├── openhuman-tinyhumans/ # hosted backend 연결
│   ├── openhuman-rpc/        # 프로토콜·서버·세션 저장
│   ├── openhuman-cli/        # openhuman-core 바이너리·개발 bins
│   ├── openhuman-tui/        # 터미널 클라이언트
│   ├── openhuman-modules-linked/
│   └── openhuman-app/        # 독립 lockfile·target을 쓰는 데스크톱
├── app/                     # React·Vite 화면, 모바일 Tauri 경로
├── packages/                # 공유 패키지·PTT 플러그인
├── vendor/                  # 함께 고정한 모듈·의존 소스
├── docs/                    # 문서·Gitbook 원본
├── scripts/                 # 개발·배포·검증 보조 도구
├── Cargo.toml               # root workspace와 patch 경로
├── rust-toolchain.toml      # Rust 1.99.1
└── docker-compose.yml       # 헤드리스 서버·두 영속 볼륨

app은 root Cargo workspace에서 제외되어 GTK·WebKit·Tauri를 루트 전용 검사에서 분리한다. 외부 패키지를 임의 버전으로 바꾸기 전에 patch 테이블과 vendor 경로가 공유하는 trait·wire 타입을 먼저 확인한다.

06 — 학습 포인트What to learn

분야별 배울 것

기술 영역마다 무엇을 가져갈지.

Rust — 거대한 에이전트 백엔드 짜기

  • Cargo workspace + 여러 바이너리 분리 패턴, feature flag로 옵셔널 통합(Matrix, WhatsApp 등)
  • Tokio + Axum 비동기 패턴, parking_lot/once_cell로 동시성 처리
  • 의존성 주석에 디버깅 흔적 남기기 — 왜 이 크레이트를 골랐는지를 코드에 박는 문화

실습: 작은 RPC 서버를 Axum으로 만들고 SQLite에 메모를 저장하는 토이 프로젝트 → Tokio mpsc 채널로 백그라운드 워커 추가

Tauri 2.x — Rust + TS 데스크톱 앱

  • Rust 백엔드 ↔ TS 프론트엔드 IPC 패턴, @tauri-apps/api 사용법
  • Tauri 보안 모델 — CSP, allowlist, 트레이/단축키
  • Electron 대비 앱 크기·메모리 차이

실습: Tauri로 로컬 파일 검색 앱 만들기 — Rust에서 ripgrep 같은 검색, TS에서 결과 표시

Memory Tree / RAG의 진화

  • 단순 벡터 검색이 아닌 계층적 요약 트리 구성법
  • "≤3k 토큰" 청크 사이즈의 의미 — LLM 컨텍스트 효율성
  • Obsidian 볼트 미러링으로 사용자 데이터 주권 확보 — DB lock-in 회피

실습: 자기 노션 페이지를 export → 청크 분할 → OpenAI 임베딩 → 트리 노드별로 GPT-4o-mini로 요약 → SQLite 저장

OAuth 기반 다중 통합 설계

  • 토큰 새로고침(refresh), 통합별 어댑터 패턴
  • "typed tool" 형태로 LLM에 노출하는 방법 (스키마 = 도구 자체)
  • 118+ 통합을 유지 가능하게 만드는 추상화 (한곳 망가져도 나머지는 작동)

실습: Gmail OAuth → 최근 50개 메일 가져와 GPT로 분류하는 미니 에이전트

로컬 음성 처리 (Whisper · cpal)

  • whisper-rs로 오프라인 STT (Metal/CUDA 가속)
  • cpal로 마이크 캡처, hound로 WAV I/O
  • 실시간 vs 배치 처리의 트레이드오프

실습: Whisper로 회의 녹음을 로컬에서 트랜스크립트 → 요약 → Notion에 자동 업로드

보안 강화된 Docker 셀프호스팅

  • read_only · cap_drop: ALL · tmpfs · no-new-privileges 조합 — 프로덕션 컨테이너 보안 모범
  • 리눅스 landlock feature flag — 커널 수준 샌드박싱
  • mem_limit/cpus로 자원 캡 걸기

실습: 자신의 사이드 프로젝트 컨테이너에 같은 패턴 적용해 변조 못 하는 컨테이너 만들기

07 — 요구사항Setup

하드웨어·시스템 요구사항

데스크톱 배포 파일은 macOS dmg, Windows msi·exe, Linux deb·AppImage를 제공한다. 하드웨어 최소값을 제작자 벤치마크로 대신 추정하지 않는다.

환경고정 소스에서 확인한 조건
Rust 개발rust-toolchain.toml: 1.99.1, rustfmt·clippy
화면 개발Node >=24.0.0, 루트 pnpm 10.10.0
Docker 코어7788, mem_limit 기본 4g·CPU 기본 2.0. 앱 최소 RAM과는 다른 컨테이너 제한
영속 경로workspace와 projects의 두 named volume
RPC 접속.env의 BACKEND_URL·OPENHUMAN_CORE_TOKEN을 배포 전에 설정

Compose는 read_only·no-new-privileges·cap_drop ALL을 사용하되 볼륨 소유권 보정과 권한 하향을 위해 CHOWN·SETUID·SETGID를 다시 허용한다. “모든 capability가 제거됐다”는 설명과 구분한다. 설치 파일과 필요한 모델·서비스를 준비할 디스크·네트워크 용량은 선택 기능에 따라 달라진다.

08 — 실습 과제Hands-on

직접 해볼 수 있는 6단계

난이도별 실습 — Easy → Hard.

실습 1 — 로컬 설치 + 통합 1개 연결Easy

1) 설치 스크립트(curl ... | bash)로 OpenHuman 띄우기 2) Gmail OAuth 연결 3) "지난 일주일 이메일 요약해줘" 명령 4) 메모리 트리가 어떻게 SQLite에 쌓이는지 sqlite3 CLI로 직접 들여다보기

배우는 것: 메모리 트리 구조 직관, OAuth 흐름 체험, SQLite 스키마

실습 2 — Obsidian 볼트 탐험Easy

1) OpenHuman이 생성한 Obsidian 호환 볼트를 Obsidian 앱으로 열기 2) 어떤 노드가 어떤 데이터에서 생성됐는지 추적 3) 백링크 구조와 그래프 뷰로 시각화 4) 직접 노드를 편집하면 OpenHuman이 어떻게 반응하는지 관찰

배우는 것: 계층적 요약 트리의 시각적 이해, 데이터 주권 의미

실습 3 — TokenJuice 클론 만들기Medium

1) Python으로 HTML → Markdown 변환기 작성 2) "긴 URL 단축 + 비-ASCII 제거 + 표 보존" 룰 적용 3) tiktoken으로 토큰 카운트 측정 4) 압축률 표로 정리 (원본 vs 변환 후)

배우는 것: 토큰 비용 절감 실전 감각, 정규식·파서 설계

실습 4 — Tauri로 미니 마스코트Medium

1) Tauri 앱 생성, 항상 떠 있는 작은 캐릭터 윈도우 2) always-on-top + 투명 배경 + 무프레임 윈도우 설정 3) Rust에서 시스템 알림 감지 → IPC로 TS에 전달 → 캐릭터가 손 흔들기 4) 트레이 메뉴로 토글

배우는 것: Tauri IPC, 데스크톱 OS API, 윈도우 매니지먼트

실습 5 — 자체 Memory Tree 엔진Hard

1) 임의의 마크다운 코퍼스 입력 2) ≤3k 토큰 청크 분할 + 임베딩 + 클러스터링 3) 각 클러스터를 LLM에 요약시켜 부모 노드 생성 (재귀) 4) SQLite에 트리 저장 + Obsidian용 .md 미러링 5) "이 트리에서 X에 대한 정보 찾아줘" 쿼리 모드 — top-down 탐색 알고리즘

배우는 것: 진짜 어드밴스드 RAG, 계층적 메모리 알고리즘, RAPTOR 논문 구현

실습 6 — Google Meet Agent 재현Hard

1) Puppeteer/Playwright로 Meet에 자동 입장 2) 시스템 오디오 캡처 → Whisper로 STT 3) LLM이 발화 응답 생성 4) ElevenLabs TTS로 회의에 발화 5) 윤리·동의 문제도 함께 고민 (참가자 고지 필수)

배우는 것: 멀티모달 에이전트, 실시간 오디오 파이프라인, 컴퓨터 제어, AI 윤리

09 — 학습 로드맵8 weeks

8주 심화 학습 로드맵

주차별로 따라가면 전체 스택 마스터.

Week 01
Rust 기초 + 비동기

The Rust Book 1~10장, tokio.rs/tokio/tutorial로 비동기. cargo new로 echo TCP 서버 만들기

Week 02
Axum + SQLite

Axum 0.8 튜토리얼로 RPC 서버 구축. rusqlite로 메모 저장. OpenHuman의 crates/openhuman-cli/ 패턴 따라하기

Week 03
Tauri 2.x 데스크톱 앱

공식 Tauri 튜토리얼. Rust 함수를 TS에서 호출하는 IPC 명령 5개 작성. 시스템 트레이, 글로벌 단축키

Week 04
LLM 통합 + OAuth

OpenAI API + Google OAuth로 "내 캘린더 요약기" 만들기. Refresh token 처리, scope 설계

Week 05
임베딩 + 청크 분할

OpenAI text-embedding-3 + Chroma/Qdrant. 청크 사이즈 실험(500/1500/3000 토큰)으로 검색 품질 비교

Week 06
계층적 요약 (Hierarchical Summarization)

RAPTOR 논문, Karpathy의 obsidian-wiki 트윗 정독. 자체 Memory Tree 토이 구현

Week 07
음성 + 컴퓨터 제어

whisper-rs로 로컬 STT. enigo로 마우스 자동화. ElevenLabs TTS 호출

Week 08
통합 캡스톤

위 모든 걸 합쳐 자신의 "1인용 AI 에이전트" 만들기. README + 데모 영상 작성 후 GitHub 공개

10 — 키워드 사전Glossary

핵심 용어 한눈에

자주 마주칠 단어들.

Agent Harness
LLM을 둘러싼 "외골격". 도구 호출·메모리·라우팅·UI 책임. OpenHuman은 데스크톱 하네스의 대표.
Memory Tree
외부 데이터를 ≤3k 토큰 청크로 잘라 계층적으로 요약한 트리. 상위 노드는 자식들의 요약.
Obsidian Vault
Obsidian이 읽는 폴더 구조(.md + 백링크). OpenHuman은 메모리 트리를 이 형식으로 미러링.
TokenJuice
LLM 호출 전 토큰 줄이는 압축 레이어. HTML→Markdown, URL 단축으로 80% 절감.
Auto-Fetch
연결된 통합을 20분마다 자동 폴링해 새 데이터를 메모리 트리에 흡수.
Model Routing
요청 분석 후 reasoning/fast/vision/local 중 적절한 LLM 자동 선택. 키 하나로 끝.
Tauri
Rust 백엔드 + 웹뷰 프론트로 데스크톱 앱. Electron 대비 가볍고 안전.
Axum
Rust 비동기 웹 프레임워크. Tower 미들웨어 생태계. OpenHuman은 0.8 사용.
Tokio
Rust 비동기 런타임 사실상 표준. async/await 코드의 실제 실행 엔진.
whisper-rs
OpenAI Whisper(STT)의 Rust 바인딩. macOS Metal 가속 지원.
Hierarchical Summarization
긴 문서를 청크 → 요약 → 요약의 요약으로 트리화하는 RAG 기법. RAPTOR 논문이 대표.
OAuth 2.0
제3자 앱이 사용자 동의 하에 다른 서비스 API 호출. OpenHuman 118+ 통합의 핵심.
Mascot
데스크톱 위 캐릭터형 AI 인터페이스. 립싱크·발화·Meet 입장.
Computer Use
AI가 마우스·키보드·화면을 직접 제어하는 능력. enigo/rdev/arboard로 구현.
landlock / bubblewrap
리눅스 커널 수준 샌드박싱. OpenHuman은 feature flag로 옵션 제공.
Remotion
React로 비디오를 만드는 프레임워크. OpenHuman은 마스코트 애니메이션 렌더링에 사용.
11 — 참고 링크Refs

더 깊이 파고들 자료

공식 · 영감 · 학습 리소스.

2026-10-31 고정 커밋 218d35f4b96b의 workspace·타입 facade·앱 manifest·Compose를 대조했다.

공식 자료

영감과 비전

핵심 라이브러리 · 학습 리소스

Action · 이번 주에 해볼 것

OpenHuman을 처음 만났다면 이 순서로 5단계.

  1. 로컬 설치 + Gmail OAuth. curl ... | bash로 띄우고 Gmail 1개만 먼저 연결. 첫 오토페치(20분)가 끝날 때까지 기다리기. 이 시간이 콜드 스타트의 종착점.
  2. SQLite로 메모리 트리 들여다보기. sqlite3 ~/.openhuman/memory.db로 직접 들어가 SELECT * FROM nodes LIMIT 20; — 트리 노드가 어떻게 부모/자식 관계로 저장되는지 눈으로 확인.
  3. Obsidian으로 같은 트리 보기. OpenHuman이 만든 vault 폴더를 Obsidian 앱으로 열어 그래프 뷰 클릭. 데이터 주권이 어떤 느낌인지 체험.
  4. 마스코트 켜고 회의 자동 참가 시도. Google Meet 링크 주고 "오늘 11시 회의 대신 들어가서 요약해줘". 컴퓨터 제어 + STT + TTS가 어떻게 어울리는지 관찰.
  5. Docker로 헤드리스 셀프호스팅. docker-compose.yml로 :7788 코어만 띄워보기. read_only·cap_drop 옵션이 빠지면 어떻게 되는지 일부러 망가뜨려 보기 — 프로덕션 보안의 감 잡기.
원문 · tinyhumansai/openhuman (GitHub) · 2026-05-20 · TrendShift 8위 · 유행레포정리