본문으로 건너뛰기
LVIS AI

Architecture

~/.lvis — 도메인 단위 격리된 로컬 스토리지

LVIS 호스트 + 모든 플러그인의 user-data 는 ~/.lvis/ 디렉토리 아래에 도메인 단위 namespace로 격리됩니다. 모든 디렉토리는 0o700, 파일은 0o600. 트리는 코드에서 실제로 생성되는 경로만 나열합니다.

0o700 dir
0o600 file
src/audit/audit-logger.ts
src/main/main.ts:105
~/.lvis/ — file tree (소스 검증된 항목만)
~/.lvis/
├── workspace/                                # 메인 작업공간 root (main.ts:105)
├── sessions/                                 # 채팅 세션 (memory-manager.ts:696)
├── routine/                                  # 루틴 v2
│   ├── routines.json                         #   schedule-routine.ts:4
│   └── sessions/<routineId>/<firedAt>.jsonl  #   per-fire isolation
├── audit/                                    # 일별 감사 로그 (audit-logger.ts:6)
│   ├── <YYYY-MM-DD>.jsonl
│   └── <YYYY-MM-DD>.sandbox.jsonl            # 샌드박스 별도 sink
├── logs/
│   └── watcher-poll.jsonl                    # boot.ts:1151
├── memories/
│   └── MEMORY.md                             # MemorySeedDialog.tsx:6
├── skills/<name>/SKILL.md                    # skill-load.ts:57
├── agents/<name>.md                          # agent-spawn.ts:49
├── skill-approvals.json
├── mcp/
│   ├── servers.json                          # boot.ts:1012-1016
│   └── <slug>/
├── plugins/
│   ├── auth-partitions.json                  # boot.ts:252
│   └── <pluginId>/                           # plugin namespace (boot.ts:309)
│       └── ...                               # plugin storage.* root
├── permissions.json                          # permissions-store.ts
├── settings.json                             # boot.ts:579
├── secrets/
│   └── .env.demo                             # 0o600 (preload.ts:345)
├── diff-cache/
│   └── <sessionId>/<toolUseId>.json          # write-diff-cache.ts:6
└── onboarding/
    ├── tour-state.json                       # preload.ts:389
    └── onboarding-context.md                 # preload.ts:477

스토리지 룰 (검증)

  • 단일 도메인 = 단일 디렉토리. routine/ · audit/ · plugins/ · mcp/ 등 모두 도메인 prefix 안에 모임.
  • 0o700 / 0o600 권한 강제 — 코드 예시: write-diff-cache.ts:84-85, memory-manager.ts:1154-1166, permission-settings-store.ts:189-192.
  • Plugin 격리: 모든 plugin 데이터는 ~/.lvis/plugins/<pluginId>/ 아래. 외부 디렉토리 접근은 hostApi.storage.* sandboxed FS 로만.
  • 감사 로그는 일별 분리: 단일 audit.log 가 아니라 audit/<YYYY-MM-DD>.jsonl + sandbox sink 별도.
2026-05-09 Routine v2 namespace consolidation
과거 ~/.lvis/routines.json + ~/.lvis/routine-sessions/ 두 path 가 root 에 분산 →~/.lvis/routine/ 단일 namespace 로 consolidate (PR #626). 현재 코드는 이 합쳐진 구조.
잘못된 패턴
  • ~/.lvis/<feature>.json root 에 도메인 specific 파일 분산
  • ❌ plugin 이 다른 plugin / host 디렉토리 직접 read/write (SDK가 storage 를 sandbox 함)
  • ❌ 새 feature root 에 새 파일 추가 → 항상 ~/.lvis/<new-feature>/ 신설