research

Naran 설계 세션 인계 문서

Naran 설계 세션 인계 문서

작성: 2026-03-31 목적: 설계하자 세션 → 새 대화창 인계용 compact 맥락


프로젝트 한 줄 정의

Naran = zeroclaw 위에 도메인 레이어를 얹는 개인 생산성 시스템.
zeroclaw가 실행을 담당하고, Naran은 "무엇을 언제"를 결정한다.

  • 서버: 로컬 GPU 서버 (RTX 5080)
  • GitHub repo: maullim/naran (main branch)

확정된 아키텍처 (ADR-001 ~ ADR-011)

ADR결정
001Naran = 별도 MCP 서버, zeroclaw upstream 건드리지 않음
002naran.db = MySQL
003Task = 구조체(상태 없음), Event = Task의 상태(시간 블록)
004rules 별도 테이블 + task_rules/event_rules 관계 테이블
005Event Rule → zeroclaw cron_jobs 변환 (name 인코딩)
006반복 Event — Hybrid Materialization (1년 이내 eager, 초과 lazy)
007LLM 구동 = llama.cpp (localhost:8080/v1, GGUF)
008LLM 권한 = ReadOnly 시작 → 테스트 후 단계적 확대
009브라우저 자동화 = zeroclaw BrowserTool(원자) + Naran Skill(goal 순서)
010Privacy Boundary = age 암호화 파일 + sensitive_login Tool (heuristic → local LLM fallback, TOTP 자동)
011zeroclaw = 직접 clone (포크 없음), config는 naran repo zeroclaw-config/에서 관리

DB 스키마 (naran.db MySQL, v4 확정)

tasks                    Task 구조체 (상태 없음)
rules                    rule 정의 저장소
task_rules               Task ↔ Rule 관계
event_rules              Event ↔ Rule 관계
events                   Task의 상태 (시간 블록)
event_series             반복 규칙 (rrule)
event_series_exceptions  삭제/수정된 인스턴스

Task 상태는 events에서 파생: unscheduled / scheduled / overdue / complete


v1 / v2 기능 범위

v1

  • 대화 클라이언트 (claw /ws/chat)
  • Task/Event/Rule CRUD (ReadOnly 시작)
  • Cron 관리 UI
  • 브라우저 자동화 (BrowserTool + Skill)
  • Privacy Boundary (age + sensitive_login Tool)

v2 이관

  • 데스크탑 자동화 (enigo + rdev)
  • Android 알림 수신 (NotificationListenerService)
  • cross-platform 2FA
  • Generative UI (render_hint 기반)

서버 경로 구조

~/llama.cpp/         설치됨
~/AI_MODELS/         GGUF 모델 있음
~/[claw]/            미설치 (claw 선택 후 결정)
~/naran/             Naran repo
  ├── CLAUDE.md
  ├── feature_list.json   F-01 ~ F-14
  ├── context-bridge.md
  ├── docs/
  │   ├── architecture.md
  │   └── decisions.md    ADR-001~011
  ├── mcp-server/
  ├── client/
  ├── skills/
  └── zeroclaw-config/    config.toml, init.sh

feature_list.json (F-01 ~ F-14)

IDGroup내용
F-01infraclaw + llama.cpp 환경 구성
F-02storageMySQL naran.db 스키마 생성
F-03infraNaran MCP 서버 기본 구조
F-04serverTask CRUD MCP Tools
F-05serverRule CRUD MCP Tools
F-06serverEvent CRUD MCP Tools (단독)
F-07serverEvent Rule + cron_jobs 변환
F-08server반복 Event (Hybrid Materialization)
F-09serversensitive_login Tool (Privacy Boundary)
F-10serverBrowser Skill 파일
F-11clientTauri 기본 구조
F-12clientChat UI
F-13clientTask/Event UI (캘린더 + 태스크 뷰)
F-14clientCron 관리 UI

🔴 현재 미결 — 새 대화창에서 시작할 것

claw 선택: ZeptoClaw vs LoongClaw

zeroclaw(theonlyhennygod/zeroclaw, 4.6K⭐)가 접근 불가 상태.

후보 A: ZeptoClaw (qhkm/zeptoclaw)

  • Rust, ~6MB, 3,900+ tests, Apache 2.0
  • Library Facade 제공: ZeptoAgent::builder().tool(t).build()
  • → Naran MCP 서버를 별도 프로세스로 분리하는 대신, ZeptoClaw를 Naran 안에 crate로 embed
  • → ADR-001 (별도 MCP 서버 구조) 재검토 필요
  • OpenAI-compatible ✅, Cron ✅, BrowserTool ✅
  • config.json 방식

후보 B: LoongClaw (loongclaw-ai/loongclaw)

  • Rust, governance-first, 7-crate workspace, MIT
  • Extension Planes: tool plane에 어댑터 추가 (코드 수정 필요)
  • → 기존 ADR-001 MCP 구조 유지 가능
  • OpenAI-compatible ✅, Cron ✅, BrowserTool ✅
  • config.toml 방식
  • dev branch 기반, 아직 성숙도 낮음

핵심 트레이드오프

ZeptoClaw → Library Facade로 구조 단순화
            ADR-001 (별도 MCP 서버) 재검토 필요
            성숙한 코드베이스

LoongClaw → 기존 ADR-001 MCP 구조 유지
            Extension 방식으로 Naran Tool 추가
            dev branch, 아직 불안정

관련 문서 위치

파일위치
DB 스키마knowledge vault: research/naran-scheduling/naran-data-model.md
미결사항knowledge vault: research/naran-scheduling/naran-open-decisions.md
architecture.mdmaullim/naran: docs/architecture.md
decisions.mdmaullim/naran: docs/decisions.md
context-bridgemaullim/naran: context-bridge.md