v2.33.0
화면에서 「AI 가 만든 티」를 걷어냈습니다. 반짝이(✨) 아이콘이 29곳에 있었습니다 — 회고의 요약 버튼, 플래너의 AI 갱신, 설정의 LLM 탭, 새 프로젝트, 심지어 코드 화면의 포맷 버튼까지. 이제 아이콘은 그 자리의 동작을 말합니다(포맷은 줄맞춤, 초안은 펜, 갱신은 회전 화살표, 새 프로젝트는 폴더, 모델은 칩). 오늘 현황의 지표 타일 8장은 색 네모 안 아이콘 대신 선화 하나를 두고, 색은 의미가 있을 때만 씁니다 — 에러 사이클이pnpm create vite이 아닐 때만 붉고, 주 지표 하나만 강조색입니다. 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 도undefined패치만큼 새것이 됐습니다. 앱을 새로 켜면 알아서 받아 두므로 누를 버튼은 없습니다.
대화 제목이 방금 친 말을 따라다니지 않습니다. 지금까지는 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개였습니다. 앱이 세션에 붙이는 이름표와 에이전트가 일지에 적는 이름표가 서로 다른 방언이라 두 집합이 영원히 겹치지 않았고, 그래서 「기록된 파일」이 늘 공집합이었습니다. 이제 판정을 하루 단위 커버리지로 바꿔 이름표와 무관하게 맞춥니다. 미리보기 앱이 사진을 저장할 때 잠깐 생겼다 사라지는 임시 파일, 다른 프로젝트의 기계 생성물이 「변경」으로 잡히던 것도 함께 걸러냅니다.
세션마다 나오던 대조 숫자(일치·겹침)가 늘undefined이던 것도 살렸습니다. 일지는 설명하는 작업보다 나중에 쓰이기 때문에 세션이 닫힌 뒤에 도착하는 일이 예사인데, 앱은 세션 구간 안에 든 일지만 그 세션의 것으로 셌습니다. 이제 일지가 쓰인 시각 이전에 시작한 마지막 세션으로 귀속시킵니다 — 실제 하루치로 맞춰 보니 죽어 있던 숫자가 겹침 0.73~0.93 으로 살아났습니다. 세션이 어떤 일지를 낳았는지도 세션 기록에서 바로 보입니다.
터미널을 켜 둔 채 다른 프로젝트 탭에 갔다 오면 화면이 잘린 채 굳던 것을 고쳤습니다. 에이전트는 계속 답하고 있는데 보이는 것만 멈춰 있어 죽은 줄 알기 쉬웠습니다. 안 보이는 동안 터미널이 자기 높이를undefined으로 알고 있었던 것이 원인입니다. 이제 탭이 다시 보이는 순간 크기를 다시 재고 마지막 줄로 따라붙습니다.
일지가 쌓일수록 무너지던 「변경 diff」의 파일 목록을 다시 짰습니다. 일지가 네댓 개만 돼도 그룹이 전부 펼쳐진 채 이어 붙어 스크롤이 끝없이 길어졌고, 경로는 폭이 모자라 끝에서 잘려 정작 파일명이 사라졌습니다. 이제 그룹을 접을 수 있고(셋 이상이면 보고 있는 파일이 든 그룹만 펼칩니다), 좁아지면 디렉터리부터 줄고 파일명은 끝까지 남습니다. 파일이 여덟 개를 넘으면 필터가 생깁니다. 작업 일지 화면의 변경 파일 목록도 같은 규칙으로 정리했습니다 — 오른쪽 위를 채우던 '칩 벽' 대신 지금 열어 둔 파일 한 줄만 남습니다.
Today 화면과 사이드바의 눈에 걸리던 것들을 함께 손봤습니다. 링의 「라인 변화」는 값을 채우는 경로가 아예 없어 늘undefined이었고,undefined은 점 하나로 그려져 「변화 없음」이 아니라 「고장」으로 읽혔습니다 — 이제 일지마다 실제로 바뀐 줄 수를 세어 싣습니다. 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 로).
- 턴 영수증 — 턴이 끝나면 "도구undefined· 파일undefined· 명령undefined· 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 래퍼의 이중 주입 경로 제거. 영어 템플릿(configagents.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)
- 인앱 자동 업데이트 (이번 릴리즈부터 — 새 버전이 나오면 앱 안에서 바로 설치)