Changelog

매주 조금씩, 꾸준히.

릴리스 121개의 전문입니다. 앱의 설정 → 업데이트 탭이 보여 주는 것과 같은 내용이고, 저장소의 CHANGELOG.md 한 장에서 이 페이지와 GitHub 릴리스 노트가 함께 나옵니다 — 세 곳이 어긋날 수 없습니다.

v3.13.0

계획을 폰이나 다른 기기에서 보려면 이제 Claude Code 에서 /oculpm:board 한 줄이면 됩니다. 활성 플랜과 항목 상태가 claude.ai 의 비공개 보드 한 장으로 올라가고, 다시 부르면 그 보드가 갱신됩니다. 보드는 읽기 전용이고 원본은 지금처럼 프로젝트의 .oculpm/planner/ 입니다. 올릴 내용은 앱이 직접 만들어 넘기므로 에이전트가 항목을 옮겨 적다 문구가 바뀌는 일이 없고, 시크릿처럼 보이는 문구는 가린 뒤 올립니다. 누구에게 보일지는 보드의 Share 메뉴에서 직접 정합니다. Claude Code 를 claude.ai 계정으로 쓸 때 동작합니다.

  • 플랜 조회도 시크릿을 가립니다. 에이전트가 계획을 읽을 때(plan_status) 손으로 쓴 플랜 문구에 키·토큰이 들어 있으면 원문 그대로 건네졌습니다. 이제 일지와 같은 마스킹을 지난 뒤 건넵니다.

Notion 연동을 걷었습니다. 설정 → 데이터의 Notion 섹션과 일지 상세의 「Notion 으로」 버튼이 사라졌습니다. 밖에서 계획을 보는 일은 위 보드가 맡습니다. 연결해 두었던 기기에서는 업데이트 뒤 처음 켤 때 키체인에 남은 Notion 토큰과 부모 페이지 설정을 한 번 지웁니다. 앱 밖으로 나가는 연결은 이제 다섯 갈래이고, 연결 승인을 받던 127.0.0.1 리스너와 oculpm.com 의 인증 교환 서버도 함께 사라졌습니다.

코드 검색이 데이터 파일에 묻히지 않습니다. 표·레코드 파일(.csv · .tsv · .jsonl · .log 등)과 8KB 넘는 .json · .txt, vendor/ · .dart_tool/ 을 색인하지 않고, 앱을 켤 때 이미 들어 있던 것을 걷습니다. 설정 파일·README·LICENSE 는 크기와 무관하게 남깁니다.

  • 같은 파일의 청크가 겹쳐 쌓이던 것을 고쳤습니다. 저장할 때마다 내용이 같아도 다시 들어가, 실측 DB 의 청크 17.8% 가 사본이었습니다. 남은 사본은 업데이트 뒤 한 번 정리되고, 내용이 그대로면 다시 임베딩하지 않습니다.
  • ~/.cache/… 나 …/target/… 아래에 있는 프로젝트는 파일을 저장해도 검색 색인이 갱신되지 않던 것을 고쳤습니다.

보이지 않는 곳: .git 째 받은 부분 클론에서 앱의 git show 가 저장소 설정이 고른 명령(uploadpack)을 띄울 수 있던 길을 막았습니다. 의미 검색 모델을 받을 때 ~/.cache/huggingface/token 을 읽어 붙이지 않습니다. 화면 정책(CSP)에 막힌 원격 이미지는 빈칸 대신 링크 자리표시로 보입니다.

v3.12.0

터미널에 찍힌 그림 경로에 마우스를 올리면 그 자리에서 그림이 보입니다. 내장 터미널의 Claude Code 가 그림을 만들고 › [image] /private/tmp/…/lineup.png (1.9MB) 처럼 경로만 남기면, 그 그림을 보려고 Finder 로 나가 숨은 임시 폴더를 찾아 들어가야 했습니다. 이제 경로에 잠깐 올리면 그림 · 파일 이름 · 크기가 카드로 뜨고, 누르면 크게 열립니다(Esc · 바깥 클릭으로 닫기). 터미널 폭이 좁아 경로가 두 줄로 갈라져 찍혀도 어느 줄에 올리든 같은 그림이 뜹니다.

  • 그림을 고르는 곳은 프로젝트 밖(에이전트의 임시 폴더 · 다운로드)이어도 되지만, 진짜 그림 파일만 엽니다 — 이름만 .png 로 바꾼 다른 파일, 폴더, 16MB 넘는 파일은 열지 않고 이유를 보여 줍니다. 그림은 앱 안에서만 그려지고 어디로도 보내지 않습니다.
  • Claude Code 가 찍은 프로젝트 파일 경로(src/…)를 누르면 지금처럼 「이 파일로 할 일」 메뉴가 뜹니다. 프로젝트 밖 파일은 열 수 없다고 알려 줍니다.
  • 새로 연 터미널부터 적용됩니다 — 업데이트 전부터 떠 있던 셸에서는 탭을 새로 열어 주세요. 앱이 터미널에 「하이퍼링크를 그릴 수 있다」(FORCE_HYPERLINK=1)고 알려서 Claude Code 가 경로를 정확한 링크로 감싸 보내게 했습니다. 다른 CLI 의 출력에도 링크가 실릴 수 있고, 셸 설정에 FORCE_HYPERLINK=0 을 두면 끌 수 있습니다.

v3.11.0

