로컬-우선 AI 프로젝트 매니저

AI 코딩 에이전트가 코드를 쓰는 동안, 당신은 기록·관리·검증만 합니다.

Claude Code · Cursor · Gemini CLI가 만든 변경을 자동으로 기록하고, 오늘 무엇이 바뀌었는지 한눈에 보여주고, 할루시네이션을 로컬 diff로 즉시 검증합니다. 클라우드도, 계정도, 텔레메트리도 없습니다.

번들 < 60MB Tauri 네이티브 (Electron 아님) 콜드 스타트 < 1.5초
.oculpm/journal/20260608 자동 기록 중
기능 추가 16:42
워크데이 경계 기준 일일 롤오버 구현
Claude Code·3개 파일+127−13
버그 수정 15:08
자정 직후 entry가 두 번 나타나던 문제 수정
Claude Code·1개 파일+9−14
에러 사이클 14:21
tree-sitter 파서 초기화 실패 → 재시도 후 복구
Cursor·3회 재시도+6−1
오늘 6건 기록 · 모두 markdown · git 친화
플랫 파일 SSOT
DB lock-in 없음
The gap

에이전트는 빠르지만, 며칠 뒤엔 무엇이 왜 바뀌었는지 추적이 끊깁니다.

Ocul-PM이 메우는 간극

에이전트가 코드를 쓰고, Ocul-PM이 그들이 한 일을 사람이 읽을 수 있는 기록으로 남깁니다.

?

어제 Claude에게 시킨 리팩토링이 어떤 파일들을 건드렸더라.

?

Cursor가 "수정했다"고 한 코드가 실제로 동작하나, 다시 확인해야 한다.

?

여러 에이전트를 번갈아 쓰니 변경 이력이 도구마다 흩어진다.

?

일주일 지나면 "내가 이걸 왜 만들었지?"에 답할 수 없다.

핵심 기능

에이전트의 분 단위 작업을, 읽을 수 있는 기록으로.

기록·검증·계획·실행이 한 앱 안에서. 전부 당신의 디스크 위에서 일어납니다.

.oculpm/journal/

자동 작업 일지

에이전트는 작업을 끝낼 때마다 마스터 프롬프트 규칙에 따라 markdown 한 개를 남깁니다. 플랫 파일 SSOT라 DB lock-in이 없고, 코드와 함께 커밋해 PR 리뷰에서 같이 볼 수 있습니다.

--- 20260608/16-42-feature.md
trigger: feature
agent: Claude Code
files: 3 # +127 −13
title: 워크데이 일일 롤오버 구현
할루시네이션 1차 방어선

변경 파일 로컬 diff

에이전트가 "수정했다"고 주장하는 모든 파일을 네트워크 호출 없이 즉시 비교합니다. Git이면 git diff, 아니면 file snapshot fallback.

const fileCount = files.length;
+ const added = files.reduce((s,f)=>s+f.add,0);
+ const removed = files.reduce((s,f)=>s+f.del,0);
− return <span>{fileCount} files</span>;
Today

일일 브리프

오늘 무엇이 바뀌고, 어제 무엇을 끝냈고, 다음은 무엇인지 워크데이 경계로 정리. 타임존 자정에 자동 롤오버.

6
오늘 기록
13
변경 파일
Planner

통합 플래너

goal → 서브태스크 → journal entry의 3단 위계로, AI의 분 단위 작업을 사람의 주 단위 목표에 묶습니다.

워크데이 롤오버 안정화
타임존 경계 계산
자정 자동 롤오버
멀티-LLM 패널

한 인터페이스, 세 모델

OpenAI · Anthropic · Gemini를 같은 화면에서. API 키는 OS 키체인에만 저장됩니다.

Claude GPT Gemini
로컬 임베딩

시맨틱 코드 검색

tree-sitter AST + fastembed 임베딩 + sqlite-vec. 임베딩이 외부로 나가지 않습니다.

portable-pty · xterm.js

내장 터미널

창 전환 없이 같은 앱에서 CLI를 실행하며, 일지가 옆에서 쌓이는 걸 봅니다.

claude-code "롤오버 구현"
● 3 files changed · 5 tests
◆ journal entry 작성됨
왜 로컬-우선인가

코드도, 임베딩도, 작업 기록도 우리 서버로 가지 않습니다.

// 우리 서버가 없기 때문입니다.

소유권

일지는 markdown 파일. 앱이 망해도 데이터는 그대로. git clone으로 옮기면 그대로 동작합니다.

개인 정보

코드·임베딩·작업 기록 어느 것도 우리 서버로 가지 않습니다. 외부 요청은 당신이 부른 LLM 호출, 그것뿐.

속도

콜드 스타트 1.5초 미만. 검색은 디스크 I/O가 한계입니다.

오프라인

LLM 호출을 빼면 전부 오프라인에서 동작합니다.

기술 스택

Tauri 네이티브. Electron이 아닙니다.

Rust 백엔드 + 시스템 웹뷰. 전체 데이터는 프로젝트 폴더의 .oculpm/와 로컬 SQLite에 머무릅니다.

<60MB
macOS dmg 번들 크기
<1.5
콜드 스타트
30+
시크릿 redaction 패턴
0
텔레메트리 · 계정 · 클라우드
Tauri 2 · Rust 백엔드 + 시스템 웹뷰
백엔드Rust 2021 · tokio · rusqlite · sqlite-vec
코드 분석tree-sitter · fastembed · blake3
파일 감시notify · gitignore 존중 · 500ms 디바운스
터미널portable-pty · xterm.js · addon-fit
보안keyring 네이티브 키체인 · rustls
프론트엔드React 19 · TypeScript 5.8 · Vite 7 · Tailwind 4
누구를 위한 앱인가

자기 코드와 데이터를 자기 디스크에 두는 사람.

AI 에이전트를 일상으로 쓰는 개발자

Claude Code, Cursor, Aider, Gemini CLI, Antigravity를 매일 쓰는 사람.

개인 프로젝트 · 1~3인 팀

가볍게 시작. 팀 클라우드 동기화는 v1.1 이후 로드맵.

터미널을 떠나기 싫은 사람

하지만 변경 이력은 시각적으로 보고 싶은 사람.

데이터 주권을 가치로 느끼는 사람

코드도 기록도 임베딩도, 내 디스크 위에.

1.0 출시 — 지금 다운로드 · macOS (Apple Silicon)

AI에게 빼앗긴 "왜 이걸 만들었더라"
답을 다시 손에 쥐세요.

설치하고, 프로젝트 폴더를 열고, 에이전트를 부르세요. 나머지는 Ocul-PM이 기록합니다.

GitHub Releases 에서 직접 다운로드 · 이후 버전은 앱 안에서 자동 업데이트