Local-first AI project manager (AI PM) for AI coding agents — auto-journals, verifies & organizes what Claude Code · Cursor · Gemini CLI do. 코딩 에이전트용 로컬-우선 AI PM · 작업 자동 기록·검증·정리.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
AI와 어제 어디까지 작업했는지, 오늘 다시 설명하지 마세요. Claude Code 가 작업을 끝내면 일지가 남고, 다음 대화는 그 일지에서 시작합니다. Claude Code · Codex · Cursor · Gemini CLI 와 함께 쓰는 로컬-우선 프로젝트 매니저 — 서버도 계정도 없습니다. 매일 AI 로 개발하면 아침마다 같은 일을 합니다. 새 대화를 열고, 어제 어디까지 했는지, 왜 그 파일을 건드렸는지, 무엇이 남았는지를 처음부터 다시 설명하는 일입니다. 대화가 끝나면 맥락도 같이 끝나기 때문입니다 — 코드는 남는데 맥락은 남지 않습니다. Ocul-PM 은 그 설명을 없앱니다. 프로젝트 폴더에 규칙 파일(AGENTS.md) 하나를 심으면 에이전트는 작업 하나를 끝낼 때마다 .oculpm/journal/ 에 마크다운 일지를 남기고, 다음 대화는 그 일지와 남은 계획을 시작 컨텍스트로 받아 이어서 합니다. 앱은 그 기록을 타임라인·일일 브리프·변경 diff 로 보여 줍니다. 원본이 전부 마크다운 파일이라 코드와 함께 커밋할 수 있고, 앱이 없어도 그냥 읽힙니다.檢視完整 README ↗
실제 4.1 화면입니다. 이 저장소의 일지로 채웠고, Claude 의 질문 한 줄만 데모입니다. 여러분의 터미널에서 돌려도 같은 기록이 남습니다.
oculpm.com · 위키 · 다운로드 · 변경 이력 · 이슈
한국어 · English
매일 AI 로 개발하면 아침마다 같은 일을 합니다. 새 대화를 열고, 어제 어디까지 했는지, 왜 그 파일을 건드렸는지, 무엇이 남았는지를 처음부터 다시 설명하는 일입니다. 대화가 끝나면 맥락도 같이 끝나기 때문입니다 — 코드는 남는데 맥락은 남지 않습니다.
Ocul 은 그 설명을 없앱니다. 프로젝트 폴더에 규칙 파일(AGENTS.md) 하나를 심으면 에이전트는 작업 하나를 끝낼 때마다 .oculpm/journal/ 에 마크다운 일지를 남기고, 다음 대화는 그 일지와 남은 계획 — 완료 조건 · 확인 명령 · 마지막 판정 — 을 시작 컨텍스트로 받아 이어서 합니다. 앱은 그 기록에서 사람이 볼 것만 펼칩니다: 판정 실패, 명령 증거 없는 일지, 어느 일지에도 없는 변경, 막힌 항목, 사람 몫 결정. 증거가 선 일은 한 줄로 접힙니다. 원본이 전부 마크다운 파일이라 코드와 함께 커밋할 수 있고, 앱이 없어도 그냥 읽힙니다.
서버는 없습니다. 데이터는 프로젝트의 .oculpm/ 폴더와 로컬 SQLite 캐시에만 있고, 앱은 LLM 을 부르지 않으며 화면(웹뷰)은 바깥 호스트에 닿지 않습니다. 기기를 떠나는 것은 여러분이 시작한 것뿐입니다 — 새 버전 확인과, 여러분이 누른 링크(OS 브라우저가 엽니다). 세어 볼 수 있는 전체 목록은 oculpm.com/privacy 에 있고, 그 목록은 빌드가 지킵니다(src-tauri/tests/egress_inventory.rs).
약속은 열 문장입니다 — docs/PROMISE.md. 규칙 파일 하나로 일지가 남고, 몇 초 안에 화면에 서고, diff 가 붙고, 오늘 화면은 사람이 볼 것만 펼치고, 다음 대화가 완료 조건 · 확인 명령 · 마지막 판정을 이어받고, 데이터는 기기를 떠나지 않습니다. 4.0 에서 앱은 다섯 면만 남았습니다 — 오늘 · 작업 일지 · 계획 · 변경 · 설정(과 프로젝트가 없을 때의 시작 창). 원칙은 하나, 예외만 보여 준다: 화면의 크기는 에이전트가 한 양이 아니라 사람이 볼 것에 비례하고, 하루 3건 쓰는 사람과 60건 쓰는 사람이 모드 없이 같은 화면을 씁니다. 무엇을 걷었고 왜인지(실측)도 그 문서에 있습니다.
기능 목록보다 이 왕복 하나가 이 앱의 전부입니다. 평소 쓰는 프로젝트에서 그대로 해 보세요.
AGENTS.md 가 심어지고, 플러그인 두 줄이면 훅과 기록 도구까지 붙습니다.판정 ✓|✗ <결과 끝 줄> 한 줄로 남아, 계획 화면 제목 바로 아래의 「마지막 판정」이 됩니다.r)이 앱 안 터미널의 새 세션에서 claude 가 다음 항목부터 잇게 하고, [끝까지 (/goal)]는 계획의 완료 조건 · 확인 명령을 Claude Code 의 /goal 로 넘겨 판정이 통과할 때까지 이어 가게 합니다. 어제를 다시 설명하지 않습니다.이 왕복은 터미널의 Claude Code + oculpm 플러그인 경로에서 릴리스마다 사람이 확인합니다. 다른 에이전트(Codex · Cursor · Gemini CLI …)는 1·2 단계가 규칙 파일만으로 동작하고(Codex 는 훅도 있습니다), 등급별 차이는 아래 지원 에이전트 표에 있습니다.
코딩 에이전트를 잘 쓰는 법은 이미 합의에 가깝습니다. Anthropic 의 Claude Code 안내서, Simon Willison 의 에이전트 공학 패턴, Sonar 2026 개발자 조사, METR 의 생산성 실측이 같은 다섯 줄을 말합니다. 문제는 그 다섯이 /clear 한 번에 사라진다는 것이고, Ocul 은 그 다섯 질문이 세션 경계를 넘어 남는 자리입니다 (Rieseberg 의 고도 · 깊이 · 범위 그대로).
| 원칙 | 출처 | Ocul 의 자리 |
|---|---|---|
| ① 코드 전에 완료 조건을 결과로 적는다 | Anthropic "write the spec first" | 플랜마다 **완료 조건:** 한 줄 — 할 일이 아니라 「무엇이 참이 되면 끝인가, 그다음 무엇이 일어나야 하나」. 시작 훅이 매 세션 항목보다 먼저 싣고, 계획 화면이 제목 바로 아래 둡니다 |
| ② 에이전트에게 통과/실패를 내는 것을 준다 | Anthropic "something it can run that comes back pass or fail" · Willison "first run the tests" | 플랜의 **확인 명령:**. 결과는 `판정 ✓ |
| ③ 주장이 아니라 명령과 출력을 증거로 받는다 | Anthropic "'All tests pass' tells you very little" | 일지의 검증 칸. 명령 증거가 없는 일지는 오늘 화면 「확인할 것」에 서고, 작업 일지 상세의 검증 상자가 「주장이에요」 라고 짚습니다 |
| ④ 테스트가 초록이어도 실제로 돌려 본다 | Willison "passing tests don't mean the server boots" | 규칙 템플릿 v20 「판정은 네가 아닌 것이」 — 확인 명령이 없으면 그것부터 만들고, 초록이어도 가능하면 실제로 띄워 한 번 써 본다. 실패도 error 일지로 남는다 |
| ⑤ 바깥 심판이 판정한다 | Sonar: 96% 가 불신, 48% 만 늘 확인 · METR: 느낌 ≠ 실측 | /oculpm:redteam 이 합류 전 반례를 찾고, 오늘 화면 맨 위 한 줄이 바깥 심판 증거가 있는 일지 비율을 매일 보여 줍니다 — 목표는 PROMISE.md 에 숫자로(97%) |
주지 않는 것도 적어 둡니다. 야망 자체는 사람의 몫입니다 — Ocul 은 완료 조건을 대신 만들지 않고 판정을 대신 내리지 않습니다. 묻고 짚되 막지 않습니다.
Ocul-PM.app · 내려받는 파일 · 데이터 폴더 · 플러그인 oculpm · .oculpm/)은 그대로라 업데이트는 같은 자리에 깔리고 기록은 이어집니다.ask_user 가 오늘 화면에 질문을 띄우고, 고르거나 쓴 답이 그대로 Claude 에게 돌아갑니다(25분 안)./goal 로 완료 조건 · 확인 명령을 넘깁니다./plugin update oculpm@oculpm 으로 4.1 판을 받으세요 — 새 훅과 ask_user 가 거기 있습니다.릴리스마다의 서술은 웹 변경 이력 과 CHANGELOG 에 있습니다. 아래는 주제별로 한 줄씩 묶은 것이고, 그중 많은 화면이 2026-10-28 과 4.0 에서 걷혔습니다 — 걷은 근거는 PROMISE.md.
앱은 다섯 화면(오늘 · 작업 일지 · 계획 · 변경 · 터미널)과 설정입니다. 원칙은 하나 — 예외만 보여 준다. 처음 켜면 「처음 쓰는 법」 네 쪽이 이 내용을 짧게 보여 주고, 도움말 메뉴와 ⌘K 에서 다시 열 수 있습니다.
j/k 이동 · v 읽음 · r 다음 실행./)이 여기 삽니다 — 제목 · 파일 · 태그 · 본문..oculpm/planner/*.md 가 원본입니다. 제목 바로 아래 완료 조건 · 확인 명령 · 마지막 판정(없으면 「아직 안 돌렸어요」), 다음 할 일과 [터미널에서 실행] · [끝까지 (/goal)], 단계별 항목. 항목 상태는 상자를 눌러 바꾸고, 항목마다 「Claude 에게 보내기」 가 있습니다. 계획을 만들고 고치는 것은 에이전트(plan_create · plan_update)의 몫입니다.창 하나가 프로젝트 하나입니다. ⌘1~⌘5 또는 ⌃Tab · ⌃⇧Tab 으로 화면을, ⌘K 로 화면 · 프로젝트 · 일지 · 계획을 찾고, ⌘[ / ⌘] 또는 두 손가락 쓸기로 화면 앞뒤를 오갑니다. ⌘O 는 최근 프로젝트, ⌥⌘19 는 열린 프로젝트 창(Windows · Linux 는 Alt+19), ⇧⌘N 은 새 창(시작 창), ⌘W 는 창 닫기입니다. 윗줄의 프로젝트 이름(▾)을 누르면 프로젝트마다 「내 차례 · 새 소식 · 실행 중 N」 이 보입니다. 화면 언어는 설정 → 표시에서 한국어 · English 중에 고릅니다.
「지원한다」 한 마디에 서로 다른 약속 셋이 섞여 있어 등급으로 나눕니다. 등급은 마케팅 문구가 아니라 코드에서 읽었습니다 — 규칙 파일 어댑터 표(src-tauri/src/oculpm/agents/), MCP 등록기(oculpm/mcp/register.rs · mcp/codex.rs), 훅(plugin/*/hooks/).
| 등급 | 뜻 |
|---|---|
| 1 · 규칙 호환 | Ocul 은 그 에이전트가 읽는 규칙 파일만 씁니다 (AGENTS.md, .claude/CLAUDE.md 블록, .cursor/rules/*.mdc, GEMINI.md …). 일지는 모델이 규칙을 지키는 만큼만 남습니다. |
| 2 · 구조화 기록 | 에이전트가 oculpm MCP 서버의 도구(journal_write · plan_update …)를 부를 수 있습니다. 등록은 플러그인이 하거나(Claude Code) 안내합니다(Codex). |
| 3 · 세션 관측 | Ocul 이 세션 시작·종료를 훅으로 받고, 일지 없이 끝난 대화를 가려냅니다 (Stop 배달 게이트 · sessions.json · 판정). |
| 에이전트 | 등급 | Ocul 이 하는 일 | 검증 |
|---|---|---|---|
| Claude Code | 3 세션 관측 | oculpm 플러그인(훅 · MCP 도구 · 스킬) · AGENTS.md + .claude/CLAUDE.md 블록 | v3.0.0 · 2026-09-11 |
| Codex | 3 세션 관측 | Codex 플러그인(훅 · ~/.codex/config.toml MCP 등록 안내) · AGENTS.md(네이티브, 전용 파일 없음) | v2.37.0 · 2026-09-03 |
| Gemini CLI | 1 규칙 호환 | AGENTS.md + GEMINI.md 블록 | — |
| Cursor | 1 규칙 호환 | .cursor/rules/ocul-pm.mdc | — |
| GitHub Copilot | 1 규칙 호환 | .github/copilot-instructions.md 블록 | — (v2.0.0 출시) |
| Windsurf | 1 규칙 호환 | .windsurf/rules/ocul-pm.md | — (v2.0.0 출시) |
| Cline | 1 규칙 호환 | .clinerules/ocul-pm.md | — (v2.0.0 출시) |
| aider | 1 규칙 호환 | CONVENTIONS.md 블록 | — (v2.0.0 출시) |
| Zed | 1 규칙 호환 | .rules 블록 | — (v2.0.0 출시) |
| Antigravity | 1 규칙 호환 | .agent/rules/ocul-pm.md | — (v1.11.0 출시) |
| pi | 1 규칙 호환 | AGENTS.md 만 (전용 파일 없음) | — (v1.11.0 출시) |
읽는 법:
CHANGELOG.md 와 .oculpm/journal/ 에 그 등급이 실제로 돌았다고 적힌 마지막 근거(앱 버전 · 날짜)입니다. — 는 코드는 있지만 실측 기록이 없다는 뜻이고, 괄호의 「출시」는 CHANGELOG 에 기능이 실린 버전입니다. 날짜와 버전을 지어내지 않았습니다.AGENTS.md 는 기록을 켜면 항상 심어집니다. 1등급 에이전트라면 오늘 화면의 「기록 없는 변경」을 가끔 보세요 — 규칙을 잊고 고친 파일이 거기 뜹니다.git 백필 시에는 커밋 서명으로 에이전트를 구분합니다.
터미널 Claude Code 에서 두 줄이면 기록이 시작됩니다:
/plugin marketplace add bunhine0452/Ocul-PM
/plugin install oculpm@oculpm
Codex 라면 터미널에서 두 줄입니다:
codex plugin marketplace add bunhine0452/Ocul-PM
codex plugin add oculpm-codex@oculpm
플러그인 하나로 전 프로젝트에 구성되는 것:
journal_search · journal_read · journal_write · plan_status · plan_update · plan_create · project_init(사용자 확인 시 새 프로젝트 추적 시작) · ask_user(사람의 결정을 앱의 오늘 화면에 묻고 답을 기다림, 25분 안). 에이전트가 마크다운 규격을 흉내 내는 대신 구조화 도구로 기록해 frontmatter 오류가 원천 차단되고, 쌓인 수백 건을 작업 시작 전에 되찾습니다 — 그 파일을 예전에 왜 건드렸는지가 검색 한 번으로 나옵니다./oculpm:inception(그다음 → 깊이 네 질문 → 분야의 방법 → 어려운 숫자 목표 → 빨간 판정이 첫 항목인 계획) · /oculpm:next(잡은 항목을 [~] 로 선점 → 구현 → 확인 명령 → 일지 → 플랜, until-done 이면 판정이 통과할 때까지) · /oculpm:redteam(주장을 직접 돌려 반례만) · /oculpm:help, 그리고 도구가 없을 때의 기록 규격 스킬. 겹치던 일곱(self-audit · run-evals · tdd-workflow · standup · board · project_init · project-inception)은 2026-10-28 에 걷었습니다..oculpm 이 있는 추적 프로젝트에서만 동작하고, 비추적 저장소에는 아무 파일도 만들지 않습니다 — 무엇을 읽고 쓰는지 전체 계약.최신 릴리스에서 OS 에 맞는 파일을 받습니다. 앱 안에 보이는 이름은 Ocul 이고, 설치 파일과 설치된 앱의 이름은 Ocul-PM 그대로입니다.
| OS | 파일 | 요구 사항 | 업데이트 |
|---|---|---|---|
| macOS (Apple Silicon) | Ocul-PM_x.y.z_aarch64.dmg | — | 앱 안 자동 |
| Windows x64 — 베타 | Ocul-PM_x.y.z_x64-setup.exe | Windows 10 2004(빌드 19041) 이상 · 11 | 앱 안 자동 |
| Linux x64 — 베타 | Ocul-PM_x.y.z_amd64.AppImage | glibc 2.35+ (Ubuntu 22.04 · Debian 12 이후) · libEGL · libGLESv2 · FUSE 2 | 앱 안 자동 |
| Linux x64 — 베타 (Debian·Ubuntu) | Ocul-PM_x.y.z_amd64.deb | 위와 같음 (FUSE 불필요) | 패키지 관리자 |
macOS — .dmg 를 열어 Applications 로 드래그하면 끝입니다. Apple Developer ID 로 서명하고 공증(notarization)까지 마친 빌드라 내려받아 바로 열 수 있습니다 — xattr 로 격리를 벗기는 우회는 더 이상 필요 없습니다.
Windows (베타) — 설치 파일을 실행하면 관리자 권한 없이 사용자 폴더에 설치됩니다. 코드 서명이 없는 베타라 처음 실행할 때 SmartScreen 이 「Windows의 PC 보호」 창을 띄우는데, 추가 정보 → 실행 을 누르면 이어집니다. Visual C++ 런타임이 없는 PC 에서는 설치 파일이 그것을 먼저 깝니다(그때만 확인 창이 한 번 뜹니다). Windows 10 2004 보다 낮은 버전에서는 설치 파일이 안내하고 멈춥니다.
.oculpm/ 에 파일을 직접 씁니다.Linux (베타) — AppImage 는 chmod +x Ocul-PM_*_amd64.AppImage 뒤 실행하면 되고 앱 안에서 자동 업데이트됩니다. FUSE 2 가 필요합니다(Ubuntu 22.04 sudo apt install libfuse2, 24.04 는 libfuse2t64). deb 는 sudo apt install ./Ocul-PM_*_amd64.deb 로 설치하고, 업데이트도 새 .deb 를 같은 방법으로 설치합니다 — 앱 안 자동 업데이트 대상이 아닙니다.
Windows·Linux 빌드는 릴리스마다 CI 러너에서 설치 → 실행 → 실제 앱 E2E 를 통과한 것만 올라갑니다. 통과하지 못한 버전에는 그 OS 파일이 없고, 릴리스 노트에 그 사실이 적힙니다. 실제 PC 에서 겪은 문제는 이슈로 알려 주세요 — 설정 → 데이터의 「로그 폴더」 에 앱 로그가 있습니다. 베타 졸업의 근거가 됩니다.
macOS 는 파일·다른 앱 데이터 접근 권한을 물을 수 있습니다. 공증과는 별개 관문이라 공증했다고 사라지지 않습니다 — 왜 그런지와 되돌리는 법은 문제 해결에 정리해 두었습니다.
앱 설치 없이 기록만 먼저 시작하려면 위의 Claude Code 플러그인으로도 됩니다 — 일지·플랜이 .oculpm/ 마크다운으로 쌓이고, 앱은 나중에 설치해도 그 기록을 그대로 읽습니다.
막히는 게 있으면 위키에 흔한 문제와 해법을 모아 두었습니다.
your-project/
├── AGENTS.md # 에이전트가 읽는 기록 규칙 (앱이 심고 버전 관리)
└── .oculpm/
├── journal/ # 작업 일지 — 원본(SSOT)
├── planner/ # 계획 문서
├── agents/ # 규칙의 마스터와 일지 규격(journal-spec.md)
└── index/ # 앱이 관리하는 캐시 · diff 보관
SQLite 는 화면을 빨리 그리기 위한 파생 캐시일 뿐이라 언제든 파일에서 다시 만들 수 있습니다(설정 → 데이터 → 「처음부터 다시 만들기」). 3.x 가 만든 discussion/ · rollups/ · automation/ 폴더는 앱이 더 읽지 않지만 지우지도 않습니다. 일지와 diff 에 실수로 섞여 들어간 API 키·토큰·개인키·접속 문자열은 저장 전에 자동으로 가려집니다([REDACTED]). 모양을 아는 것만 가리므로 모든 비밀을 보장하지는 않습니다 — .oculpm/config.toml 의 auto_redact_patterns 로 패턴을 더할 수 있습니다.
Tauri 2 네이티브 앱입니다. Electron 이 아니라서 dmg 가 60MB 를 넘지 않고 콜드 스타트가 1.5초 안에 끝납니다. 백엔드는 Rust(tokio · rusqlite), 프론트는 React 19 + TypeScript. 앱 안에 LLM 클라이언트도, 임베딩 모델도, API 키 저장소도 없습니다 — 화면은 파일에서 결정적으로 그립니다.
git clone https://github.com/bunhine0452/Ocul-PM
cd Ocul-PM
pnpm install
pnpm tauri dev # 개발 실행
pnpm tauri build # 그 OS 의 번들 (.dmg · NSIS .exe · AppImage/.deb)
Node 18+, pnpm, Rust stable 이 필요하고 macOS 는 Xcode Command Line Tools, Windows 는 MSVC 빌드 도구와 WebView2, Linux 는 Tauri 의 시스템 의존성(libwebkit2gtk-4.1-dev 등)과 libdbus-1-dev 도 있어야 합니다.
이 저장소 자체가 Ocul 로 추적됩니다. .oculpm/journal/ 을 열면 이 앱을 만드는 동안 에이전트들이 남긴 일지가 그대로 들어 있습니다. 버그와 아이디어는 이슈로, 마음에 들면 Star 하나 눌러 주세요.
Ocul 은 혼자 만들고 유지합니다. 앱은 앞으로도 무료지만, 만드는 데에는 시간과 비용이 듭니다. 쓰면서 도움이 됐다면 Ko-fi 에서 커피 한 잔을 보내 주셔도 좋습니다 — 일회성도, 매달도 됩니다.
후원해도, 하지 않아도 받는 기능은 똑같습니다. 아래 약속은 그대로입니다.
MIT © 2026 Kim Hyunbin
지금 이 저장소에 있는 기능은 영원히 무료·MIT 입니다. 개인 사용은 회사 안에서든 밖에서든 영구 무료(Free forever for individuals)이고, 유료화는 앞으로 만들 팀 기능(동기화 서버·팀 뷰 — 별도 모듈)에만 적용됩니다. 코어 기능을 유료 모듈로 옮기는 일은 없습니다.
기여는 CLA 없이 DCO(sign-off)로 받습니다 — 코어가 영원히 MIT 로 남기 때문에 저작권을 모아둘 이유가 없습니다.