앱 안 Claude Code · Codex 도 이 기기에서 프로젝트를 신뢰한 뒤에만 시작합니다. 앱 안 에이전트는 저장소의 .claude/settings.json 훅과 .mcp.json 서버를 그대로 실행하는데, 터미널의 CLI 와 달리 그 폴더를 믿는지 묻지 않았습니다 — 남이 만든 저장소에서 그 화면을 여는 것만으로 저장소가 고른 명령이 내 권한으로 돌 수 있었습니다. 이제 신뢰하지 않은 프로젝트에서는 「이 프로젝트를 신뢰할까요?」 를 먼저 묻고, 그 저장소에서 실행될 수 있는 설정 파일 이름을 보여 줍니다. 신뢰는 언어 서버와 같은 하나입니다 — v3.10 에서 언어 서버를 이미 켠 프로젝트는 그대로 시작하고, 처음인 프로젝트는 한 번 눌러 주세요. 설정 → 코드에서 거둘 수 있습니다.

  • 오늘 · 변경 화면이 저장소 설정의 명령을 돌리지 않습니다. 앱은 아무것도 누르지 않아도 프로젝트에서 git status · git diff 를 도는데, 압축 파일이나 공유 폴더처럼 .git 째 받은 저장소는 .git/config 의 fsmonitor · 필터 · 외부 diff 와 .git/hooks 의 훅으로 실행할 명령을 고를 수 있었습니다. 이제 앱이 띄우는 git 은 그런 명령을 모두 끈 채로 돌고(git-lfs 표준 필터는 그대로), 2분이 넘게 걸리면 멈춥니다.
  • 플러그인 번들은 미리 본 그대로만 설치됩니다. 미리보기와 설치가 따로 내려받아, 그 사이 작성자가 브랜치를 바꾸면 본 것과 다른 MCP 서버 명령이 깔릴 수 있었습니다. 이제 바이트가 다르면 설치하지 않고 다시 미리보라고 알립니다.
  • 테마 링크의 주소 확인을 피해 가던 모양(https://다른곳?@oculpm.com/…)을 막고, 테마를 받을 때 허용된 곳이 아닌 리다이렉트는 따르지 않습니다.
  • 휴대폰 연결로 .env · 키 파일을 읽을 수 없습니다 — 색인에서 빼는 비밀 파일 목록을 그 경로에도 씁니다.

창을 열 때 이미 일어난 일을 놓치지 않습니다. 화면이 백엔드의 알림만 기다리다가 창이 열리기 전에 지나간 알림을 놓치는 자리가, v3.10.0 의 신뢰 칩 말고도 더 있었습니다.

  • 새 창 · 새로고침한 창에서 이미 돌던 작업 세션이 「없음」 으로 보이고, 명령 팔레트의 「세션 끝내기」 가 「활성 세션 없음」 이라고 답하던 것.
  • 새 창의 탭에 이미 돌고 있는 에이전트의 바쁜 점이 안 보이던 것.
  • 자동화가 화면을 여는 사이 끝나면 「실행 중」 이 남아 있던 것.
  • 코드 화면 상태줄이 다른 언어의 서버(예: Python) 상태로 덮이던 것, 이미 켜진 서버의 「인덱싱 중 · 준비됨」 을 새 편집기가 못 보던 것.

탭을 닫거나 프로젝트를 지우거나 앱을 끄면 언어 서버와 디버거도 내립니다. 예전에는 설정에서 직접 끌 때만 내려가, rust-analyzer 처럼 1GB 넘게 쓰는 서버가 앱을 끈 뒤에도 남을 수 있었습니다.

  • 데이터베이스를 열지 못하면 이유를 보이고 묻습니다. 예전에는 설명 없이 꺼졌습니다. 이제 경로와 원인을 보여 주고, 「새로 시작」 을 누르면 지금 파일을 지우지 않고 옆으로 옮겨 둔 뒤 빈 데이터베이스로 시작합니다(일지 · 플랜은 프로젝트 폴더에서 다시 읽습니다). 더 새 버전의 앱이 만든 데이터베이스는 열지 않고, 데이터를 지우는 업데이트 앞에서는 사본을 하나 남깁니다.
  • 변경 화면의 diff · 이미지 비교가 큰 파일에서 앱의 다른 작업을 붙잡지 않습니다.

빌드 쪽도 단단해졌습니다 — GitHub Actions 를 전부 커밋으로 고정하고, Windows · Linux 의존성까지 라이선스 · 취약점 검사에 넣었으며, 앱에 실리는 npm 의존성의 알려진 취약점을 0 으로 맞췄습니다. 이번 라운드의 출처는 저장소 SECURITY.md 의 「외부 리뷰 이력」 에 있습니다.

v3.10.1

코드 화면에서 「언어 서버 꺼짐 · 신뢰하고 켜기」 가 뜨지 않던 것을 고쳤습니다. v3.10.0 부터 언어 서버는 이 기기에서 프로젝트를 신뢰한 뒤에만 뜨는데, 그 사실을 알리는 상태줄 칩이 편집기를 막 열었을 때 나타나지 않았습니다 — 그래서 자동완성 · 진단이 이유 없이 꺼진 것처럼 보였습니다. 이제 .rs · .ts · .py · .go 파일을 열면 편집기 아래 상태줄 오른쪽에 칩이 서고, 한 번 누르면 그 프로젝트의 언어 서버가 켜집니다. 설정 → 코드 → 언어 서버의 「신뢰하기」 로도 켜고 거둘 수 있습니다.

v3.10.0

편집기에서 파일을 여는 것만으로 저장소의 코드가 돌던 길을 막았습니다. 코드 화면의 언어 서버(자동완성 · 진단을 맡는 Rust · TypeScript · Python · Go 서버)는 읽기 도구가 아닙니다 — rust-analyzer 는 그 저장소의 build.rs 와 매크로를 실행하고, 그보다 먼저 저장소가 고른 툴체인과 컴파일러 설정을 따릅니다. 남이 만든 저장소에서 .rs 파일 하나를 열면 그 코드가 내 권한으로 돌 수 있었습니다. 이제 언어 서버는 이 기기에서 프로젝트를 신뢰한 뒤에만 뜹니다 — 편집기 상태줄의 「언어 서버 꺼짐 · 신뢰하고 켜기」 를 한 번 누르면 되고, 설정 → 코드에서 거둘 수 있습니다. 이미 쓰던 프로젝트도 업데이트 뒤 한 번 눌러 주세요. 설정 문서(config apply)로 신뢰를 켜거나 언어 서버 실행 명령을 바꾸는 길도 막았습니다.

  • AI 패널이 근거로 싣는 코드 조각에서도 비밀을 가립니다. 패널은 질문과 관련된 코드를 의미 검색으로 찾아 함께 보내는데, 그 조각은 마스킹을 지나지 않았습니다 — 코드에 박힌 키나 .gitignore 에서 빠진 .env 가 모델 제공자에게 그대로 갈 수 있었습니다. 이제 꺼내는 순간 가립니다.
  • .env · 키 · 자격 증명 파일은 .gitignore 와 상관없이 색인하지 않습니다 (.env.* · .npmrc · .netrc · id_rsa 류 · *.pem 등). 로컬 히스토리와 같은 목록입니다.
  • 지운 파일이 검색에 계속 떠오르던 것. 앱이 꺼져 있을 때 지운 파일은 재색인을 누르기 전까지 색인에 남았습니다 — 재 보니 색인의 11% 가 디스크에 없는 파일이었습니다. 이제 앱을 켤 때 프로젝트마다 디스크와 맞춥니다(파일이 있는지만 보므로 빠릅니다).
  • 허락한 배경 작업이 나중에 바뀌면 다시 묻습니다. 자동 화해 · 일지 초안 · 스케줄 · 감시의 허락이 그때 본 스위치와 지시문에 묶입니다 — 허락 뒤에 git pull 이 새 스케줄을 켜거나 지시문을 바꾸면 다시 확인 대기로 돌아가고, 설정 → 자동화에서 허락을 거둘 수 있습니다. 켜진 자동화가 있는 프로젝트는 업데이트 뒤 한 번 더 묻습니다.
  • 프로젝트 밖에 닿던 길 셋과 너무 넓은 폴더. 이미지 미리보기의 「이전」 · 편집기 줄 표시가 ../옆-저장소 경로로 다른 저장소의 커밋을 읽던 것, 플랜 ▶실행이 .oculpm/journal/ 밖 파일을 프롬프트에 싣던 것, 파일 가져오기가 깨진 링크를 따라 밖에 파일을 만들던 것을 막았습니다. /Users 나 /etc 같은 홈의 위 · 최상위 시스템 폴더도 프로젝트로 받지 않습니다.
  • 창을 보고 있지 않으면 움직임을 멈춥니다. 터미널의 「실행 중」 숨쉬기처럼 계속 도는 애니메이션이 다른 앱을 쓰는 동안에도 화면을 깨우고 있었습니다.

논의 편집기를 다시 만들었습니다.

  • 쓰는 동안 자동완성이 뜨지 않습니다. 문서에 있는 단어를 타자마다 제안하던 창을 껐습니다.
  • 넓은 창에서 문장 가운데가 잘려 보이던 것. 원문 모드에서 화면은 78자에서 자르고 줄은 창 끝에서 바뀌어, 일부가 보이지 않은 채 편집됐습니다.
  • 편집하다 다른 화면에 다녀오면 초안이 사라지던 것. 이제 돌아오면 이어서 열립니다(앱을 끄기 전까지).
  • 화면이 단정해졌습니다 — 머리 줄이 셋에서 둘로 줄고, 원고는 본문 글꼴로 가운데 한 칼럼에 씁니다. 왼쪽 개요가 지금 쓰는 섹션을 짚고 누르면 그리로 가며, 읽기 화면이 모르는 제목을 표시합니다. 아래 상태줄에 섹션 · 글자 수 · 단축키가 있고, 나란히 보기는 섹션 단위로 스크롤이 맞습니다. 미리보기에 {#id} 와 로그 경계 주석이 찍히지 않습니다.

보안 문제는 이제 GitHub 의 비공개 신고로 받습니다 — 창구와 외부 리뷰 이력은 저장소의 SECURITY.md 에 있습니다.

v3.9.0

저장소에 심은 링크가 프로젝트 밖에 닿지 못합니다 — 이번에는 프로젝트 전체에서. v3.8.0 노트에 「심볼릭 링크가 쓰기를 프로젝트 밖으로 돌리지 못합니다」 라고 적었지만, 그때 막은 것은 .oculpm/ 폴더 안과 편집기 저장뿐이었습니다. 두 번째 외부 리뷰가 그 빈자리를 짚었고, 코드를 다시 훑으니 리뷰가 말하지 않은 더 큰 자리가 나왔습니다.

  • 프로젝트를 열 때마다 하는 쓰기가 링크를 따라갔습니다. 앱은 프로젝트를 열 때마다 AGENTS.md · .claude/CLAUDE.md 같은 규칙 파일과 .gitignore 에 자기 블록을 맞춰 넣습니다. 그 자리가 링크면 — 예를 들어 AGENTS.md 가 ~/.zshrc 를 가리키면 — 링크 대상의 내용이 프로젝트 파일로 복사됐고, .claude 폴더가 홈의 ~/.claude 를 가리키면 블록이 모든 프로젝트에 실리는 전역 Claude 지침에 써졌습니다. 이제 링크인 자리는 건드리지 않고, 설정 → ocul-pm → 에이전트의 「지금 동기화」 가 어느 파일을 왜 건너뛰었는지 보여 줍니다. MCP 서버 등록(.mcp.json), Claude 훅 설정, Cursor 규칙 미러, 규칙·스킬 화면의 프로젝트 범위도 같은 규칙을 따릅니다.
  • 편집기 밖의 창구들. 외부 편집기로 열기 · 심볼 펼쳐 보기 · 이미지 미리보기 · 변경 화면은 경로를 글자로만 확인해서, docs → ~/.config 같은 폴더 링크를 그대로 따라갔습니다(편집기 자신의 읽기·저장·만들기·지우기·이름 바꾸기는 이미 막혀 있었습니다). 이제 모든 창구가 링크를 끝까지 풀어 프로젝트 안인지 확인합니다. 자동 색인과 로컬 히스토리도 링크로 이어진 파일을 담지 않습니다.
  • 일지의 변경 기록이 프로젝트 밖 파일을 읽던 것. 일지에 적힌 파일 경로가 절대경로이거나 .. 를 지나면, 그 파일을 새 파일처럼 통째로 읽어 변경 기록에 담았습니다.
  • 로컬 히스토리를 열다 멈추던 것. 히스토리 기록 파일에 한글이 섞인 값이 있으면 그 파일의 판 목록을 여는 순간 멈췄습니다.

비밀 마스킹이 꺼지던 길 둘. 프로젝트의 설정 파일이 깨져 있으면 마스킹이 내장 패턴까지 통째로 꺼졌습니다 — 이제 설정을 읽지 못해도 내장 패턴은 늘 적용됩니다. 릴리스 노트 초안이 문체 표본으로 읽는 CHANGELOG.md 도 이제 모델에 보내기 전에 가립니다. 모델에 가는 자리를 세는 테스트가 중간 함수를 거치는 호출을 보지 못해 생긴 빈틈이어서, 그 테스트를 새로 짰습니다.

화면 머리가 작아졌습니다. 화면마다 맨 위에 서 있는 머리(제목과 경로 줄)가 화면을 위한 틀이라기보다 페이지 제목처럼 컸습니다. 높이를 52 → 44px, 제목을 17 → 14px 로 줄이고, 콘텐츠 판의 모서리도 덜 둥글게(20 → 12px) 했습니다. 사이드바의 프로젝트 이름, 설정의 섹션 제목, 시작 탭의 「이어서 일하기」 이름도 한 단씩 내렸습니다.

  • 편집기의 우클릭 메뉴 · 자동완성 · 이름 바꾸기 칸이 편집면 글자(13px)보다 큰 14~17px 로 뜨던 것도 고쳤습니다. 글자 크기 체계를 바꾼 직후 옛 번호로 들어온 자리였습니다.

v3.8.0

남이 만든 저장소를 열 때의 위험을 닫았습니다. 외부 보안 리뷰가 짚은 것을 코드에서 하나씩 다시 확인하고, 맞는 것을 고쳤습니다. 대부분에 공통점이 하나 있습니다 — .oculpm/ 폴더와 그 안의 설정은 저장소에 함께 실려 오므로, 그 안의 것은 저장소를 만든 사람이 정한 것입니다.

  • 저장소 설정만으로는 배경 AI 작업이 돌지 않습니다. 자동 화해 · 일지 자동 초안 · 스케줄 · 파일 감시는 .oculpm/config.toml 의 스위치라서, 남의 저장소를 추가하면 그 사람이 켜 둔 것이 내 API 키로, 내 Claude Code 대화를 들고 돌았습니다. 배경 모델을 고르지 않았으면 대화 모델을 그 자리에 자동으로 채우기까지 했습니다. 이제는 이 기기에서 허락해야 돕니다 — 설정에서 스위치를 직접 켜면 그것이 곧 허락이고, 저장소가 켜 둔 것은 오늘 화면의 「이 저장소의 설정이 배경 AI 작업을 켜 두었어요」 카드가 묻습니다. 전에 켜 두었던 프로젝트도 업데이트 뒤 이 카드에서 한 번 눌러야 다시 돕니다. 「지금 실행」처럼 직접 누른 실행은 그대로입니다.
  • 비밀 마스킹이 넓어졌고, 설정으로 끌 수 없습니다. 기본 패턴이 AWS 액세스 키 · sk- · ghp_ · Slack 넷뿐이었고, 그마저 설정 파일의 값이라 저장소가 auto_redact_patterns = [] 한 줄로 끌 수 있었습니다. 이제 GitHub(fine-grained · OAuth 계열) · GitLab · Stripe · Google · npm · PyPI · Hugging Face 토큰, JWT, PEM 개인키, AWS 시크릿 키, Bearer 토큰, 접속 문자열의 user:pass@, .env 꼴의 PASSWORD= 같은 줄을 언제나 가립니다. 설정의 목록은 이제 더 가릴 것을 적는 곳입니다. 그리고 일지 자동 초안 · 대화 가져오기 · 자동화가 모델에 보내기 전에도 가립니다 — 전에는 돌아온 답만 가려서, 대화에 붙여 넣은 키가 배경 모델 공급자에게 먼저 건너갔습니다.
  • 저장소에 심어 둔 심볼릭 링크가 쓰기를 프로젝트 밖으로 돌리지 못합니다. 편집기의 저장(전역 바꾸기 · 로컬 히스토리 되돌리기 포함)이 이름이 정해진 임시 파일을 거쳐서, 그 이름의 링크를 미리 넣어 둔 저장소에서는 저장한 내용이 링크가 가리키는 곳 — 예를 들어 홈의 설정 파일 — 에 써졌습니다. 일지 경로 중간의 폴더 링크, 기록 파일 링크, 플러그인 훅의 쓰기도 같은 길이었습니다. 이제 .oculpm/ 안에 링크가 있는 프로젝트는 열지 않고 이유를 말합니다.
  • 파일시스템 루트나 홈 폴더 자체는 프로젝트로 추가되지 않습니다. 들이면 그 자리에 .oculpm/ 과 규칙 파일이 깔리고 감시가 디스크 전체를 걸었습니다.

앱 화면에 콘텐츠 보안 정책(CSP)을 켰습니다. 앱 화면이 부를 수 있는 기능에는 터미널처럼 명령을 실행하는 것이 있어서, 화면에 스크립트를 끼워 넣는 결함이 하나라도 생기면 곧 컴퓨터를 조작당하는 것이 됐습니다. 이제 앱 화면은 앱에 든 파일만 실행하고, 원격 이미지도 불러오지 않습니다 — 에이전트가 일지에 적은 ![](https://…) 이미지가 화면을 여는 순간 바깥에 요청을 보내던 길도 함께 닫혔습니다(그런 이미지는 이제 비어 보입니다). Windows · Linux 실제 앱으로 모든 화면을 돌며 정책 위반이 0건인지, 정책이 실제로 걸려 있는지를 릴리스마다 확인합니다.

그 밖에

  • Claude Code 어댑터를 고정된 목록대로만 설치합니다. Claude Code 화면을 처음 열 때 깔리는 어댑터가 딸린 패키지를 설치하는 순간의 최신으로 받았습니다. 이제 모든 패키지의 버전과 해시가 고정된 목록대로만 깔고, 하나라도 다르면 설치를 멈추며, 설치 스크립트도 돌리지 않습니다. Codex 어댑터는 자기 폴더로 옮겨 갔습니다(이미 깔린 것은 그대로 씁니다).
  • 승인 없이 파일을 고치고 명령을 실행하는 권한 모드(bypassPermissions · dontAsk, Codex 의 full-access)를 메뉴에서 고를 때 한 번 더 묻습니다. ⇧Tab 은 원래부터 이 모드들을 건너뜁니다.
  • 플러그인 설치 미리보기가 MCP 서버가 실행할 명령을 보여 줍니다. 번들의 훅과 실행 파일은 원래 설치하지 않지만, MCP 서버 정의는 Claude Code 가 그 프로젝트에서 실행할 명령입니다 — 이제 설치를 누르기 전에 그 명령줄이 보입니다.
  • Notion 연결이 브라우저 기록에 토큰을 남기지 않습니다. 승인을 마치고 앱으로 돌아오는 주소에 접근 토큰이 실려 있었습니다. 이제 한 번만 쓰이는 코드만 실리고, 앱이 그것을 토큰으로 바꿉니다.
  • Windows 에서 관리자 권한으로 띄운 앱이 같은 사용자의 일반 프로세스가 먼저 만든 터미널 통로에 붙을 수 있던 것을 막았습니다.
  • 개인정보 안내의 「밖으로 나가는 것」 목록에 앱 안 Claude Code · Codex 를 쓸 때의 통신과 어댑터 설치를 더했습니다 — 목록이 그것을 빼먹고 있었습니다.

v3.7.0

「세션」 화면을 걷어냈습니다. 한 프로젝트에 붙은 에이전트끼리 서로를 보고, 묶고, 일을 넘기던 에이전트 간 협업(A2A)은 쓰임에 비해 표면이 컸습니다 — 화면 하나, 설정의 외부 HTTP 문, 에이전트용 도구 일곱 개, 그리고 모든 프로젝트의 AGENTS.md 에 실리는 규칙 한 절. 이번에 전부 걷었습니다.

  • 사이드바의 「에이전트」 줄은 이제 Claude Code · Codex 두 갈래입니다. 세션 화면에 머물러 있던 프로젝트는 다음에 열 때 오늘 현황으로 갑니다.
  • 에이전트가 쓰는 oculpm MCP 도구는 일곱 개(일지 쓰기·찾기·읽기, 계획 상태·갱신·만들기, 추적 시작)로 줄었습니다. 플러그인을 이 판으로 올리면 agent_register · claim_paths 같은 협업 도구가 목록에서 빠집니다.
  • 추적 중인 프로젝트의 AGENTS.md 규칙에서 「여럿이 함께 일할 때」 절이 빠집니다 — 없는 도구를 부르라는 규칙이 에이전트에게 남지 않게. 다음 동기화 때 자동으로 바뀝니다.
  • 업데이트 전의 플러그인이 아직 .oculpm/agents/ 아래 옛 자리에 쓰더라도 앱은 그것을 무시합니다. 남은 폴더는 지워도 됩니다.

연결만 안 돼 있던 기능 둘.

  • 편집기에서 파일·폴더 이름을 바꾸면 찍어 둔 중단점이 사라졌습니다. 중단점을 새 경로로 옮기는 장치는 있었는데 아무도 부르지 않았습니다 — 그래서 이름을 바꾼 파일의 중단점이 거터에서 사라지고, 다음 디버그 세션은 없는 경로로 중단점을 보냈습니다. 이제 이름을 바꾸거나 트리에서 끌어 옮기면 중단점이 따라갑니다(폴더면 그 안 전부).
  • 일지 기록 파일이 손상돼 앱이 고쳤을 때 알려 주는 알림이 한 번도 뜰 수 없었습니다. 앱은 손상된 꼬리를 잘라 백업해 두면서도 그 사실을 로그에만 남기고 있었습니다.

프로젝트를 지워도 그 기록이 데이터베이스에 남았습니다. 일지·계획·논의의 캐시는 프로젝트 행과 묶여 있지 않아, 프로젝트를 지워도 따라 지워지지 않았습니다 — 만드는 사람의 기기에서 지운 프로젝트 일곱 개의 행이 약 1만 개 남아 있었습니다. 이제 프로젝트와 함께 지우고, 이미 남은 것은 이번 업데이트가 한 번 걷습니다(원본인 .oculpm/ 파일은 건드리지 않습니다).

  • 로그 파일에 앱의 경고·오류가 두 줄씩 적히던 것, 프로젝트 안의 PDF 가 바뀔 때마다 색인 경고가 쌓이던 것.
  • 화면에 새던 내부 작업명 — 설정의 「(W4 dogfooding fix)」 같은 메모와 「Inactivity timeout」 · 「Resume grace」 · 「drift」 같은 반쪽 영어를 사람의 말로 바꿨습니다. 브랜치 화면의 릴리스 노트 초안이 Ocul-PM 자신의 릴리스 체크리스트를 모든 프로젝트에 보여 주던 것도 고쳤습니다.

v3.6.0

Windows 와 Linux 에서도 씁니다 — 베타. 지금까지 공식 빌드는 Apple Silicon 맥뿐이었습니다. 이제 Windows 10 2004 이상 · 11(x64)은 설치 파일(Ocul-PM_x.y.z_x64-setup.exe)로, Linux x64 는 AppImage 와 deb 로 받습니다 — Linux 는 glibc 2.35 이상(Ubuntu 22.04 · Debian 12 이후)이면 됩니다. Windows 설치본과 AppImage 는 macOS 처럼 앱 안에서 자동 업데이트되고, deb 는 패키지 관리자로 새 버전을 깝니다. 만드는 사람에게 Windows · Linux 기기가 없어서, 릴리스마다 CI 러너가 설치 → 실행 → 실제 앱으로 열다섯 화면 · 터미널 한글 입력 · 일지 기록까지 돌려 보고 통과한 OS 만 싣습니다. 통과하지 못한 버전에는 그 OS 파일이 없고 릴리스 노트에 그 사실이 남습니다. macOS 업데이트는 이 과정과 떨어져 있어, Windows · Linux 빌드가 실패해도 맥 사용자는 영향을 받지 않습니다.

  • Windows 는 코드 서명이 없는 베타입니다 — 처음 실행하면 SmartScreen 이 「Windows의 PC 보호」 를 띄웁니다. 추가 정보 → 실행 을 누르면 이어집니다. 관리자 권한 없이 사용자 폴더에 설치되고, Visual C++ 런타임이 없는 PC 에서는 설치 파일이 그것을 먼저 깝니다(그때만 확인 창이 한 번 뜹니다). Windows 10 2004 보다 낮은 버전에서는 설치 파일이 이유를 말하고 멈춥니다.
  • 앱 안 업데이트를 공개 전에 실제로 돌려 봤습니다 — 한 판 낮은 설치본을 깔고, 로컬 서버가 내준 새 판으로 올라가 다시 뜨기까지를 Windows·Linux 러너에서 매번 확인합니다. 서명이 틀린 파일은 끝까지 받고도 설치하지 않습니다. deb 로 깐 앱은 업데이트를 확인하는 대신 「패키지 관리자로 업데이트해요」 를 알려 주고, 어떤 판에 그 OS 빌드가 빠졌으면 오류 대신 「이 OS 용 빌드가 아직 없어요」 라고 말합니다.
  • Windows 에서도 업데이트가 터미널 세션을 끊지 않습니다 — macOS 에서처럼 업데이트 뒤에도 열어 둔 터미널 탭과 그 안에서 돌던 것이 그대로 돌아옵니다. 세션을 닫을 때 그 셸에서 띄운 VS Code 같은 창 프로그램은 살아남고, 콘솔 프로그램만 끝납니다(맥과 같게). PowerShell 에서 한글이 깨지던 것도 고쳤습니다.
  • Windows 에서 알아 둘 것 — 어떤 프로그램이 작업 폴더로 쓰는 폴더는 옮기거나 지울 수 없어서, 앱의 터미널·언어 서버가 도는 프로젝트 폴더를 옮기려면 그 탭을 닫거나 앱을 끄세요(다른 편집기도 같습니다). Claude Code 플러그인의 훅은 돌지만 MCP 서버는 뜨지 않으니, 연동 설정의 「MCP 서버」 등록을 켜세요. 새 창은 Ctrl+Shift+N 입니다.
  • Linux AppImage 는 FUSE 2 가 필요합니다 (Ubuntu 22.04 libfuse2 · 24.04 libfuse2t64). deb 는 필요 없습니다. 세션 D-Bus 가 없는 환경에서도 앱이 두 번 뜨지 않습니다.
  • 문제를 알려 주는 길 — 설정 → 진단의 「진단 정보 복사」 가 앱·OS·WebView 판과 설치 형식을 붙여 넣을 글로 만들고, Windows·Linux 의 「버그 리포트」 는 그 내용을 채운 양식을 엽니다. 아직 실제 PC 에서 보지 못한 것 — Linux 한글 입력기(fcitx · ibus)의 후보창, Wayland 에서의 트레이 위치, 배율이 다른 모니터, 일반 사용자 계정에서의 권한 확인 창 — 은 이슈로 알려 주세요. 베타를 떼는 근거가 됩니다.

Claude Code · Codex 어댑터를 올렸습니다 (Claude Code ACP 0.77.0 → 0.81.0, Codex ACP 1.8.0 → 1.13.0). 두 어댑터가 턴마다 알려 주는 파일 변경 목록이 도구 기록에서 나오도록 바뀌어 늘 「전부가 아닐 수 있다」 는 표시가 붙어 오는데, 그대로 두면 모든 턴 아래 「전부가 아닐 수 있어요」 줄이 달렸습니다. 이제 목록이 잘렸거나 실제 변경과 어긋날 때만 알립니다. 셸 승인 카드의 제목이 명령 원문이 되어 같은 명령이 두 번 보이던 것은 「명령」 이름표로 묶고, Codex 의 로그아웃 안내는 codex login 으로 이어 줍니다.

계획 문서 편집이 엉뚱한 줄을 건드리던 결함들 — 모든 OS.

  • 항목 제목 본문에 {#…} 글자가 들어 있으면 그것이 항목 id 를 가로챘습니다. 이제 줄 끝의 앵커만 id 이고, 같은 이유로 체크가 앞 항목에 표시되던 것도 사라졌습니다. VS Code 확장도 같은 규칙으로 읽습니다.
  • ## 단계 {#p} 처럼 앵커가 달린 단계에 항목을 더하면 같은 이름의 단계가 하나 더 생겼습니다.
  • 이름에 「결정」 이 든 단계(「결정 반영」 등)를 결정 섹션으로 오인해 단계 이동이 실패했습니다. 반대로 단계 이름으로 「결정」 을 주면 결정 섹션 전체가 지워지거나 항목이 계획에서 사라질 수 있던 길(화면 편집 · 에이전트의 계획 만들기 둘 다)은 이제 거절합니다.
  • Windows 의 Git 기본 설정으로 받아 줄바꿈이 CRLF 인 계획·논의·주간 요약을 읽고 쓸 때 원래 줄바꿈을 지킵니다 — 주간 요약은 목록에서 통째로 사라지고 있었습니다.
  • 새 프로젝트의 하루 시간대가 서울로 고정돼 다른 시간대에서는 오늘·일지 날짜가 하루 어긋났습니다 — 이제 시스템 시간대가 기본이고, 이미 적힌 값은 그대로입니다.
  • 프로젝트를 추가하면 색인이 두 번 동시에 돌던 것, 터미널에 빠르게 친 키가 순서를 잃을 수 있던 것, 일지 기록의 파일 경로가 Windows 에이전트에서 \ 로 들어오던 것, 파일 이름을 바꾸면 새 이름을 놓치던 것(Linux · Windows).
  • macOS 에서 진단이 앱에 딸려 온 claude 를 찾지 못하고 PATH 의 claude 를 가리키던 것.

v3.5.0

눌러도 아무 일이 없던 링크들. 터미널의 하이퍼링크(gh·ls --hyperlink·에이전트 TUI 가 내는 것)를 클릭하면 브라우저가 열리는 대신 아무 일도 일어나지 않았습니다. 로그에만 「권한 거부」 두 줄이 남았습니다 — 터미널 라이브러리의 기본 동작이 웹뷰에서 막히는 브라우저 대화상자를 부르고 있었고, 그 호출이 실패한 자리에서 열기까지 함께 죽었습니다. 편집기(코드 화면·문제 해결 편집기) 본문의 URL 을 ⌘클릭할 때도 같은 이유로 조용히 아무 일도 없었습니다 — 이쪽은 로그조차 남지 않았습니다. 이제 앱 안에서 밖으로 나가는 링크는 전부 한 통로로 모여 기본 브라우저로 열립니다.

한글을 칠 때마다 터미널이 지웠다 다시 쓰고 있었습니다. 음절 하나를 확정할 때마다 셸에 지움 문자 하나와 같은 글자를 다시 보내는 왕복이 났습니다. 보이는 결과는 맞아서 눈에 띄지 않았지만, 그 왕복이 「확정했는데 에코가 없다」는 진단을 정상 입력마다 울려 진단 덤프가 하루 수십 건씩 로그를 채웠습니다(주 4MB). 로그에 쌓인 트레이스 150건을 전수 집계해 글자 유실은 없다는 것을 확인하고, 확정 쌍의 삭제 쪽을 미루도록 고쳤습니다 — 조합을 취소하면 그때 지웁니다.

프로젝트를 지워도 그 흔적이 창에 남았습니다. 지운 프로젝트의 탭이 이름 대신 번호로 스트립에 남고, 그 탭을 누르면 「프로젝트를 찾을 수 없다」로 실패했습니다. 게다가 삭제가 데이터베이스 재구축이 끝날 때까지 응답하지 않아 그동안 앱 전체가 몇 초씩 굳었고, 그래서 사용자는 이미 사라진 탭의 × 를 여러 번 누르고 있었습니다. 이제 행을 지우기 전에 그 프로젝트의 탭과 분리된 터미널 창을 닫고, 정리 작업은 뒤에서 돌립니다.

시작 탭에서 연 설정의 네 곳이 크래시 카드였습니다. 「컨텍스트」·「자동화」와 「데이터」 탭 안의 두 섹션이 프로젝트 창 밖에서는 그대로 예외를 던졌습니다. 넷 다 프로젝트가 없을 때의 안내 문구는 이미 갖고 있었는데, 그 문구에 닿기 전에 죽고 있었습니다.

  • 프로젝트 밖을 가리키는 심볼릭 링크가 코드 트리에서 평범한 파일처럼 보이다가, 클릭해야 보안 거절 문구를 보여 주던 것 — 이제 트리에서 흐리게 표시하고 왜 열 수 없는지 알려 줍니다. 프로젝트 안을 가리키는 링크 폴더는 폴더로 펼쳐집니다. 겸해서 프로젝트 경로 자체가 심볼릭 링크 아래에 있으면 파일 목록이 통째로 비던 잠복 결함도 닫혔습니다.
  • 확인 대화상자를 다시 그렸습니다 — 무엇이 종료되는지 목록으로 보여 주고, 뜬 뒤 Enter 가 곧 확인입니다(지금까지는 취소 버튼에 포커스가 가 아무 일도 안 일어난 것처럼 보였습니다). 삭제·초기화 확인 열일곱 곳이 같은 껍데기를 씁니다.
  • 안쪽: 화면을 떠날 때 이벤트 해제 순서가 뒤집혀 있어 정리 직후 도착한 알림이 경고를 남기던 것(하루 수십 건), 언어 서버가 「내용이 바뀌었으니 다시 물어라」는 정상 신호를 오류로 적던 것, 파일이 사라져 색인을 건너뛴 일상적인 경우를 경고로 남기던 것.

v3.4.0

첫 일지가 남았는지를 이제 그 대화 단위로 확인합니다. 지금까지 오늘 화면이 기록의 시작을 아는 방법은 총 일지 수뿐이었습니다 — git 백필로도, 옆 터미널의 대화로도, 손으로 쓴 일지로도 오르는 숫자라 방금 돌린 에이전트가 기록했는지는 말하지 못했습니다. 일지가 한 건도 없는 프로젝트를 열면 이제 「첫 기록」 카드가 서고, 준비(Claude Code·플러그인·훅 연결) → 대화 진행 중 → 그 대화가 남긴 첫 일지 → 기록 없이 끝남 → 귀속 불명의 다섯 상태를 대화 id 로 판정합니다. 백필이나 옆 대화의 일지로는 성공이 되지 않고, 기록이 남았다는 뜻이지 코드가 검증됐다는 뜻은 아니라고 카드가 스스로 말합니다. 첫 5분의 문구 아홉 곳도 실제 조건에 맞췄습니다 — 일지는 앱이 아니라 규칙을 읽은 에이전트가 쓰고, 초기화는 프로젝트를 열 때 일어나며, 플러그인 훅은 턴 종료와 세션 종료 둘입니다.

다음 세션이 지난 작업을 이어받습니다. Claude Code 플러그인의 SessionStart 훅이 활성 계획의 미완 항목 뒤에 마지막 작업 일지 3건을 시작 컨텍스트에 싣고, 무엇을 실었는지 .oculpm/hooks/resume-delivered.jsonl 에 한 줄 남깁니다. 오늘 화면의 「이어하기」 카드가 같은 자료(마지막 작업·다음 항목)를 보여 주고, 어느 대화의 시작 컨텍스트에 포함됐는지까지 적습니다 — 참조했는지·도움이 됐는지는 알 수 없다고 정직하게. 「터미널에서 이어서 작업」이 그 경로를 엽니다. Codex 에서도 같은 훅이 돌도록 프로젝트 루트 폴백을 맞췄습니다.

일지 700건 시대의 찾기·잇기·묶기. 일지가 주 100건씩 늘면 문제는 성능이 아니라 찾고 믿고 묶는 일이었습니다.

  • 찾기 — journal_search 가 디스크 전수 스캔 대신 SQLite 캐시와 관련도 랭킹(제목 > 태그 > 파일 > 본문, 최근 가산)으로 답합니다(727건에서 132→25ms). 검색 화면에 「일지」 스코프가 생기고, 의미 검색이 일지와 주간 요약까지 찾습니다.
  • 잇기 — 같은 파일·같은 계획 항목·제목 유사도로 관련 일지를 제안하고 1클릭으로 원본 frontmatter 에 잇습니다. journal_write 는 같은 파일을 만진 지난 결함에 스스로 후속을 겁니다. 캐시에 related 칸이 없어 일지 상세의 관련 칩이 한 번도 안 뜨던 잠복 결함도 함께 고쳤습니다.
  • 묶기 — 태그 사전과 정규화 힌트, 「태그 정리」 시트로 병합, mcp-tool 같은 출처 표식은 통계에서 제외. .oculpm/rollups/ 주간 요약 층을 두고 journal_search 와 AI 컨텍스트가 요약을 먼저 보고 원본으로 내려갑니다. 주간 보고의 60건 상한은 청킹으로 풀었습니다.
  • 오늘 화면 — 반복 수정 파일(핫스팟) 카드, 주간 작업 속도와 계획 완료 예상 카드, 이번 주 요약 카드. 미검토 일지 대기함과 일괄 확인. 계획 로그가 40행을 넘으면 별도 파일로. 설정 진단에 색인 사용량과 정리 버튼. 태그 사이 일지로 릴리스 노트 초안.
  • 숨은 프로젝트 탭으로 새던 둘 — 탭 A 의 터미널 ⌘D 가 배경 탭의 터미널까지 쪼개던 것(보이는 면만 듣습니다), 새 일지 토스트의 「열기」가 보고 있던 다른 프로젝트의 일지 화면으로 가던 것(그 프로젝트 탭을 활성화해 엽니다).

v3.3.0

앱을 두 개 띄운 순간 멀쩡한 감시가 끊겼다 되살아나기를 반복했습니다. 설치본을 켜 둔 채 개발 빌드나 두 번째 인스턴스가 뜨면 프로젝트의 락이 하나씩 새 인스턴스로 넘어가는데, 그때마다 감독관이 즉시 깨어나 「이 워처가 살아 있나」 판정까지 함께 돌렸습니다. 판정은 60초 전에 심어 둔 프로브가 처리됐는지를 보는 것이라, 0.5초 간격으로 깨어난 감독관은 방금 심은 프로브가 아직 닿지 않은 것을 「먹통」으로 읽어 워처를 끊고 되살렸습니다 — 로그에는 2분 동안 52번 남았습니다. 이제 락 인계 웨이크는 락을 놓는 일만 하고, 심은 지 20초가 안 된 프로브는 판정 근거로 쓰지 않습니다.

계획이 라운드마다 하나씩 늘어 잠긴 계획 스무 개에 미완 항목 63건이 쌓였습니다. 에이전트가 plan_create 를 부를 때 같은 일을 다루는 활성 계획이 이미 있어도 그대로 새 파일을 만들었기 때문입니다. 이제 제목이나 id 가 겹치는 활성 계획이 있으면 만들지 않고 그 계획의 id·제목·hash 를 돌려줘 거기에 항목을 더하도록 권합니다. 정말 별개의 계획이면 allow_similar: true 로 지나갑니다. 끝나서 잠긴 계획은 후보가 아니므로, 같은 이름으로 다음 라운드를 여는 것은 그대로 됩니다.

  • 오늘 화면 머리글의 조사가 떨어져 있던 것 — 「오늘 4건 의 작업이 기록됐어요」가 「오늘 4건의 작업이 기록됐어요」로. 이음 공백이 언어가 아니라 화면 코드에 박혀 있었습니다.
  • git 저장소가 아닌 프로젝트의 브랜치 화면이 「불러오지 못했어요」 오류 카드였던 것 — 정상 상태라 차분한 빈 상태로 바뀌고, 첫 커밋이 생기면 브랜치별 커밋·일지·파일이 모입니다.
  • 검색 화면의 빈 상태가 한 줄 문장뿐이어서 다른 화면과 어긋나던 것 — 스코프 아이콘과 제목이 붙습니다.
  • 안쪽: 디버그 빌드가 읽기 전용 위치에서 뜨면 바인딩 내보내기 실패로 죽던 것을 경고로, rust-analyzer 왕복 테스트가 rustup 프록시에 속아 붉어지던 것을 실제 기동 확인으로.

v3.2.2

한국어 파일명이 git 을 지나며 깨졌습니다. git 은 기본 설정에서 비ASCII 경로를 "\355\225\234\352\270\200.md" 처럼 8진수로 이스케이프해 내놓는데, 이 앱의 git 읽기 세 갈래가 전부 그 기본값으로 돌면서 따옴표를 풀지 않았습니다. 커밋 이력에서 합성한 백필 일지의 files_touched 가 그 이스케이프 문자열로 저장됐고, 브랜치 화면은 한국어 이름의 파일을 어느 커밋에도 귀속시키지 못했으며, 일지의 변경 diff 캡처는 diff --git "a/…" 로 감싼 머리글을 머리글로 알아보지 못해 그 파일의 diff 가 앞 파일 조각에 붙거나 통째로 빠졌습니다. 이제 세 경로 모두 실제 파일명으로 돌아옵니다 — 공백이 든 이름도, 옛 이스케이프가 남은 출력도.

손으로 고친 config.toml 에 키 하나가 빠지면 프로젝트가 통째로 무효가 됐습니다. 마스킹 규칙 한 줄이나 [watcher] 섹션을 지우면 전체 로드가 실패해 워처도 마스킹도 자동화도 멈추고, 복구는 정확한 스키마로 다시 쓰는 것뿐이었습니다. 빠진 값은 이제 새 프로젝트의 기본값으로 채워집니다 — 적은 값은 그대로, = [] 는 「다 지웠다」 그대로입니다.

이번 릴리스는 코드베이스 전체를 결함 유형별로 훑고 설치본의 로그를 모양별로 집계해 잡은 열일곱 건을 싣습니다. 위 둘 외에:

  • 비밀 마스킹이 절반을 남기던 것 — 두 규칙이 같은 키를 다른 길이로 잡으면 짧은 쪽이 이겨 [REDACTED]5678ijkl… 처럼 꼬리가 노출됐습니다. 겹치는 매치는 합쳐서 가립니다.
  • 손으로 적은 세션 id 가 색인을 멈추던 것 — manual-한글세션 같은 비ASCII id 에서 분류기가 UTF-8 문자 중간을 잘라 패닉했습니다. 이제 「알 수 없음」으로 분류하고 지나갑니다.
  • 설정 화면이 열릴 때마다 config.toml 을 되쓰던 것 — 읽은 값을 「변경」으로 보고 디바운스 뒤 디스크에 다시 썼고 「저장됨」 시각까지 찍혔습니다. 실패한 저장을 저장된 것으로 기록해 다음 편집까지 재시도하지 않던 것도 함께.
  • 늦게 온 응답이 새 화면을 덮던 것 — ⌘K 팔레트의 검색 결과와 계획 화면의 본문이 빠르게 오갈 때 이전 요청의 응답에 덮였습니다. 낡은 응답은 버립니다.
  • 메뉴바 팝오버 — 한 프로젝트의 조회 실패가 목록 전체를 지우던 것, 「활동 많은 순」이 실제로는 전 기간 누적으로 정렬되던 것, 최근 일지가 시간대 오프셋이 섞이면 어긋나던 것.
  • 탭 × 를 두 번 누르면 확인 대화상자가 겹치고 두 번째 닫기가 빈 자리로 떨어지던 것. 에디터가 열지 못한 파일(프로젝트 밖을 가리키는 심볼릭 링크·이미지)에 언어 서버가 붙으려다 같은 거절을 한 번 더 남기던 것.
  • 로그의 oculpmInit failed: [object Object] — 원인이 사라진 자리에 실제 원인이 적힙니다. 검색 하이라이트의 인덱스 밀림, 일지 타임라인의 로딩 고착, 모바일 테마 구독 누수, 복사 실패를 성공으로 표시하던 것, 닫힌 프로젝트의 자동화 틱 경고.

v3.2.1

macOS 27 에서 메뉴바 아이콘을 누르면 상태 팝오버 대신 「열기 / 종료」 메뉴가 떴습니다. 3.1.1 로 아이콘을 되살리자마자 드러난 두 번째 macOS 27 회귀입니다. 이 OS 는 상태 아이템에 메뉴가 붙어 있으면 왼쪽 클릭까지 시스템이 가로채 그 메뉴를 띄우고, 앱에는 클릭이 전달되지 않습니다(tray-icon 상류 이슈 #355 — 수정판은 어제 나왔지만 Tauri 2 가 아직 싣지 못합니다). 이제 메뉴를 상시 붙여 두지 않고 오른쪽 클릭 순간에만 붙였다 뗍니다 — 왼쪽 클릭은 팝오버, 오른쪽 클릭은 메뉴, macOS 26 이하도 같습니다.

앱을 켜 둔 채 Finder 에서 프로젝트 폴더를 지우면 빈 폴더가 되살아났습니다. 삭제(휴지통 이동)가 만든 파일 이벤트를 워처가 「활동」으로 읽어 세션을 열었고, 그 세션 기록을 쓰는 순간 지운 자리에 숨김 .oculpm/index/ 가 다시 만들어졌습니다. 이제 루트가 사라지면 워처는 이벤트를 버리고, 색인 쓰기는 어떤 경로로도 없는 루트를 다시 만들지 않습니다 — 이미 열려 있던 세션이 나중에 마감돼도 마찬가지입니다. 휴지통에서 되돌리면 그대로 이어 씁니다.

v3.2.0

확인 표시가 내용에 묶입니다. 지금까지 작업 일지의 「확인」은 켜고 끄는 스위치였습니다 — 확인한 뒤 에이전트가 본문을 고쳐도 초록 표시는 그대로였고, 그래서 700건 가까운 일지 중 확인된 것이 8건에 그친 채 검토 루프가 돌지 않았습니다. 3.2.0 부터 확인 표시는 확인한 그 본문의 지문과 함께 남습니다. 그 뒤 본문이 바뀌면 원장 행과 열람 머리띠에 「확인 뒤 내용이 변경됐어요 · 다시 검토」 가 서고, 「검증됨만」 필터와 변경 검토의 그룹은 그 일지를 확인된 것으로 세지 않습니다. 다시 읽고 확인을 누르면 지금 내용에 다시 묶입니다. 3.2.0 이전에 확인해 둔 일지는 지문이 없으므로 그대로 인정합니다 — 소급해서 흔들지 않습니다.

이번 릴리스는 외부 리뷰(Ocul-PM 10점 마스터보고서, 48건 백로그)를 코드로 대조해 확인된 결함만 받은 라운드와, 최적화 원장에 남아 있던 항목을 갚은 라운드를 함께 싣습니다. 병렬 세션 13개가 항목 하나씩 맡았습니다.

  • 두 프로세스가 같은 일지를 덮던 것 — 같은 분·같은 종류·같은 제목으로 앱과 MCP 서버(또는 병렬 에이전트 세션 둘)가 동시에 일지를 쓰면, 이름을 고르는 순간과 파일을 놓는 순간 사이의 틈에서 뒤의 것이 앞의 것을 조용히 교체할 수 있었습니다. 8프로세스로 재현하니 24건 중 3건만 남았습니다. 이제 새 일지는 배타적으로 생성되어(이미 있으면 다음 번호) 어느 프로세스의 것도 사라지지 않습니다.
  • 느린 프로세스가 남의 락을 지우던 것 — 10초 넘게 늦은 쪽이 락을 회수당한 뒤 놓으면서 새 주인의 락을 경로째 지워 셋째가 들어올 수 있었습니다. 락은 이제 경로가 아니라 nonce 가 소유하고, 회수도 옮긴 뒤 확인합니다.
  • 진단 탭 「워처 계측」 — 파일 워처가 받은 이벤트·버린 수·큐 깊이(현재/최대)·처리 누적/최대 시간을 셉니다. 첫 실측: 브랜치 전환 뒤 3.6초 정착하는 동안 실제 처리는 32ms 였습니다 — 나머지가 디바운스와 정착 대기라는 것이 처음으로 숫자로 보입니다.
  • 지원 에이전트를 네 등급으로 — 「N개 에이전트 지원」 한 줄이 서로 다른 약속 넷을 뭉뚱그리고 있었습니다. 규칙 호환 / 구조화 기록(MCP) / 세션 관측(훅) / 앱 통합(ACP) 으로 나누고, 등급은 문구가 아니라 코드에서 읽었으며, 「검증」 열은 실측 기록이 있는 것만 적었습니다(Claude Code · Codex 는 4등급, Claude Desktop 은 2, 나머지는 1). README 와 oculpm.com/wiki/agents.
  • 배포가 검증을 통과한 것만 공개합니다 — 태그가 가리키는 정확한 커밋의 CI 통과를 확인한 뒤에만 빌드하고, 릴리스는 draft 로 만들어져 서명(codesign --strict)·공증(spctl·stapler)·업데이터 서명(.sig·latest.json)을 검사한 다음에만 공개됩니다. 하나라도 어긋나면 draft 로 남아 앱 내 업데이터에 닿지 않습니다. 이 게이트가 없던 3.1.1 은 의존성 검사가 붉은 커밋에서 그대로 나갔습니다 — 그 실수를 기계가 막습니다. 3.2.0 이 이 경로로 나가는 첫 릴리스입니다.
  • 안쪽 — 800줄 넘는 파일 상위 7개(window.rs 3,028 · code.rs · watcher.rs · git.rs · CodePane · CodeScreenV2 · TerminalSurface)를 책임별로 나눴습니다(초과 파일 37 → 26, 초과 줄 17,923 → 7,924). 동작은 한 줄도 바뀌지 않았고 공개 경로·바인딩도 그대로입니다. AI 패널의 컨텍스트 조립은 직렬 왕복 4 → 2 로 전송 뒤 첫 토큰이 빨라집니다. 확장의 단위 테스트가 CI 에 들어갔습니다.

v3.1.1

macOS 27 로 올리면 메뉴바에서 Ocul-PM 아이콘이 사라졌습니다. 접힘 화살표(«) 뒤로 간 것도, 빈 자리가 남은 것도 아니고 그냥 없었습니다 — 설정의 「메뉴 막대에 아이콘 표시」는 켜져 있는데도. macOS 27 은 메뉴바를 창 하나로 다시 그리면서 각 앱의 상태 아이템을 프로세스의 기동 시점 신원에 묶는데, 이 앱은 3.0 부터 메모리를 아끼려고 기동 직후 자기 자신을 한 번 다시 띄우고 있었습니다(유휴 645MB → 38MB 를 만든 그 튜닝). 다시 띄운 프로세스는 macOS 27 의 눈에 「아까 그 앱」이 아니라서 아이콘 자리를 받지 못했습니다. 이제 같은 튜닝을 앱 번들이 프로세스가 태어날 때 넣어 주므로 다시 띄울 일이 없고, 아이콘은 제자리에 있습니다. 메모리 절약은 그대로입니다. macOS 26 이하에서는 달라지는 것이 없습니다.

Claude Code 어댑터를 0.77.0 으로 올렸습니다. 딸려 오는 Claude Code 도 함께 갱신됩니다. 삭제류 명령이나 게시처럼 CLI 가 「기본은 거절」로 표시한 승인 요청은 거절 버튼이 앞에 옵니다(강조는 그대로 「이번만 허용」에만). 계정 검증이 필요하거나 클라우드 자격 증명이 막힌 경우가 로그인 실패와 구분되는 실패로 뜹니다.

고친 것. 웹의 변경 이력·위키에서 띄어 쓴 숫자(「지난 7 일」·「macOS 27」)가 undefined 로 찍히던 것 — 렌더러가 코드 스팬 자리표시자를 숫자로 두어 산문의 숫자와 헷갈렸습니다.

v3.1.0

설치본이 하루 넘게 돌면 2GB 를 넘게 먹던 것 — 9월 12일에 고쳐 놓고 내보내지 않았습니다. 임베딩 아레나(2.2GB → 940MB)·벡터 테이블 재구축·쓰지 않을 때 임베딩 모델 내려놓기(유휴 645MB → 38MB)를 담은 네 커밋이 3.0.0 과 3.0.1 에 실리지 않은 채 브랜치에 남아 있었습니다. 이번 감사가 설치본의 메모리(가동 1일 14시간에 2,229MB)로 그것을 잡았고, 3.1.0 이 싣습니다. 같은 커밋이 git 이 이미 가진 파일의 사본을 색인이 따로 찍던 것도 멈추고, 프로젝트를 열 때 옛 사본을 지웁니다 — 이 저장소만 2,262건 중 1,553건이 그런 사본이었습니다.

기본 모델이 지원 종료돼도 아무 데도 안 보였습니다. 색인이 끝날 때마다 뒤에서 도는 「프로젝트 개요」 생성이 8월 21일에 사라진 모델을 3주 동안 두드리고 로그에만 적었습니다. 이제 실패하면 경고 토스트가 뜨고(같은 모델은 한 시간에 한 번), 같은 입력으로는 다시 두드리지 않습니다. 설정의 모델 칸도 받아 온 목록에 없는 이름이면 「지원 종료됐거나 이름이 바뀐 모델」이라고 말합니다 — 지금까지는 자동완성 목록만 조용히 띄웠습니다.

Claude Code 화면 안에서 oculpm 도구가 두 벌로 보이던 것. 앱이 대화에 붙여 주는 기록 서버와, oculpm 플러그인을 켠 사용자에게 CLI 가 한 벌 더 띄우는 서버가 나란히 섰습니다(프로세스도 둘). 모델이 플러그인 쪽을 고르면 그 일지는 어느 대화의 것인지 모른 채 적혔습니다. 이제 앱이 띄운 대화 안에서는 플러그인 쪽이 도구를 내놓지 않습니다.

고친 것. 설정 > 통합의 VS Code 마켓플레이스 링크가 404 로 갔습니다 — 확장이 아직 거기 발행되지 않아 링크를 내리고 Open VSX 만 둡니다 · 앱 로그 파일에 터미널 색 코드가 섞이던 것 · 빌드 산출물을 색인에서 건너뛴 것이 경고로 찍히던 것.

안쪽. allow(dead_code) 억제 42곳을 걷어냈더니 진짜 죽은 코드는 넷이었습니다 — 지웠습니다. 닫힌 플랜 스무 개에 남아 있던 미완 63건을 살아 있는 플랜 하나로 옮겨 적었습니다.

v3.0.1

작업 일지를 열면 스크롤이 안 되고 첫 화면 아래가 잘려 있었습니다. 2.47 의 「읽는 칸」 리디자인이 좁은 창에서 본문과 diff 를 위아래로 쌓으려고 flex 줄바꿈을 썼는데, 줄바꿈이 켜진 flex 상자는 줄 높이를 칸이 아니라 가장 긴 자식의 내용 높이로 잡습니다. 본문이 긴 일지는 읽는 칸이 본문만큼 늘어나 스크롤이 생길 자리가 없었고, 시트가 접힌 아래를 통째로 감췄습니다 — 본문이 짧은 일지에서는 줄이 칸 높이까지 늘어나 멀쩡해 보여서 잡히지 않았습니다. 두 칸에 높이를 못 박아 고쳤고, 3.0.0 사용자는 이 업데이트로 다시 스크롤됩니다.

v3.0.0

3.0 은 새 기능이 아니라 검수입니다. 2.42 부터 2.48 까지 일곱 번의 릴리스가 화면 넷을 다시 그리고 편집기를 갈고 확장을 붙이는 동안, 「하네스로는 봤고 실기기로는 안 봤다」가 플랜에 스물한 줄 쌓였습니다. 3.0 을 부르는 조건을 그 스물한 줄을 눈으로 갚는 것으로 정했고, 라이트/다크와 프리셋 다섯 종을 여섯 화면씩 돌려 찍고, 탭 드래그·PTY 생존·혼합 DPI·마법사·영어 모드를 손으로 눌렀습니다. 그 과정에서 잡힌 것이 아래 「고친 것」이고, 못 본 것은 정직하게 남겨 두었습니다(설치 뒤에만 볼 수 있는 macOS 권한 프롬프트 한 건).

Claude Code 화면이 누구로 도는지 말합니다. 사용량 카드 맨 위에 신원 줄 — 「Claude Max · 구독 계정 · 이메일」처럼 어댑터가 밀어 주는 그대로. 어댑터가 보고를 안 하면 줄이 없고(침묵은 침묵), 로그아웃이면 한도가 없어도 계기가 「로그인 필요」 pill 로 섭니다 — 지금까지는 계기가 그냥 사라져 "한도가 없어서 안 뜨는 건지 로그아웃인지" 구별할 수 없었습니다. 어댑터는 0.76.0 입니다(0.75 가 /usage 의 답을 마크다운으로 바꿔 계기가 빈칸이 되던 것도 이번에 같이 닫혔습니다).

컨텍스트 압축이 제 모양으로 뜹니다. 「생각 · Compact conversation」 이라는 줄 하나가 전부였는데, 이제 「컨텍스트 압축 · 128k → 42k 토큰 (−67%) · 수동 · 2.3초」 입니다. 도는 동안엔 「대화를 접는 중」.

영어로 써도 어색하지 않게. 15화면과 사이드바를 영어로 실제로 그려 한글이 남는지 재는 스위트가 생겼고, 그 화면들을 Chrome 과 실기기에서 눈으로 봤습니다 — 「Agents involved 1 files」(한국어 「개」가 만능 조수사라 돌려 쓴 단위) · 코드 맵 「0 folder」 복수형 · 스킬 화면 머리가 최소 창에서 네 줄로 접히던 것 · 검색칸이 영어 스코프 버튼 넷에 밀려 글자 하나 폭이 되던 것 · 툴바 날짜가 영어 모드에서도 「2026년 9월 11일 금」이던 것. 영문 랜딩의 스크린샷 일곱 장도 영어 화면으로 다시 찍었습니다.

고친 것.

  • Claude Code·Codex 화면 위에 「오늘 현황」 툴바가 하나 더 얹혀 있었습니다 — 2.45 에서 라우터의 마지막 갈래를 빈 화면 대신 오늘 화면으로 바꿨는데, 두 ACP 화면은 살려 두는 컨테이너가 따로 그리므로 라우터는 그걸 「모르는 화면」으로 보고 뒤에 오늘 화면을 통째로 붙였습니다. 툴바가 겹치고 브리프를 두 번 읽었습니다. 영문 스크린샷을 찍다 잡았습니다.
  • 새 프로젝트 마법사를 열었다 닫기만 해도 「새 프로젝트」 초안이 남았습니다 — 자동 저장이 마운트 직후에도 돌아 아이디어 한 줄 없는 초안을 2초 만에 저장했고, 시작 탭 바닥에 「새 프로젝트 · 아이디어 단계에서 멈춤」이 「새 프로젝트 시작하기」 바로 위에 서서 같은 것이 둘로 보였습니다. 내용이 있어야 초안이고, 초안 행엔 「초안」 배지가 섭니다.
  • Claude Code·Codex 화면에 제목이 없었습니다 — 16화면 중 이 둘만 제목 자리에 세션 탭이 있어, 사이드바를 접으면 어느 화면인지 말하는 곳이 없었습니다. 이름을 다른 화면과 같은 서체로 세우고 탭은 hairline 곁에 둡니다.
  • 회색 버튼이 왜 회색인지 — 마지막 열 곳. 2.46 부터 세 릴리스에 걸쳐 131곳을 갚았고 남은 열 곳을 열어 보니 아홉은 입력 필드·팔레트 항목·펼침 버튼이라 이 패턴의 자리가 아니었습니다(자가 요소를 보고 가르게 됐습니다). 진짜 부채 하나 — 트레이 「Dock 아이콘 숨김」 — 는 「먼저 창 닫기 = 메뉴바로 최소화를 켜세요」라고 말합니다. 이유 없이 막힌 자리 0.

v2.48.0

편집기는 진짜 VS Code 로 — 앱은 그 옆에 섭니다. 「VS Code 급 편집기」를 앱 안에 또 만드는 대신 반대로 갔습니다. VS Code 확장 oculpm.ocul-pm 이 사이드바에 오늘 일지와 활성 플랜을 띄우고, 에이전트가 일지를 쓰면 1초 안에 거기 뜹니다. 플랜 항목의 체크박스를 누르면 .md 가 바뀌고 앱 플래너가 같이 바뀝니다 — 파일은 확장이 직접 고치지 않고, 앱에 든 oculpm-mcp 를 통해서만 씁니다(잠금·plan-log·동시 편집 보호가 그대로). Copilot 에이전트 모드에는 journal_write·plan_update 도구가 그대로 보입니다. 확장은 네트워크를 쓰지 않습니다.

  • 앱과 왕복합니다. 일지 열람의 「편집기로 열기」가 확장이 깔려 있으면 VS Code 사이드바의 그 일지로 갑니다(전에는 OS 기본 앱). 반대로 VS Code 트리의 「Ocul-PM 에서 열기」는 앱의 그 프로젝트 탭·그 일지로 착지합니다 — oculpm://open 링크가 그동안 버리던 entry 를 이제 씁니다.
  • 설정 > 통합에 「VS Code 확장」 행 — 설치 여부와 마켓 링크 둘(VS Code 마켓플레이스 · Open VSX). Cursor·VSCodium 은 Open VSX 판을 받습니다.
  • 앱이 여는 연결 목록에 마켓 링크 두 곳이 브라우저 위임으로 추가됐습니다 — 앱이 보내는 것이 아니라 여러분이 눌러야 열립니다. 원장(egress_inventory)이 잡아 사유와 함께 적었습니다.

확장

ocul-pm 0.1.0 — 첫 게시. VS Code 1.101 이상(포크 호환 하한). 앱 없이 설치하면 읽기 전용(트리·미리보기)으로 동작하고 상태바가 이유를 말합니다. 마켓·Open VSX 게시는 태그 ext-v0.1.0, 앱 릴리스 자산에도 .vsix 가 붙습니다(code --install-extension).

v2.47.0

카드 무더기가 원장이 됐습니다. 플래너·작업 일지·시작 탭·계획 레일 — 네 화면이 전부 같은 크기의 카드를 늘어놓고 있었습니다. 카드 열네 장이 같은 무게로 서면 눈은 위계 대신 패턴을 읽고, 완료 32개가 취소선 벽을 이루면 남은 셋은 스크롤 뒤에 숨습니다. 이번 릴리스는 그 네 화면을 한 장의 시트 · 한 줄의 원장으로 다시 그렸습니다.

  • 플래너 — 계획은 디스크의 마크다운 한 장이니 화면도 한 장입니다. 머리글의 단계 스트립(조각 하나가 단계 하나, 색이 완료/진행/막힘)을 누르면 그 단계로 뛰고, 행은 [상태 마크 | 제목 | 메타] 세 열이며, 완료는 취소선 대신 흐려집니다. 보드 보기가 새로 생겨 같은 항목을 상태별 열로 보고 끌어서 상태를 바꿉니다. 그리고 숫자가 맞습니다 — 막힌 항목이 둘인 계획이 「진척 100%」로 찍히던 것(막힘을 분모에서 빼고 있었습니다)을 고쳤습니다. 왼쪽 계획 레일은 아이콘 둘·셀렉트 둘을 ⋯ 메뉴 하나로 접고, 행마다 진행 파이 하나로 진척을 말합니다.
  • 작업 일지 — 카드마다 되풀이되던 「에이전트 · Claude Code」를 날짜 머리글이 한 번만 말하고, 행은 [시각 | 종류색 척추 | 제목] 한 줄입니다. 내려 읽으면 하루가 막대그래프로 보이고, 날짜 머리글에는 하루의 모양(항목마다 한 조각인 색띠)이 섭니다. 일지를 열면 본문이 읽는 칸입니다 — 사이드바 신세이던 13px 회색 글자와 낱말 가운데서 꺾이던 코드 칩을, 마스트헤드 · 14px 본문 · 통째로 다음 줄로 넘어가는 인라인 코드로 다시 짰습니다.
  • 시작 탭 — 프로젝트 카드 열네 장 격자 대신, 순위 1위 하나가 사령탑 밴드(다음 할 일 · 14일 맥박 · 활성 플랜 진행)로 서고 나머지는 「오늘 / 7일 안 / 14일 안 / 2주 넘게 조용함」 시간대 원장입니다. 바닥의 액션 바는 커서 이름을 빼 높이가 더는 튀지 않습니다.
  • 사이드바 — 흰 카드 셋 대신 활자입니다. 프로젝트 이름이 제목이고, 섹션 라벨은 hairline 을 끌며, 행은 왼쪽 척추에 매달리고 활성 표시자가 그 척추 위에 앉습니다. 발은 「터미널 도크 ⌘J」 한 줄. 그리고 좁은 창에서 설정 화면 본문이 0px 로 사라지던 버그를 고쳤습니다 — 컨테이너 질의를 자기 자신에게 걸어 반쪽만 적용되고 있었습니다.

편집기가 IDE 의 나머지 반을 갖췄습니다. 지난 릴리스가 편집기 알맹이를 갈았다면 이번엔 그 둘레입니다.

  • ⌘P 빠른 열기 — agmd 로 AGENTS.md 를, src/feat 로 경로를 엽니다. 목록은 화면이 이미 든 트리라 서버 왕복이 없습니다.
  • git 상태가 트리와 탭에 보입니다 — 수정은 앰버, 추가는 초록, 삭제는 빨강+취소선, 파일 끝에 A/M/D 배지, 폴더는 안에 바뀐 것이 있으면 함께 물듭니다. 오류·경고가 있는 파일도 같은 자리에서 빨강/앰버입니다.
  • 심볼 브레드크럼 — 폴더 › 파일 › 커서가 든 함수·클래스. 누르면 점프합니다.
  • ⌥Z 줄바꿈(산문 파일은 자동으로 켜져 AGENTS.md 가 화면 밖으로 달아나지 않습니다) · ⌘B 사이드바 접기 · 상태줄의 Ln/Col 이 버튼(⌃G 줄 이동)이 되고, 선택하면 「N줄 · M자 선택」을 말합니다.
  • 미니맵이 검은 띠였습니다 — 편집면 배경을 비워 둔 것을 미니맵이 물려받아 알파 0 의 검정 위에 글자를 섞고 있었습니다. 고쳤고, 트리·탭 바·상태줄(크롬)과 편집면(종이)을 두 톤으로 가르고, 띠 높이 셋(34·22·26)을 두 단으로 접고, 커서를 액센트 2px 로, .md 의 굵게가 굵게 보이게 했습니다.

터미널.

  • ⌘J 도크와 터미널 화면을 오가면 옛 대화가 찌부러졌습니다. 도크와 화면이 같은 세션의 스크롤백을 각자 자기 폭으로 다시 해석해, 에이전트가 「커서를 N줄 올려 지우고 다시 쓴」 시퀀스가 다른 폭에서 겹치고 같은 문단이 두 번 남았습니다. 이제 스크롤백에 찍힐 당시의 크기 표식이 함께 실리고, 구간마다 그 폭으로 재생한 뒤 지금 폭에 맞춥니다. (좁은 폭에서 새로 찍힌 줄의 개행은 진짜 문자라 어떤 터미널도 펴지 못합니다 — 고친 것은 멀쩡했던 줄이 옮겨 오다 망가지던 경로입니다.)
  • 페인마다 고정 높이 머리띠 — 작업 폴더 · 지금 무슨 일(에이전트 이름·단계 / 마지막 명령·종료코드) · 경과 시계 · 확대(⇧⌘↩)·닫기. 캔버스 위에 떠서 셸 프롬프트를 덮던 알약은 없어졌습니다. 오른쪽에 최근 명령 8개의 결과가 핍으로 서고 누르면 그 출력으로 갑니다. 상태바는 단축키 문장 대신 키캡 넷(⌘D · ⌘F · ⇧⌘↩ · ⌘↑↓)입니다.

회색 버튼 59곳이 더 이유를 말합니다. 지난 릴리스가 시작한 일의 4차입니다 — 설정 12탭의 저장·등록·다시 만들기, MCP/Claude Desktop 등록(「Codex CLI 가 설치되어 있지 않아요」 · 「MCP 서버 실행 파일을 못 찾았어요」), 논의의 승격·저장, 플래너의 단계 이동·상태 글리프(「하위 롤업」·「완료·잠금」은 예전에도 계산돼 있었는데 한 번도 뜬 적이 없었습니다), 새 프로젝트 마법사의 「다음」, 스킬·규칙 작성, 테마 편집기, 트레이 스탠드업, 모바일 다섯 탭까지. 이유 없이 막힌 자리는 131 에서 10 이 됐고, 남은 10 은 전부 이 패턴의 자리가 아닙니다.

v2.46.0

앱 안의 코드 편집기가 VS Code 의 그 편집기가 됐습니다. 지금까지 쓰던 편집기(CodeMirror)는 접기도, 괄호 짝 맞추기도, 여러 커서도 없었습니다 — 「코드 화면이 있긴 한데 진짜 편집은 밖에서」가 되기 딱 좋은 상태였습니다. 이번 릴리스에서 편집기 알맹이를 Monaco(VS Code 가 쓰는 바로 그 에디터)로 통째로 갈았습니다. 새로 생긴 것:

  • 접기 · 괄호 짝 강조 · 괄호 자동 닫기 · 선택해 두고 따옴표로 감싸기 · 입력하면서 들여쓰기
  • 여러 커서 — ⌥클릭으로 커서를 더하고, ⌥⇧드래그로 열(블록)을 고릅니다. ⌘D 로 다음 일치를 더합니다.
  • 파일 안 찾기·바꾸기 (⌘F · ⌥⌘F) — 예전 편집기엔 아예 없었습니다. 프로젝트 전역 찾기(⇧⌘F)는 그대로입니다.
  • 미니맵 · 스티키 스크롤 · 괄호 쌍 색칠 · 들여쓰기 가이드 · 태그 동시 편집
  • 의미로 칠하는 문법 강조 — 언어 서버가 아는 것(이건 함수다, 저건 매개변수다, 이 변수는 읽기 전용이다)으로 색을 다시 칠합니다. 정규식 문법 강조는 이름만 보고 색을 고르지만, 이제는 코드의 뜻을 보고 고릅니다.

⌘K — 고칠 곳을 고르고 말로 시킵니다. 코드를 선택하고 ⌘K 를 누른 뒤 "이걸 async 로 바꿔" 처럼 적으면 그 자리에서 고쳐 씁니다. 결과는 먼저 적용하고 검토하는 방식이라, 조각마다 켜고 끄면서 어느 변경을 남길지 고를 수 있습니다 — 전부 끄면 원문 그대로입니다. 그리고 이렇게 들어온 편집은 작업 일지와 판 목록에 「에이전트가 썼다」로 남습니다. 저장을 누른 손이 아니라 글자를 쓴 손을 적는 것이, 기록이 존재 이유인 앱의 몫입니다.

회고 화면과 문서 화면을 걷어냈습니다. 회고는 표면이 컸는데 쓰임이 그에 못 미쳤고, 문서 화면은 docs/ 폴더가 없는 프로젝트에서 영구 빈 화면이었습니다. 이미 써 둔 .oculpm/retro/*.md 는 지우지 않습니다 — 사용자의 파일이고, 작업 일지 검색에서 계속 읽힙니다. 마지막으로 그 화면을 보고 있었더라도 빈 화면에 갇히지 않고 오늘 화면으로 돌아옵니다.

여러 손이 만든 티를 지웠습니다. 화면마다 조금씩 다르던 것들을 한 벌로 접었습니다 — 이런 것들입니다.

  • 글자 크기·줄 간격·여백·모서리 곡률·글자 굵기가 화면마다 반 단씩 어긋나 있었습니다. 여백만 892곳, 곡률·굵기 1,012곳을 한 램프로 모았습니다.
  • 설정 여는 길이 셋이었습니다 (⌘, 는 모달, 사이드바는 전체 화면, 안내 버튼은 또 다른 전체 화면). 프로젝트 창에서는 화면 하나로 통일했습니다.
  • 「기다리면 채워진다」와 「원래 비어 있다」가 픽셀 단위로 같았습니다. 이제 로딩에는 스피너가 서고, 화면 읽기 프로그램도 둘을 구별합니다.
  • 포커스 링이 안 보이던 자리 여섯 곳 — Tab 으로 들어가도 화면이 아무 말도 안 했습니다.
  • 모달 셋에 포커스 트랩이 없었습니다 — Tab 이 모달 밖으로 새고, 닫아도 포커스가 돌아오지 않았습니다.
  • 말투가 두 갈래였습니다. 700곳을 해요체 한 목소리로 모으고, 로그 문자열을 그대로 붙여 놓던 에러 메시지 41건을 사람 말로 바꿨습니다.
  • 회색 버튼이 왜 회색인지 말합니다. 눌리지 않는 버튼에 마우스를 올리면 이제 이유가 뜹니다 — 예전엔 툴팁조차 뜨지 않는 구조였습니다(브라우저가 비활성 요소의 마우스 이벤트를 삼킵니다).

이 정리가 되살아나지 않도록 pnpm lint 에 게이트 다섯 줄을 더 세웠습니다.

고친 것들.

  • 논의 문서를 두 곳에서 열어 두면 나중에 저장한 쪽이 앞의 편집을 조용히 덮었습니다.
  • 폰 페어링 화면을 닫아도 앱이 계속 서버를 두드리고 있었습니다.
  • 규칙을 지워도 예산 창이 30일 동안 그 규칙 값을 계속 청구했습니다.
  • 한글 입력 중 Enter 가 조합을 끊던 판정이 화면마다 네 벌이었고, 그중 제일 많이 데인 터미널만 조건 하나를 더 알고 있었습니다. 한 벌로 모으면서 나머지 셋이 그 조건을 물려받았습니다.
  • 되돌리기 토스트가 읽기도 전에 사라지던 것, 편집기가 자기 모델을 두 번 닫던 것.

v2.45.2

업데이트를 받은 뒤로 화면 기록 권한이 아무리 허용해도 다시 물었습니다. 앱 안 터미널에서 돌리는 도구(Claude Code 등)가 스크린샷을 찍으려 하면 macOS 가 「'Ocul-PM.app' 이 화면을 기록하려 합니다」를 띄우는데, 시스템 설정에서 허용하고 앱을 껐다 켜도 다음번에 또 물었습니다.

터미널을 쥐고 있는 것은 앱과 별개의 프로세스입니다 — 업데이트가 앱을 재시작해도 셸이 죽지 않게 일부러 그렇게 만들었습니다. 그런데 그 프로세스는 한 번 뜨면 재부팅 전까지 업데이트 전의 실행파일로 계속 돕니다. 업데이트가 옛 번들을 치워 버린 뒤라 그 실행파일은 디스크에 없고, 그러면 macOS 는 그 프로세스를 설치된 앱으로 알아보지 못합니다. 승인은 /Applications 의 앱 앞으로 적히는데 요청은 사라진 실행파일에서 오니, 몇 번을 허용해도 매칭될 수 없었습니다.

이제 앱이 붙을 때 터미널을 하나도 쥐고 있지 않은 옛 프로세스를 만나면 조용히 새것으로 갈아 치웁니다. 돌고 있는 셸이 하나라도 있으면 손대지 않습니다 — 업데이트를 건너 세션을 살려 주는 것이 그 프로세스의 존재 이유이고, 그 약속은 그대로입니다.

이미 열려 있는 터미널이 있다면 이번 한 번은 손이 필요합니다. 셸을 쥐고 있는 옛 프로세스는 이 수정으로도 교체되지 않습니다. 열린 터미널 탭을 모두 닫고 앱을 다시 켜면 다음 업데이트부터 저절로 정리됩니다.

v2.45.1

앱 안 터미널에서 일하다 보면 ocul-pm 창이 하나 툭 떴다가 몇 초 뒤 저절로 사라졌습니다. 유령이 아니라 진짜로 앱이 한 벌 더 뜬 것이었습니다. 앱 터미널은 에이전트가 기록을 남길 수 있도록 oculpm 명령을 손에 쥐여 주는데, 그 명령이 모르는 낱말을 받으면 — 설정에 남은 옛 줄 하나, 오타 하나면 충분했습니다 — 명령으로 처리하지 않고 앱을 통째로 한 번 더 실행했습니다. 그걸 부른 쪽이 몇 초 뒤 타임아웃으로 그 프로세스를 죽이면 창도 함께 사라졌고요. 편집이 일어날 때만, 그것도 앱 안 터미널에서만 걸려서 「가끔」으로 보였습니다.

이제 oculpm 이라는 이름으로 불린 호출은 낱말이 무엇이든 명령으로 끝납니다. 모르는 낱말에는 창 대신 「unknown tool」과 사용법을 돌려줍니다. 덤으로 oculpm --project <경로> journal_write … 처럼 경로를 앞에 적은 호출에서 그 경로가 조용히 무시되던 것도 고쳤습니다 — 엉뚱한 프로젝트에 일지가 남을 수 있는 자리였습니다.

v2.45.0

앱을 열려고 터미널을 켜지 않아도 됩니다. 지금까지는 내려받은 .dmg 를 열면 macOS 가 "손상되었기 때문에 열 수 없습니다"라고 막았습니다. 실제 손상이 아니라 격리 표시였을 뿐인데, 그걸 풀려면 xattr -dr com.apple.quarantine 한 줄을 직접 쳐야 했습니다 — 다운로드 다음 첫 관문이 터미널이었던 셈입니다. 이번 릴리스부터 Apple Developer ID 로 서명하고 공증(notarization)까지 마친 빌드가 나갑니다. 받아서 Applications 로 끌어다 놓고 그냥 여시면 됩니다.

딱 한 번, 키체인이 물어볼 수 있습니다. API 키는 맥의 키체인에 들어 있고 그 접근 권한은 앱의 서명에 묶입니다. 서명 주체가 바뀌었으므로 이 버전으로 올라온 뒤 처음 열 때 "Ocul-PM 이(가) 키체인의 정보를 사용하려 합니다"가 한 번 뜰 수 있습니다. 항상 허용을 누르시면 그다음부터는 묻지 않고, 저장해 둔 키가 사라지는 일도 없습니다.

스킬이 언제 걸리는지를 앱이 답합니다. 스킬 목록 앞에서 궁금한 건 "이게 언제 걸리나, 내가 직접 불러야 하나"인데, 지금까지 답은 스킬이 스스로 쓴 소개 한 줄이 전부였습니다. 이제 상세 화면이 「언제 걸리나」 를 본문보다 먼저 말합니다 — 자동으로 걸리는지 직접 불러야 하는지, 어떤 파일에서 깨어나는지. 그리고 실제로 걸렸을 때 어떤 말이 그걸 불렀는지를 원장이 인용해 보여줍니다. "안 걸림"이 스킬 잘못인지 원래 수동인지도 이제 구별됩니다.

작업 일지 감시를 진짜로 멈출 수 있습니다. 예전의 "끄기"는 60초짜리 거짓말이었습니다 — 감독관이 워처 없는 프로젝트를 먹통으로 판정해 곧바로 되살렸기 때문입니다. 이제 사용자가 멈춘 것과 죽은 것을 감독관이 구별하고, 진단 화면이 「사용자가 멈춤 · 앱을 다시 켜면 풀려요」 라고 수명까지 말해 줍니다.

오늘 화면이 사실을 말합니다. 세 가지가 어긋나 있었습니다.

  • 「변경된 파일」이 파일 수가 아니라 손댄 횟수를 세고 있었습니다. 실측으로 최대 105% 부풀어 있었고(어떤 날은 262 vs 실제 128), 이제 백엔드가 고유 파일 수를 직접 셉니다.
  • 활동 링이 바쁜 날마다 똑같은 모양이었습니다. 눈금이 아니라 벽이어서, 최근 26일 중 22일이 상한에 붙어 서로 구별되지 않았습니다. 눈금을 실제 하루 분량에 맞춰 다시 잡았고, 그래도 상한에 붙는 날은 호버 라벨이 「상한」이라고 말합니다.
  • 「지금 하는 일」이 없었습니다. 「활동 시간」은 지나간 일의 합만 말합니다. 이제 돌고 있는 세션이 무엇을 하는 중인지 한 줄로 보여주고, 모를 때는 지어내지 않고 아무 말도 하지 않습니다.

미완 항목이 남은 계획은 완료로 닫히지 않습니다. 아직 할 일이 남은 플랜이 done 으로 닫혀 버리는 일이 실제로 있었습니다. 이제 앱·MCP·폰 연동 어느 경로로 와도 거부되고, 대신 "이건 안 한다"를 항목마다 정직하게 적을 수 있습니다.

손잡이 둘이 생겼습니다. 작업 일지 상세에서 「파일로 열기」 로 원본 마크다운을 에디터에서 바로 열 수 있고, AI 화면에서 「어댑터 내리기」 로 떠 있는 에이전트를 정리할 수 있습니다.

영문 사이트가 제 페이지를 갖습니다. 영문 홈에서 키노트·플러그인 문서를 누르면 여덟 자리 전부가 한국어 페이지로 가고 있었습니다. 영문판을 만들고 링크를 바로잡았습니다.

보이지 않는 곳도 함께 손봤습니다.

  • 빌드 중에 앱이 버벅이던 것 — target/ 에 파일 5,000개가 쏟아지면 그게 전부 감시 큐로 들어왔습니다. 이제 큐에 들어오기 전에 걸러져 관심 있는 1건만 남습니다.
  • 프로젝트를 닫을 때 최대 4.3초 멈추던 것 — 잠금을 쥔 채 정리가 끝나기를 기다리고 있었습니다.
  • 앱 첫 화면이 26.5KB 가볍습니다 (−9.2%). 설정 코드가 창 관련 API 를 통째로 끌고 오고 있었습니다.
  • 중첩된 git 저장소에서 브랜치 화면의 「파일」 귀속이 조용히 0건이 되던 버그. 저장소 루트가 프로젝트 루트 아래에 있는 배치에서만 나던 것입니다.
  • 모르는 에이전트가 Claude 처럼 보이던 것 — 에이전트 색 팔레트의 첫 색이 Claude 코랄과 색상환에서 4도 차이였습니다.
  • 디자인 토큰 파일이 시크릿으로 오인돼 작업 일지의 파일 목록에서 조용히 빠지던 오탐.
  • 내려받은 커스텀 테마가 문법 강조 색까지 정할 수 있습니다.
  • 화면 뒤에서 아무도 부르지 않던 죽은 명령 16개를 걷어냈습니다 (354 → 340).

v2.44.1

한글이 섞인 링크와 README 가 앱을 그 자리에서 멈춰 세울 수 있었습니다. 네 자리에서 같은 실수를 하고 있었습니다 — 글자가 아니라 바이트를 세다가, 한글처럼 여러 바이트로 된 글자 한가운데를 자르면 죽었습니다.

  • oculpm:// 링크에 한글이 섞이면 앱이 그걸 읽다 멈췄습니다. 웹페이지의 링크 한 줄로 일어날 수 있는 일이었습니다.
  • README 가 24KB 를 넘는 한국어 프로젝트에서 「프로젝트 개요」 생성이 죽었습니다. 이 저장소는 마침 1바이트 차이로 비켜가 있었습니다.
  • Notion 연동과 편집기의 「정의로 이동」도 같은 코드를 복사해 쓰고 있었습니다. 넷을 한 자리로 모아 다시 갈라지지 않게 했습니다.

설치 마법사에서 ESC 로 닫으면 그때까지 쓴 것이 사라졌습니다. 닫기는 초안을 저장하고 닫는데, ESC 만은 화면이 처음 열렸을 때의 빈 초안을 저장하고 있었습니다. 아이디어와 폴더 이름을 다 적고 ESC 를 누르면 그게 빈 값으로 덮였습니다. 이제 ESC 도 X 버튼과 똑같은 것을 저장합니다.

오늘 화면의 활동 링이 바쁜 날마다 똑같은 모양이었습니다. 둥근 획 끝이 대시 너머로 더 칠해지는 만큼을 셈에 넣지 않아, 안쪽 링은 102% 를 칠하고 있었습니다 — 꼬리가 머리를 타고 넘어 그냥 닫힌 원이 됐습니다. 줄 변화가 7,500 을 넘는 날은 전부 같은 그림이었고, 하루 2만 줄이 예사인 프로젝트에서 안쪽 링은 사실상 매일 아무것도 말하지 않았습니다. 이제 세 링이 반지름에 맞게 각각 잘려, 포화한 날에도 함께 멈춘 동심원 셋으로 읽힙니다. 채워지지 않은 구간도 카드 위에서 보이도록 색을 올렸고, 가운데 숫자가 왼쪽으로 밀리던 것도 바로잡았습니다.

AI 패널이 질문을 보낼 때마다 기다림이 앞에 쌓였습니다. 계획과 일지를 하나씩 차례로 읽어 오느라 최대 여덟 번의 왕복이 줄줄이 이어졌고, 이 조립은 메시지를 보낼 때마다 다시 일어납니다. 이제 한꺼번에 읽어 옵니다 — 첫 글자가 그만큼 빨리 나옵니다.

보이지 않는 곳도 함께 손봤습니다.

  • Notion 계정 연결의 일회용 확인 값이 추측할 수 있는 재료(시각·프로세스 번호·순번)로 만들어지고 있었습니다. 같은 앱의 폰 연결이 이미 쓰던 진짜 난수로 맞췄습니다.
  • 플러그인 설치가 프로젝트 안의 심볼릭 링크를 타고 폴더 밖에 쓸 수 있었습니다. 막는다고 적혀 있었지만 실제로는 막지 않고 있었습니다.
  • 웹뷰에 열려 있던 「아무 경로나 열기」 권한을 지웠습니다 — 쓰는 곳이 한 군데도 없었습니다.

v2.44.0

에이전트가 일지를 써도 화면은 그걸 「명령 실행」이라고 불렀습니다. 앱이 터미널에 심어 둔 기록 도구로 에이전트가 작업 일지를 남기는데, 대화 화면에는 터미널 아이콘과 셸 명령 한 줄만 떴습니다. 이 제품의 핵심 동작이 화면 어휘에 아예 없었습니다.

  • 이제 「일지 기록」·「계획 갱신」·「에이전트 원장」으로 뜹니다. 도구 호출을 15가지 우리 말로 옮겼고, 파일을 읽고·고치고·찾는 일은 묶어서 한 줄로 접습니다. 승인 대기·오류·기록 관련 일은 절대 접지 않습니다 — 손이 필요한 자리가 접혀 숨는 일이 없습니다.
  • 셸 명령을 잘못 읽느니 그냥 명령으로 그립니다. 「일지를 썼습니다」가 틀리면 그건 기록에 대한 거짓말이라, 확신이 없으면 원래대로 보여 줍니다.
  • 모든 활동에 원본이 딸려 있습니다. 줄을 펼치면 맨 아래에 에이전트가 실제로 주고받은 내용이 접힌 채로 늘 있습니다.
  • 「돌고 있다」와 「모른다」를 구별합니다. 예전에는 연결이 끊겨 소식이 없는 것과 진짜 오래 걸리는 작업이 똑같이 「작업 중」이었습니다. 이제 15초 넘게 아무 신호가 없으면 「실행 중 · 신호 없음」이라고 말합니다.
  • 세션 화면의 카드도 같은 말을 씁니다 — 「무엇을 하고 있는가」가 예전에는 잡은 파일 목록뿐이었습니다.

사이드바가 화면 17개를 한 줄씩 늘어놓고 있었습니다. 매일 쓰는 것과 한 달에 한 번 여는 것이 같은 크기로 붙어 있었고, docs 폴더가 없는 프로젝트에서는 ⌘9 가 영원히 빈 화면이었습니다.

  • Claude Code · Codex · 세션이 「에이전트」 한 줄로 모였습니다. 화면은 셋 다 그대로 있고, 그 면에 들어가면 형제가 아래에 펼쳐집니다. 어느 쪽이 승인을 기다리든 배지는 합쳐서 한 줄에 뜹니다.
  • 논의·문서는 「참고」로 내려갔습니다. 대신 편집기가 ⌘9 를 받았습니다.
  • 이름 셋이 바뀝니다 — Diff → 변경, 코드 검색 → 검색, 코드 → 편집기. ⌘K 로는 옛 이름으로도 찾힙니다.
  • ⌘번호가 다시 매겨집니다. ⌘1 오늘 · ⌘2 일지 · ⌘4 플래너는 그대로고, 바뀐 것은 사이드바가 한 번 알려 줍니다 (새로 설치한 분에게는 뜨지 않습니다).

「이 브랜치에서 무슨 일이 있었나」를 볼 자리가 없었습니다. 기록은 날짜별로 쌓이는데 작업은 브랜치 단위로 하니까, 사흘 걸린 브랜치의 일지·계획·커밋을 한자리에서 볼 방법이 없었습니다. 새 「브랜치」 화면이 그걸 한 좌표로 묶습니다 — 커밋·일지·바뀐 파일·기록률, 그리고 아직 일지가 없는 변경 목록. 마크다운 한 장으로 내보낼 수도 있습니다. 새로 저장하는 것은 없고 이미 있는 git 을 읽을 뿐이라, 브랜치를 갈아타면 화면도 따라옵니다.

처음 5분이 아직 일어나지 않은 일을 일어난 것처럼 말했습니다.

  • 설치 마법사가 "만들었습니다"라고 했지만 그 시점에 만들어진 것은 없었습니다 — 기록 폴더와 규칙 파일은 프로젝트를 열 때 생깁니다. 이제 "프로젝트를 열면:" 이라고 말합니다.
  • 오늘 화면이 "자동으로 일지를 작성합니다"라고 했는데, 그 시점에 켜져 있는 자동화는 하나도 없었습니다.
  • Claude Code 플러그인이 없으면 이제 알려 줍니다. 예전에는 알림도 배지도 없었고 안내가 설정 3단 깊이에만 있었습니다.
  • 첫날 비어 있는 화면 아홉 개가 무엇을 하면 채워지는지 말합니다. 그냥 "비어 있음"이 아니라 그 화면을 살리는 구체적인 행동이 버튼으로 붙습니다.
  • 「기록 정직성」 패널이 문제를 보여만 주고 아무것도 할 수 없었습니다. 이제 그 자리에서 일지로 남기거나·경로를 복사하거나·변경을 볼 수 있습니다. 유일한 선택지가 과금되는 모델 호출이던 카드도 무료 경로를 앞에 놓고, 돈이 드는 쪽에는 라벨에 그렇게 적었습니다.

같은 코드가 화면마다 다른 색이었습니다. 편집기에서는 보라, 변경 화면에서는 빨강이었고, 색 테마를 골라도 편집기만 안 따라왔습니다. 이제 문법 색이 한 벌이고 테마 5종을 전부 따릅니다. 설정 모달의 어두운 배경도 테마를 따릅니다 — 어떤 테마를 골라도 혼자 검정이던 유일한 자리였습니다.

설정이 12개 탭에 100개가 넘는데 검색이 없었습니다. 이제 탭 줄 옆에서 바로 찾습니다 (한국어·영어 둘 다).

글자 크기와 여백도 정리했습니다 — 자리마다 제각각이던 값이 하나의 단계로 모였습니다. 화면 전체가 미묘하게 촘촘해집니다.

v2.43.0

앱이 "일지 없이 끝난 세션"을 잘못 세고 있었습니다. 배달 게이트·미기록 신호·오늘 카드 세 곳이 전부 프로젝트 전체에서 가장 최근에 쓰인 일지 시각 하나에 기대고 있었습니다. 그래서 터미널을 여러 개 띄워 에이전트를 동시에 돌리면 셋이 한꺼번에 틀렸습니다 — 옆 대화가 일지를 쓰면 내 미기록이 가려지고, 반대로 옆 대화가 고친 파일을 내가 고친 것으로 읽어 아무것도 안 한 대화를 붙잡았습니다.

먼저 세어 봤습니다. 지금까지 쌓인 신호 164줄은 세션이 아니라 세션 조각 수였고(대화 하나가 최대 11번 신호를 냅니다), 고유한 대화는 117개, 그중 정말로 기록을 빠뜨린 것은 2건이었습니다. 어떤 대화는 일지를 55번이나 쓰고도 미기록으로 찍혔습니다.

  • 이제 판정이 한 곳에만 있습니다. 세 곳이 같은 함수를 부르고, 그 함수는 "누가 썼는가"를 대화 단위로 봅니다. 근거가 없으면 「모른다」고 말합니다 — 예전처럼 모름을 미기록으로 뭉뚱그리지 않습니다.
  • 앱 안에서 연 Claude Code·Codex 대화도 이제 셉니다. 예전에는 앱 밖 터미널의 Claude Code 만 대상이었습니다. 앱 안 대화는 턴이 끝날 때 판정하고, 기록이 빠졌으면 대화 위에 한 번 알려 준 뒤 기록하면 스스로 사라집니다.
  • 앱 안 대화와 터미널의 에이전트가 서로를 알아봅니다. 그래서 한쪽이 고친 파일로 다른 쪽이 붙잡히지 않습니다.

지난 대화를 이어 열면 기록 도구가 통째로 사라졌습니다. 처음 열 때는 붙었는데 이어 열 때는 안 붙어서, 그 대화의 에이전트는 일지를 쓸 방법이 없는 채로 일했습니다. 고쳤습니다. 그리고 기록 도구가 안 붙었으면 이제 대화 화면이 그 사실을 말합니다 — 어디를 찾았는지와 어떻게 고치는지까지.

「일지 없이 끝난 세션」 카드가 0건일 때 숨었습니다. 조용해 보이지만, 화면에서는 정말 깨끗한 주와 판정에 가려진 주가 똑같아 보였습니다. 이제 0건일 때도 남아서 무엇을 세었고 무엇은 못 세는지 함께 말합니다. 회고에도 「기록 정직성」 한 줄이 상시로 붙습니다 — 조회에 실패하면 0건이라고 하지 않고 "지금은 알 수 없다"고 말합니다.

어느 자동화가 프로젝트 내용을 밖으로 보내는지 화면에서 알 수 없었습니다. 이제 모델을 부르는 자동화에는 어느 프로바이더로 보내는지가 이름으로 붙습니다. 로컬 모델이면 붙지 않습니다.

  • 자동화 단계에 조건이 생겼습니다. 예전에는 "일지가 3건 이상일 때만 주간 요약"을 시킬 수 없어서, 쓸 것이 없어도 빈 요약을 만들고 성공했다고 말했습니다. 이제 조건이 안 맞으면 건너뛰고, 건너뛴 사실이 실행 이력에 남습니다.
  • 기기 밖으로 나가는 연결을 저장소가 직접 셉니다. 새 연결이 생기면 사유를 적기 전까지 빌드가 실패합니다. 그렇게 세어 보니 문서가 실제보다 적게 적고 있었습니다 — README·랜딩·위키의 「밖으로 나가는 건 셋뿐」을 실제 목록으로 정정했습니다. Notion 연동의 인증 교환이 oculpm.com 을 거친다는 사실도 이제 적혀 있습니다.

사이드바가 화면 아래에서 잘렸습니다. 화면이 늘면서 터미널 도크·테마·설정 세 줄이 창 밖으로 밀려나 있는 줄도 모르는 상태가 됐습니다. 이제 목록만 스크롤되고 그 셋은 늘 바닥에 있습니다. 창이 낮으면 줄 간격도 함께 조여져, 웬만한 창에서는 스크롤 없이 다 보입니다.

여러 세션이 같은 계획 문서를 동시에 고치면 한쪽 변경이 조용히 사라졌습니다. 막을 장치가 있긴 했는데, 비교할 기준값을 직전 수정 응답에서만 받을 수 있어서 그 세션의 첫 수정은 보호받을 방법이 아예 없었습니다 — 그게 가장 흔한 경우입니다. 이제 계획을 읽을 때마다 기준값이 함께 오고, 없이 고치려 하면 거절하며 무엇을 하면 되는지 알려 줍니다.

v2.42.0

큰 붙여넣기 한 번이 열려 있는 모든 터미널을 끊었습니다. 도구를 호출 중인 에이전트 창처럼 입력을 당장 읽지 않는 터미널에 수백 KB 를 붙여넣으면, 그 쓰기가 끝날 때까지 터미널 호스트 전체가 멈춰 있다가 10초 뒤 연결이 통째로 버려졌습니다. 재현해 보니 평범한 셸은 64MB 도 1.7초에 삼키는데, 그 상태의 터미널에서는 무기한 막혔습니다.

  • 이제 터미널마다 제 입력 줄을 갖습니다. 한 터미널이 입력을 안 읽고 있어도 나머지는 그대로 반응하고, 그 터미널이 다시 읽기 시작하면 붙여넣은 내용이 순서대로 온전히 들어갑니다.
  • 글자 크기 슬라이더를 끄는 동안 설정이 매 프레임 저장됐습니다. 짧은 드래그 한 번이 저장 20번 · 화면 확대 20번 · 앱 전체 재렌더 20번이었고, 창을 여럿 띄웠다면 창마다 설정 전체를 다시 읽는 일이 거기에 곱해졌습니다. 이제 끄는 동안은 미리보기만 하고 놓을 때 한 번 저장합니다 — 설정의 다른 슬라이더 여덟 개도 같습니다.
  • 터미널 탭을 하나 고를 때마다 16개 화면이 전부 다시 그려졌습니다. 화면 상태가 이미 네 조각으로 나뉘어 있었는데 정작 늘 떠 있는 세 곳이 그 전체를 구독하고 있었습니다.

프로젝트를 색인하는 6.4초 동안 앱이 다른 일을 못 했습니다. 파일을 읽고 해시하고 구문을 분석하는 일이 전부 앱의 작업 스레드 위에서 돌았습니다. 이제 별도 스레드로 내려가고, 색인 중에도 앱이 반응합니다.

  • 브랜치를 바꿀 때 밀려드는 파일 변경에 상한이 생겼습니다. 재 보니 체크아웃 한 번이 1,058건을 한꺼번에 쏟아 넣는데 받는 쪽에 바닥이 없었습니다. 이제 한계가 있고, 넘쳐서 놓친 것이 있으면 조용히 잃지 않고 뒤에 스스로 만회한 뒤 알려 줍니다.
  • 프로젝트를 닫아도 그 프로젝트의 색인과 파일 히스토리가 계속 돌았습니다. 이제 프로젝트와 함께 멈춥니다.
  • 프로젝트 하나를 여는 동안 다른 프로젝트가 멈추던 것을 풀었습니다. 코드 언어 서버 목록을 볼 때, 그리고 의미 검색을 여럿이 동시에 부를 때도 같은 병목이 있었습니다.

설정이 저장에 실패해도 저장된 것처럼 보였습니다. 실패가 아무 데도 안 나타나서, 껐다 켜면 값이 돌아와 있는 것으로만 알 수 있었습니다. 이제 실패하면 사유와 함께 말해 줍니다 — 에이전트 중단·터미널 종료처럼 눌렀는데 아무 일도 안 일어나던 자리들도 같습니다.

v2.41.0

⌘W 가 돌고 있는 에이전트를 아무것도 묻지 않고 죽였습니다. 터미널을 넷으로 쪼개 에이전트를 넷 띄운 다음 하나를 닫으면, 그 턴은 그냥 사라졌습니다. 이상한 것은 같은 ⌘W 가 한 층 위에서는 물었다는 점입니다 — 탭을 닫을 때는 페인마다 실행 중인 명령을 조회해 확인창을 띄웁니다. 필요한 판정은 이미 있었고, 페인 층에서만 부르지 않았습니다.

  • 페인을 닫을 때도 묻습니다. 무엇이 돌고 있는지 이름을 대고, 취소하면 아무것도 건드리지 않습니다.
  • 화면 하나가 넘어져도 앱이 통째로 넘어지지 않습니다. 여태 경계가 설정 화면과 탭 전체에만 있어서, 화면 하나가 렌더 중 실패하면 사이드바까지 사라져 나갈 길이 없었습니다. 이제 그 화면만 대체 카드가 되고 나머지는 그대로입니다.
  • 저장소가 막힌 브라우저에서도 앱이 뜹니다. 설정 저장에 쓰는 저장소를 무방비로 읽고 있었는데, 우리는 키 하나에 전부 담으므로 그 호출이 실패하면 모든 화면이 한 번에 흰 화면이 됩니다.

"검사 실패"와 "깨끗함"이 화면에서 구별되지 않았습니다. 이 앱은 모르면 모른다고 말하는 것을 원칙으로 삼는데, 정작 정직성 감사와 「일지 없이 끝난 세션」 카드가 조회에 실패하면 조용히 사라졌습니다 — 아무 문제 없는 것과 똑같이 보였습니다.

  • 실패는 실패라고 말합니다. 사유와 다시 시도 버튼이 함께 나옵니다.
  • 변경 화면이 "변경 없음"으로 위장하지 않습니다. git 조회가 실패한 네 자리가 정상 상태와 글자 하나 다르지 않았습니다. 이제 아직 모름 · 못 물어봄 · 정말 없음 을 나눠 말합니다.
  • 여섯 화면이 「불러오는 중」에 갇히던 것을 풀었습니다. 코드 맵·검색·플래너·회고·문서·논의 — 드문 실패였지만 한 번 걸리면 화면을 옮기는 것 말고는 나올 길이 없었습니다.
  • 닫은 탭이 계속 말을 걸던 것을 멈췄습니다. 구독 열다섯 자리가 화면을 떠난 뒤에도 남아 있었고, 그중 하나는 사라지지 않는 알림을 띄웠습니다.

한국어 문장이 어절 한가운데서 꺾였습니다. 좁은 창에서 일지 서술과 AI 답변이 "프로젝 / 트를" 처럼 잘렸습니다. 한국어 조판 규칙이 앱 전체에 한 번도 걸려 있지 않았고, 그래서 같은 버그를 자리마다 다른 임시방편으로 네 번 막아 온 흔적이 남아 있었습니다.

  • 어절을 지킵니다. 대신 공백 없는 긴 경로·식별자는 그대로 끊습니다.
  • 다크 테마에서 안 보이던 표시들을 고쳤습니다. 플래너 완료 체크·변경 파일의 A/M/D 배지·설정 토글 손잡이가 액센트 색 위에서 거의 읽히지 않았습니다(대비 1.98:1, 고대비 테마에서는 1.43:1 로 사실상 보이지 않았습니다).
  • 흐린 안내문을 읽을 수 있게 했습니다. 데이터가 없는 화면에서 "무엇을 하면 되는지" 알려주는 유일한 문장이 배경에 녹아 있었습니다 — 여섯 테마 전부에서 기준 미달이었습니다.
  • 같은 코드가 화면마다 다른 색이던 것을 한 벌로 줄였습니다. 문법 강조 정의가 네 벌 있었고 그중 넷은 서로 충돌해 로드 순서가 승자를 정하고 있었습니다.

같은 대화에 두 번 물으면 앞의 답이 갈 곳을 잃었습니다. 대화 하나에 프롬프트가 겹쳐 들어오는 것을 막는 장치가 없어서, 두 번째가 첫 번째의 자리를 덮었습니다. 그리고 턴이 정상 경로가 아닌 방식으로 끝나면 — 창을 닫거나 작업이 중단되면 — 화면은 영원히 「생각 중」이었습니다.

  • 한 대화는 한 번에 하나입니다. 이미 답하는 중이면 그렇게 말합니다.
  • 어떻게 끝나든 끝났다고 말합니다. 성공·실패·취소·중단 전부입니다.
  • 일지가 537건이어도 검색이 한 글자에 멈추지 않습니다. 검색창에 한 글자만 넣어도 14일 창과 날짜 접기가 동시에 풀려 전체 이력을 한꺼번에 그렸습니다. 이제 나눠 불러오고 「전체 N건 중 M건」을 말합니다.

말과 실제가 어긋나 있던 곳들. 소개 문서와 웹사이트가 이미 없어진 자리로 안내하고 있었고(v2.40.0 에서 「세션」 화면으로 옮긴 기능), 검색이 쓰지 않는 기술을 쓴다고 적혀 있었습니다. 개발 문서 206개에는 목차가 없어 넉 달 전 문서가 자기를 최신이라고 말하고 있었습니다 — 사람에게도, 이 저장소에서 일하는 에이전트에게도 오답의 원천이었습니다.

게이트를 새로 셋 놓았습니다. 코드 검사기(ESLint)가 아예 없었는데 그것을 끄는 주석이 33개 있었습니다. Rust 컴파일러 버전이 고정돼 있지 않아 코드가 한 줄도 안 바뀐 날 빌드가 붉어지곤 했습니다. 의존성 817개의 보안 공지·라이선스를 보는 검사는 하나도 없었습니다 — 켜자마자 실제 취약점 네 건이 나왔고, 고칠 수 있는 셋은 이 릴리스에서 닫았습니다.

v2.40.0

터미널을 넷으로 쪼개 에이전트를 넷 띄워도, 앱은 세션 하나만 보고 있었습니다. 훅은 대화마다 다른 id 를 들고 도착하는데 그 값이 문 앞에서 버려지고 있었습니다 — 화면에 남는 것은 상수 라벨 claude-code 하나뿐이라, 넷이 돌아도 "에이전트 하나"였고 넷이 쓴 일지가 전부 같은 세션 번호를 달았습니다.

  • 작업 세션이 참여한 대화를 전부 기록합니다. 트레이가 「대화 4」처럼 그 수를 말하고, 툴팁에 어느 대화들이었는지 답니다.
  • 일지가 어느 대화의 것인지 적습니다. 기록 도구는 Claude Code 의 자식 프로세스라 대화 id 를 이미 알고 있었습니다 — 이제 그걸 프론트매터에 남깁니다(모르는 자리에서는 줄 자체가 나가지 않습니다).
  • 작업 세션은 일부러 쪼개지 않았습니다. 파일 변경을 보는 워처는 누가 썼는지 모르므로, 세션을 N개로 나누면 파일 수·커밋 위치가 임의로 복제됩니다. 그릇은 하나로 두고 누가 붙어 있었는지를 기록합니다.

터미널 카드 넷이 전부 같은 회색이고, 이름도 다 claude 였습니다.

  • 세션마다 색을 고릅니다. 카드를 오른쪽 클릭하면 색을 고르고, 왼쪽 띠와 터미널 테두리가 같이 물듭니다. 테마·프리셋을 바꿔도 고른 의미가 유지됩니다.
  • 카드가 일감 수를 말합니다. 여태 카드는 포커스된 페인 하나만 보고 있어서, 4분할해 넷을 돌려도 나머지 셋은 화면 어디에도 없었습니다. 이제 2/4 실행 중 이라 적고, 레일을 접어도 아이콘 모서리에 그 수가 남습니다. 옆 페인의 에이전트가 부르는 것도 카드가 대신 말합니다.
  • Codex 가 제 아이콘을 갖습니다. 같은 자리에서 Claude 는 자기 로고인데 Codex 만 정체 모를 칩이었습니다. AI 패널 탭에 Codex 대화인데 Claude 로고가 붙던 것도 고쳤습니다.

코드 트리에서 파일을 손으로 옮길 수 없었습니다. 코드에는 있었는데 앱에서는 죽어 있었습니다 — 행이 버튼이라 웹뷰가 드래그를 열어 주지 않았습니다.

  • 끌어서 옮깁니다. 손에 들린 것이 보이고, 접힌 폴더 위에 머물면 열리고, 목록 가장자리에서 저절로 스크롤하고, 놓을 수 없는 자리는 밝히지 않습니다.
  • 여럿을 함께 잡고, 옮긴 것을 되돌립니다. 키보드만으로도 같은 이동을 합니다(잘라내기·붙여넣기 포함).
  • 이름을 바꾸면 열려 있던 탭과 미저장 편집이 따라옵니다. 삭제는 함께 닫히는 탭을 먼저 보여주고 확인을 받습니다.

「함께 일하는 중」이 Today 카드 한 칸에 갇혀 있었습니다. 한 프로젝트에 세션이 넷 붙어 서로 다른 일을 하면, 그중 둘을 골라 묶는 것은 "오늘 무슨 일이 있나"가 아니라 작정하고 하는 일입니다.

  • 「세션」 화면이 생겼습니다. 누가 붙어 있고 누구와 묶여 있는지, 무엇을 쥐고 있는지가 한 화면입니다. 이름이 전부 claude-code-term-<pid> 라 구별이 안 되던 문제를 별명·등록 이름·표면·잡은 구역·마지막 활동을 겹쳐서 풉니다.
  • 승인 대기는 사이드바 배지가 말합니다 — 화면을 안 열어도 놓치지 않습니다.
  • 플래너 항목에 호버카드 — 진행률·남은 개수·마지막 활동을 그 자리에서 봅니다.

정리한 것들. 빌드 산출물이 207GB 까지 자라던 것을 비우고 다시 쌓이지 않게 정리기를 뒀습니다. 세션 화면이 화면을 빨리 떠날 때 이벤트 구독을 놓치던 누수와, 이미 끝난 구역 충돌 경고가 화면에 계속 남던 것을 고쳤습니다. 파일 크기 게이트가 아직 커밋하지 않은 새 파일을 못 보던 사각지대도 막았습니다 — 그래서 800줄을 넘겨 태어난 파일이 커밋 뒤에야 CI 에서 붉어졌습니다.

v2.39.1

다른 프로젝트에서 일하던 Codex 가 이 프로젝트에 일지를 썼습니다. v2.39.0 이 Codex MCP 서버를 프로젝트별로 등록한 것이 원인입니다 — ~/.codex/config.toml 은 머신 전역이라 거기 적힌 서버는 모든 Codex 세션에 실리는데, 그 항목이 --root 로 프로젝트 하나를 박아 두고 있었습니다. 그래서 다른 폴더에서 부른 기록 도구가 박아 둔 프로젝트에 일지와 계획을 남겼습니다.

  • 등록은 이제 항목 하나입니다. 루트를 박지 않고, 어느 프로젝트인지는 Codex 세션이 열린 폴더가 정합니다 (Codex 는 MCP 서버를 그 세션의 작업 폴더에서 띄웁니다). 카드도 「이 프로젝트에만 적용」에서 「이 머신 전체」로 옮겼습니다 — 설정 파일이 그렇게 생겼으니 화면도 그렇게 말해야 합니다.
  • 옛 항목은 화면이 짚고, 한 번에 고칩니다. 프로젝트가 박힌 항목이 있으면 배지가 「프로젝트 고정됨」으로 바뀌고 그 경로를 이름으로 말합니다. 「다시 등록」 한 번이면 옛 항목을 걷어내고 하나로 수렴합니다.
  • 기록 서버가 남의 프로젝트에 쓰기를 거부합니다. --root 가 지금 도는 자리와 다른 추적 프로젝트를 가리키면 서버가 아예 뜨지 않습니다. 조용히 고쳐 주지 않는 쪽을 골랐습니다 — 설정이 틀렸다는 사실이 보여야 고쳐지니까요. 손으로 적어 둔 옛 항목도 이 그물에 걸립니다.

이미 잘못 쓰인 일지·계획 파일은 직접 옮겨야 합니다. 앱은 남의 프로젝트 파일을 자동으로 옮기지 않습니다.

v2.39.0 은 이 결함 때문에 배포하지 않았습니다 — 빌드를 중간에 세웠습니다. 그 버전의 내용(Codex 연동·플래너 정리·터미널 수정)은 전부 이 릴리스에 함께 들어 있습니다.

v2.39.0

Codex 를 손님이 아니라 식구로 모십니다. 여태 Codex 와의 연결은 AGENTS.md 한 장뿐이었고, 기록 도구(MCP)를 붙이려면 Claude 용 플러그인을 억지로 물려야 했습니다 — 그 안에는 Claude 만 아는 경로 변수가 들어 있어 Codex 에서는 시작 자체가 실패했습니다.

  • 설정 → 연동에 「Codex MCP 서버」. 이 프로젝트만 가리키는 stdio 서버를 ~/.codex/config.toml 에 넣습니다. Claude 의 플러그인과 .mcp.json 은 건드리지 않고, 손으로 적어 둔 주석과 다른 MCP 서버도 그대로 둡니다. 폴더 이름이 같은 프로젝트가 여럿이어도 키가 겹치지 않고, 해제는 이 프로젝트 것만 지웁니다 (반영은 새 Codex 세션부터).
  • Codex 전용 플러그인. codex plugin marketplace add bunhine0452/Ocul-PM → codex plugin add oculpm-codex@oculpm 두 줄이면 기록 규칙 스킬이 Codex 세션에 함께 갑니다. Claude 변수가 섞이지 않은 별도 패키지입니다.
  • 「마켓플레이스 없음」을 화면이 짚습니다. Codex 는 처음 켤 때 Claude 쪽 설정을 임포트하는데, 활성 플러그인 목록만 옮겨 오고 마켓플레이스는 가져오지 않습니다. 그러면 Codex 는 그 플러그인을 조용히 로드하지 못합니다. 이제 연동 탭이 그 상태를 따로 구분해 말하고, 되살릴 명령을 함께 줍니다.
  • Agents 목록에 Codex 자리. 토글이 아니라 「네이티브」 표기입니다 — Codex 는 루트 AGENTS.md 를 그대로 읽으므로 켜도 만들 파일이 없습니다. 없는 스위치를 그리지 않습니다.

계획이 40개가 되면 목록이 벽이 됩니다. 에이전트는 작업 단위마다 계획을 새로 만들고, 그래서 완료는 하루 한 개꼴로 자랍니다.

  • 월별로 접힙니다 — 완료·보관이 12개를 넘으면 완료 · 2026.08 처럼 달로 쪼개지고 기본은 접혀 있습니다. 진행 중은 몇 개든 쪼개지 않습니다 — 지금 하는 일은 한눈에 다 보여야 하니까요.
  • 한 섹션 10행 + 「N개 더 보기」 — 검색 중에는 상한을 걸지 않습니다. 찾은 것을 숨기면 검색이 아닙니다.
  • 완료 묶음을 통째로 보관 — 헤더 버튼 하나로 그 달 전체가 보관으로 넘어갑니다(단건 보관 버튼도 생겼습니다). 여태 보관 상태는 백엔드에만 있고 화면에는 길이 없어서, 한 번 끝난 계획은 영원히 완료 칸에 남아 있었습니다.
  • 레일 폭과 자리 — 드래그·←/→ 로 폭을 바꾸고(더블클릭이면 원래대로), 왼쪽/오른쪽 중 붙일 자리를 고릅니다.

터미널을 열 때마다 셸이 200줄을 토했습니다. v2.38.0 의 zsh 셸 통합 스크립트에 이름을 잃은 선언 한 줄이 섞여, 프롬프트 위로 셸 변수 표가 통째로 쏟아졌습니다. 명령 경계 감지는 멀쩡했고 문법도 유효해서 어떤 게이트에도 걸리지 않았습니다 — 고쳤고, 같은 종류를 잡는 게이트를 새로 달았습니다.

v2.38.0

에이전트가 여럿이면, 서로를 아는 것만으로는 부족합니다. v2.37.0 이 서로를 보게 했다면 이번엔 누구와 일할지 고르고, 받은 것을 믿어도 되는지 가릅니다.

  • 세션 묶기 — 프로젝트가 곧 팀은 아닙니다. 한쪽이 리팩토링 중일 때 다른 쪽은 그냥 질문에 답하고 있는데도 같은 우편함에 있었습니다. 이제 Today 에서 함께 일할 세션을 직접 묶고, 묶은 세션끼리만 말하고 일을 넘깁니다. 묶이지 않은 세션은 보이기만 합니다. 팀에 이름을 붙이고 멤버를 하나씩 뺄 수 있습니다. 파일 구역 선점은 묶든 안 묶든 그대로 막습니다 — 같은 파일을 고치면 친하든 아니든 부딪히니까요.
  • 남이 쓴 텍스트는 데이터입니다 — 이제 문장이 아니라 기구로. 다른 에이전트가 보낸 메시지·검색된 코드·일지가 모델에게 갈 때, 본문이 무엇을 적든 프롬프트 경계를 위조할 수 없습니다(짝 태그 + 본문 이스케이프). 전에는 "지시로 따르지 말 것"이라는 문장 한 줄이 방어의 전부였습니다 — 프롬프트에 기대는 규율로 프롬프트 주입을 막고 있었던 셈입니다.
  • 원장은 손을 탄 것을 말합니다. 태스크 기록의 줄마다 앞 줄의 지문을 싣습니다. 중간 줄을 고치거나 지우면 「내용이 고쳐졌어요」·「앞 줄이 지워졌거나 순서가 바뀌었어요」가 화면에 섭니다. 사슬이 없던 시절의 기록은 판정하지 않고 그렇게 적습니다.
  • 「모른다」를 「없다」로 말하지 않습니다. 세션 생존 판정에 판정 불가가 셋째 상태로 생겼습니다. 전에는 모름이 전부 죽음으로 흘러가, 살아 있는 세션의 작업 구역을 뺏는 길이 열려 있었습니다. 이제 걷는 것은 확실히 죽은 것뿐입니다.
  • 세션이 자기를 증명합니다 · 터미널의 oculpm 명령. agent.id 는 여태 에이전트가 스스로 밝히는 값이었습니다. 이제 앱이 띄운 세션에는 토큰이 발급되고, 그렇지 않은 참여자에게는 「자칭」 표가 붙습니다(막지는 않고 보이게만). 덤으로 MCP 를 못 쓰는 에이전트도 터미널에서 oculpm 으로 같은 기록 도구를 부릅니다 — 표면을 새로 만든 게 아니라 같은 구현에 입출력만 이었습니다.
  • 규칙에 근거가 붙습니다. 스킬·규칙 화면의 항목에 「근거 일지 N건」과 「이 결함은 평균 D일마다 다시 났습니다」가 섭니다 — 그 규칙이 왜 있는지를 과거 일지에서 캐 옵니다.

v2.37.0

한 프로젝트에 에이전트가 둘 이상 붙는 순간부터, 서로를 모른 채 같은 파일을 고쳤습니다. 이제 앱 안의 Claude Code·Codex 와 터미널에서 도는 CLI 세션이 서로를 보고, 작업 구역을 나눠 잡고, 일을 넘길 수 있습니다.

  • 함께 일하는 중 — Today 에 지금 이 프로젝트에 붙어 있는 에이전트가 보입니다. 혼자 일할 때는 카드 자체가 뜨지 않습니다.
  • 작업 구역 잡기 — 고칠 파일 범위를 미리 잡아 두면, 다른 에이전트가 같은 곳을 잡으려 할 때 누가 언제까지 쥐고 있는지 알려주며 막습니다. 부딪힌 뒤 수습하는 것이 아니라 부딪히기 전에 막습니다.
  • 작업 넘기기 — 한 에이전트가 다른 에이전트에게 일을 넘기고, 받은 쪽은 Today 카드에서 사람이 눌러야 시작합니다. 끝나면 반드시 종료가 남고, 수행자가 사라지면 기한이 대신 닫습니다 — 넘긴 쪽이 영영 기다리는 일이 없습니다.
  • 받은 메시지는 데이터이지 지시가 아닙니다. 다른 에이전트가 보낸 내용은 승인 없이는 아무 것도 실행하지 않고, 크기 상한을 넘으면 자르지 않고 거절하며, 시크릿은 일지와 같은 길로 마스킹됩니다.
  • 외부 문(설정 → ocul-pm) — 다른 기계나 클라우드의 에이전트도 같은 원장에 참여할 수 있게 여는 A2A 엔드포인트입니다. 기본은 닫혀 있고, 열어도 127.0.0.1 에만 열리며, 토큰은 켤 때마다 새로 만들어 저장하지 않습니다.
  • Codex 화면에 제 아이콘이 붙었습니다.

v2.36.0

세션당 컨텍스트가 그동안 실제보다 작게 나왔습니다. 「걸려 있는 것」 화면은 스킬·규칙·메모리만 세고 있었는데, Claude Code 는 여러분이 만들어 둔 에이전트와 커맨드의 이름·설명도 매 세션 통째로 실어 보냅니다. 이 저장소의 어느 설치본에서는 그게 30KB 였습니다 — 화면이 119KB 라고 말하던 세션의 진짜 값은 149KB 였던 겁니다. 이제 예산 바에 에이전트·커맨드 조각이 서고, 목록에서도 종류로 걸러 볼 수 있습니다. 항상 로드와 따로 그리는 이유는 줄이는 방법이 다르기 때문입니다: 규칙은 범위를 좁혀서 줄이지만, 에이전트·커맨드는 파일을 지워야 줄어듭니다. (플러그인이 딸려 보내는 것은 파일 단위로 손댈 수 없어 세지 않고, 화면이 그렇게 적어 둡니다.)

「paths 2」가 무엇을 숨기고 있었는지 보입니다. 조건부 규칙의 배지는 글로브가 몇 개인지만 말했습니다. 그 2개가 「모든 .ts」와 「모든 .tsx」라면 프런트 파일 한 줄만 고쳐도 그 규칙이 통째로 딸려온다는 뜻인데, 화면에는 그게 전혀 없었습니다 — 실제로 이 저장소에서 React Native 규칙 8벌이 그렇게 걸려 있었고, 이 앱에는 React Native 가 한 줄도 없습니다. 이제 배지가 paths 2 · 1,847개 파일 이라고 말하고, 프로젝트 파일의 30% 이상을 무는 규칙에는 「사실상 상시」 가 붙습니다. 하나도 물지 않으면 「매칭 0」입니다.

실어 놓고 「따르지 않는다」고 적어 둔 규칙을 짚어 줍니다. 규칙 팩을 깔고 나서 CLAUDE.md 에 「이건 안 따른다」고 써 두는 건 흔한 일입니다. 그런데 그 규칙은 여전히 매 세션 들어갑니다 — 싣는 데 한 번, 그걸 무효로 만드는 문장에 또 한 번, 양쪽으로 값을 치릅니다. 이제 정리 제안이 그런 규칙을 찾아 어느 문서의 어떤 문장이 그것을 부정하는지 그대로 인용합니다. 판정은 여러분이 합니다 — 앱은 아무것도 고치지 않습니다.

「한 번도 안 걸렸다」가 더 이상 잘못이라는 뜻이 아닙니다. 여태 제안 패널은 30일 발동 0회인 스킬을 전부 「설명이 발동 기준입니다」라며 설명을 고쳐 쓰라고 권했습니다. 그런데 0회에는 이유가 여럿이고, 설명 문제는 그중 하나뿐입니다. 새 프로젝트를 시작할 때 쓰는 스킬은 시작할 프로젝트가 없어서, 평가 기준을 돌리는 스킬은 EVALS.md 가 없어서, TDD 스킬은 여러분이 「요청할 때만 쓴다」고 적어 둬서 조용한 겁니다. 여기에 설명을 고쳐 쓰면 안 맞는 자리에 끼어드는 스킬이 됩니다. 이제 제안은 진짜 설명 문제에만 나가고, 나머지는 「설명 문제가 아닌 0회」로 이유와 근거를 달아 따로 섭니다 — 방금 만들어 아직 판단할 수 없는 것까지 포함해서.

v2.35.0

업데이트해도 터미널이 죽지 않습니다 — 이번엔 진짜로. 터미널을 소유한 프로세스가 앱보다 오래 사는 이유는 하나입니다: 업데이트가 앱을 재시작할 때 그 안에서 돌던 셸을, 그러니까 여러분이 붙여 놓은 작업을 살리기 위해서입니다. 그런데 v2.34.0 이 그 프로세스와 만나는 자리의 이름을 바꾸면서, 업데이트한 앱이 옛 자리를 쳐다보지 않게 됐습니다 — 하던 세션이 화면에서 사라지고, 옛 프로세스는 2분 뒤 자기가 쥔 셸을 끝냈습니다. 기능의 존재 이유를 그 기능의 업데이트가 취소한 셈입니다. 이제 자리는 바뀌지 않고, 앱이 옛 자리까지 찾아가 거기 살아 있는 프로세스를 그대로 이어받습니다. 버전이 달라 뜻이 어긋나는 부분은 앱이 옛 뜻에 맞춰 줍니다 — 프로세스를 갈아치우지 않습니다. 그리고 세션을 쥔 프로세스를 몇 분 만에 내리는 길을 전부 없앴습니다: 앱이 그 프로세스에게 「내려가라」고 말하는 자리가 이제 하나도 없고, 아무도 붙지 않은 채 셸을 쥐고 있는 프로세스의 유예는 3시간 하나뿐입니다(그 사이 앱이 돌아오면 처음부터 다시 셉니다).

Claude Code 대화의 세션 id 가 화면에 보입니다. 앱 안의 대화는 우리가 따로 저장하지 않습니다 — Claude Code 자신의 것이라, id 만 있으면 터미널에서 claude --resume <id> 로 같은 대화를 그대로 이어 열 수 있습니다. 그 id 가 여태 화면 어디에도 없었습니다. 이제 상단바에 지금 보고 있는 대화의 id 가 서고, 지난 대화 목록에는 줄마다 하나씩 섭니다 — 누르면 전체 id 가 복사되고(화면에는 앞 8 자만 적습니다), 커서를 올리면 칠 명령이 그대로 보입니다. 목록의 줄이 두 줄이 되면서 제목은 오히려 덜 잘립니다.

v2.34.1

업데이트가 남긴 옛 터미널 프로세스를 앱이 스스로 걷습니다. 터미널을 소유한 프로세스는 앱 업데이트를 넘어 살아남습니다 — 셸이 재시작에 죽지 않게 하려고 그렇게 만들었습니다. v2.34.0 에서 그 프로세스의 자리(소켓)에 버전을 붙이면서, 옛 버전에서 올라온 프로세스에는 이제 아무도 붙지 않게 됐습니다. 문제는 그 옛 프로세스가 스스로 내려갈 줄 모른다는 것입니다: 아무도 보지 않는 셸을 쥔 채 로그인 세션이 끝날 때까지 남습니다. 이제 앱이 시작할 때 그 자리를 한 번 확인하고, 남아 있으면 세션을 제대로 끝내고 내려가게 합니다. 누를 것도, 터미널에 칠 것도 없습니다.

앞으로 생기는 같은 상황은 프로세스 자신이 정리합니다(v2.34.0 에서 들어간 규칙 — 붙는 이가 없으면 스스로 내려갑니다). 이번 판은 그 규칙이 없던 옛 버전에서 올라오는 경로 하나만을 위한 것입니다.

로컬 히스토리의 판 하나가 다른 판을 가리던 것. 판의 신원이 밀리초 시각이라 같은 밀리초에 두 판이 들어오면 신원이 겹쳤습니다 — 그러면 한 판을 열었는데 다른 판의 내용이 나오고, 용량 정리가 한 판을 지우라는 지시로 둘을 함께 지웠습니다. 사람 손으로는 잘 나지 않지만 에이전트가 연달아 쓰면 납니다. 판마다 다른 신원을 갖게 했습니다.

v2.34.0

코드 화면이 「하루 종일 켜 두는 편집기」가 됐습니다. VS Code 를 오래 쓰면서 아무도 의식하지 않는 일곱 가지를 가져왔습니다. 저장하면 후행 공백과 마지막 줄이 정리되고, 저장을 잊어도 파일이 최신입니다(지연 저장 · 포커스가 떠날 때). diff 가 이 앱의 제품이라 「저장이 만드는 노이즈」는 다른 앱보다 비싸서, 둘 다 기본은 꺼짐이고 설정 → 코드에서 켭니다 — 자동 저장은 지금 커서가 있는 줄을 건드리지 않고, 포맷을 함께 돌리지도 않습니다. 파일을 훑어도 탭이 쌓이지 않습니다: 트리에서 한 번 누른 파일은 기울임으로 뜨는 미리보기 탭 한 자리를 돌려 쓰고, 더블클릭하거나 한 글자라도 고치면 고정됩니다(미저장 편집이 든 탭은 절대 교체되지 않습니다). ⇧⌘O 로 심볼, ⌃G 로 줄 — 목록을 오르내리면 그 자리로 미리 뛰고, Esc 면 원래 줄로 돌아옵니다. 스크롤해도 지금 어느 함수 안인지 맨 위에 남습니다(스티키 스크롤). 그리고 문제가 한곳에 모입니다 — 에이전트가 무엇을 깨뜨렸는지 파일을 하나씩 열어 보지 않아도 프로젝트 전체의 진단이 파일별로 섭니다. 빈 상태에는 「문제 없음」이 아니라 「아직 아는 문제 없음」이라고 적습니다: 열어 본 적 없는 파일까지 안다고 말하지 않기 위해서입니다.

커밋 사이의 시간이 남습니다. 저장할 때마다, 그리고 에이전트가 파일을 고칠 때마다 그 순간의 판이 하나씩 쌓입니다. 경로 줄의 시계를 누르면 최신순으로 서고(시각 · 출처 · 크기), 아무 판이나 골라 지금과 겹쳐 보거나 되돌립니다 — 되돌리기도 평소의 저장 경로를 그대로 지나가므로 에이전트의 편집과 겨루지 않습니다. git 이 아니라 프로젝트의 .oculpm/ 안에 있고, .env* 는 담기지 않으며, 파일당 50판 · 프로젝트 512MB 를 넘지 않습니다(설정에서 쓴 용량을 보고 전부 지울 수 있습니다).

svg 를 코드 옆에서 그림으로 봅니다. 편집 중인 버퍼 기준이라, 저장하지 않아도 방금 고친 모양이 그대로 보입니다.

터미널이 남의 셸을 죽이지도, 버려진 셸을 남기지도 않습니다. 프롬프트에 멈춰 있는 셸을 「실행 중」으로 읽어 탭을 닫을 때마다 확인창을 띄우던 것을 고쳤습니다 — 늘 뜨는 확인은 읽지 않고 누르는 확인이 됩니다. 터미널을 소유한 프로세스는 앱 업데이트를 넘어 살아남는데, 그 탓에 새 버전을 깔아도 옛 답이 계속 오던 것(고쳤는데 안 고쳐진 것처럼 보이던 것)과, 그 프로세스가 아무도 붙지 않은 채 셸을 쥐고 영영 남던 것을 함께 정리했습니다. 이제 붙는 이가 없으면 스스로 내려갑니다.

작은 것들 — 오늘 현황의 「오늘의 흐름」에서 행을 누르면 그 일지가 열립니다(네 줄이던 카드는 두 줄로). 메인 화면 바닥 띠가 프로젝트 이름 길이에 따라 튀던 것, 확인 창과 단축키 치트시트가 뼈대만 나오던 것도 고쳤습니다.

v2.33.0

화면에서 「AI 가 만든 티」를 걷어냈습니다. 반짝이(✨) 아이콘이 29곳에 있었습니다 — 회고의 요약 버튼, 플래너의 AI 갱신, 설정의 LLM 탭, 새 프로젝트, 심지어 코드 화면의 포맷 버튼까지. 이제 아이콘은 그 자리의 동작을 말합니다(포맷은 줄맞춤, 초안은 펜, 갱신은 회전 화살표, 새 프로젝트는 폴더, 모델은 칩). 오늘 현황의 지표 타일 8장은 색 네모 안 아이콘 대신 선화 하나를 두고, 색은 의미가 있을 때만 씁니다 — 에러 사이클이 0 이 아닐 때만 붉고, 주 지표 하나만 강조색입니다. AI 패널과 Claude Code 의 빈 화면은 가운데 띄운 아이콘과 「무엇이든 물어보세요」 대신 프로젝트 이름과 시작할 질문 목록으로 시작합니다. 새 프로젝트 마법사의 이모지 스택 아이콘은 실제로 돌아갈 명령(pnpm create vite 등)으로, 진행바와 로켓 버튼은 글자와 화살표로 바뀌었습니다.

어느 화면에서도 테마가 온전히 먹습니다. 설정·회고·그래프 인스펙터·팔레트·다이얼로그는 앱의 나머지와 다른 기본 둥글기·그림자로 그려졌고, 상태색 125곳이 테마를 무시한 초록·호박·빨강으로 굳어 있었습니다 — 솔라라이즈나 노드를 골라도 그 화면들만 다른 제품처럼 보였던 이유입니다. 전부 앱 토큰에 묶었습니다. 유리(블러) 스크림 다섯 벌과 유리 툴바·그래프 범례는 불투명하게, 버튼과 활성 항목의 광택, 캔버스 모서리의 색 안개, 게이지의 그라데이션은 단색으로 돌아갔습니다. 되살아나지 않도록 검사기가 붙었습니다.

빠른 터미널이 프로젝트를 가로지르지 않습니다. 오늘 현황의 빠른 터미널은 프로젝트 탭 두 개에서 펼치면 같은 셸을 나눠 썼습니다 — B 에서 친 명령이 A 의 디렉터리에서 돌고, 한쪽을 접으면 남의 셸이 함께 죽었습니다. 이제 프로젝트마다 자기 셸입니다. 끝난 셸은 먹통으로 남지 않고 페인 위에 «다시 시작» 이 뜹니다. 함께: 업데이트로 터미널 호스트를 교체할 때 vim·ssh·claude 같은 포그라운드가 고아로 남던 것, 크기 변경 실패가 성공으로 둔갑해 화면이 옛 폭에 굳던 것, 죽은 호스트 접속이 닫히지 않아 유휴 종료가 영영 안 걸리던 것도 고쳤습니다.

작업 일지 검색이 본문까지 찾습니다. 백엔드는 본문에서도 찾아 줬는데, 화면이 그 결과를 제목·태그로 다시 좁혀 버렸습니다 — 툴바에는 「12건」이라 적고 카드는 3장만 그리던 어긋남이 그것입니다. 두 주 넘게 쉬었다 돌아온 프로젝트가 「이전 기록 더 보기」 없이 빈 화면에 갇히던 것, 필터 중 날짜 접기 버튼이 죽어 있던 것, 출처 필터가 걸린 채 되돌릴 손잡이가 사라지던 것, 검색어의 _·% 가 와일드카드로 살아 있던 것, 열어 둔 일지가 연 순간에 멈춰 있던 것 — 여섯을 고쳤습니다.

Claude Code 화면이 가만히 있을 때 조용합니다. 설정을 되읽는 효과가 스스로를 다시 불러, 화면에 아무 변화가 없는데도 0.8초에 수천 번 어댑터를 두들기고 있었습니다. 고리를 끊었습니다. 함께, 탭을 옮기면 셀렉터가 방금 떠나온 대화의 모델·권한 모드를 가리키던 것(「Auto 라 적혀 있는데 실은 Manual」)과 뒤에서 도는 대화가 받은 제목이 보고 있는 탭을 개명하던 것을 대화별 장부로 갈랐습니다.

v2.32.0

앱 안의 Claude Code 가 최신으로 올라갑니다. 이 앱은 Claude Code 를 따로 깔라고 하지 않습니다 — AI 패널이 쓰는 어댑터가 실행 파일을 함께 들고 오기 때문입니다. 그 어댑터를 올리면서 안에 든 Claude Code 도 25 패치만큼 새것이 됐습니다. 앱을 새로 켜면 알아서 받아 두므로 누를 버튼은 없습니다.

대화 제목이 방금 친 말을 따라다니지 않습니다. 지금까지는 AI 가 제목을 붙이기 전까지 마지막으로 보낸 지시문이 곧 제목이었습니다 — 대화를 이어 갈수록 위쪽 탭 이름이 커서를 따라 계속 바뀌었습니다. 이제 대화 내용을 보고 제목을 한 번 지어 붙이고, 그 뒤로는 바뀌지 않습니다.

노력 수준이 모델마다 기억됩니다. 모델을 바꾸면 골라 둔 노력 수준이 초기값으로 되돌아가던 것이, 이제 모델별로 기억됩니다.

계획을 수락할 때 「대화를 비우는」 선택지가 눈에 띕니다. 계획 모드를 마칠 때 나오는 승인 카드에 선택지가 하나 늘었습니다 — 계획만 들고 새 대화로 이어 가는 길입니다. 컨텍스트가 넉넉해져 긴 작업에 유리하지만, 지금까지 오간 이야기는 사라지고 되돌릴 수 없습니다. 바로 옆의 「그냥 허용」과 글자만 다른 같은 버튼으로 두지 않았습니다 — 그 하나만 경고색이고, 무엇이 사라지는지 버튼 위에 미리 적힙니다.

v2.31.0

링크 한 번으로 테마를 가져옵니다. oculpm.com/themes 에 테마 갤러리가 생겼습니다. 앱을 켜지 않고도 라이트·다크 미리보기를 보고, 「앱에서 가져오기」를 누르면 앱이 열리며 확인 창이 뜹니다 — 승인하기 전에는 아무것도 바뀌지 않고, 가져와도 지금 쓰는 테마는 그대로입니다(갤러리에 한 장 늘어날 뿐입니다). 이름이 겹치면 예전처럼 되묻고, 파일로 받아 설정 → 모양 → 가져오기로 여는 길도 그대로입니다. 그동안 이 링크는 설정 화면만 열고 정작 테마는 가져오지 않았는데, 이제 말한 대로 합니다.

변경 이력 전문이 웹에 있습니다. oculpm.com/changelog — 지금까지의 릴리스 전부를 버전 링크와 함께 읽을 수 있습니다. 앱의 설정 → 업데이트 탭이 보여 주는 것과 같은 내용이고, 저장소의 파일 한 장에서 웹·GitHub·앱이 함께 나오므로 세 곳이 어긋날 수 없습니다.

무엇이 나가고 무엇이 절대 나가지 않는지 목록으로 적었습니다. oculpm.com/privacy — 「전부 로컬」은 주장이지 증거가 아니라서, 앱이 여는 연결을 전부 셌습니다. 다섯입니다: 여러분이 고른 프로바이더로 가는 LLM 요청 · 업데이트 확인 · 눌렀을 때만 일어나는 GitHub 조회 · 의미 검색을 처음 켤 때 한 번 받는 임베딩 모델 · 켜야만 존재하는 Notion 연동. 절대 안 나가는 것(일지 본문 · .oculpm/ 파일 · API 키)과 수집하지 않는 것(사용 통계 · 크래시 리포트)도 함께 적었고, 직접 세어 보는 명령도 실어 두었습니다.

자동화를 2분 안에 켜는 가이드가 생겼습니다. 위키에 자동화 면이 한국어·영어로 추가됐습니다 — 배경 모델 고르기부터 반응성 여섯 단계, 지시문에 반드시 적어야 하는 두 가지, 그리고 무엇이 과금되고 무엇이 안 나가는가까지.

플러그인 문서가 스킬 카탈로그가 됐습니다. 제3자 스킬 25종에 고정된 커밋(우리가 사본을 뜬 시점의 업스트림 SHA)과 원문 링크를 달았습니다 — 「커밋 고정 사본, 런타임 네트워크 0」이라는 말을 그 자리에서 확인할 수 있습니다. 동봉 스킬 5종에는 버전과 원문 링크가 붙었고, 한동안 스타일이 깨진 채 떠 있던 그 페이지도 함께 고쳤습니다.

v2.30.0

지난 대화를 이 저장소의 기록으로 들여옵니다. Claude 같은 도구에서 내보낸 대화 파일을 열어, 그중 이 프로젝트와 관련된 것만 골라 작업 일지로 옮깁니다 (설정 → 데이터 → 지난 대화 들여오기). 목록을 읽는 동안에는 아무것도 나가지 않습니다 — 파일을 열고 수백 개의 제목·날짜·길이를 훑는 것까지가 전부 오프라인이고, 고른 대화에만 배경 작업 모델이 붙습니다. 들여온 기록은 원본 날짜 그대로 그 날의 폴더에 들어가고, 같은 파일을 두 번 열어도 이미 들여온 것은 「들여옴」으로 표시된 채 다시 과금되지 않습니다. 목록에서 사라지지 않는 것이 중요합니다 — 사라지면 왜 안 보이는지 알 수 없으니까요.

들여온 기록은 「검토 안 함」으로 표시됩니다. 이 저장소에서 일어난 일이 아니라 다른 곳의 대화를 모델이 옮겨 적은 것이므로, 읽고 확인 표시를 하기 전까지는 초안입니다. 본문 끝에는 원본이 언제 몇 발화였는지가 항상 남습니다.

설정을 한 장으로 적어 팀과 맞춥니다. 규칙·스킬·자동화·앱 설정을 YAML 한 장으로 내보내 저장소에 올리고, 동료의 문서를 열면 무엇이 어떻게 달라지는지 먼저 보여 준 뒤 적용합니다. API 키는 담기지 않습니다. 적용이 끝나면 다시 계산해 남은 차이가 없는지 확인하고, 하나라도 남으면 「일부만 적용됨」이라고 말합니다 — 성공했다고 하고 조용히 반만 하지 않습니다. 터미널에서 oculpm config export|plan|apply 로도 같은 일을 합니다.

Claude 플러그인을 통째로 들여옵니다. 스킬·커맨드·에이전트·MCP 설정이 든 플러그인 번들(.zip 또는 GitHub owner/repo)을 열면 Claude Code 가 읽는 자리에 그대로 놓입니다. 손으로 고친 파일은 절대 덮어쓰지 않고 충돌로 보고합니다. 번들이 선언했지만 이 앱이 아직 이행하지 않는 것이 있으면 숨기지 않고 「선언됐지만 아직 이행하지 않음」으로 적습니다. oculpm:// 링크로 스킬·테마·플러그인을 설치할 수도 있는데, 확인 없이 실행되는 것은 하나도 없습니다.

처음 켠 사람에게 한 번 묻습니다. 설치하고 처음 실행하면 언어 · 모양(밝게·어둡게·강조색) · 첫 프로젝트를 묻는 창이 뜹니다. 셋으로 끊은 기준은 "안 물으면 되돌리기 어렵거나 앱을 시작할 수 없는 것" 입니다 — 모델·API 키는 필요한 자리에서 묻는 편이 낫습니다. 이미 프로젝트를 쓰고 있던 분에게는 뜨지 않습니다.

업데이트가 껐던 창을 업데이트가 되돌립니다. 업데이트 재시작은 사용자가 고른 중단이 아닙니다. 그런데 여태 새 버전은 시작 탭 하나만 문 창 하나로 떴고, 창 셋에 프로젝트를 벌려 놓고 일하던 사람이 그 배치를 손으로 다시 만들어야 했습니다. 이제 재시작 직전의 창·탭 구성(떼어낸 터미널 창까지)을 그대로 되살립니다.

네트워크가 끊겨도 조용히 잘못되지 않습니다. 세 자리가 달라졌습니다. ① 고른 모델이 응답하지 않아 폴백이 대신 답하면 그 답변에 배지가 붙습니다 — 예전에는 다른 모델이 답했는데 화면에는 고른 모델 이름이 그대로 떴습니다. 폴백은 그 한 번뿐이고 설정은 바뀌지 않습니다. ② 못 닿는 프로바이더는 목록에서 사라지지 않고 흐려집니다 — 사라지면 설정이 날아간 줄 알고, 막으면 연결이 돌아온 순간 고를 수가 없습니다. 이유는 툴팁에 그대로 적힙니다. ③ 자동화는 실패가 아니라 연기됩니다 — 비행기에서 노트북을 열었다고 주간 요약이 영영 사라지지 않고, 연결되면 따라잡습니다.

여러 프로젝트를 탭으로 열어 두어도 서로 섞이지 않습니다. 한 창에 프로젝트를 여럿 열 수 있게 된 뒤로, 창에 하나뿐이던 것들이 프로젝트를 가로질러 새고 있었습니다 — 「미기록 변경」이 남의 탭에도 보이고, 두 프로젝트를 동시에 색인하면 진행률이 서로 덮어쓰고, 플래너 ▶실행이 다른 프로젝트의 터미널로 날아가는 것까지. 아홉 곳을 전부 탭 단위로 갈랐습니다.

터미널을 줄였다 키워도 글자가 깨지지 않습니다. 분할 막대를 끌 때마다 크기 통보가 순서 없이 날아가 화면이 어긋났고, 그 여파로 claude code 의 출력이 두 번씩 찍히거나 위로 스크롤하면 제대로 보이지 않았습니다. 신고된 세 증상의 뿌리가 하나였습니다.

영문 랜딩이 생겼습니다. oculpm.com/en — 위키는 영어가 있었는데 정작 첫 페이지가 한국어뿐이었습니다. 네비의 알약으로 오갑니다.

v2.29.0

AI 패널이 매번 같은 것을 다시 읽지 않습니다. 여태 질문 하나를 보낼 때마다 계획 전체와 최근 일지와 작업 규칙이 통째로 다시 실려 갔습니다 — "이 함수 이름 뭐가 좋을까" 같은 질문에도요. 이제 대화가 시작될 때 무엇이 있는지 목록만 한 번 싣고, 본문은 필요할 때 꺼냅니다. 그 목록은 대화가 끝날 때까지 한 글자도 바뀌지 않습니다 — 앞부분이 고정돼야 모델 쪽 캐시가 살아 있고, 그래야 같은 대화를 이어갈수록 싸집니다.

과거 기록은 과거를 물었을 때만 실립니다. 「지난주에 뭐 했지」·「내가 뭐라고 했지」·「계획 어디까지 했지」처럼 회상 신호가 있는 질문에만 일지와 계획이 붙고, 그렇지 않으면 아무것도 붙지 않습니다. 판정은 한국어·영어 신호어 사전으로 하며 AI 를 부르지 않습니다. 실릴 때도 상한(약 800토큰)이 있고, 넘치면 관련도가 낮은 것부터 통째로 뺍니다 — 반쪽짜리 기록을 넣지 않습니다.

규칙을 더 이상 잘라서 넣지 않습니다. 예전에는 작업 규칙을 2,500자로 잘라 매번 넣었는데, 그 절단이 한 번은 「시크릿을 적지 말 것」 조항을 통째로 삼킨 적이 있습니다. 예산이 없어서 규칙을 훼손하고 있었던 셈입니다. 이제 절대 잊으면 안 되는 세 줄(시크릿 금지 · 색인 폴더 쓰기 금지 · 지어내기 금지)만 항상 남고, 나머지는 필요할 때 잘리지 않은 전문이 옵니다. 의심스러우면 /rules 를 치면 그 자리에서 전문이 들어갑니다 — /plan·/journal·/skill 도 같습니다.

자주 쓰는 기록이 위로 올라옵니다. 실제로 실렸던 기록은 관련도가 올라가고, 오래 안 쓰이면 30일 반감기로 흐려집니다. 예산이 모자랄 때 무엇을 먼저 담을지 이 순위가 정합니다. 통계일 뿐이라 언제든 지울 수 있고, 지워도 일지·계획·규칙 파일은 그대로입니다.

컨텍스트에 무엇이 들어가는지 볼 수 있습니다. 설정에 컨텍스트 탭이 생겼습니다 — 항상 따라가는 지시(전역/프로젝트별), 이번 대화가 받는 목록 원문, 마지막 전송이 쓴 회상 예산, 관련도 순 회상 후보(하나씩 「잊기」 가능), 그리고 통계 초기화. 프로젝트마다 다른 지시를 둘 수 있고 그쪽이 전역보다 우선합니다.

스킬에 검색어를 붙일 수 있습니다. 스킬을 만들 때 키워드를 적어 두면 그 말로 찾힙니다. 검색은 이름·설명·키워드만 보고 지시문 본문은 보지 않으므로, 「텍스트 처리」 같은 분류어 대신 실제로 칠 말(「요약, tldr, 핵심」)을 적는 편이 잘 걸립니다.

v2.28.0

색을 직접 만들어 파일로 주고받습니다. 여태 테마는 앱에 박힌 다섯 벌이 전부였습니다 — 마음에 드는 배경이 없어도 손댈 방법이 없었고, 어렵게 맞춘 조합을 다른 기기나 동료에게 건넬 길도 없었습니다. 이제 설정 → 모양에서 테마를 만들고, .json 파일로 내보내고 가져옵니다. 내장 다섯 벌도 같은 형식이라 「복제해서 편집」으로 바로 출발할 수 있습니다 — 내장이 곧 예제입니다.

고치는 동안 앱 전체가 그 색으로 보입니다. 별도의 미리보기 상자를 만들지 않았습니다. 색을 하나 바꾸면 그 순간 사이드바·카드·경계선·상태색이 전부 바뀝니다 — 저장하기 전에 이미 저장 후의 화면을 보고 있는 것입니다. 바꾸지 않은 색은 건드리지 않습니다: 배경만 다섯 줄 적은 테마도 온전한 테마이고, 나머지는 밝게/어둡게 기본값을 그대로 물려받습니다. 토큰마다 「가족 기본값으로 되돌리기」가 있어 한 번 적은 값을 되돌릴 수 있습니다.

강조색 선택이 조용히 사라지지 않습니다. 프리셋 테마를 고르면 그 테마가 자기 강조색을 갖고 오므로 고른 강조색이 물러납니다. 그런데 배경만 바꾼 테마까지 그러면, 색 하나 바꾸려다 강조색을 잃는 셈입니다. 이제 강조 계열을 하나도 지정하지 않은 테마는 고른 강조색을 그대로 둡니다. macOS 를 쓴다면 「시스템 강조색 따르기」를 켜서 OS 설정의 색을 그대로 입힐 수도 있습니다.

프로젝트마다 다른 색을 줍니다. 저장소를 여럿 열어 두면 지금 어느 창에서 손대고 있는지 헷갈립니다. 이제 프로젝트 편집에서 그 프로젝트의 테마를 정할 수 있습니다 — 그 프로젝트를 보고 있는 창만 그 색으로 그려지고, 정하지 않은 프로젝트는 전역 설정을 따릅니다. 사이드바의 프로젝트 색 마크는 그대로입니다. 하나는 표면 전체, 하나는 표식이라 겹치지 않습니다.

남의 테마 파일이 내 것을 덮지 않습니다. 가져온 파일은 원래 식별자를 버리고 새로 발급받으므로, 같은 파일을 두 번 가져오면 서로 다른 두 테마가 됩니다. 이름이 겹치면 묻습니다 — 덮어쓸지, 사본으로 둘지. 파일은 한 번만 고르면 됩니다. 그리고 테마가 칠할 수 있는 것은 정해진 색 목록뿐이라, 파일에 다른 무엇이 적혀 있어도 화면에 새지 않습니다.

v2.27.0

손이 멎으면 알아서 기록합니다. 지난 버전의 자동화는 시계만 봤습니다 — 정해진 시각에만 돌았고, 한창 일하다 손을 뗀 순간은 그냥 지나갔습니다. 이제 작업 폴더를 감시하는 자동화를 걸 수 있습니다: 파일 변경이 멎고 정해진 시간이 지나면 그때 한 일을 일지 초안으로 남기거나 계획 문서를 갱신합니다. 얼마나 기다릴지는 여섯 단계로 고릅니다 — 빠름(0.2초)·균형(1초)·느긋(3초)·여유(1분)·지연(5분)·확장(10분). 짧게 두면 저장할 때마다 반응하고, 길게 두면 "이 작업이 진짜 끝났을 때" 한 번만 돕니다.

Claude Code 를 안 쓰는 작업도 사라지지 않습니다. 여태 자동 일지 초안은 Claude Code 가 종료 훅을 쏘아 줄 때만 생겼습니다 — Cursor 로 고치거나 에디터에서 직접 손댄 작업은 아무 기록도 남지 않았습니다. 감시 자동화가 두 번째 경로가 되어 그 구멍을 메웁니다. 두 경로가 같은 구간을 두 번 적지 않도록 서로 자리를 예약하고, 진 쪽은 어느 경로가 이겼는지를 실행 기록에 남깁니다.

자동화가 자기 꼬리를 물지 않습니다. 감시가 일지를 쓰면 그 쓰기를 감시가 다시 보고 또 도는 — 자동화에서 가장 비싼 사고입니다. 이제 일지·플래너·자동화 정의·색인에 대한 쓰기는 발동 원인에서 제외되고(화면 갱신은 그대로 받습니다), 같은 자동화는 반응성 단계의 두 배 안에 다시 돌지 않으며, 하루 실행 상한이 마지막 그물로 남습니다.

누가 시켰는지 화면에서 보입니다. 기록이 여섯 곳에서 오는데(사람이 직접 · 에이전트가 규칙대로 · MCP 도구 · 자동 초안 · 스케줄 · 감시) 전부 같은 카드였습니다. 자동화를 켠 다음부터 이건 결함입니다 — 내가 쓴 것과 기계가 쓴 것을 못 가립니다. 이제 일지 카드·상세·오늘 활동 피드·회고에 출처 배지가 붙고, 일지 화면 위에는 출처로 좁히는 필터 줄이 섭니다. 목록에 출처가 한 종류뿐이면 그 줄은 아예 그리지 않습니다 — 아무것도 못 좁히는 필터는 소음이니까요.

돌고 있는 대화를 열지 않고 멈춥니다. Claude Code 대화 목록의 각 줄이 이제 「실행 중…」·「입력을 기다립니다」를 말하고, 돌고 있는 대화는 목록 맨 위로 올라오며, 줄 위의 버튼으로 그 자리에서 중단합니다. 여태 뒤에서 도는 대화를 멈추려면 먼저 그리로 옮겨 가야 했고, 옮기는 것 자체가 흐르던 답을 흔들었습니다. 설정 → 자동화의 카드에도 같은 「중단」이 붙습니다.

왜 안 도는지 설정에서 다섯 줄로 답합니다. 진단 닥터에 자동화 다섯 줄이 추가됐습니다 — 배경 모델(없으면 자동화 전부 정지이므로 고치러 가는 문까지) · 활성 스케줄과 다음 실행 시각 · 활성 감시와 반응성 · 오늘 쓴 실행 수 / 하루 상한 · 최근 실패와 사유. 켜 두었는데 설정이 어긋나 조용히 안 도는 정의가 있으면 그것도 따로 셉니다.

써 놓고 한 번도 안 걸린 규칙을 알려 줍니다. 진단에 발동 구역이 생겼습니다. 최근 7일 동안 실제로 걸린 규칙·스킬을 많은 순으로 세우고, 그 아래에 한 번도 안 걸린 규칙을 세웁니다. 아래쪽이 진짜 값입니다 — 정성껏 써 둔 규칙이 조용히 아무 일도 안 하는 것은 눈으로 절대 안 보이는 실패입니다. 아직 세어 보지 않았으면 "안 걸렸다"고 주장하지 않고, 기록을 끝까지 못 읽었으면 숫자가 최종이 아니라고 밝히며, 경로 조건이 붙어 안 걸리는 게 정상인 규칙은 그 사실을 함께 표시합니다.

v2.26.0

정해진 시각에 스스로 돌아봅니다. 여태 이 앱의 기록은 전부 누군가 손을 움직여야 생겼습니다 — 에이전트가 일지를 쓰거나, 사람이 회고를 눌러야 했습니다. 이제 설정 → 자동화에서 "매주 금요일 17시에 이번 주 커밋과 미결 항목을 요약해라" 같은 지시문을 걸어 두면 앱이 그 시각에 스스로 돌립니다. 빈도는 여덟 가지(한 번만·N분·N시간·매일·매주·매월·매년·cron)이고, 빈 화면 대신 주간 개발 요약 · 아침 브리핑 · 월간 회고 세 가지 예시를 꺼진 상태로 내밉니다 — 눌러서 만들고, 켤지는 그다음에 정합니다. 지시문은 모델에게 그대로 가고 정의는 .oculpm/automation/ 의 마크다운 파일이라, 손으로 고치고 팀과 함께 커밋할 수 있습니다.

배경에서 도는 일에 따로 모델을 씁니다. 자동 화해와 일지 초안은 지금까지 대화용 모델을 그대로 썼습니다 — 대화 모델을 비싼 것으로 바꾸면 배경 비용이 말없이 따라 올랐고, 그 사실이 어디에도 보이지 않았습니다. 이제 배경 작업 모델을 따로 고릅니다(설정 → LLM). 고르지 않으면 자동화는 오류 없이 조용히 건너뛰므로 "몰랐는데 돈이 나갔다"가 구조적으로 막힙니다. 이미 자동화를 켜 둔 분은 바뀌는 것이 없습니다 — 업데이트가 대화 모델 값을 한 번 복사해 두고, 그 사실을 한 번 알려 드립니다.

안 돈 이유를 말합니다. 자동화에서 가장 나쁜 것은 조용히 안 도는 것입니다. 실행 기록에는 성공만이 아니라 건너뜀·버림·실패가 사유와 함께 남습니다 — 배경 모델이 없어서, 하루 실행 상한(기본 20회)을 다 써서, 다른 자동화가 도는 중이라서. 맥이 자고 있었거나 앱이 꺼져 있었으면 딱 한 번만 따라잡습니다(3일 꺼져 있었다고 3번 돌지 않습니다). 매달 31일 일정은 2월에 말일로 당겨 돌고, 서머타임에 사라지는 시각은 건너뛰지 않고 한 시간 밀려 돕니다.

스킬과 규칙이 한 화면으로 접혔습니다. 다섯 개 탭(스킬·샵·규칙·훅·플러그인)을 오가야 했던 것이 세 구역이 됐습니다 — 맨 위에 세션마다 들어가는 양을 말하는 컨텍스트 예산 바, 가운데에 스킬·규칙·CLAUDE.md 를 발동 많은 순으로 세운 한 목록, 아래에 제안 인박스. 30일 동안 한 번도 안 걸린 항목과 꺼 둔 스킬은 접힌 「휴면」으로 스스로 내려갑니다. 편집기가 두 벌이던 것도 한 벌로 합쳤습니다.

규칙은 필요한 순간에 만듭니다. 규칙은 "에이전트가 또 같은 실수를 했을 때" 태어나는데, 그 순간 사용자는 12번째 화면에 없습니다. 이제 작업 일지(버그·에러) · 변경 diff · 터미널 명령 블록 · Today · ⌘K 다섯 자리에서 바로 규칙·스킬을 만들 수 있고, 폼은 그 사건에서 뽑은 값(바뀐 파일의 디렉터리, 그 명령의 코드 블록)으로 미리 채워집니다. 파일은 여전히 「만들기」를 눌러야 쓰입니다.

이 프로젝트와 무관한 규칙을 짚어 줍니다. 측정해 보니 세션마다 들어가는 규칙의 상당량이 이 저장소에서 쓰지 않는 스택의 것이었습니다. 이제 두 가지 결정적 신호로 지목합니다 — 규칙의 glob 이 파일 하나도 못 맞추는지, 그리고 규칙 경로가 가리키는 스택이 감지된 스택에 없는지. LLM 도 네트워크도 쓰지 않습니다. 예산 바가 그 몫을 빨간 조각으로 떼어 그리고, 누르면 처방으로 이어집니다: 범위 좁히기 · 정리 · 스킬 트리거 교정. 범위를 좁힐 때는 원본을 .bak 으로 남기고 paths 줄만 갈아 끼웁니다 — 대개 우리가 만들지 않은 사용자 파일이기 때문입니다.

코드 화면의 파일 트리가 스스로 최신이 됩니다. 열어 둔 파일의 본문은 이미 밖의 변경을 따라오고 있었는데 정작 그 파일이 어디 생겼는지 보여 주는 트리만 ⟳ 를 눌러야 했습니다. 이 앱에서 파일을 만들고 지우는 것은 대개 밖에서 도는 에이전트라, 기본값이 틀려 있었습니다.

v2.25.0

떼어낸 창을 다시 붙일 수 있습니다. 지난 버전에서 탭을 끌면 진짜 창이 되어 손을 따라오게 됐는데, 한 번 놓은 창은 되돌아올 길이 없었습니다 — 그 창의 탭을 다시 끌면 받는 쪽 탭 줄에 꽂힐 자리까지 그려 놓고, 정작 손을 놓으면 아무 일도 일어나지 않았습니다. 크롬이 마지막 탭을 끌면 창째로 끌리는 것과 달리, 「탭이 하나뿐인 창은 떼어낼 것이 없다」는 판정이 붙이는 길까지 함께 막고 있었습니다. 이제 탭이 하나뿐인 창은 창 자체가 손에 들리고, 다른 창의 탭 줄에 놓으면 합쳐지며 빈 창은 닫힙니다. Escape 로 무르면 창이 원래 자리로 돌아갑니다.

처음 켠 날 무슨 일이 있었는지 알려 줍니다. 프로젝트를 추가하면 앱이 저장소에 .oculpm/ 폴더를 만들고 AGENTS.md 에 기록 규칙을 넣고 .gitignore 를 손보는데, 여태 그 사실을 아무도 말해 주지 않았습니다 — 어느 날 git status 에 낯선 파일이 잔뜩 뜰 뿐이었습니다. 이제 첫 화면에 무엇이 만들어졌고 무엇을 커밋하면 되는지 카드로 뜹니다. 활성화가 실패하면 조용히 넘어가지 않고 「지금 활성화」를 내밉니다.

작업이 도는 중에는 탭이 그냥 닫히지 않습니다. ⌘W 나 탭 × 는 명령이 돌고 있는 터미널도, 대답을 만들고 있는 에이전트 세션도 아랑곳없이 닫았습니다. 이제 그럴 때만 한 번 물어봅니다 — 조용한 탭은 예전처럼 바로 닫힙니다. 삭제·초기화 같은 되돌릴 수 없는 조작의 확인 창도 앱 안에서 같은 모양으로 통일됐습니다.

무엇이 고장 났는지 설정 안에서 짚어 줍니다. 설정 → 진단에 닥터 아홉 줄이 생겼습니다 — 파일 감시·잠금·에이전트 어댑터·API 키·색인·셸 통합·훅·MCP 가 각각 정상인지 보이고, 문제는 그 자리에서 고칩니다. 세션 기록이 어긋나 있으면 경고 목록으로 모으고 토스트에서 바로 건너갑니다.

「결과 없음」과 「아직 안 만들었음」을 구분해 적습니다. 색인을 만들지 않은 프로젝트에서 검색하거나 코드 맵을 열면 「결과 없음」이라고만 나와, 검색이 고장 난 것처럼 보였습니다. 이제 색인이 없다고 말하고 만들기 버튼을 함께 줍니다.

⌘/ 로 단축키를 전부 봅니다. 그리고 새 버전으로 올라온 직후 한 번, 무엇이 바뀌었는지 카드로 알려 줍니다.

켜자마자 뜨는 속도를 두 배 가까이 줄였습니다. 첫 화면이 받아야 하는 코드 덩어리가 538KB 에서 268KB 로 줄었고(언어 사전을 필요한 것만 나중에 받습니다), 하루치 요약을 만들 때 날짜마다 따로 묻던 것을 한 번에 묻습니다(Today 17회 → 5회, 작업 일지 30회 → 4회). 색인이 도는 동안 화면 전체가 매 파일마다 다시 그려지던 것도 멈췄습니다. 의미 검색은 이제 열려 있는 프로젝트 안에서만 훑습니다 — 프로젝트가 쌓일수록 느려지던 원인이었습니다.

작게 고친 것들. 작업 일지의 계획 기록표에서 22줄이 조용히 사라지던 파서 결함을 고쳤습니다(| 가 든 메모가 원인이었습니다). 터미널 상태바가 파일 감시가 멀쩡히 도는데도 항상 「감시 꺼짐」이라 적던 것, ⌘K 팔레트가 Esc 로 닫히지 않던 것, 터미널의 「일지로 남기기」가 화면을 옮기지 않던 것을 함께 고쳤습니다. Today 화면이 열릴 때마다 git 프로세스를 열다섯 개씩 띄우던 것을 걷어냈습니다. 오류 메시지가 화면마다 제각각이던 것을 다시 시도가 달린 같은 카드로 통일했고, 앱 전체의 색·글자 크기·그림자를 하나의 토큰 체계로 모아 라이트/다크와 프리셋 테마에서 어긋나던 자리들을 없앴습니다.

v2.24.0

탭을 끌면 진짜 창이 떨어져 나옵니다 — 크롬과 같은 물건으로. 지금까지 탭을 떼어내는 동안 손에 들린 것은 창 안에 갇힌 그림자였습니다. 커서가 창 밖으로 나가면 가장자리에 붙어 멈추고, 놓아야 비로소 창이 생겼습니다. 이제 탭이 줄을 벗어나는 그 순간 창이 되어 손을 따라옵니다 — 화면 밖으로도, 다른 앱 위로도. 다른 창의 탭 줄 위에 겨누면 들고 있던 창이 잠시 감춰지고 그쪽 줄에 꽂힐 자리가 보입니다(합치기 미리보기). 원래 창의 줄은 즉시 메워집니다. 세손가락 드래그가 글자를 훔쳐 가던 것도 끝났습니다.

규칙과 스킬이 실제로 걸리는지 처음으로 보입니다. 스킬·규칙 화면은 지금까지 "무엇이 있는가"만 말했습니다 — 정성껏 쓴 규칙이 한 번도 안 읽혔는지, 매 세션 수십 KB 를 잡아먹는지 알 길이 없었습니다. 이제 각 항목에 「30일 N회」 또는 「안 걸림」 배지가 붙고, 규칙 탭 부제에 세션당 조건부 규칙 주입량(KB)이 뜹니다. Claude Code 의 대화 기록을 이 컴퓨터 안에서 결정론적으로 셉니다 — LLM 도 네트워크도 쓰지 않습니다. 「발동 다시 세기」로 처음부터 다시 셀 수 있고, paths 가 없어 매 세션 통째로 로드되는 규칙은 셀 대상이 아니라 「매 세션」으로 적습니다.

코드 검색 색인이 열 배 가벼워졌습니다. git init 을 안 한 프로젝트에서는 .gitignore 가 무시돼 node_modules 가 통째로 색인됐고, 한 줄짜리 압축 파일 하나가 심볼 수백 개마다 그 줄을 통째로 복제해 청크 100MB 를 만들었습니다 — 앱 데이터베이스가 558MB 까지 부풀어 있었습니다. 이제 벤더 폴더는 .gitignore 와 무관하게 걷지 않고, 생성·압축 파일은 건너뛰며, 이번 업데이트가 이미 들어온 소음을 한 번 걷어냅니다(실측 382MB 로). 설정 → 진단에 파일 크기 · WAL · 빈 공간 · 큰 표가 보이고 「압축」으로 되찾습니다. 「인덱스 재구축」은 이제 이름대로 비우고 처음부터 만듭니다 — 예전엔 "처음부터" 라고 적혀 있으면서 바뀐 파일만 다시 보았습니다.

끈 것이 진짜로 끝납니다. 터미널 세션을 닫아도 ^D 를 무시하는 프로그램(vim · ssh · 도구를 부르는 중인 claude)은 살아남았고, 끝난 셸은 회수되지 않아 좀비로 쌓였습니다. 앱을 끄면 Claude Code 어댑터(node 와 그 아래 claude)가 고아로 남았습니다. 이제 닫기는 포그라운드까지 내리고 셸을 회수하며, 앱 종료는 어댑터가 내려갈 때까지 잠깐 기다립니다.

작업 일지의 검토 고리가 닫힙니다. 일지 상세에 「검증」 토글이 생겼습니다 — 에이전트가 쓴 기록이 실제 변경과 맞는지 사람이 확인했다는 표시로, 카드에 초록 체크가 붙고 타임라인의 「검증됨」 필터가 비로소 무언가를 걸러 냅니다. 일지 사이의 관련 링크(막음 · 막힘 · 후속 · 중복)가 칩으로 그려지고 누르면 그 일지로 갑니다. 에이전트가 MCP 도구로 쓰는 일지에도 이제 관련 링크가 들어가며, 본문에 비밀이 섞여 마스킹됐으면 에이전트에게 그 사실을 돌려줍니다.

작게 고친 것들. 복구할 수 없는 옛 일지의 변경 내역을 프로젝트를 열 때마다 git 에서 다시 찾던 것을 멈췄습니다(오래된 프로젝트일수록 열기가 느렸습니다). 자동 화해가 API 키 만료 같은 이유로 실패하면 조용히 멈추는 대신 알립니다. 폰에서 일지 경로로 프로젝트 폴더 밖의 파일에 닿을 수 있던 틈을 막았습니다. 로그 파일이 하루 6MB 까지 부풀던 원인(잘리지 않던 오류 응답 본문)을 잘랐습니다. 디버그 패널이 어떤 언어의 디버거가 준비됐고 없으면 어떻게 까는지 말해 줍니다. 아무 동작도 하지 않던 설정 「journal/ 를 git commit 으로 추적」 스위치를 내렸습니다.

v2.23.1

끌어서 옮기는 것이 손을 따라옵니다. 세션을 화면 가장자리로 끌 때도, 탭을 다른 창으로 옮길 때도, 정작 끌리는 것 자체는 제자리에 있었습니다 — 흐려지거나 그림자만 얹힌 채로요. 손은 움직이는데 물체는 가만히 있고 옆 것들만 한 칸씩 툭툭 자리를 바꾸니, 잡은 것이 손에 붙어 있지 않고 뻑뻑하게 끌리는 느낌이 났습니다. 이제 끌면 그것이 커서를 따라옵니다. 터미널 세션은 이름표가 손끝에 붙어 화면 어디로든 따라오고, 창 탭은 탭 자신이 크롬처럼 손을 따라 미끄러집니다.

놓일 자리 표시가 커서보다 늦게 오지 않습니다. 「여기에 놓입니다」를 알리는 선과 상자에 부드러운 이동이 걸려 있었습니다 — 커서는 이미 다음 칸인데 표시만 뒤에서 미끄러져 와, 고무줄에 묶인 것처럼 보였습니다. 따라오는 것은 손에 들린 것 하나로 충분하므로, 자리 표시는 이제 곧바로 붙습니다.

화면 사이 틈에 놓아도 붙습니다. 나뉜 화면 사이와 가장자리에는 얇은 여백이 있는데, 그 위를 지나는 동안 미리보기가 꺼졌다 켜지고 하필 거기서 손을 놓으면 아무 일도 일어나지 않았습니다 — 분명 겨눴는데 안 붙는 것처럼 보였습니다. 이제 그 틈에서도 가장 가까운 화면의 맞닿은 쪽으로 붙습니다. 한가운데에 놓아 취소하는 것은 그대로입니다.

끄는 동안 화면이 무거워지지 않습니다. 마우스가 1초에 백 번 가까이 움직이는데 그때마다 살아 있는 터미널 화면 전부를 다시 그리고 있었습니다. 이제 화면 한 프레임에 한 번만 계산하고, 겨누는 자리가 그대로면 아무것도 다시 그리지 않습니다.

세션 목록을 접었을 때의 모습을 고쳤습니다. 아이콘만 남기고 접으면 상태 점과 아이콘이 나란히 끼어 좌우에 3픽셀밖에 남지 않았고, 크기가 다른 두 덩어리가 붙어 있어 무엇을 뜻하는지 읽히지 않았습니다. 이제 접힌 카드는 아이콘 하나로 읽히고, 상태는 그 모서리의 작은 점으로 얹힙니다 — 평상시(성공·대기 없음·통합 꺼짐)에는 점을 그리지 않습니다. 늘 켜져 있는 색은 신호가 아니니까요. 접힌 목록의 「+ 새 세션」 버튼이 눌려 보이던 것도 함께 고쳤습니다.

v2.23.0

터미널이 어느 에이전트가 나를 기다리는지 알려 줍니다. Claude Code 를 서너 개 띄워 두면 어느 창이 생각 중이고 어느 창이 내 대답을 기다리는지 하나씩 눌러 봐야 알 수 있었습니다 — 셸이 알려 주는 건 "명령이 돌고 있다" 까지라, 한 번 뜬 에이전트는 몇 시간이고 같은 명령으로 남아 있기 때문입니다. 이제 에이전트가 사람을 부르면(터미널 벨) 그 세션이 노랗게 서고, 목록 위에 「N개가 기다립니다」가 뜹니다. 누르면 기다리는 세션으로 가고, 여러 개면 누를 때마다 다음 것으로 돕니다. 화면 위에는 무엇이 몇 분째 돌고 있는지 작은 표시가 떠 있습니다 — 평소엔 시간만, 기다릴 때는 펼쳐집니다.

「기다리는 것 같다」와 「기다립니다」를 구분해 적습니다. 벨이 울린 것은 프로그램이 직접 부른 것이라 확실하지만, 「화면이 20초째 조용하다」는 추정입니다(오래 생각하는 중일 수도 있습니다). 둘을 같은 표시로 그리면 이 기능 전체를 믿을 수 없게 되므로, 추정은 추정이라고 적습니다.

명령 하나하나가 자리를 갖습니다. 긴 로그를 뱉는 명령을 몇 번 돌리고 나면 스크롤백은 어디가 어느 명령의 출력인지 알 수 없는 강이 됩니다. 이제 명령마다 왼쪽에 작은 상태 막대가 서고(성공 초록 · 실패 빨강 · 도는 중은 맥동), 오른쪽 가장자리 띠에는 스크롤백 전체의 실패 지점이 점으로 찍혀 어디서 깨졌는지 스크롤바만 보고 압니다. ⌘↑ / ⌘↓ 로 명령 사이를 건너뛰고, 긴 출력을 내려보는 동안에는 지금 보고 있는 것이 어느 명령의 출력인지 맨 위에 고정됩니다.

터미널에서 한 일을 그 자리에서 일지로 남깁니다. 상태 막대를 누르면 명령 복사 · 출력 복사 · 프롬프트에 채우기와 함께 「일지로 남기기」·「플래너에 붙이기」가 나옵니다. 일지는 빈 화면으로 열리지 않습니다 — 명령줄 · 종료코드 · 걸린 시간 · 출력 끝부분이 미리 채워진 채로 열립니다(빌드 로그 전체가 아니라 끝 40줄입니다. 3천 줄짜리 일지는 아무도 읽지 않고 지워지지도 않습니다). 플래너 쪽은 진행 중인 계획과 단계를 고르면 그 명령이 항목으로 들어갑니다.

다시 실행 버튼은 일부러 넣지 않았습니다. 스크롤백에서 고른 명령을 눈으로 확인하지 않고 바로 돌리는 것은 위험한 명령을 두 번 실행하는 가장 쉬운 길입니다. 대신 프롬프트에 채워 두고 Enter 는 사람이 칩니다.

모르는 것을 초록으로 칠하지 않습니다. 셸 통합이 꺼져 있으면 아무 색도 입지 않고, 셸이 종료코드를 알려 주지 않은 명령은 성공이 아니라 회색입니다 — 성공으로 그리면 진짜 실패를 놓칩니다.

v2.22.0

터미널이 가로 탭 줄을 버리고 세로 세션 목록으로 바뀌었습니다. 에이전트를 서너 개 띄워 놓고 몇 시간을 보는 화면인데, 가로 탭은 다섯 개가 넘으면 이름이 cla… 로 뭉개지고 상태를 실을 자리가 아예 없었습니다. 이제 세션이 왼쪽에 세로로 서고, 카드 한 장에 상태 점 · 무슨 에이전트인지 · 이름 · 지금 몇 분째 돌고 있는지 · 마지막 명령이 함께 실립니다. 개수가 늘어도 아래로 흐를 뿐 카드가 좁아지지 않습니다. 자리가 아까우면 머리줄의 버튼으로 아이콘만 남게 접힙니다.

곁눈질만으로 무엇이 돌고 무엇이 깨졌는지 압니다. 실행 중이거나 실패한 화면은 위 가장자리에 색 띠를 두르고, 분할해 놓았을 때 지금 타이핑이 들어가지 않는 쪽은 가라앉습니다 — "어디에 입력되는가" 를 매번 확인하지 않게 하려는 것입니다. 화면 아래 줄도 다시 짰습니다: 왼쪽은 지금 어느 폴더인지, 가운데는 지금 무슨 일이 일어나는지(돌고 있으면 1초마다 갱신), 오른쪽은 조작입니다. 글자 크기와 따로 조절하는 밀도(넉넉/표준/조밀)가 생겨 줄 간격과 여백이 함께 움직입니다.

세션을 끌어다 나란히 놓을 수 있습니다. 지금까지 화면을 나누는 길은 ⌘D 뿐이라, 이미 띄워 둔 세션 둘을 같이 보려면 방법이 없었습니다. 이제 왼쪽 목록에서 세션을 집어 화면 가장자리로 끌면 그 자리에 갈라져 둘이 나란히 섭니다. 놓기 전에 차지할 자리가 그대로 보이고, 한가운데는 취소입니다. 이미 나뉜 세션을 끌어와도 그 구조가 통째로 들어옵니다. 목록 안에서 놓으면 순서가 바뀝니다. 반대로 나뉜 화면의 우상단 손잡이(⠿)를 잡으면 그 화면만 다른 자리로 옮기거나, 목록에 놓아 독립 세션으로 빼낼 수 있습니다. 끌고 옮기는 동안 그 안에서 돌던 셸은 끊기지 않습니다.

탭을 창 사이로 옮깁니다. 탭을 창 밖으로 끌어 새 창을 만드는 건 되는데 되돌릴 길이 없었습니다 — 합치려면 탭을 닫고 원래 창에서 다시 여는 수밖에요. 이제 크롬처럼 다른 창의 탭 줄에 떨어뜨리면 그 자리로 들어갑니다. 끌고 가는 동안 받는 창의 탭 줄에 꽂힐 자리가 표시되고, 마지막 탭을 옮기면 빈 창은 닫힙니다. 옮겨도 그 프로젝트의 터미널과 감시는 그대로 살아 있습니다.

끌지 않고도 됩니다. 탭에서 우클릭하면 「〜 창으로 옮기기」 · 「새 창으로 떼어내기」 · 「탭 닫기」가 나옵니다. 키보드만 쓰신다면 탭에 포커스를 두고 Shift+F10(또는 메뉴 키)로 같은 메뉴를 엽니다 — 끌어다 놓기는 마우스가 있어야만 되는 조작이라, 그것만으로는 절반의 사용자에게 이 기능이 아예 없는 것과 같았습니다. 창이 서로 겹쳐 있을 때는 마우스로도 메뉴 쪽이 빠릅니다.

탭이 아홉 개째부터 화면에서 사라지던 것도 고쳤습니다. 탭이 많아지면 폭이 고르게 줄어야 하는데 어느 선에서 줄기를 멈추고, 그 뒤 탭은 그냥 잘려 나갔습니다 — 잘린 탭은 보이지도, 눌리지도, 끌리지도 않았습니다. 이제 아이콘만 남을 때까지 계속 줄어듭니다.

v2.21.1

「코드」 화면에서 긴 줄을 보려고 옆으로 밀면 코드가 줄번호 위로 겹쳐 지나가던 것을 고쳤습니다. 줄번호 칸은 가로로 스크롤해도 제자리에 남아 있어야 하는데 그 칸에 바탕색이 빠져 있었습니다 — 흘러가는 코드가 숫자 밑으로 비쳐 둘이 뒤엉킨 채 읽혔습니다. 화면 밖으로 나가는 긴 줄이 있는 파일에서만 나타나던 증상입니다. 이제 줄번호 칸은 편집면과 같은 바탕을 깔고, 코드는 그 뒤로 지나갑니다 — 테마나 색 프리셋을 바꿔도 색이 어긋나지 않습니다.

v2.21.0

Finder 에서 파일을 끌어다 코드 트리에 놓을 수 있습니다 — ⌘V 로도 됩니다. 스크린샷 한 장, 참고용 PDF, 받아 둔 폰트 폴더를 프로젝트에 넣으려면 앱을 나가 Finder 에서 복사해 붙여넣고 돌아와야 했습니다. 이제 Finder 에서 코드 트리로 끌어다 놓으면 그 폴더로 들어옵니다 — 끌고 다니는 동안 어느 폴더에 놓일지가 밝게 표시되고, 놓으면 그 폴더가 펼쳐지며 어디에 들어갔는지 알려 줍니다. Finder 에서 ⌘C 로 복사한 뒤 앱에서 ⌘V 를 눌러도 같습니다(폴더도 됩니다). 파일 위에 놓으면 그 파일 옆에 놓입니다.

같은 이름이 이미 있어도 덮어쓰지 않습니다 — note.txt 가 있으면 note-2.txt 로 붙습니다. 드롭 한 번이 원본을 지우는 일은 되돌릴 수 없기 때문입니다. 폴더는 안쪽까지 통째로 들어오고, 심볼릭 링크는 따라가지 않습니다(프로젝트 밖 내용이 사본으로 들어오는 것을 막습니다). 한 번에 너무 많은 양(파일 2,000개 · 512MB)을 끌어놓으면 거기까지만 넣고 잘렸다고 알립니다 — node_modules 를 통째로 잘못 끌어놓아도 앱이 멎지 않습니다.

에디터 안에서 누르는 ⌘V 는 종전대로 글자 붙여넣기입니다.

v2.20.0

「코드」 화면에서 스크린샷과 PDF 를 열면 이제 그림이 보입니다. 지금까지는 .png 든 .pdf 든 「미리볼 수 없는 파일입니다」 한 줄이 전부였습니다 — 에이전트가 남긴 화면 캡처 하나를 확인하려고 앱을 나가 Finder 로 열어야 했고, 프로젝트에 든 설계 PDF 도 마찬가지였습니다. 이제 파일 트리에서 그냥 누르면 됩니다. 그림은 투명한 부분이 드러나는 체크무늬 위에 뜨고 창 맞춤 ↔ 실제 크기를 오갈 수 있으며, 원본 해상도와 용량이 함께 적힙니다. PDF 는 문서 그대로 넘겨 봅니다. 편집기가 열 수 있는 2MB 와 무관하게 16MB 까지 봅니다 — 요즘 스크린샷은 2MB 를 쉽게 넘습니다. .svg 는 종전대로 편집기로 열립니다(그림이자 곧 코드라 고칠 수 있어야 합니다). 열어 둔 그림을 에이전트가 갈아 끼우면 화면도 따라 바뀝니다.

열 수 없는 파일을 띄워 둔 채 ⌘S 를 누르면 엉뚱한 일이 벌어지던 것도 함께 막았습니다. 텍스트 파일을 보다가 이미지처럼 편집할 수 없는 파일로 옮기면 앞 파일의 내용이 그대로 남아 있어, 그 자리에서 저장을 누르면 그 내용이 이미지 파일 경로로 쓰이려 했습니다. 화면에는 「충돌」 배너로 위장돼 나타났고, 거기서 덮어쓰기를 고르면 파일이 실제로 깨졌습니다.

화면 낭독기로는 Today 의 활동 링이 아예 읽히지 않았습니다. 이름표는 달려 있었지만 붙일 수 없는 자리에 붙어 무시됐고, 안쪽 그래픽은 숨김 처리, 숫자를 띄우는 말풍선은 마우스로만 뜨는 탓에 낭독기에는 아무것도 남지 않았습니다. 이제 링 전체가 하나의 이미지로 이름을 갖고 "일지 N건 · 파일 N개 · +N/−N 줄"을 읽어 줍니다. 반대로 그 말풍선은 마우스가 스칠 때마다 낭독기가 소리 내어 알리던 것을 멈췄습니다 — 같은 숫자가 바로 아래 카드에 글자로 있습니다.

링에서 함께 고친 것 셋: 프로젝트를 바꿀 때 새 기록이 생긴 것처럼 물결이 치던 것, 물결이 끝난 뒤에도 화면에 남아 있던 것, 네 자리가 넘는 숫자에 자릿점이 없던 것(12345 → 12,345).

그리고 이번 판부터 저장소에 올라오는 모든 변경이 자동 검사를 거칩니다. 지금까지 2,200여 개의 테스트를 손으로만 돌렸는데, 이제 타입·테스트·린트·빌드가 매번 자동으로 돌고 통과해야 합니다. 앱 화면이 달라지는 변화는 아니지만, 다음 판부터 여러분이 받는 빌드가 그만큼 덜 깨집니다.

v2.19.0

앱을 업데이트해도 터미널 세션이 이제 끊기지 않습니다. 업데이트가 앱을 재시작하는 순간 터미널 안의 셸 — 그 안에서 돌던 Claude Code 대화까지 — 이 통째로 사라졌습니다. 이제 터미널 세션은 앱과 분리된 별도 프로세스가 쥐고 있어, 앱이 재시작하면(업데이트든 종료 후 재실행이든) 터미널 탭이 하던 그 자리 그대로 — 스크롤백·실행 중이던 프로그램·상태줄까지 — 되살아납니다. 터미널 탭이나 프로젝트 탭을 직접 닫을 때 세션이 정리되는 것은 지금까지와 같습니다.

「코드」 화면에 프로젝트 전역 검색·치환이 생겼습니다 — VS Code 의 그 검색입니다. 기존 검색 화면은 색인을 거치는 의미·정확 검색이라 「이 문자열이 지금 정확히 어디에 있나」를 그대로 찾는 창구가 없었습니다. 이제 코드 화면에서 ⇧⌘F(또는 파일 트리 상단의 검색 버튼)를 누르면 사이드바가 검색 패널로 바뀌고, 타이핑하는 대로 디스크의 현재 내용에서 결과가 파일별로 묶여 나타납니다. 대소문자 · 단어 단위 · 정규식 토글이 있고, 결과를 누르면 그 매치가 선택된 채 파일이 열립니다. 치환도 됩니다 — 한 곳만, 한 파일만, 전부 다(확인을 거쳐). 정규식 모드에서는 $1 그룹 참조도 통하고, 저장하지 않은 편집이 있는 파일은 덮어쓰는 대신 건너뛰고 알려 줍니다.

v2.18.0

이제 폰에서도 Ocul-PM 을 엽니다 — 모바일 연동(베타). 맥을 떠나면 에이전트가 뭘 했는지 확인할 길이 없었습니다. 이제 설정 → 모바일에서 서버를 켜고 폰 카메라로 QR 를 찍으면, 같은 Tailscale 네트워크 안의 폰 브라우저에서 오늘 일지·플래너·논의·AI 대화가 열립니다. 일지를 읽고 쓰고, 플랜 항목을 체크하고, 논의에 메모를 남기고, 맥에 설정해 둔 AI 에게 질문하면 답이 실시간으로 흘러옵니다 — 전부 맥의 .oculpm/ 에 그대로 기록되어 데스크톱 화면에도 즉시 반영됩니다. 홈 화면에 추가하면 앱처럼 씁니다.

데이터는 여전히 맥을 떠나지 않습니다. 서버는 사용자의 Tailscale 사설망 인터페이스에만 열리고(공용 인터넷 노출 없음), 폰은 6자리 코드로 1회 페어링해 발급받은 토큰으로만 접근합니다 — 토큰조차 맥에는 해시로만 저장됩니다. AI 의 API 키는 맥 키체인에만 있고 폰에는 절대 내려가지 않습니다. 서버가 켜져 있는 동안은 맥이 유휴 잠자기에 들지 않습니다 (뚜껑을 닫으면 서버도 잠듭니다 — 화면이 안내합니다).

베타입니다. 읽기·플랜 체크·논의 메모·일지 작성·AI 는 동작하지만 다듬는 중입니다 — 검색·회고·코드 화면은 아직 데스크톱 전용이고, 문제가 보이면 설정 → 피드백으로 알려 주세요. 데스크톱에서 고른 테마(액센트 6색·프리셋 5종)는 폰에도 그대로 실립니다.

v2.17.0

에이전트가 일지·계획을 고쳐도 화면이 안 따라오고, 우클릭 → 새로고침을 해야만 보이던 것을 고쳤습니다. 원인은 파일 감시가 소리 없이 죽는 두 갈래였습니다 — 감시 루프가 예기치 못한 오류로 멈추는데 상태는 「돌고 있음」으로 남아 되살릴 길이 없었고, 앱을 두 개 띄우면(설치본 + 개발 빌드) 나중에 뜬 쪽이 프로젝트 잠금을 못 잡은 채 끝까지 포기했습니다. 이제 앱이 1분마다 감시가 진짜 살아 있는지 스스로 점검하고 — 돌고 있다는 표시가 아니라 이벤트가 실제로 흐르는지를 봅니다 — 먹통이면 그 자리에서 되살립니다. 감시를 시작하지 못하면 조용히 넘어가는 대신 「복구 중」이라고 알려 줍니다.

앱을 두 개 띄우면 나중 창이 영영 읽기 전용이 되던 것도 함께 풀렸습니다. 규칙은 「가장 최근에 연 창이 주인」 — 방금 연 창이 곧 보고 있는 창이라는 직관 그대로입니다. 잠금을 넘겨준 쪽은 5초 안에 스스로 알아차리고 물러나며, 두 창이 서로를 쫓아내며 핑퐁하지 않도록 자동 재시도는 언제나 양보합니다.

플래너·회고의 ▶실행이 더 이상 화면을 빼앗지 않습니다. ⌘J 도크나 분리 창으로 터미널이 이미 눈앞에 있는데도 ▶실행이 터미널 화면으로 점프해 보던 계획을 걷어냈습니다. 이제 터미널이 보이면 그 자리에 그대로 프리필합니다. 그리고 대상 터미널에서 Claude Code 같은 에이전트가 이미 대화 중이면, 세션을 끝내고 새로 띄우는 대신 프롬프트 본문을 그 대화에 붙여넣습니다 — 쌓아 둔 맥락을 버리지 않습니다. 어느 쪽이든 Enter 는 사용자가 칩니다.

「코드」 화면의 탭이 키보드로 다뤄집니다. ⌘W 가 창이 아니라 지금 보는 코드 탭을 닫고(탭이 없을 때만 프로젝트 탭 차례), ⌃Tab · ⇧⌘] · ⇧⌘[ 로 탭 사이를 오가고, 실수로 닫았으면 ⇧⌘T 로 되살리고, ⌘N 으로 보고 있던 폴더에 새 파일을 만듭니다. 탭 우클릭 메뉴에 「닫은 탭 다시 열기」와 단축키 힌트가 붙었고, 빈 화면의 치트시트도 확장됐습니다. 닫은 탭의 저장하지 않은 편집은 다시 열면 그대로 돌아옵니다.

사이드바의 이름들이 실제 기능과 맞춰졌습니다. 「문제 해결」은 트러블슈팅이 아니라 논의 문서를 쓰는 곳이라 「논의」가 됐고(말풍선도 둘로), 「변경 diff」는 「Diff」로, 「에이전트」는 실체가 AI 채팅이라 「AI 대화」가 됐습니다 — 진짜 에이전트 구동면인 Claude Code 와 헷갈리지 않습니다. Claude Code · AI 대화 · 스킬·규칙은 「AI」 섹션으로 묶였고, 「코드」는 맨 끝에서 터미널 곁으로 올라왔습니다. ⌘K 팔레트에서는 옛 이름으로도 여전히 찾아집니다. 설정의 연동 탭도 프로젝트별 설정과 컴퓨터 전역 설정을 구분해 보여주고, 플러그인과 겹치는 항목엔 안내가 붙습니다.

v2.16.0

「코드」 화면이 에디터에서 IDE 가 됐습니다 — VS Code 를 열 이유를 하나씩 지우는 릴리스입니다. 파일을 한 번에 하나만 열 수 있었고, 만들거나 지우려면 결국 다른 도구로 가야 했습니다. 이제 탭으로 여러 파일을 나란히 열고, 좌우로 나눠 두 파일을 같이 보고, 트리에서 우클릭으로 파일을 만들고 이름을 바꾸고 드래그로 옮깁니다. 삭제는 영구 삭제가 아니라 휴지통으로 갑니다 — 폴더째 잘못 지워도 되돌릴 수 있습니다. 이름을 바꾸거나 지운 파일이 탭에 열려 있으면 탭과 저장하지 않은 편집이 함께 따라 움직입니다.

코드를 읽는 창구도 다 갖춰졌습니다. ⇧F12 로 심볼을 쓰는 모든 곳을 원문 미리보기와 함께 훑고, 사이드바의 「구조」로 파일 안을 한눈에 보고 건너뜁니다. ⌘K 팔레트에서 프로젝트 전체의 함수·타입 이름을 바로 찾아 열고, 함수 인자를 치는 동안 시그니처가 떠서 몇 번째 인자인지 짚어 줍니다. ⇧⌥F 는 파일을 다듬고 — 선택한 부분만 다듬을 수도 있습니다 — 줄 번호 옆에는 마지막 커밋 이후 고친 줄이 색으로 표시됩니다. 설정에 「코드」 탭이 생겨 언어 서버를 끄거나 실행 파일을 직접 지정할 수 있습니다.

중단점을 찍고 한 줄씩 실행하는 디버거가 들어왔습니다. 줄 번호 왼쪽을 눌러 중단점을 찍고, 실행하면 그 줄에서 멈춥니다. 멈춘 곳의 호출 스택과 변수 값을 패널에서 펼쳐 보고, 한 줄씩·함수 안으로·밖으로 걸어갑니다. Rust · Python · Go 를 지원하며, 디버그 도구가 없으면 설치 방법을 그 자리에서 알려 줍니다 (몰래 내려받지 않습니다).

에이전트가 바꾼 코드가 이제 편집기 안에서 보입니다. 에이전트가 파일을 고쳐 놓으면 무엇이 어떻게 바뀌었는지 diff 화면까지 가야 알 수 있었습니다. 이제 경로 줄의 비교 버튼 하나로 마지막 커밋 이후의 변경이 본문 사이에 그대로 나타납니다 — 지워진 줄은 빨간 블록으로 끼어들고, 마음에 안 드는 덩어리는 그 자리에서 되돌립니다. 옆의 일지 배지를 누르면 이 파일을 고친 작업 일지들이 뜨고, 일지 하나를 골라 「그 작업이 바꾼 부분만」 겹쳐 볼 수도 있습니다. 파일이 그 뒤로 더 바뀌어 겹칠 수 없으면 억지로 맞추는 대신 일지에 기록된 diff 로 안내합니다.

파일마다 제 얼굴이 생겼습니다. 모든 파일이 같은 아이콘이라 이름을 읽어야만 종류를 알 수 있었습니다. 이제 TypeScript 는 파란 사각형, 파이썬은 두 마리 뱀, Rust 는 기어, 리액트 컴포넌트는 원자 — 트리·탭·검색 결과 어디서나 같은 얼굴입니다. 트리에는 들여쓰기 안내선이 생겨 깊은 폴더에서 소속이 보이고, 탭 아래 경로 줄로 같은 이름의 파일(mod.rs·index.ts)을 구별합니다. 그리고 node_modules 같은 무시된 파일도 이제 트리에 흐리게 보입니다 — 열 수는 있되 왜 검색에 안 걸리는지 눈으로 설명됩니다.

문제 해결 화면이 에이전트와 실제로 논의하는 자리가 됐습니다. 커다란 입력 상자 하나뿐이라 긴 문서를 다듬기 어려웠습니다. 이제 코드 화면과 같은 편집기(검색·되돌리기·⌘S)에 서식 툴바가 붙고, 후보 방안·다음 단계·토의 로그 같은 규격 블록을 번호 매김까지 자동으로 삽입합니다. 「프롬프트 복사」 버튼은 문서의 단계에 맞는 지시문을 만들어 줍니다 — 문제 정의가 비었으면 같이 채우자고, 열려 있으면 논의하자고, 닫혔으면 결론을 실행하자고. 붙여넣기만 하면 에이전트가 문서를 직접 읽고 이어받습니다.

한글 제목의 논의·계획이 전부 같은 파일로 떨어지던 것을 고쳤습니다. 제목이 몽땅 한글이면 파일명을 만들 재료가 없어 「무제」 하나로 뭉쳐졌고, 두 번째 문서가 첫 문서를 덮어쓸 수 있었습니다. 이제 한글 제목은 한글 그대로 파일명이 됩니다. 좁은 화면에서 플래너 항목이 한 글자씩 세로로 서던 것, 항목의 **굵게** 같은 마크다운이 문법 기호 그대로 보이던 것도 함께 고쳤습니다.

v2.15.0

「코드」 화면이 코드를 이해하기 시작했습니다. 지금까지는 글자를 보여주고 저장해 주는 곳이었습니다 — 이름을 잘못 쳐도, 타입이 안 맞아도 저장하기 전까지는 알 수 없었고, 함수가 무엇을 받는지 보려면 그 파일을 직접 찾아 열어야 했습니다. 이제 타이핑하는 동안 자동완성이 뜨고, 틀린 곳에 붉은 밑줄이 그어지고, 이름 위에 올리면 타입과 설명이 나옵니다. F12 나 ⌘클릭으로 정의한 자리로 건너뛰고, 심볼 이름을 바꾸면 그것을 쓰는 모든 파일이 함께 바뀝니다. 붉은 밑줄에는 대개 고치는 방법이 딸려 옵니다. Rust · TypeScript/JavaScript · Python · Go 에서 동작하며, 각 언어의 도구가 컴퓨터에 깔려 있으면 앱이 알아서 찾아 씁니다 — 없으면 없다고 말해 줍니다. 큰 저장소는 처음 열 때 분석에 수십 초가 걸리는데, 그동안 상태줄이 「분석 중」이라고 밝혀 고장과 구별됩니다.

코드 트리에 점으로 시작하는 파일이 보입니다. .oculpm/ 도 .github/ 도 .gitignore 도 목록에 아예 없어서, 정작 이 앱에서 가장 자주 여는 것들을 코드 화면에서는 열 수 없었습니다. 이제 보입니다. (저장소가 무시하도록 정해 둔 것 — node_modules 같은 — 은 여전히 숨깁니다.)

에이전트가 고친 계획·논의가 화면에 바로 반영됩니다. 터미널에서 에이전트를 돌려 계획 파일이 바뀌어도, 앱은 화면을 열었던 순간의 내용을 계속 보여줬습니다. 우클릭해서 새로고침하기 전까지는 무엇이 바뀌었는지 알 수 없었고, 그게 「가끔」이 아니라 늘 그랬습니다. 이제 파일이 바뀌는 즉시 화면이 따라옵니다. 맥이 잠들었다 깨거나 다른 창에 갔다 돌아오는 순간에도 한 번 다시 읽어, 그동안 놓친 변화를 메웁니다.

플러그인이 쌓아 둔 일지를 다시 꺼내 씁니다. 기록은 쌓으라고 있는 게 아니라 다시 쓰라고 있는데, 오래 추적한 저장소는 일지가 수백 건이라 훑어서는 못 찾았습니다. 이제 에이전트가 작업을 시작하기 전에 과거를 먼저 찾습니다 — 「그 파일을 예전에 왜 건드렸는지」가 검색 한 번으로 나옵니다. 제목·본문·태그로 찾는 것에 더해 특정 파일을 건드린 일지만 골라낼 수 있고, 종류·상태·기간으로 좁힙니다. 이미 내려진 결정과 이미 실패한 접근을 다시 밟지 않게 하는 것이 목적입니다.

사용 설명서(위키)가 채워졌습니다. 네 쪽뿐이라 「이 화면이 대체 뭘 하는 곳인가」에 답하는 문서가 없었습니다. 화면과 개념마다 페이지를 붙여 열한 쪽을 더했고 — Today · 작업 일지 · 계획 · 논의 · 회고 · 에이전트 · AI 패널 · 설정 · 작업 공간 · 화면 안내 · 자주 묻는 질문 — 영문판도 함께 나갑니다.

v2.14.1

Today 를 열 때마다 「오늘 데이터를 불러오지 못했어요」가 뜨던 것을 고쳤습니다. 붉은 상자에 no such column: f.lines_added 라는 낯선 문장만 남고 화면이 통째로 비어, 오늘 한 일도 링도 아무 것도 보이지 않았습니다. v2.14.0 이 링의 「라인 변화」를 채우려고 저장소에 더한 칸이, 앱이 예전에 이미 써 버린 번호와 겹치는 바람에 일부 기기에서 만들어지지 않은 채 남은 것이 원인입니다. 이제 앱이 켜질 때 저장소 모양을 스스로 대조해 빠진 칸을 채워 넣습니다 — 기록은 건드리지 않고 칸만 되살리므로 잃는 것은 없고, 앞으로 같은 어긋남이 다른 칸에서 나더라도 같은 방식으로 조용히 낫습니다.

v2.14.0

한 프로젝트에서 Claude Code 대화 여러 개를 나란히 굴립니다. 탭은 예전에도 여러 개 열렸지만, 한 대화가 답하는 동안 다른 대화에 친 말은 줄을 서서 기다렸습니다 — 보낸 말이 어디로 갈지를 「지금 보고 있는 탭」이 정했기 때문입니다. 이제 말이 향할 대화를 직접 짚습니다. A 가 답하는 중에 새 대화를 열어 곧바로 말을 걸 수 있고, 탭을 옮겨도 답이 엉뚱한 대화로 가지 않습니다. 승인 카드도 대화마다 따로 섭니다 — 한 대화를 ESC 로 멈출 때 옆 대화의 승인 요청까지 함께 거절되던 것(누르지도 않은 거절)을 막았습니다. 새 대화를 여는 것이 하던 대화를 닫지도 않습니다.

정직성 감사가 이미 적어 둔 파일까지 「기록 안 함」으로 외치던 오탐을 잡았습니다. 하루에 60개가 「심각」으로 떴는데 정말로 일지에 없던 것은 3개였습니다. 앱이 세션에 붙이는 이름표와 에이전트가 일지에 적는 이름표가 서로 다른 방언이라 두 집합이 영원히 겹치지 않았고, 그래서 「기록된 파일」이 늘 공집합이었습니다. 이제 판정을 하루 단위 커버리지로 바꿔 이름표와 무관하게 맞춥니다. 미리보기 앱이 사진을 저장할 때 잠깐 생겼다 사라지는 임시 파일, 다른 프로젝트의 기계 생성물이 「변경」으로 잡히던 것도 함께 걸러냅니다.

세션마다 나오던 대조 숫자(일치·겹침)가 늘 0 이던 것도 살렸습니다. 일지는 설명하는 작업보다 나중에 쓰이기 때문에 세션이 닫힌 뒤에 도착하는 일이 예사인데, 앱은 세션 구간 안에 든 일지만 그 세션의 것으로 셌습니다. 이제 일지가 쓰인 시각 이전에 시작한 마지막 세션으로 귀속시킵니다 — 실제 하루치로 맞춰 보니 죽어 있던 숫자가 겹침 0.73~0.93 으로 살아났습니다. 세션이 어떤 일지를 낳았는지도 세션 기록에서 바로 보입니다.

터미널을 켜 둔 채 다른 프로젝트 탭에 갔다 오면 화면이 잘린 채 굳던 것을 고쳤습니다. 에이전트는 계속 답하고 있는데 보이는 것만 멈춰 있어 죽은 줄 알기 쉬웠습니다. 안 보이는 동안 터미널이 자기 높이를 0 으로 알고 있었던 것이 원인입니다. 이제 탭이 다시 보이는 순간 크기를 다시 재고 마지막 줄로 따라붙습니다.

일지가 쌓일수록 무너지던 「변경 diff」의 파일 목록을 다시 짰습니다. 일지가 네댓 개만 돼도 그룹이 전부 펼쳐진 채 이어 붙어 스크롤이 끝없이 길어졌고, 경로는 폭이 모자라 끝에서 잘려 정작 파일명이 사라졌습니다. 이제 그룹을 접을 수 있고(셋 이상이면 보고 있는 파일이 든 그룹만 펼칩니다), 좁아지면 디렉터리부터 줄고 파일명은 끝까지 남습니다. 파일이 여덟 개를 넘으면 필터가 생깁니다. 작업 일지 화면의 변경 파일 목록도 같은 규칙으로 정리했습니다 — 오른쪽 위를 채우던 '칩 벽' 대신 지금 열어 둔 파일 한 줄만 남습니다.

Today 화면과 사이드바의 눈에 걸리던 것들을 함께 손봤습니다. 링의 「라인 변화」는 값을 채우는 경로가 아예 없어 늘 0 이었고, 0 은 점 하나로 그려져 「변화 없음」이 아니라 「고장」으로 읽혔습니다 — 이제 일지마다 실제로 바뀐 줄 수를 세어 싣습니다. 2단 배치에서 왼쪽 열이 끝난 자리부터 페이지 배경이 그대로 드러나던 구멍은 카드를 다시 배분하고 남는 높이를 마지막 카드가 흡수하게 해 두 열이 같은 선에서 끝나도록 했습니다. 터미널을 왼쪽·오른쪽에 붙였을 때 화면 툴바와 터미널 탭 줄의 아랫선이 어긋나 상단이 계단처럼 보이던 것도 맞췄습니다. 사이드바 접힘이 프로젝트 탭마다 따로 기억되던 것은 창과 탭 전체가 같은 상태를 쓰도록 바꿨습니다 — 접힘은 프로젝트의 속성이 아니라 쓰는 사람의 취향입니다.

그리고 후원 링크가 README·랜딩 푸터·저장소 상단에 한 칸씩 생겼습니다. 후원해도, 하지 않아도 받는 기능은 똑같습니다.

v2.13.5

터미널에서 스페이스를 누르면 앞 음절이 다시 찍히던 것을 또 한 번 고쳤습니다. 「안녕」 뒤에 스페이스를 치면 「안녕 녕」이 되던 문제입니다. v2.13.3 에서 고쳤다고 적었지만 두 갈래가 남아 있었습니다 — 확정과 잔여물 사이에 빈 입력이 한 번 끼면 걸러낼 근거가 지워졌고, 잔여물이 띄어쓰기까지 끌고 오면(「녕 」) 검사가 아예 시작되지 않았습니다. 두 갈래 모두 막았고, 반대로 멀쩡한 글자를 삼키지 않는지도 함께 검사합니다.

같은 문제가 또 나면 이번엔 원인을 바로 찾을 수 있습니다. 이 버그는 네 번 재발했는데, 정식 빌드에는 진단 기록이 남지 않아 매번 증상만 보고 고쳐야 했습니다(기록을 켜면 앱이 느려져 문제 자체가 재현되지 않는 종류입니다). 이제 입력 흐름이 메모리에만 조용히 쌓이고, 이상한 동작 직후 터미널에서 ⌃⌥⇧I 를 누르면 그 직전 기록이 로그 파일로 저장됩니다. 앱이 스스로 이상을 감지했을 때도 자동으로 남습니다.

v2.13.4

「새로운 세션」을 눌러도 위쪽 탭 줄에 아무 것도 안 뜨던 것을 고쳤습니다. 누르면 화면은 비워지는데 상단바는 방금 떠나온 대화를 그대로 가리키고 있어서, 눌린 건지 아닌지 알 수 없었습니다. 이제 점선으로 두른 「새로운 세션」 탭이 그 자리에 생기고, 첫 마디를 보내면 같은 자리에서 진짜 대화 탭이 됩니다. 그 탭도 닫거나 ⌘W 로 접을 수 있습니다(하던 대화로 돌아갑니다).

대화 제목이 방금 보낸 마지막 지시문으로 계속 바뀌던 것을 고쳤습니다. 이야기를 이어 갈수록 탭 이름이 대화를 가리키지 않고 마지막으로 친 말을 따라다니던 문제입니다. Claude Code 가 대화를 보고 제목을 붙이기 전까지는 방금 보낸 문장이 임시 제목으로 쓰이기 때문이었습니다. 이제 그 임시 제목을 알아보고 첫 마디를 지키다가, 진짜 제목이 붙으면 그때 바꿉니다. 직접 붙인 이름표는 예전처럼 언제나 우선합니다.

사용량 카드의 「무엇이 기여했나」가 읽힙니다. 좁은 카드 안에 고정폭 글자로 밀어 넣어 한 문장이 네댓 줄로 접히고 그 아래는 잘려 나갔습니다. 이제 카드가 넓어지고, 비율은 막대와 숫자로 · 「Top skills」 같은 목록은 칩으로 정리해 보여 줍니다. 나중에 항목이 늘어나도 모르는 줄은 원문 그대로 남으므로 조용히 사라지지 않습니다.

v2.13.3

터미널에서 한글을 치고 스페이스를 누르면 앞 음절이 한 번 더 찍히던 것을 고쳤습니다. 「안녕」 뒤에 스페이스를 치면 「안녕 녕」이 되던 문제입니다. 바로 앞 버전에서 고친 스페이스 문제와 증상이 닮았지만 원인이 정반대였습니다 — 그건 띄어쓰기가 너무 일찍 나가서, 이번 것은 입력기가 넘겨주는 글자가 너무 늦게 도착해서 생긴 일입니다.

스페이스를 누르면 조합이 확정되면서 앱이 입력 버퍼를 비웁니다. 그런데 입력기가 아직 방금 확정한 글자를 붙들고 있으면, 비워진 버퍼에 그 글자를 다시 올립니다. 앱은 이걸 새로 친 글자로 착각해 그대로 터미널에 흘렸습니다. 이제는 되돌릴 대상이 없는 뒤늦은 입력을 잔여물로 판별해 버립니다.

이 문제는 정식 빌드에서만 나타났습니다. 개발용 빌드는 진단 로그와 개발 도구 때문에 느려서 이 짧은 틈이 닫혀 있었기 때문입니다.

v2.13.2

터미널에서 한글을 치다 스페이스를 누르면 앞 글자가 한 번 더 찍히던 것을 고쳤습니다. 「안뜨」 뒤에 스페이스를 치면 「안뜨뜬」처럼 직전 글자가 남고 띄어쓰기는 사라지던 문제입니다. 천천히 치면 멀쩡하고 문장을 빠르게 쓸 때만 나타나 더 성가셨습니다.

원인은 타이밍 경합이었습니다. 한글 입력기가 「글자를 고쳐 쓰라」고 알려주는 신호는 키를 누른 시점보다 최대 0.24초까지 늦게 옵니다. 그 사이에 스페이스를 누르면 띄어쓰기가 먼저 터미널로 나가버리고, 뒤늦게 도착한 고쳐 쓰기 지시가 조합 중이던 글자 대신 방금 나간 띄어쓰기를 지워 앞 글자가 그대로 남았습니다. 이제 조합 중에는 모든 입력이 한 줄로 순서대로 나가므로 이 어긋남이 생기지 않습니다.

터미널에서 한글을 쓰다 화살표·Home/End·Esc 를 눌러도 글자가 어긋나지 않습니다. 커서를 옮긴 뒤 이어 친 한글이 엉뚱한 자리의 글자를 지우던 경로를 막았습니다.

「코드」 화면의 저장이 튼튼해졌습니다.

  • 윈도우에서 만든 파일(CRLF)을 한 글자만 고쳐 저장해도 파일 전체가 바뀐 것으로 기록되던 것을 고쳤습니다 — 원래 줄바꿈을 그대로 지킵니다.
  • 프로젝트 안의 바로가기(심볼릭 링크)를 통해 프로젝트 밖 파일이 열리던 것을 막았습니다.
  • ⌘S 를 한 번 눌렀는데 저장이 두 번 나가 엉뚱한 「충돌」 안내가 뜨던 것을 고쳤습니다.
  • 저장 안 한 파일이 너무 많이 쌓여 오래된 편집이 말없이 사라지던 것과, 열어 둔 파일이 밖에서 지워졌는데 아무 안내가 없던 것을 알려 주도록 했습니다.

변경 diff 의 +N −M 배지가 사라지던 것을 고쳤습니다. 문서 맨 위 구분선(---)만 지운 diff 처럼, 내용 자체가 ---·+++ 로 시작하는 줄을 파일 머리글로 착각해 세지 않던 문제입니다.

v2.13.1

터미널에서 한글이 두 번 찍히던 것을 고쳤습니다. 터미널의 Claude Code 에 한글을 길게 쓰다 오타를 지우면, 지운 글자가 화면에 그대로 남아 차 가 ㅊ차 로, 백스페이스를 두 번 누르면 호 가 하ㅎ호 로 불어나던 문제입니다.

원인은 조합 중에 누른 백스페이스였습니다. 한글 입력기에서 조합 중인 백스페이스는 글자를 지우는 키가 아니라 음절을 한 단계 되돌리는 입력기 동작인데, 앱이 이것을 "입력이 끝났다" 는 신호로 잘못 읽어 조합 상태를 버렸습니다. 그러면 뒤이어 완성되는 글자가 앞 글자를 덮어쓰지 못하고 옆에 새로 찍혔습니다. 이제 조합 중인 백스페이스와 진짜 삭제를 구분합니다.

짧은 셸 명령에서는 거의 드러나지 않고 한글 문장을 길게 칠 때 상시로 나타나던 증상이라, 터미널에서 에이전트에게 한국어로 길게 지시하던 경우에 특히 거슬렸습니다.

v2.13.0

앱 안에서 코드를 바로 열어 보고 고칩니다 — 새 「코드」 화면. 검색·코드맵이 가리키는 파일을 확인하려고 매번 외부 에디터로 나가던 왕복의 끝입니다. 왼쪽 파일 트리(필터 지원, gitignore 존중)에서 파일을 열면 문법 하이라이트(TypeScript·Rust·Python·Go 등 12개 언어)와 함께 바로 편집되고, ⌘S 로 저장합니다. 검색 결과(세 모드 전부)와 코드 맵 패널에는 「코드 화면에서 열기」 버튼이 생겨 해당 줄로 바로 점프합니다.

에이전트와 같은 파일을 만져도 안전합니다. 저장하는 순간 디스크가 그 사이 바뀌었으면 덮어쓰지 않습니다 — 「디스크 버전 불러오기 / 내 버전으로 덮어쓰기」를 묻는 배너가 뜹니다. 열어 둔 파일을 에이전트가 고치면: 내가 편집 전이면 읽던 줄을 유지한 채 조용히 최신화되고, 편집 중이면 같은 배너로 알립니다. 파일을 옮겨 다니거나 다른 화면에 다녀와도 저장 안 한 편집은 그대로 남고, 트리에 초록 점으로 표시됩니다.

에디터 색은 앱 테마(라이트/다크 · 컬러 테마 6종)를 그대로 따라가고, 에디터 안 검색(⌘F)도 한국어입니다. 바이너리·2MB 초과 파일은 안내와 함께 「외부 에디터로 열기」로 보냅니다. 자동완성·정의 이동이 필요한 무거운 편집은 지금처럼 외부 에디터 점프(커서 줄까지 전달)가 담당합니다.

v2.12.0

변경 diff 가 사진을 사진답게 보여 줍니다. 이미지가 바뀌면 깨진 문자 나열 대신 이전/현재 이미지가 나란히 뜹니다 — 투명 PNG 도 보이는 체커보드 밑판 위에, 크기 변화(1.0 KB → 2.0 KB, +1.0 KB)와 함께. 폰트·DB 같은 다른 바이너리는 크기 카드로 정리됩니다. 새로 추가한 이미지를 고르면 "파일을 읽는 중…" 에 영원히 갇히던 버그도 함께 사라졌습니다.

변경 diff 의 기본기가 온전해졌습니다. 거터의 줄 번호가 이제 실제 파일 줄 번호입니다 — 그동안은 조각(hunk)마다 1부터 다시 세는 가짜 번호였습니다. 파일 이름 옆에는 +12 −4 요약이 붙고, 한글이 많은 diff 가 전송 예산을 최대 4배 넘겨 부풀던 것도 고쳤습니다. 사이드바에서 프로젝트를 바꿔도 이전 프로젝트의 비교 기준·검색어가 남지 않습니다.

코드 맵이 읽히는 지도가 됐습니다. 관계선이 노드의 왼쪽·오른쪽에만 붙을 수 있어서, 뒤쪽으로 가는 의존은 화면을 크게 돌아 나가는 곡선 뭉치(스파게티)가 됐습니다 — 이제 두 노드를 최단 방향으로 바로 잇고, 화살표가 사용 방향(A → B: A 가 B 를 사용)을 보여 줍니다. 노드 카드는 언어 색이 배경까지 스며든 디자인으로 새로 그렸고, 연결이 많은 허브에는 「허브」 태그가 붙습니다. 경로 검색에서 Enter 를 치면 빈 화면이 되던 버그(상위 N 에 잘린 노드를 고른 경우), 포커스 이웃이 검색어에 잘려 혼자 뜨던 버그도 고쳤습니다.

코드 검색이 결과에서 코드로 이어집니다. 정확 검색 결과가 파일별로 묶이고, 통짜 코드 대신 매치 주변 몇 줄만 보여 주며(전체 보기 토글), 일치한 부분은 형광펜으로 표시됩니다. 모든 결과에서 에디터의 해당 줄로 바로 점프합니다. 최근 검색어 칩(클릭 = 재검색) · 「결과 더 보기」 · 심볼 종류 필터가 추가됐고, 느린 검색 응답이 나중에 도착해 최신 결과를 덮어쓰던 것도 고쳤습니다.

v2.11.0

Claude Code 가 고치는 내용이 화면에 보입니다. 에이전트가 파일을 편집할 때 그 변경(diff)이 도구 카드에 그대로 그려집니다 — 줄마다 지운 것은 빨강, 넣은 것은 초록, 카드 줄에는 +12 −3 규모가 붙습니다. 그동안은 이 정보가 통째로 버려져서 어디를 어떻게 고쳤는지 앱에서는 볼 수 없었습니다.

승인 카드가 무엇을 허용하는지 보여 줍니다. 편집 승인이면 바뀔 내용(diff)이, 명령 실행 승인이면 실행될 명령이 카드 안에 실립니다 — 제목과 경로만 보고 허용을 누르던 블라인드 승인의 끝입니다. 명령 실행·삭제 승인은 카드 낯빛부터 달라지고, "항상 허용"은 "이번만 허용"보다 물러난 버튼이 됩니다.

승인을 기다리며 멈춘 것이 사이드바에 보입니다. 다른 화면에 가 있는 동안 에이전트가 승인 대기로 멈추면, 그동안은 "아직 일하는 중"과 구분할 길이 없어 하염없이 기다리게 됐습니다. 이제 사이드바 Claude Code 줄에 깜빡이는 배지가 붙습니다 — 눌러야 풀리는 멈춤이라는 뜻입니다.

한글로 쓰다 Enter 를 치면 조합 중인 문장이 그대로 전송되던 것을 고쳤습니다. 마지막 글자를 확정하는 Enter 를 전송으로 오해하던 버그입니다 — 한글로 쓰는 분이라면 매일 밟던 지뢰였습니다. (LLM 채팅 화면도 함께 고쳤습니다.)

Claude Code 프로세스가 죽으면 이제 압니다. 그동안은 프로세스가 조용히 종료돼도 화면이 마지막 모습 그대로 남아, 말을 걸어 봐야 오류가 났습니다. 이제 감지 즉시 배너가 뜨고 「다시 연결」이 보던 대화를 그대로 되살립니다.

그리고 대화면의 마찰을 한꺼번에 걷어냈습니다:

  • 입력창이 내용을 따라 자랍니다 — 두 줄 고정 칸에서 긴 지시문을 안경 구멍으로 쓰던 것의 끝.
  • ↑/↓ 로 보냈던 지시를 되부릅니다 — 터미널 히스토리와 같은 조작. 쓰다 만 글은 버리지 않고 돌아옵니다.
  • 파일을 끌어다 놓으면 첨부됩니다 — Finder 에서 대화창으로 바로.
  • 쓰다 만 글이 대화를 따라갑니다 — 탭을 오가도 반쯤 쓴 지시문이 섞이지 않습니다.
  • 대기열이 정확해졌습니다 — A 대화가 도는 동안 줄 세운 말이 B 대화로 배달되던 것을 고쳤고, 칩을 누르면 삭제가 아니라 입력창으로 돌아옵니다 (지우기는 X 로).
  • 턴 영수증 — 턴이 끝나면 "도구 7 · 파일 3 · 명령 2 · 1분 12초" 한 줄이 남습니다. 무엇을 얼마나 했는지가 대화에 기록됩니다.
  • 답변·도구 출력에 복사 버튼 — 긁어서 고르던 일의 끝. 오류에는 「다시 보내기」가 붙습니다.
  • 실행 중인 도구에 경과 시간(실행 중 · 12s), 위로 올렸을 때 「맨 아래로」 버튼, 대화 삭제는 두 번 눌러 확정, 새 대화·대화 열기 후 입력창 자동 포커스, 세션 탭 ←/→ 전환과 활성 탭 밑줄, 지시 카드에 보낸 시각(호버).

v2.10.3

창 위쪽 빈 곳을 더블클릭하면 탭이 하나씩 늘어나던 것을 고쳤습니다. 탭 줄의 남는 자리는 곧 타이틀바입니다 — macOS 에서 타이틀바를 더블클릭하면 창이 확대·복원되어야 하는데, 여기에 "더블클릭 = 새 탭"이 겹쳐 걸려 있어 창 크기 조절과 새 탭이 동시에 일어났습니다. 이제 더블클릭은 창 크기만 조절합니다. 새 탭은 그대로 + 버튼과 ⌘T 입니다.

시작 탭의 설정에서 ocul-pm 을 누르면 앱이 통째로 빈 화면이 되던 것을 고쳤습니다. 프로젝트를 열기 전 화면에서 설정 → ocul-pm 으로 들어가면 그 탭만이 아니라 창 전체가 하얗게 비어 재시작 말고는 길이 없었습니다. ocul-pm 설정은 프로젝트에 매인 화면인데 프로젝트가 없는 상태를 견디지 못한 것이 원인이었습니다. 이제 "프로젝트를 먼저 선택하세요" 안내만 뜹니다.

화면 한 조각이 잘못돼도 창은 살아 있습니다. 위 문제처럼 화면 어딘가에서 오류가 나면 앱 전체가 빈 화면이 되곤 했습니다(터미널에서도 같은 일이 있었습니다). 이제 오류는 그 조각 안에 갇히고, 그 자리에 안내와 「다시 시도」가 뜹니다. 다른 탭과 탭 줄은 그대로 쓸 수 있어, 무엇이 잘못되든 재시작으로 몰리지 않습니다.

v2.10.2

터미널 도크를 오른쪽에도 붙입니다. 자리 바꾸기 버튼이 이제 아래 → 왼쪽 → 오른쪽 → 아래 로 한 바퀴 돕니다. 세로로 놓는 두 자리는 폭을 함께 기억하므로 왼쪽↔오른쪽으로 옮겨도 넓이가 유지됩니다.

분리한 터미널 창을 상단을 끌어 옮길 수 있습니다. 그 창은 타이틀바가 없는 모양이라 창을 잡는 자리를 앱이 직접 내줘야 하는데, 터미널 탭 줄에 그 자리가 없어 창을 아예 움직일 수 없었습니다. 이제 탭 줄의 빈 곳을 끌면 창이 따라옵니다 (탭과 버튼은 그대로 눌립니다).

macOS 창 분할 단축키(⌃⌥←→↑↓)가 이 앱에서도 동작합니다. 다른 앱에서는 되는데 여기서만 안 되던 문제입니다. 이 단축키는 시스템 전역 키가 아니라 "창" 메뉴 안 "이동 및 크기 조절" 항목의 단축키인데, ocul-pm 은 ⌘W 를 "창 닫기"에서 "탭 닫기"로 되찾으려고 메뉴를 직접 구성하면서 어느 것이 창 메뉴인지 macOS 에 알려 주지 않았습니다. 그래서 그 항목들이 애초에 만들어지지 않았습니다. 이제 창 메뉴에 이동 및 크기 조절 · 화면 채우기 · 가운데 정렬 · 창 목록이 함께 생깁니다.

v2.10.1

어느 화면에서나 터미널을 씁니다. 그동안 셸을 보려면 터미널 화면으로 들어가야 했고, 일지나 플래너를 보려면 다시 나와야 했습니다. 그래서 결국 앱 밖 터미널로 돌아가게 됐습니다. 이제 ⌘J 로 지금 보고 있는 화면 위에 터미널이 열립니다. 붙이는 자리는 직접 고릅니다 — 아래(가로로 넓게) 또는 왼쪽(세로로 길게). 경계를 끌어 크기를 조절하고, 어디에 얼마나 열어 뒀는지 기억합니다.

  • 창으로 떼어냅니다 — 터미널만 담긴 작은 창으로 분리하면 다른 앱과 나란히 놓을 수 있습니다. 셸은 끊기지 않고 그대로 이어지고, 스크롤백까지 따라옵니다. 앱 안에는 어디로 갔는지와 되돌리는 버튼이 남습니다.
  • 검색·분할 버튼이 탭 줄로 옮겼습니다 — 예전에는 터미널 화면의 툴바에만 있어서, 도크에서는 쓸 수 없는 조작이 생겼습니다.
  • 도크에서 누른 ⌘F 는 터미널만 검색합니다 — 일지를 읽다 누른 ⌘F 가 스크롤백 검색을 여는 일은 없습니다.

설정에서 터미널 글자 크기를 px 로 정합니다. 설정 → 모양에 슬라이더와 px 입력칸이 생겼고, 실제 터미널 글꼴로 그린 미리보기가 함께 있어 화면에 가 보지 않아도 크기를 가늠할 수 있습니다. 이 값은 이제 앱 전체가 함께 쓰므로 터미널 화면·도크·분리한 창이 같이 움직입니다. (프로젝트별로 따로 기억하던 이전 방식에서 옮겨오면서 기존 값은 한 번 13px 로 돌아갑니다 — 설정에서 다시 정해 주세요.)

Claude Code 가 세우는 할 일 목록이 보입니다. 에이전트가 계획을 세워 보내고 있었는데 앱이 그것을 버리고 있었습니다. 이제 턴마다 목록 하나가 뜨고, 진행 상태가 색으로 갱신됩니다.

  • 앱 안의 Claude Code 가 작업 일지를 직접 씁니다 — ocul-pm 의 기록 도구(journal_write·plan_update)를 물려 줬습니다. 자기 자신을 추적하는 앱인데 정작 에이전트가 일지를 못 쓰는 것이 기본값이었습니다.

막히거나 다른 모델이 답하면 대화에 남습니다. 사용 한도 초과·인증 실패·제공자 과부하·모델 폴백이 그동안 평범한 오류 문구이거나 아예 침묵이었습니다. 특히 폴백은 알려 주지 않으면 알 방법이 없습니다 — Opus 를 골라 뒀는데 다른 모델이 답해도 화면은 똑같았습니다. 이제 일어난 자리에 기록으로 남고, 재시도해도 같은 사고가 쌓이지 않고 그 줄이 갱신됩니다.

부팅 화면을 다시 만들었습니다. 아이콘을 띄우고 링을 퍼뜨리던 연출을 걷어내고, 앱 아이콘과 똑같은 아크가 바깥에서 안으로 그려져 멈추는 자리가 정확히 앱 아이콘이 되게 했습니다. 무한히 도는 것이 없어 한 번 맺히고 끝납니다. 아이콘 마크 자체도 여백이 과해 1.4배로 키웠습니다.

v2.10.0

Claude Code 를 앱 안에서 직접 구동합니다. 그동안 ocul-pm 의 AI 패널은 우리 LLM 프로바이더에 붙은 채팅일 뿐이었습니다 — 실제 코딩은 전부 터미널 안 CLI 에서 일어났고, 앱은 파일 감시·훅으로 그 흔적만 주웠습니다. 이제 사이드바에 새 화면 Claude Code 가 생겼습니다. 여기서 시키면 진짜 claude 가 앱 안에서 파일을 고치고, 도구를 쓰고, 승인을 구합니다(Agent Client Protocol). 기존 구독 로그인을 그대로 쓰고, 어댑터는 첫 실행에 자동 설치됩니다.

  • 세션 탭 — 상단바가 대화 탭 줄이 됩니다. 여러 대화를 나란히 열고, 이름을 바꾸고, 지울 수 있습니다.
  • 도구 카드 — 파일 수정·명령 실행 같은 도구 호출이 접고 펼 수 있는 카드로 옵니다. 보낸 지시문은 카드로 화면 위에 붙어 있어, 길게 답이 이어져도 무엇을 시켰는지 놓치지 않습니다.
  • 권한 승인이 대화 안으로 — 도구를 쓰기 전 허락을 구하는 요청이 카드로 옵니다.
  • Effort · 권한 모드를 한 트랙에서 — 사고 강도와 권한 모드(수동 승인 · 편집 자동승인 · 계획 · 무제한)를 함께 고릅니다. 최상위 단계 울트라코드는 설정이 아니라 프롬프트에 실리는 키워드였습니다.
  • 모델을 바꾸면 대화에 구분선 한 줄이 남아, 어디서부터 다른 모델이 답했는지 보입니다.
  • 이미지 붙여넣기 — 스크린샷을 그대로 붙여 넣으면 첨부 칩으로 붙고, 크게 볼 수 있습니다.
  • 사용량은 위젯입니다 — /usage 를 치면 대화 흐름을 밀어내는 대신 전용 계기판이 뜹니다. 토큰을 쓰지 않는 새로고침입니다.
  • CLI 에서 쓰던 명령을 그대로 — /continue·/clear·/remote-control(/rc) 를 칩니다.
  • 터미널 탈출구 — /remote-control 페어링 안내처럼 CLI 자신의 화면에만 사는 기능은 프로토콜로 옮길 데이터가 애초에 없습니다. 이런 명령은 진짜 터미널 탭에서 claude 를 띄워 그대로 보여줍니다.
  • 업데이트해도 대화가 안 끊깁니다 — 재시작을 미루고, 다시 뜨면 하던 대화로 돌아갑니다.

터미널 화면에서 글자 크기를 직접 입력합니다. ⌘+/⌘- 로 한 단계씩 조절하는 것 말고, 표시된 px 칸을 눌러 정확한 값을 바로 칠 수 있습니다.

  • macOS 에서 마지막 창을 ⌘W 로 닫으면 Dock 을 눌러도 새 창이 안 열리던 문제를 고쳤습니다.

v2.9.0

한 창에서 프로젝트 여러 개를 탭으로 엽니다. 그동안 창이 하나뿐이라 프로젝트를 바꾸면 보고 있던 것은 사라졌고, 두 프로젝트를 나란히 놓을 방법이 없었습니다. 이제 크롬과 같습니다 — 탭을 끌어 순서를 바꾸고, 창 밖으로 떼어내면 새 창이 됩니다. 프로젝트마다 화면·필터·사이드바 상태를 따로 기억하고, 터미널 세션은 프로젝트에 묶여 있어 탭이 창을 옮겨 다녀도 끊기지 않습니다.

  • 새 탭은 시작 탭입니다 — ⌘T 를 누르면 프로젝트 목록이 뜨고, 하나를 고르면 그 자리에서 프로젝트 탭으로 바뀝니다. 새 탭을 열고 주소를 치는 것과 같은 흐름입니다.
  • ⌘W 가 창이 아니라 탭을 닫습니다 — 탭이 하나뿐이면 창이 닫힙니다. 창을 통째로 닫는 것은 ⇧⌘W, 새 창은 ⇧⌘N, 탭 사이 이동은 ⌃Tab · ⌃⇧Tab · ⌘⌥←→ 입니다. macOS 기본 메뉴가 ⌘W 를 먼저 가져가고 있어서 앱 메뉴를 직접 구성했습니다.
  • 시작 화면을 다시 짰습니다 — 큰 카드 하나에 작은 카드들이 딸려 있던 3단 구성을 걷어내고 등록된 프로젝트 전부를 한 화면 격자에 폅니다. 창을 열자마자 무엇이 있고 어디가 움직이고 있는지 보입니다. 카드는 이름뿐 아니라 어디를 눌러도 열립니다.
  • 프로젝트마다 색과 아이콘을 고릅니다 — 색 8종 · 아이콘 10종. 탭과 카드에 함께 적용돼 탭이 여러 개일 때 어느 것이 무엇인지 형태로 구분됩니다. 고르지 않으면 이름에서 자동으로 정해집니다.
  • 상단바에서 고른 프로젝트가 열립니다 — 그동안 "앱 열기" 는 무엇을 고르든 마지막에 보던 프로젝트를 열었습니다.

상단바가 탭을 열지 않은 프로젝트도 감지합니다. 여러 프로젝트에서 동시에 작업하는데 상단바는 하나만 잡고 있던 문제입니다. 원인은 파일 감시가 탭의 수명에 묶여 있던 것이었습니다 — 탭을 열지 않은 프로젝트는 에이전트가 일지를 남겨도 앱이 알아채지 못했습니다. 이제 앱이 켜져 있는 동안 추적 중인 프로젝트 전부를 감시합니다.

  • 상단바가 테마를 따라갑니다 — 팝오버는 앱을 켤 때 한 번 만들어져, 그 뒤로 테마를 바꿔도 혼자 옛 색으로 남아 있었습니다. 설정이 바뀌면 모든 창에 알리도록 고쳤습니다.
  • 상단바 아이콘이 더 이상 돌지 않습니다 — 세션이 활성화되면 빙글빙글 돌던 애니메이션을 뺐습니다. 활성 상태는 색으로만 표시합니다.
  • 화면 곳곳의 움직임을 다시 조율했습니다 — 지속시간과 가감속 곡선을 손봐 붙잡히는 느낌을 줄였습니다.
  • 탭 줄이 스타일 없이 세로로 쌓여 보이던 문제를 고쳤습니다.

v2.8.5

영어를 지원합니다. 설정 → 모양에서 화면 언어를 고르면 12개 화면 전체가 영어로 바뀝니다. 화면 문구뿐 아니라 실패했을 때 뜨는 오류 메시지, AI 가 쓰는 작업 일지·회고·플래너 항목, 새 프로젝트에 심기는 기록 규칙(AGENTS.md)까지 함께 따라갑니다.

  • 화면 언어와 AI 작성 언어를 따로 고를 수 있습니다 — 화면은 영어로 보면서 일지는 한국어로 남기고 싶은 경우를 위해 설정이 나뉘어 있습니다. 따로 지정하지 않으면 화면 언어를 따라갑니다. 이미 기록된 문서는 절대 다시 쓰지 않습니다.
  • ⌘K 명령 팔레트는 양쪽 언어로 모두 찾힙니다 — 영어 모드에서도 "일지"로, 한국어 모드에서도 "journal"로 찾을 수 있어 손버릇이 끊기지 않습니다.

한국어 화면도 함께 손봤습니다.

  • 사이드바의 Today·Planner 가 영어로만 남아 있던 것을 오늘 현황·플래너 로 바꿨습니다.
  • 설정 화면 제목이 한국어 모드에서도 "Settings" 로 나오던 문제를 고쳤습니다.
  • 글자 크기·모델 설정 등의 슬라이더에 이름이 없어 화면 낭독기가 "슬라이더, 100" 이라고만 읽던 문제를 고쳤습니다. 이제 무엇을 조절하는 슬라이더인지 읽어 줍니다.

v2.8.4

본문 서체를 Pretendard 로 바꿨습니다. 한글과 영문이 같은 리듬으로 읽히도록 애플고딕(Apple SD Gothic Neo)을 모델로 만들어진 서체입니다. 함께 고친 것이 하나 더 있는데, 그동안 화면 곳곳의 글자 굵기가 의도대로 나오지 않고 있었습니다 — 디자인이 지정한 96군데의 중간 굵기(예: 굵기 550, 650)를 이전 서체가 표현하지 못해 이웃한 굵기로 뭉뚱그려 그리고 있었습니다. 이제 굵기가 연속으로 조절되는 서체라 지정한 그대로 보입니다.

  • 앱이 가벼워졌습니다 — 서체 파일 7개(2.7MB)를 1개로 합치면서 2.0MB 로 줄었고, 쓰지 않던 라틴 서체 두 벌도 정리했습니다.
  • 변경 diff 화면이 더 빨리 뜹니다 — 코드 색칠에 쓰는 문법 데이터(37개 언어)가 앱을 열자마자 통째로 로드되고 있었습니다. 실제로 코드를 볼 때만 불러오도록 바꿔, 프로젝트를 연 직후 읽어들이는 양이 절반 아래로 줄었습니다(266KB → 125KB).
  • 첫 코드 인덱싱이 빨라졌습니다 — 조각 하나마다 저장소에 따로 기록하던 것을 묶어서 한 번에 기록합니다. 조각이 많은 큰 저장소일수록 차이가 큽니다. 인덱싱과 파일 감시가 겹칠 때 저장소 접근이 즉시 실패하던 문제도 함께 막았습니다.
  • 로그를 어지럽히던 내부 오류를 정리했습니다 — 화면을 떠날 때 이벤트 구독을 해제하는 과정에서 이미 해제된 대상을 다시 해제하려다 나던 오류입니다. 동작에는 영향이 없었지만 로그에 계속 쌓이고 있었습니다.

v2.8.3

터미널에 붙여넣은 내용이 두 번 들어가던 문제를 고쳤습니다. 단순 중복이 아니었습니다 — 두 번째 사본은 터미널이 붙여넣기를 감쌀 때 쓰는 보호(bracketed paste)를 거치지 않아 줄바꿈이 날것으로 셸에 전달됐고, 여러 줄 텍스트를 붙여넣으면 각 줄이 명령으로 실행될 수 있었습니다. 이제 붙여넣기는 터미널 쪽 경로 하나만 담당합니다.

v2.8.2

내장 터미널의 한국어 입력·표시를 바로잡았습니다.

  • 한글이 영문·숫자보다 크게 보이던 문제 — 한 줄 안에서 글자 크기가 뒤죽박죽이었습니다. 한글을 두 칸 폭에 맞추려고 쓰던 CSS size-adjust 가 폭뿐 아니라 글자 자체를 20% 키우고 있었습니다. 폰트 파일의 자간 정보를 터미널 격자에 맞춰 다시 만들어, 글자는 원래 크기 그대로 두 칸에 정확히 들어갑니다. 덤으로 폰트 용량이 440KB → 279KB 로 줄었습니다.
  • 영문·스페이스가 두 번씩 입력되던 문제 — 한글 입력기가 켜져 있으면 영문 모드에서도 같은 글자가 터미널과 입력 브리지 양쪽에서 한 번씩 전달됐습니다. 이제 중복된 쪽을 걸러냅니다. 함께: 스페이스가 일반 공백이 아닌 줄바꿈 없는 공백(NBSP) 으로 셸에 전달돼 명령 인자가 붙어버리던 문제, Backspace 뒤 조합 상태가 어긋난 채 쌓이던 문제도 고쳤습니다.

v2.8.1

프로젝트를 정리하는 자리가 생겼습니다. 첫 화면 상단의 프로젝트 관리(또는 모든 프로젝트 섹션의 [관리], ⌘⇧M)를 누르면 등록된 프로젝트가 평면 표로 펼쳐집니다. 첫 화면은 "어디서 이어서 일하지?"에 답하느라 최근 것을 크게 띄우고 2주 이상 조용한 곳은 색인으로 접는데, 정리하러 올 때는 그게 정확히 반대라서요 — 관리 화면에서는 접힌 프로젝트도 전부 같은 눈높이로 보입니다.

  • 여러 개를 한 번에 제거 — 체크박스로 고르고 [선택 제거]. 확인 단계에서 대상 이름을 그대로 보여주고, 폴더의 .oculpm · AGENTS.md 삭제 여부를 따로 고를 수 있습니다(기본 꺼짐 — 워크스페이스에서만 빠지고 프로젝트 폴더는 그대로). 일부만 실패하면 실패한 이름을 그대로 알려줍니다.
  • 이름·경로 검색(한글 초성 지원), 마지막 활동 · 기록 수 · 이름 정렬, 프로젝트별 [열기] · [이름 변경] · [제거], 그리고 이 화면 안에서 바로 [폴더 불러오기] · [새 프로젝트].

v2.8.0

스킬 샵이 생겼습니다. 스킬·규칙 화면의 새 샵 탭이 프로젝트의 스택을 감지(package.json·Cargo.toml·pyproject 등 매니페스트 기반, LLM·네트워크 0)해서 맞는 스킬을 추천합니다 — 검증된 제3자 스킬 25종 카탈로그(ECC·ponytail, 전부 MIT·커밋 고정 사본·원문 무수정)를 검색·태그 필터·본문 미리보기 후 원클릭 설치. 설치된 스킬은 .claude/skills/ 에 들어가는 Claude Code 네이티브 기능이라 플러그인 없이도 동작합니다. 카탈로그 전 목록: oculpm.com/plugin.

  • 카탈로그 구성 — 언어·프레임워크 팩(python·rust·react·go·vue·laravel·springboot·django·fastapi 패턴/테스팅), 프론트 축(react-performance·vite·accessibility·e2e-testing), 범용(api-design·database-migrations·security-review·codebase-onboarding·inherit-legacy-style), ponytail 3종. 벤더 사본은 bidi·제로폭 문자 스머글링 검사와 라이선스 전문 동봉까지 테스트로 잠갔습니다.
  • 스택 감지는 Tauri 표준 레이아웃(src-tauri/)과 pnpm/yarn 모노레포(workspaces)까지 인식합니다.

플러그인 — 스킬 3종이 "형식 강제" 로 다시 태어났습니다. ECC(스킬 281종 전수 감사)·ponytail 에서 검증된 규율을 이식했습니다:

  • self-audit v2 — 자유 산문 리뷰 금지: 고정 태그(debris/gap/gate/unlogged/secret) 1발견 1줄 + net: N findings, M fixed. 지표 + 보고 전 신뢰도 게이트 4문항 + 오탐 제외 목록.
  • run-evals v2 — 새 기능(capability)만 돌리고 회귀(regression)를 건너뛰는 패턴 차단, 루브릭 합격선 고정(4점↑), "베이스라인 없는 수치 금지".
  • tdd-workflow v2 — 컴파일 실패도 유효한 RED, 체크포인트 커밋 규격, RED 증거 표.
  • project-inception 보강 — 인터뷰가 기능 나열이 아니라 제품 렌즈(사용자·가치 가설·비사용 대안)로 파고, 계획의 주장에는 근거 병기(증거 게이트), 리프마다 확인 방법 명시.
  • 배달 게이트 — 이 세션에서 코드가 바뀌었는데 일지가 없으면 세션당 한 번 턴 종료를 멈추고 에이전트에게 일지 작성을 지시합니다 (Stop 훅, 세션 귀속 판정 — 세션 전부터 있던 WIP·병렬 세션 변경에는 반응하지 않습니다). 작업 중이면 안내를 무시하고 계속돼 방해가 없습니다.
  • /oculpm:help — 플러그인 표면 전체(커맨드 5·MCP 도구 5·스킬 5·훅) 레퍼런스 카드.
  • 일지 규격에 학습 품질 규율 추가 — 실패한 접근·막다른 길을 성공보다 우선 기록.

기타

  • 스킬·규칙 화면에 플러그인 탭 — 설치 명령부터 커맨드·도구·훅 문서까지 앱 안에서 바로 봅니다.
  • 세션 마커의 Linux date 폴백 (Linux 에서 같은 초 경계 오탐 방지).

v2.7.0

첫 화면이 "어디서 이어서 일하지?"에 답합니다. 프로젝트 선택 화면을 벤토 콕핏으로 전면 재구성했습니다 — 가장 크게 뜨는 이어서 일하기 타일이 오늘 손댄 프로젝트의 다음 할 일(활성 플랜)·최근 기록·14일 활동 추이·마지막 에이전트와 모델을 한 자리에 모으고, 오늘의 흐름이 전 프로젝트 일지를 시간순으로 보여줍니다. 최근 프로젝트는 중간 밀도 판으로, 2주 이상 조용한 프로젝트는 하단 색인으로 접힙니다.

  • 키보드만으로 완주 — 아무 데서나 타이핑하면 곧장 검색(한글 초성 검색 지원: ㅎㄱ → 회고), ↓↑ 이동 · ⏎ 열기 · ⌘O 기존 폴더 · ⌘N 새 프로젝트 · ⌘E 이름 변경 · ⌘⌫ 제거. 하단 액션 바가 지금 가능한 단축키를 상시 안내합니다. 한글 조합 중 Enter 가 실행으로 새지 않습니다.
  • 빨라졌습니다 — 화면 데이터가 프로젝트 수와 무관한 단일 호출(SQL 6문)로 옵니다. 예전엔 프로젝트마다 전체 일지 이력을 실어와 10건만 쓰고 버렸습니다.
  • 색이 일관돼졌습니다 — 앱을 켠 직후와 프로젝트를 다녀온 뒤의 액센트 색이 서로 다르던 버그(디자인 토큰이 셸을 열 때만 로드)를 수정. 첫 화면부터 선택한 액센트·테마·프리셋을 따릅니다.
  • ⌘,(설정) · ⌘P(프로젝트 검색) · ⌘K 팔레트의 프로젝트 열기가 첫 화면에서도 동작합니다 — 예전엔 힌트만 표시되고 무반응이었습니다.
  • 파괴적 액션 안전 — 이름 변경·제거가 키보드·터치에서도 접근 가능해지고, 초안 버리기에 인라인 2단 확인이 생겼습니다. 버튼 히트 영역이 겹쳐 이름 변경 옆을 누르면 제거 확인창이 뜨던 오작동도 수정.
  • "N 파일 · N 청크" 지표 은퇴 — 인덱싱 내부 수치 대신 활동 추이·마지막 작업·다음 할 일을 보여줍니다.

플러그인 — 세션이 기록을 빼먹으면 이제 압니다.

  • 미기록 세션 신호 — 일지 없이 끝난 Claude Code 세션을 감지해 경고를 남기고, Today 화면에 카드로 떠오릅니다. 사후에 일지를 쓰면 자동으로 해소됩니다. (헤드리스 24세션 실측에서 단발 세션 기록 준수 0/12 — 실제로 새는 구멍이었습니다.)
  • 상태줄 배지 — 디스패치한 플랜 항목·회고 작업이 Claude Code 상태줄에 표시됩니다 (/statusline 에서 플러그인의 oculpm-statusline.sh 지정으로 옵인 — 항목이 완료되면 자동 소등).
  • 커맨드 완성 — /oculpm:project_init(새 저장소 추적 시작) · /oculpm:inception(설계 시드 전 과정) · /oculpm:next(구현 루프 한 사이클, 플래너 ▶실행의 터미널 대응물) 추가. 커맨드·도구·스킬 전체 문서: oculpm.com/plugin.
  • 플랜 컨텍스트 주입 — 활성 플랜 요약이 세션·서브에이전트 시작 시 자동으로 주입됩니다.
  • 미룬 지름길 원장 — 의도적으로 미룬 단순화를 코드 주석 // oculpm-defer: <천장>; <재방문 트리거> 로 표시하면(기록 규칙 v8 이 안내) 회고 화면이 수확해 카드로 보여줍니다 — 재방문 트리거 없는 마커는 "썩는 중"으로 표시됩니다.

기타

  • 메뉴바 팝오버의 최근 일지 4행 상한 해제 — 남는 높이만큼 보이고 스크롤로 거슬러 올라갑니다.
  • 설정에서 MCP 등록/해제 시 열린 Claude Code 세션은 재시작해야 반영된다는 안내가 뜹니다.

v2.6.0

회고도 Claude Code 가 씁니다. 회고 화면에 [Claude Code 로] 버튼이 생겼습니다 — 누르면 그 기간의 신호(출시·저항·핫스팟)가 조립된 프롬프트가 터미널에 프리필되고, Enter 한 번으로 세션이 회고를 써서 .oculpm/retro/ 마크다운 파일로 남깁니다. API 키·과금 없이 동작하고, 진행 과정이 터미널에 그대로 보입니다. 화면은 API 캐시와 파일 중 더 최신 회고를 보여줍니다.

  • API 생성도 이제 보입니다 — "생성 중… 12초 · 제공자/모델"처럼 경과가 실시간 표시되고, 생성 중 다른 화면에 갔다 와도 상태가 유지됩니다(초기화 버그 수정). 부재 중에 끝나면 어느 화면에서든 완료 알림이 뜹니다.

반복 절차 → 스킬 승격. 규칙 승격과 같은 결로, 같은 태그의 작업이 반복되면 회고 화면에 "스킬 후보" 카드가 떠오릅니다. [초안 생성] 이 일지 증거로 SKILL.md 초안을 만들고, 승인하면 .claude/skills/ 에 저장되어 다음 세션부터 Claude Code 가 자동으로 씁니다 — 저장은 언제나 사람의 승인으로만.

플러그인만으로 새 프로젝트 시작 — project_init (MCP 도구 5종째). 앱 없이 플러그인만 설치한 상태에서도, 사용자가 추적 시작을 명시적으로 확인하면 .oculpm/ 스캐폴드와 에이전트 규칙 파일이 만들어집니다. "비추적 저장소에는 아무것도 만들지 않는다" 원칙의 유일한 예외로, confirm 게이트·심볼릭 링크 거부·홈 디렉터리 가드로 잠갔습니다.

project-inception 스킬 v3 — 웹 리서치로 환경을 먼저 탐색하고, 그 근거가 실린 선택지로 사용자와 사양을 확정한 뒤 3단계 상세 계획으로 시드합니다. 기능 추가는 계획→구현 루프만 반복하면 됩니다.

기타

  • 라이선스 약속 명문화 — 지금 저장소의 기능은 영원히 무료·MIT, 유료화는 미래의 팀 모듈에만. 기여는 CLA 없이 DCO 로(CONTRIBUTING.md 신설).
  • project-inception 스킬이 .oculpm 없는 새 저장소에서 추적 시작을 먼저 물어봅니다. 랜딩·README 의 플러그인 도구 표기도 5종으로 갱신.
  • Notion "계정으로 연결"이 서버 준비 전 상태에서 raw 에러 대신 안내 페이지(내부 통합 키 폴백 방법 포함)를 보여줍니다.

v2.5.1

Notion 계정 연결 — 브라우저 승인 한 번으로. 설정의 Notion 연동에 "Notion 계정으로 연결" 버튼이 생겼습니다. 누르면 브라우저에서 Notion 승인 화면이 열리고, 승인하면 끝 — API 키를 직접 발급받아 붙여넣을 필요가 없습니다.

  • 토큰 교환은 oculpm.com 의 무상태 서버리스 함수가 대신하며 서버에는 아무것도 저장되지 않습니다 — 토큰은 127.0.0.1 루프백으로 당신의 기기에만 전달되어 OS 키체인에 보관됩니다.
  • 기존 방식(내부 통합 API 키 붙여넣기)도 그대로 쓸 수 있습니다.

project-inception 스킬 v2 — 지어내지 않는 설계. 새 프로젝트 킥오프가 2단 구체화로 강해졌습니다:

  • 1차 인터뷰 — 문제·완성의 정의·비목표·플랫폼·제약 중 모르는 것 전부를 사용자에게 한 번에(객관식 보기와 함께) 묻습니다. 모호한 답은 재질문하고, 추측으로 메꾸지 않습니다.
  • 2차 웹 리서치 — 스택 후보의 안정 버전·공식 스캐폴드·베스트 프랙티스를 웹 검색으로 직접 확인해 버전·출처와 함께 설계 문서에 남깁니다. 기억 속 버전을 단정하지 않습니다.

기타

  • README(한/영)에 v2.5.0 특화 기능과 플러그인 설치 안내 섹션 추가.
  • 랜딩(oculpm.com) 리뉴얼 — 시작하기 2경로(앱/플러그인), 설치 명령 복사 버튼, v2.5.0 기능 소개.

v2.5.0

Claude Code 플러그인 — 앱 없이도 기록이 시작됩니다. Claude Code 에서 두 줄이면 끝:

/plugin marketplace add bunhine0452/Ocul-PM
/plugin install oculpm@oculpm
  • 훅 브리지(세션 신호) + oculpm-mcp(구조화 일지/플랜 도구 4종) + 스킬 5종(기록 규격·project-inception·self-audit·run-evals·tdd) + /oculpm:standup 이 전 프로젝트에 한 번에 구성됩니다. .oculpm 이 있는 추적 프로젝트에서만 동작합니다.
  • 안전 계약을 문서와 테스트로 고정 — 비추적 저장소에는 어떤 파일도 만들지 않고(심볼릭 링크 .oculpm 거부), 훅은 로컬 append 한 줄뿐(네트워크 없음), 대화 내용이 담기는 .oculpm/hooks/ 는 gitignore 관리 블록이 커밋을 막습니다(구버전 앱이 블록을 되돌리지 못하는 다운그레이드 가드 포함). 상세: docs/claude-integration/06-plugin-contract.md.
  • 앱 설정 → 연동 탭이 플러그인 설치를 감지해 프로젝트별 훅·MCP 등록과의 이중 등록을 경고합니다 (하나만 쓰세요).

플래너가 백미러에서 핸들이 됩니다

  • ▶실행 (디스패치) — 플랜 항목을 누르면 항목 내용 + 연결된 최근 일지 + "게이트 확인→일지→플랜 갱신" 지시가 조립된 프롬프트가 터미널에 프리필됩니다. Enter 한 번으로 Claude Code 실세션이 그 항목을 잡습니다.
  • 3단계 계획 (3-depth) — 항목 아래 두 칸 들여쓴 하위 작업. 하위를 가진 부모의 상태는 하위 롤업으로 자동 계산되고(직접 변경은 거부), 진행 카운트·진행 바는 리프 기준으로 일관됩니다.
  • plan_create — 새 계획도 이제 MCP 도구가 frontmatter·항목 id 규격을 서버에서 보장합니다.

설계부터 시작하는 프로젝트 — project-inception 스킬

아이디어를 4종 산출물로 시드합니다: 문제 정의(discussion 문서) → 3단계 계획 → EVALS.md 완료 정의(회고 화면이 추이를 그리는 그 표) → 초기 .claude/rules. Greenfield 마법사로 프로젝트를 만들면 새 프로젝트의 터미널에 킥오프 프롬프트가 미리 준비됩니다.

에이전트 토큰 다이어트 — 규칙 템플릿 v7

  • 모든 추적 프로젝트의 모든 세션에 상시 주입되던 AGENTS.md 가 60% 압축됐습니다(≈2,900→≈1,150 토큰). 준수를 담보하던 규칙(트리거·frontmatter 함정·글리프)은 전부 유지.
  • 저빈도인 문제-해결-문서 규격은 .oculpm/agents/discussion-spec.md 로 분리해 필요할 때만 읽습니다. Claude 래퍼의 이중 주입 경로 제거. 영어 템플릿(config agents.template_language: "en") 추가.
  • 앱을 열면 템플릿 업그레이드 배지가 안내합니다.

터미널 안정화

  • 터미널을 열면 수 초 뒤 앱 전체가 빈 화면이 되던 크래시의 근본 원인(xterm WebGL 애드온 버전 불일치)을 수정했습니다. 만에 하나를 위해 페인 단위 에러 격리("다시 열기" 복구)와 전역 에러 로깅도 함께 들어갔습니다.
  • 검색 결과 하이라이터 경량화(불필요한 808KB 다운로드 제거), 출력 파일 링크가 스크롤백에서 엉뚱한 줄을 가리키던 문제 수정.

그 외

  • .oculpm/README.md 자동 생성 — 저장소에서 이 폴더를 처음 본 팀원에게 정체와 앱 링크를 안내합니다.
  • 규칙 허브·Cursor 미러·규칙 승격 루프 견고화 5건(이름 변경 시 미러 유실, frontmatter 오인으로 본문 유실, 읽기 크기 상한 등).

v2.3.1

자정을 넘겨도 "오늘"이 오늘입니다 — 앱을 계속 켜 둔 채 00시를 넘기면, 재시작 전까지 "오늘" 화면·날짜 라벨·주간 차트가 전날에 고정되던 버그를 고쳤습니다.

  • 메인 창 — workday 롤오버 워처(60초 tick + 창 포커스·가시성 복귀 시 재확인)가 백엔드 상태를 다시 읽어, 날짜 경계(설정한 타임존·하루 시작 시각을 존중)를 실제로 넘긴 순간에만 새 날짜로 전환합니다. 매 tick 마다 리렌더하지 않습니다.
  • 메뉴바 팝오버 — 팝오버를 연 채 자정을 넘겨도 로컬 자정 트리거로 자동 새로고침됩니다.
  • 워크데이 경계 넘김(경계 넘김·무변경 무커밋·무프로젝트)을 검증하는 테스트를 추가했습니다.

v2.3.0

메뉴바 상주 — 이제 Ocul-PM 이 macOS 상단바에 삽니다. RunCat 처럼 아이콘이 에이전트의 일을 보여주고, Docker Desktop 처럼 클릭 한 번에 오늘의 상태가 열립니다. 앱 창을 열지 않아도 됩니다.

상단바 아이콘이 상태 표시기입니다

  • 브랜드 로고의 끊긴 동심원 호가 그대로 아이콘이 됩니다 (라이트/다크 메뉴바 자동 대응).
  • 에이전트 세션이 활성이면 호가 회전합니다 — 훅이 잡은 실시간 신호라 정확하고, 세션이 없으면 완전히 멈춰 배터리를 쓰지 않습니다. 정직성 감사 경고가 있으면 주의 점이 붙습니다.

클릭하면 5초 안에 답이 나오는 팝오버

  • 위에서 아래로: 프로젝트 스위처(오늘 카운트·라이브 표시) → 활성 세션(누가·몇 분째·어느 프로젝트) → 오늘 한 줄(일지·변경 파일·⚠) → 최근 일지 → 활성 플랜.
  • 일지를 팝오버 안에서 바로 읽습니다 — 클릭하면 본문(마크다운)이 그 자리에서 열리고, 에이전트·모델명까지 표시됩니다. 플랜도 클릭하면 전체 항목 체크리스트(✓ 완료 · ◐ 진행중 · ○ 할 일)가 열리고, 목록에는 "다음: …" 으로 이어서 할 일이 한 줄로 보입니다.
  • 새 일지가 생기면 목록이 실시간으로 갱신되고, 스탠드업 복사도 여기서 바로 됩니다. 앱이 필요할 때만 "앱에서 열기"로 정확히 그 자리에 착지합니다.

원하면 알림·상주까지 (전부 옵션)

  • 새 일지 알림 — 에이전트가 일지를 남기는 순간 macOS 알림이 뜹니다 (백필 등으로 몰리면 10초에 3건까지만).
  • 창 닫기(⌘W) = 메뉴바로 최소화 — 창을 닫아도 세션 감지·기록은 계속됩니다. ⌘Q 는 언제나 완전 종료. 원하면 상주 중 Dock 아이콘 숨김까지.
  • 토글은 팝오버의 "상단바 설정"에서 바로, 기본값은 전부 기존 동작 그대로입니다.

v2.2.0

Claude 직접 연동 — 이제 에이전트가 규칙을 "기억해서" 기록하는 게 아니라, Ocul-PM 이 Claude 와 직접 악수합니다. 훅으로 세션을 정확히 감지하고, MCP 도구로 기록하며, 쌓인 실패는 규칙이 되어 돌아옵니다.

Claude Code · Claude Desktop 과 직접 연결됩니다 (MCP 서버)

  • 새 내장 MCP 서버 oculpm-mcp 가 일지 작성(journal_write)·계획 조회(plan_status)·계획 갱신(plan_update)을 구조화 도구로 제공합니다. 에이전트가 마크다운 규격을 흉내 내다 틀리던 frontmatter 오류가 원천 차단됩니다.
  • 설정에서 버튼 한 번으로 프로젝트(.mcp.json)와 Claude Desktop(claude_desktop_config.json) 양쪽에 등록됩니다. Desktop 에서 "이 프로젝트 어디까지 됐어?"라고 물으면 라이브 플랜이 답합니다 — 앱이 꺼져 있어도 동작합니다 (디스크가 원본).
  • 여러 프로젝트를 등록해도 안전하게 공존하고(동명 폴더까지 구분), 서버는 자기 프로젝트의 .oculpm/ 밖을 읽지도 쓰지도 못합니다. 시크릿 패턴은 기록 전에 자동 마스킹됩니다.

세션 감지가 휴리스틱에서 훅으로 바뀌었습니다

  • Claude Code 의 공식 훅(SessionStart·Stop·SessionEnd)을 옵인 설치 — 파일 감시 추측 대신 세션 시작·종료가 정확히 기록됩니다 (중복 0, 유령 0). 기존 사용자 훅 설정은 건드리지 않습니다.
  • 옵인하면 세션이 끝날 때 transcript 로 일지 초안을 자동 생성합니다 — 에이전트가 일지를 깜빡해도 기록이 남습니다 (직접 쓴 일지가 있으면 초안은 만들지 않습니다).

실패가 규칙이 되는 플라이휠

  • 스킬 화면이 스킬 · 규칙 · 훅 3탭 허브로 — CLAUDE.md 와 .claude/rules/*.md 를 GUI 로 만들고 고치고, 원하면 같은 규칙을 Cursor(.mdc)에도 병행 배포합니다.
  • 회고가 반복 실패를 규칙 후보로 제안합니다 — 일지에서 같은 영역의 버그·에러가 반복되면 AI 가 규칙 초안(적용 경로 추론 포함)을 만들고, 사람이 승인해야만 저장됩니다.
  • 추천 스킬 갤러리: self-audit · run-evals · tdd-workflow 를 원클릭 설치. 플래너 완료 시 검증 일지가 없으면 부드럽게 경고하고(EDD-lite), EVALS.md 점수 추이를 회고에서 봅니다.

기록이 바깥으로 흐릅니다

  • Notion 내보내기 — 회고 리포트·주간 요약을 버튼 한 번으로 Notion 페이지로. 토큰은 OS 키체인에만 저장됩니다.
  • Claude Code 플러그인 번들(훅+MCP 일괄 구성) 골격이 들어왔습니다.

AI 패널·터미널 대규모 개편

  • AI 패널: 스트리밍 마크다운 렌더링, 컨텍스트 토큰 추정 표시.
  • 터미널: 분할 페인, 화면을 떠나도 살아있는 세션 지속, 한글 등 멀티바이트가 스트리밍 중 깨지던 PTY UTF-8 청크 분리 문제 해결.

v2.1.0

새 옷, 새 화면, 그리고 대청소 — 앱의 디자인 언어를 통째로 갈고, 스킬 관리 화면이 생겼으며, 감사에서 나온 "안 되던 것·쓸데없던 것"을 정리했습니다.

디자인이 완전히 바뀌었습니다 — "Atelier"

  • 차가운 회색 대신 웜 아이보리(라이트) / 딥 포레스트(다크) 팔레트, 캔버스 위에 콘텐츠가 떠 있는 시트 레이아웃, 사이드바 메뉴가 차례로 켜지는 진입 모션.
  • 앱을 켜면 브랜드 부트 모션이 첫 1초를 채우고 UI 가 그 아래에서 떠오릅니다 (모션 최소화 설정을 켰다면 건너뜁니다).
  • 대시보드부터 12개 화면 전부가 한 서체(SUITE)·한 물성(모션/그림자 토큰)을 공유하고, 프리셋 테마 5종·액센트 6색·다크/라이트는 전부 그대로 동작합니다. 설정 → 모양에 액센트 6색 피커가 돌아왔습니다 (인프라는 있었는데 UI 가 유실돼 있던 것 복원).

스킬 화면이 생겼습니다 (12번째 화면)

  • 프로젝트(.claude/skills/)와 전역(~/.claude/skills/)의 Claude Code 스킬을 GUI 로 관리합니다 — 만들기(템플릿)·마크다운 미리보기·편집(⌘S)·프로젝트↔전역 복사·삭제.
  • 끄기는 지우기가 아닙니다 — 비활성화한 스킬은 .disabled/ 폴더로 옮겨져 로드에서만 빠지고, 언제든 한 번에 되살립니다.

코드 맵이 큰 저장소에서도 읽힙니다

  • 열자마자 전부 그리는 대신 연결이 많은 핵심 상위만 먼저 보여주고(툴바 칩으로 전체 토글), 노드에 마우스만 올려도 이웃 관계가 하이라이트됩니다.
  • 폴더 더블클릭으로 그 폴더 속 파일 그래프로 드릴다운, 경로 검색에서 Enter 로 바로 점프, 폴더 카드엔 언어 구성 미니 바. 줌 아웃하면 엣지가 옅어져 헤어볼 대신 지도로 읽힙니다.

터미널에서 한국어가 제대로 쳐집니다

  • 근본 원인이던 셸 로케일 부재(Finder 실행 앱은 LANG 이 비어 한글 조합·백스페이스가 깨짐)를 고치고, 한글 2:1 고정폭 D2Coding 으로 셀 폭을 맞췄으며, 조합 중인 글자가 또렷이 보이는 미리보기를 입혔습니다. 상단 "변경 감시중" 표시는 이제 실제 워처 상태를 보여줍니다.

안 되던 것·헷갈리던 것 정리 (전 기능 감사)

  • 대시보드의 임시 저장 프로젝트 "복원"이 진짜 복원합니다 — 저장한 단계·입력을 그대로 이어가고, 중복 초안이 더는 쌓이지 않습니다.
  • AI 채팅이 한 벌로 — ⌘\ 오버레이(구버전 채팅)를 은퇴시키고 ⌘\ 는 AI 패널로 갑니다. 설정의 GitHub 토큰 탭(저장만 되고 쓰이지 않던 것)과 무효였던 "응답 스트리밍" 토글도 정리했습니다.

v2.0.0

대규모 업데이트 — 키보드 하나로 어디든 가고, 쌓인 기록이 산출물로 돌아오고, 앱은 더 가벼워졌습니다. 기존 프로젝트의 .oculpm/ 데이터는 그대로 열립니다 (마이그레이션 불필요).

⌘K 가 진짜 "어디로든 가기"가 됐습니다

  • 커맨드 팔레트에서 화면 이동뿐 아니라 일지·계획·토의·문서를 제목으로 검색해 바로 열 수 있습니다 (2자만 쳐도 "바로가기"가 뜹니다).
  • 빠져 있던 문제 해결·회고·문서 화면이 팔레트에 추가되고, ⌘1~⌘9·⌘0 이 사이드바에 보이는 순서 그대로 정렬됐습니다 (사이드바에 마우스를 올리면 번호 힌트가 보입니다). ⌘P 로 프로젝트를 즉시 전환합니다.
  • 변경 diff 를 키보드로 검토합니다 — j/k 로 파일 이동, / 로 diff 안 검색, n/N 으로 매치 점프.
  • 계획 항목 상태는 이제 클릭 즉시 바뀝니다(실패 시에만 자동 원복) — 저장을 기다리며 멈칫하지 않아요.
  • 모달이 열리면 Tab 이 모달 안에서만 돌고, 닫으면 열었던 자리로 포커스가 돌아옵니다 (키보드 사용자가 길을 잃지 않습니다).

기록이 산출물로 돌아옵니다

  • Today 의 "스탠드업 복사" 한 번이면 어제~오늘 일지와 계획으로 공유용 스탠드업이 클립보드에 담깁니다. 회고 화면의 "산출물" 에서는 기간을 골라 PR 본문·주간 보고도 만듭니다. AI 를 설정해두면 AI 가 다듬고, 설정이 없어도 기본 형식으로 항상 동작합니다.
  • 에이전트 지원 확대 — Windsurf · GitHub Copilot · aider · Cline · Zed 규칙 파일을 지원하고(설정 → Agents 에서 켜기), Codex CLI 는 AGENTS.md 를 그대로 읽으므로 바로 동작합니다. git 백필 시 커밋 서명으로 이들 에이전트도 인식합니다.

더 가볍고 빠르게

  • 첫 화면이 훨씬 가벼워졌습니다 — 화면별로 필요한 순간에만 코드를 불러오도록 나눠(메인 번들 −58%), 터미널·마크다운 렌더러는 실제로 쓸 때만 로드됩니다.
  • 에이전트가 활발히 코딩 중일 때 UI 가 더는 버벅이지 않습니다 — 파일 변경 이벤트가 화면 전체를 다시 그리며 저장소를 두드리던 구조를 수술했습니다.
  • Today 화면이 훨씬 적은 왕복으로 뜹니다 (백엔드 호출 12+α 회 → 3회), 코드 텍스트 검색은 전문(全文) 인덱스를 타서 큰 프로젝트에서도 즉답합니다.
  • 라이트 모드에서 알림(토스트)이 어둡게 뜨던 문제를 고치고, 로딩은 스피너 대신 콘텐츠 모양 스켈레톤으로 바뀌었으며, 일지 로그 파일이 무한히 쌓이지 않도록 최근 2주만 보관합니다.

v1.20.0

  • *"문제 해결" 화면이 생겼습니다 (결정 전 토의 문서) — 작업 일지(한 일)·플래너(할 일)·회고(돌아보기) 앞에, 무엇을 할지 정하기 전 단계를 위한 새 화면입니다. 한 세션에 안 끝나는 큰 결정이나 대규모 계획을 세울 때 문제 정의 → 후보 해결 방안(장·단·비용) → 토의/메모 → 결론 → 다음 단계 를 살아있는 회의록처럼 정리합니다. 조사한 파일·이미지·메모를 첨부해 함께 보관하고(이미지는 인라인 미리보기), 결론이 서면 "플래너로 승격" 한 번으로 다음 단계* 가 새 계획의 항목이 되고 문서는 그 계획과 연결됩니다. Today 에는 아직 안 끝난 토의가 "결정 대기" 로 모입니다. 모든 내용은 프로젝트의 .oculpm/discussion/ 에 사람이 읽을 수 있는 마크다운으로 남고, 터미널의 코딩 에이전트도 같은 규칙(AGENTS.md)으로 이 문서를 함께 쓸 수 있습니다. (이번 버전은 사람이 직접 쓰는 문서 — 화면 안에서 AI 와 대화하는 기능은 다음 라운드입니다.)

v1.19.0

  • 작업 일지 시간대 보정을 원본 파일에도 반영할 수 있습니다 — 외부 에이전트가 시간대 없이 적은 시각은 그동안 화면에서만 바로잡아 보여줬는데(원본은 그대로), 이제 일지 상세에서 "원본 파일에 시간대 적용" 버튼으로 원본 .md 에도 한 번에 기록할 수 있습니다(명시적으로 누를 때만, 미리보기·확인 포함). 시각만 고치고 본문은 건드리지 않습니다.
  • 한글 슬러그 표시가 정돈됩니다 — 버그 수정!! 같은 슬러그를 버그-수정 으로 다듬어 보여줍니다(한글은 보존). 표시용 보정이라 원본 파일은 그대로이고, 보정 규칙이 바뀌면 기존 일지에도 다음 색인 때 자동 반영됩니다.
  • 자동 화해(켠 경우) 개선 — ① 활성 계획이 여러 개여도 각 계획에 대해 자동 갱신합니다(이전엔 정확히 1개일 때만). ② 자동으로 계획이 갱신되면 알림 토스트로 알려줍니다. ③ 사람이 계획을 편집하는 도중이면 사람 편집을 우선하고 자동 갱신은 양보합니다(계획 동시 쓰기 보호).

v1.18.0

  • 작업 일지를 공유용 파일로 내보냅니다 — "회고" 화면에서 기간(최근 7·14·30일)을 고른 뒤 "내보내기" 를 누르면, 그 기간의 작업 일지를 하나의 마크다운(.md) 파일로 정리해 저장합니다(날짜별로 묶고, 각 일지의 종류·상태·에이전트·파일·내용 포함). 동료·매니저에게 "이번 주 AI 가 뭘 했는지" 건네기 좋은 산출물이에요. 전부 로컬에서 만들고 네트워크로 아무것도 보내지 않으며, 내용은 이미 비밀키가 가려진 상태로 기록됩니다.
  • 내부 정리 — 파일 기반 플래너로 일원화된 뒤 안 쓰이게 된 옛 목표/하위작업 DB 코드를 마저 걷어냈습니다(동작 변화 없음).

v1.17.0

  • 계획이 작업 일지를 따라 스스로 갱신됩니다 (자동 화해, 선택 기능) — 설정 → Agents 의 "자동 화해" 를 켜면, 코딩 에이전트가 새 작업 일지를 남길 때마다 앱이 활성 계획 1개를 그 일지에 비추어 자동으로 갱신합니다(어떤 항목이 진행/완료됐는지 AI 가 판단해 상태를 바꾸고, 그 항목에 일지 링크를 답니다). 변경 이력에는 auto:<제공자> 로 표시돼 사람이 한 것과 구분됩니다. 기본은 꺼짐 — 켜면 일지·계획 내용이 설정한 AI 제공자로 전송되는 과금 호출이 자동으로 발생하기 때문입니다(활성 계획이 정확히 1개일 때만 동작, git 백필 일지는 제외). 같은 시점 사람이 계획을 편집하면 사람 편집이 우선합니다.
  • 내부 정리 — UI 개편 후 쓰이지 않게 된 작업공간 상태 코드(옛 사이드 패널/diff 핸드오프 잔재)를 걷어냈습니다(동작 변화 없음).

v1.16.0

  • 회고 화면이 생겼습니다 — 사이드바의 새 "회고" 화면에서 기간(최근 7·14·30일)을 고르면, 그 기간에 무엇을 출시했고(완료된 기능·리팩토링), 어디서 막혔고(에러·버그와 반복해서 문제가 된 파일), 어디에 노력이 몰렸는지(가장 많이 고친 파일 + 그 파일이 코드 그래프에서 얼마나 많은 곳에 영향을 주는지), 그리고 에이전트별 기여와 난이도 분포를 한눈에 보여줍니다. "회고 생성"을 누르면 이 신호들을 바탕으로 한국어 회고를 만들어 줍니다(설정한 AI 제공자/모델 사용). 생성된 회고는 기간별로 저장되고, 그 사이 일지나 코드가 바뀌면 "오래됨" 표시로 다시 생성하라고 알려줍니다. 모든 데이터는 로컬에서 모으며, 회고를 만들 때만 LLM을 호출합니다.

v1.15.0

  • 작업 일지 시간이 시간대 없이 적혀도 바르게 보입니다 — 외부 에이전트가 created_at을 시간대 없이(예: 2026-05-24T09:25:13) 적으면 정렬·표시가 UTC로 어긋날 수 있었는데, 이제 인덱싱할 때 프로젝트 시간대 기준으로 오프셋을 자동 보정합니다(서머타임까지 정확). 비정규 슬러그도 표시용으로 정돈합니다. 디스크의 원본 일지 파일은 절대 바꾸지 않고, 화면/검색 캐시에만 반영하며, 보정된 일지에는 "보정됨" 표시로 무엇이 조정됐는지 알려줍니다.
  • 내부 정리 — 파일 기반 플래너로 일원화되며 쓰이지 않게 된 옛 목표/하위작업 백엔드 명령들을 걷어냈습니다(동작 변화 없음).

v1.14.0

  • 계획이 한 곳에서만 관리됩니다 — Today 화면의 "다음 할 일", AI 패널의 계획 제안, 그리고 새 프로젝트 시작 시 만든 초기 목표가 이제 모두 Planner 화면과 같은 계획 파일(.oculpm/planner/)을 바라봅니다. 예전엔 이들이 Planner와 따로 노는 옛 저장소에 읽고 써서 서로 어긋났는데, 이제 어디서 보든 같은 계획이 보이고 AI 가 제안한 변경도 Planner에 그대로 반영됩니다.

v1.13.0

  • 작업 일지 검색·필터가 전체 기록을 훑습니다 — 이전엔 최근 14일 안에서만 검색·필터돼서 더 오래된 일지는 검색으로도 닿지 않았습니다. 이제 검색하거나 필터를 켜면 전체 기간을 백엔드에서 한 번에 찾습니다. 타입 칩에 더해 미완료 / 검증됨 토글이 생겼고, 타임라인 아래 "이전 기록 더 보기" 로 14일 너머의 기록도 펼쳐 볼 수 있어요.

v1.12.0

  • 비밀키 자동 가리기 — 작업 일지나 변경 diff에 실수로 들어간 API 키·토큰(AWS·OpenAI·GitHub·Slack 형식)을 자동으로 [REDACTED]로 가립니다. 로컬 캐시나 AI 컨텍스트로도 새지 않고, 가렸을 때는 알림으로 알려줍니다.
  • git 히스토리에서 작업 일지 가져오기 — 일지가 비어 있는 프로젝트의 "작업 일지" 화면에 "git 히스토리에서 가져오기" 버튼이 생겼습니다. 기존 커밋들을 일지로 한 번에 채워 줍니다(커밋당 1건, 타입 자동 분류, 그 시점의 변경 diff까지 함께 기록). 이미 작업이 쌓인 레포도 첫날부터 타임라인이 채워집니다.
  • 정직성 감사 — 에이전트가 실제로 바꿨지만 작업 일지에 기록하지 않은 파일을 Today 화면에서 찾아 보여줍니다(누락이 있을 때만). 일지가 실제 변경을 제대로 반영하는지 점검할 수 있어요.
  • 깨진 일지에 파싱 경고 표시 — frontmatter가 잘못된(예: 시간대 누락) 일지에 ⚠ 배지와 경고 내용을 표시해 신뢰성 문제를 바로 알 수 있습니다.
  • 대규모 내부 정리 — 안 쓰는 레거시 코드와 옛 SQLite 마이그레이션 경로, 동작하지 않던 설정 항목(앱 내 코드 에디터 설정 등)을 걷어내 앱을 더 가볍고 일관되게 정리했습니다.

v1.11.0

  • 작업 일지에 '어떤 모델로 작업했는지'가 보입니다 — 에이전트 이름 옆에 모델명을 함께 표시합니다(예: Claude Code · Opus 4.8, Antigravity · Gemini 3 Pro). 외부 LLM 이 일지를 쓸 때 모델명을 적도록 작업 규칙(AGENTS.md)도 갱신했습니다.
  • Antigravity·pi 코딩 에이전트도 함께 인지합니다 — 두 에이전트 모두 별도 설정 없이 프로젝트의 AGENTS.md 규칙을 그대로 읽어 작업 일지를 남길 수 있습니다.
  • 설정 > 진단에서 개발자에게 피드백을 보낼 수 있습니다 — "버그 리포트 / 기능 문의" 버튼을 누르면 앱 버전·OS 가 자동으로 채워진 GitHub 이슈 작성 페이지가 열립니다.
  • 변경 diff 가 커밋 후 비어 보이던 문제를 고쳤습니다 — 미커밋 변경이 없으면 직전 커밋의 변경을 대신 보여주고, 위쪽 토글로 '미커밋 / 직전 커밋' 을 오갈 수 있습니다. (작업을 커밋하고 나면 이 화면이 비던 현상)

v1.10.0

  • 프로젝트의 docs 폴더를 앱 안에서 위키처럼 읽습니다 — 사이드바 "문서"에서 프로젝트 루트의 docs/ 폴더를 트리로 탐색하고 마크다운을 바로 봅니다. 문서끼리 연결된 링크를 클릭하면 그 자리에서 이동하고, 외부 링크는 브라우저로 열리며, 문서 속 이미지도 함께 보여줍니다. (지금은 읽기 전용 — 편집은 다음 업데이트에서)
  • 작업 일지에서 '새로 생긴 파일'의 변경 내용이 안 보이던 문제를 고쳤습니다 — 커밋 전에 만든 새 파일은 일지에서 변경 diff 가 비어 보일 때가 있었는데, 이제 새 파일의 전체 내용을 변경으로 정확히 기록해 보여줍니다. (이미 영향을 받은 과거 일지는 다시 열면 자동으로 채워집니다.)

v1.9.0

  • 코드 맵이 한눈에 들어오게 다시 그려졌습니다 — 연결이 많은 핵심 파일은 크게, 말단은 작게 그려 중요한 파일이 먼저 보입니다. 줌을 당기면 카드, 멀어지면 이름 핀만 남겨 파일이 수백 개라도 글자가 깨지지 않습니다(LOD). 파일을 선택하면 그 이웃만 남기고 카메라를 맞춰 주는 포커스 모드가 기본으로 켜집니다.
  • 코드 맵 파일 정보 패널이 개발자 덤프에서 'PM 관점'으로 바뀌었습니다 — 파일의 역할(허브·진입점·기반 모듈 등)과 "이 파일을 바꾸면 N개 파일에 영향" 헤드라인을 맨 위에 보여주고, 에디터에서 열기·코드 미리보기, 관계·심볼(클릭하면 코드 인라인 펼침)·호출 관계를 정리해 보여줍니다.
  • Planner에서 '단계(Phase)'를 직접 관리할 수 있습니다 — 단계 이름 바꾸기·삭제·순서 변경(↑/↓)을 앱에서 바로 합니다. 이전엔 항목을 추가할 때만 단계가 생겼고 한번 만든 단계는 손댈 수 없었습니다.
  • Planner 편집이 제자리에서 매끄럽게 — 계획 제목·단계·항목을 그 자리에서 클릭해 바로 고치고, 편집 버튼(✏️·🗑)은 마우스를 올렸을 때만 깔끔하게 나타납니다. (전체 화면을 가리는 팝업 없이) 완료·잠금된 계획은 그대로 보호됩니다.

v1.8.1

  • Planner의 계획과 항목을 직접 관리할 수 있습니다 — 계획 이름 바꾸기(✏️ 인라인 편집)와 삭제(🗑 → 2단계 확인), 각 항목의 이름 바꾸기·삭제를 앱에서 바로 할 수 있게 했습니다. (완료·잠금된 계획은 그대로 보호됩니다.)

v1.8.0

  • 코드 맵(의존성 그래프) 화면이 새로 생겼습니다 — 사이드바 "코드 맵"에서 프로젝트의 파일·폴더 의존 관계를 그래프로 봅니다. 폴더로 묶어 보거나(파일이 많아도 한눈에) 파일 단위로 펼치고, 계층·유기형·묶음(커뮤니티 클러스터) 레이아웃을 고를 수 있습니다. 언어별로 색을 칠하고 범례를 함께 보여줍니다.
  • import뿐 아니라 호출·상속·구현 관계까지 — 코드 맵에서 엣지 유형(import/호출/상속/구현)을 켜고 끌 수 있고, 이름 매칭으로 추정한 관계는 점선으로 구분합니다. 파일을 선택하면 그 안의 어떤 함수가 어떤 함수를 호출하는지도 보여줍니다.
  • 변경 영향분석 — "변경 diff" 화면에서 바뀐 파일을 (간접적으로라도) import 하는 파일들을 찾아 "영향 받는 파일"로 보여줍니다. 무엇을 함께 검토해야 할지 빠르게 파악할 수 있어요.
  • 프리셋 테마 5종 — 설정 → 모양에서 Solarized · Nord · Dracula · Sepia · High Contrast 를 고를 수 있습니다. 라이트·다크와 별개의 완성된 색 구성입니다.
  • 앱 글자 크기 조절 — 설정 → 모양에서 앱 전체 배율을 70~160%로 조절합니다. 브라우저 확대/축소와 같은 방식이라 터미널·그래프 화면도 깨지지 않습니다.
  • 설정에 '업데이트' 전용 탭 — 현재 버전 확인·설치와 함께 버전별 과거 패치노트를 펼쳐볼 수 있습니다.
  • 정리·버그 수정 — 사이드바 상단의 앱 이름·아이콘 정리, 작업 일지 카드의 중복 "변경 diff" 버튼 제거, Go 코드 분석이 동작하지 않던 버그 수정 등.

v1.7.0

  • 창을 더 넓은 영역에서 끌어 옮길 수 있습니다 — 상단 바 전체(설정 등 모든 화면)와 프로젝트 선택 전 메인 화면 상단을 잡아 창을 이동할 수 있어요. 이전엔 창 가장자리에서만 가능했습니다.
  • 프로젝트 삭제 시 .oculpm 폴더와 AGENTS.md도 함께 지울 수 있습니다 — 제거 대화상자에 개별 체크박스를 추가했습니다. 기본은 꺼져 있어 그냥 제거하면 실제 파일은 보존됩니다.
  • Today 대시보드 정리 — 모니터 카드 줄의 빈칸을 없애 4칸을 꽉 채우고(전체 작업 일지·미커밋 변경 추가), '오늘 커밋' 카드에 마우스를 올리면 전체 커밋 메시지가 보입니다. 긴 텍스트가 카드를 밀어내던 문제도 고쳤습니다.
  • Planner의 일지 링크가 편해졌습니다 — 버튼을 SVG 아이콘으로 바꾸고 클릭 영역을 키웠으며, 한 작업에 여러 일지가 연결된 경우 날짜·제목 목록에서 골라 이동할 수 있습니다.
  • 일지 작성 날짜를 잘 보이게 — 일지 상세 상단에 작성 날짜를 강조해 표시합니다. (불필요한 "변경 diff 화면" 버튼은 제거)
  • Planner → 일지 → 뒤로가기 시 보던 계획으로 돌아옵니다 — 일지로 이동했다가 돌아와도 같은 Planner 계획이 유지됩니다.

v1.6.1

  • AI 패널이 플래너 작업을 제안합니다 — 메인 AI 패널에서 "이 목표 만들어줘", "여기에 서브태스크 추가해줘"처럼 부탁하면, AI가 변경안을 카드로 보여주고 버튼 한 번으로 플래너에 반영합니다. (설정에서 플래너 컨텍스트가 켜져 있을 때)

v1.6.0

  • 메인(프로젝트 선택) 화면이 스크롤됩니다 — 창이 작아져도 아래쪽 UI가 잘리지 않습니다. '최근 7일' 막대는 빼고, 프로젝트 카드를 최근 활동순으로 정렬하고 '마지막 활동' 시각을 함께 보여주도록 정리했습니다.
  • 설정이 한 곳으로 통일됐습니다 — 프로젝트 안에서 여는 설정(⌘,)이 시작 화면의 설정과 똑같아졌습니다. 업데이트·모델·OpenRouter·인덱싱·재구축을 모두 같은 화면에서 다룹니다.
  • 커밋 그래프 — 위치 이동 + 클릭하면 GitHub에서 열림 — Today의 커밋 그래프를 맨 아래로 옮겼고, 커밋을 누르면 기본 브라우저로 그 커밋의 GitHub 페이지가 열립니다. (GitHub 원격이 연결된 경우. 없으면 안내가 표시됩니다.)
  • 자동 인덱싱이 조용해졌습니다 — 내용이 바뀌지 않은 저장에는 다시 인덱싱하지 않아, 파일 접근 권한을 반복해서 묻던 상황이 줄어듭니다. (설정 → 인덱싱에서 끌 수 있어요.)
  • Today 정리 — '목표 진행률' 카드를 뺐습니다.

v1.5.1

  • 하위 폴더의 git 저장소도 Today·브랜치에 반영됩니다 — 프로젝트 루트에 .git이 없고 하위 폴더에 git 저장소가 있을 때, Today의 git 정보(오늘 커밋·브랜치·미커밋)와 커밋 그래프가 동작하도록 했습니다. (이전엔 변경 diff 화면만 하위 저장소를 인식했어요.)
  • Today에 커밋 그래프 — VSCode의 git 그래프처럼 최근 커밋을 브랜치·머지 선과 함께 한눈에 보여줍니다. 태그·브랜치 배지도 함께 표시됩니다.
  • 변경 코드 줄바꿈 완성 — 변경 diff에서 긴 코드 줄이 여전히 오른쪽으로 잘려 보이던 문제를 고쳐, 화면 폭에 맞춰 줄바꿈됩니다.
  • 설정에 "업데이트" 섹션 분리 — 버전 확인 · 업데이트 설치 · 체인지로그 보기를 한곳에 모은 독립 섹션을 만들었습니다. (이전엔 "데이터"에 묻혀 있어 찾기 어려웠어요.)
  • 프로젝트 안 설정도 시작 화면 설정과 일관되게 — 프로젝트 안에서 여는 설정창에도 OpenRouter 키, 모델 지정, 폴백 체인을 추가했습니다.

v1.5.0

  • 코드 검색이 자동으로 최신 상태를 유지합니다 — 파일을 새로 만들거나 고치면, 설정에서 직접 "재구축"을 누르지 않아도 바뀐 파일만 곧바로 인덱싱돼 검색에 반영됩니다. (설정 → 데이터에서 "자동 인덱싱"을 끌 수 있어요. 이미 한 번 인덱싱한 프로젝트에 적용됩니다.)
  • 심볼 검색에서 코드를 펼쳐 봅니다 — 함수·클래스 검색 결과를 클릭하면 그 자리에서 해당 코드 본문이 펼쳐집니다.
  • 의미 검색이 코드에 집중합니다 — 의미 검색 결과에서 .md·.txt 같은 문서 파일을 기본으로 제외해 코드 결과가 묻히지 않게 했습니다. ("문서 포함" 버튼으로 다시 켤 수 있어요.)
  • Today에 모니터링 정보가 늘었습니다 — 오늘의 활동 시간(세션 기준), 오늘 커밋 수·현재 브랜치·미커밋, 목표 진행률·마감을 한눈에 보여줍니다.
  • OpenRouter 지원 — 설정 → LLM에서 OpenRouter(수백 개 모델을 키 하나로)를 쓸 수 있습니다. 모델 id 예: openai/gpt-4o.
  • 모델 폴백(failover) — 기본 모델 호출이 실패하면 설정에 적어둔 다음 모델로 자동 재시도합니다. (설정 → LLM → 폴백 체인에 provider:model을 한 줄씩 적으세요.)
  • AI 패널이 프로젝트를 압니다 — 메인 AI 패널이 코드(검색)·작업일지·플래너·git 맥락을 질문과 함께 보내, 프로젝트를 이해한 답을 합니다. 입력창에서 어떤 맥락을 붙일지 켜고 끌 수 있어요.

v1.4.3

  • 컬러 테마가 프로젝트 전환 영역에도 적용됩니다 — 사이드바 프로젝트 박스의 폴더 아이콘이 초록으로 고정돼 있던 것을 선택한 컬러 테마(accent)를 따르도록 고쳤습니다.
  • 변경 코드가 화면 폭에 맞춰 줄바꿈됩니다 — 변경 diff에서 긴 코드 줄이 오른쪽으로 잘려 보이던 문제(macOS 숨김 스크롤바)를 고쳐, 화면 폭에 맞게 줄바꿈해 한 화면에 모두 보이도록 했습니다.

v1.4.2

  • 하위 폴더에 git 저장소가 있어도 변경 diff가 유지됩니다 — .oculpm 폴더를 git 저장소의 상위(부모) 폴더에서 연 경우, 변경 diff 화면이 git 대신 임시 버퍼로 동작해 앱을 업데이트(=재시작)하면 변경 diff가 초기화되던 문제를 고쳤습니다. 이제 하위에 있는 git 저장소를 자동으로 찾아 git 기준으로 변경을 보여주므로 재시작·업데이트에도 유지됩니다. (일지 클릭 시 변경 코드 복원도 같은 원리로 함께 개선)

v1.4.1

  • 작업 일지의 변경 코드가 더 잘 복원됩니다 — 일지를 클릭했을 때 "기록된 변경이 없어요"가 뜨던 경우를 줄였습니다. 파일명에 시각(HHMM) 접두가 없는(외부 에이전트가 작성한) 일지도 git 이력에서 변경 diff를 복원하고, 복원이 워처가 꺼져 있어도 동작합니다. 그래도 못 찾으면 빈 화면의 "변경 diff 화면에서 보기"로 현재 변경을 바로 열 수 있습니다.

v1.4.0

  • 프로젝트를 어디서든 바로 전환 — 사이드바 상단의 프로젝트 버튼을 누르면 이제 메인으로 나가지 않고, 그 자리에서 프로젝트 목록이 펼쳐져 다른 프로젝트로 바로 이동합니다. (전체 관리·추가는 목록 하단의 "프로젝트 관리 · 추가…")
  • 메인 화면이 '콕핏'으로 — 단순 프로젝트 선택 화면을, 전 프로젝트의 활동을 한눈에 보여주는 홈으로 개편했습니다. 최근 작업 일지 피드(클릭하면 해당 프로젝트로 이동), 오늘 기록 수, 최근 7일 활동, 프로젝트 카드별 "오늘 N건"을 모아 보여줍니다.

v1.3.0

  • 컬러 테마 — 설정 → 일반 → "컬러 테마"에서 강조 색을 그린·블루·퍼플·오렌지·로즈·틸 중에 고를 수 있습니다. 라이트·다크 모드와 별개로 적용됩니다.
  • 터미널 한글 입력 개선 시도 — 내장 터미널의 한글(IME) 입력을 개선하기 위해 터미널 엔진을 최신(@xterm/xterm)으로 업데이트했습니다.
  • 버전 표시 정확화 — 사이드바의 "로컬-우선 · v…" 가 실제 설치된 버전을 반영합니다. (랜딩 사이트 상단 배지도 최신 릴리스에 자동 연동)

v1.2.0

  • 작업 일지가 길어져도 한눈에 — 한 줄·시간순 타임라인은 그대로 두되, 오래된 날짜는 한 줄로 접고(최근 2일은 펼침) 오른쪽 날짜 막대에서 원하는 날짜로 바로 점프합니다. 검색·필터 중에는 모든 날짜가 자동으로 펼쳐집니다.
  • 일지를 눌렀을 때 "변경 기록 없음"이 줄었습니다 — 일지를 쓴 뒤 커밋했거나 기능 도입 전에 작성한 일지도, 열어 보는 순간 git 히스토리에서 변경 diff를 복원해 보여줍니다. (정말 복원할 수 없을 때만 빈 상태가 뜹니다)
  • 플래너 상단 정리 — 계획이 쌓여도 상단에는 진행 중인 계획만 보이고, 완료·보관된 계획은 "✓ 완료 N"·"🗄 보관 N" 으로 접어 둡니다.
  • 플래너의 📓 일지 버튼 개선 — 누르기 쉽게 커졌고, 완료된 계획처럼 오래된 일지도 정확히 그 일지 화면으로 바로 엽니다.

v1.1.3

  • 변경 diff 화면의 계획(plan) 태그가 중복되지 않습니다 — 한 작업일지가 같은 계획의 여러 항목을 진행하면, 변경 파일 목록 위에 그 계획 제목이 항목 수만큼(예: 11번) 똑같이 반복돼 화면을 가득 채우던 문제를 고쳤습니다. 이제 계획당 한 칩으로 접고 ·N 으로 항목 수를 표시하며, 각 항목 제목은 칩에 마우스를 올리면 보입니다.

v1.1.2

  • 업데이트 알림의 릴리즈 노트가 깔끔하게 보입니다 — 설정 → 데이터 "업데이트"에서 새 버전 안내가 ##·** 같은 마크다운 기호째 한 문단으로 뭉쳐 나오던 문제를 고쳤습니다. 이제 "What's new" 부분만 마크다운으로 렌더링하고, 다운로드 표·공증 안내 같은 군더더기는 숨깁니다.

v1.1.1

  • 작업일지의 "변경 diff"가 과거 일지에도 표시됩니다 — 이전에는 앱이 켜져 있고 일지가 작성되는 그 순간을 watcher가 직접 본 경우에만 변경 diff가 기록되어, 외부 에이전트가 앱이 꺼진 동안 쓴 일지나 기능 도입 전 일지는 "이 일지에는 기록된 변경이 없어요"만 떴습니다. 이제 이미 커밋된 일지도 git 히스토리에서 변경을 복원하고, 프로젝트를 열 때 과거 일지를 자동으로 backfill 합니다. (한 번 채워지면 이후엔 건너뛰어 비용 없음)

v1.1.0

  • 코드 검색 결과 자동 정렬 — Prettier + 다국어 포맷터(C·C++·Java·C#·Go·Python·셸 등)로 검색된 코드를 보기 좋게 정렬하고 구문 강조합니다. 정렬/원본 토글 제공.
  • AI가 작업일지·규칙을 기억 — 채팅에 최근 작업일지와 프로젝트 규칙(AGENTS)을 자동으로 함께 전달해, 세션이나 모델이 바뀌어도 작업 방향이 유지됩니다. (설정 → 인덱싱 & RAG 에서 끄기·개수 조절)
  • 변경 diff가 사라지지 않음 — 앱을 껐거나 다른 프로젝트를 보던 중에 생긴 변경도 git 기준으로 항상 표시됩니다.
  • Today 활동 링 개편 — 작업일지·변경 파일·라인 변화량을 3중 동심원으로 보여주고, 각 원에 마우스를 올리면 상세가 뜹니다.
  • 앱 안에서 수동 업데이트 확인 — 설정 → 데이터 → 업데이트에서 새 버전을 직접 확인하고 설치할 수 있습니다.
  • 코드 검색 노이즈 감소 — 의미 없는 한 줄짜리 조각이 결과에 덜 섞입니다. (재인덱싱 시 더 깨끗해집니다)

v1.0.1

  • 임베딩 모델을 양자화 다국어 모델로 교체 — 최초 다운로드가 약 480MB → 135MB 로 대폭 감소(검색 품질·다국어 동일).
  • 임베딩 모델 최초 다운로드 진행 표시 추가 — 첫 인덱싱이 멈춘 듯 보이던 문제 해결.
  • 새 버전이 나오면 앱 안에서 자동 업데이트(1.0.0 부터).

1.0.0 을 이미 쓰던 경우, 이 버전에서 코드 인덱스를 새 모델로 한 번 재구성합니다(자동).

v1.0.0

첫 정식 릴리즈 — AI 코딩 에이전트가 코드를 쓰는 동안, 작업을 자동으로 기록·검증·정리하는 로컬-우선 AI 프로젝트 매니저.

  • 자동 작업 일지 (trigger 5종 자동 분류)
  • Today 일일 브리프 (워크데이 경계)
  • 변경 파일 로컬 diff
  • 코드 검색 — 의미(임베딩) · 심볼(AST) · 정확(텍스트)
  • 내장 PTY 터미널
  • 멀티-LLM AI 패널 (Anthropic · OpenAI · Gemini)
  • 인앱 자동 업데이트 (이번 릴리즈부터 — 새 버전이 나오면 앱 안에서 바로 설치)