# 변경 내역 이 프로젝트의 주요 변경 사항을 기록합니다. [English changelog](CHANGELOG.en.md) 형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/) 를 따르고, 버전은 [유의적 버전](https://semver.org/lang/ko/) 을 따릅니다. ## [Unreleased] ## [0.82.0] - 2026-11-06 ### 추가 - 타이머마다 실행되는 소속 세션을 잡 카드와 같은 규칙으로 표시합니다. 현재/전체 세션 필터와 관계없이 이름이 보이고, 알려진 이름을 누르면 그 대화로 이동합니다. 이름을 모르면 세션 좌표를 표시하며, 목록 범위는 기존 상단 필터를 그대로 따릅니다. - 셸/프로세스 카드는 새로 나타날 때 접혀 있고, 잡 카드처럼 머리줄 전체를 누르거나 Enter·Space로 펼치고 접습니다. 별도 접기 버튼을 없앴으며, 접혀도 작업이름·상태·경과시간과 중지 버튼(또는 중지불가 안내)은 머리줄에 남습니다. 명령·출력은 본문에 유지하며, 중지 액션·텍스트 드래그는 접기와 분리됩니다. - 백그라운드 패널의 타이머 묶음도 제목을 누르거나 Enter·Space로 접고 펼칠 수 있습니다. 접힌 제목에도 현재 범위의 개수가 보이며, 접힘은 브라우저에 기억합니다. 기본은 펼침이며 타이머 실행·알림·멈추기는 바뀌지 않습니다. - 파일 읽기(Read) 카드에도 쓰기·수정 카드와 같은 경로 동작이 생겼습니다. 경로를 누르면 그대로 복사되고, ↗는 비서가 실행 중인 컴퓨터의 기본 앱으로 열고, ⤢는 지금 디스크의 파일을 보여 줍니다(읽은 당시 내용은 카드 출력에 남습니다). - `/model`에서 현재 대화에 적용되는 모델 설정을 확인하고, 대시보드와 같은 프로파일 목록에서 모델 호출 없이 선택할 수 있습니다. 프로파일을 고르면 직접 지정한 모델은 해제되고 다음 일반 메시지부터 적용됩니다. 직접 지정만 해제하는 `/model reset`과 대화 선택까지 해제하는 기본값 사용은 구분됩니다. - 프로젝트 메뉴(대시보드 📁 칩·텔레그램 `/project`)에 «폴더 열기»가 생겼습니다. 비서가 실행 중인 컴퓨터에서 그 프로젝트 폴더를 엽니다. - 홈이나 플러그인의 커맨드에 `scope: projects` 를 달면 대화에 연결한 모든 프로젝트의 메뉴에 공통 항목으로 뜨고, 누른 프로젝트를 대상으로 실행됩니다. 같은 이름의 프로젝트 커맨드나 홈 커맨드가 있으면 그쪽이 먼저입니다. - 플러그인이 제공하는 셸 실행형 커맨드는 커맨드마다 처음 한 번 승인을 받고, 실행할 명령 줄이 바뀌면 다시 묻습니다. `confirm: true` 를 단 커맨드는 승인과 관계없이 매번 확인합니다. - 플러그인이 `handler:` 로 프로젝트 메뉴 항목을 자기 코드로 처리할 수 있습니다. 같은 항목은 겹쳐 실행되지 않고 `/stop` 으로 멈출 수 있습니다. - 켜진 플러그인 폴더의 `hooks/hooks.json`(Claude Code 플러그인과 같은 형식)에 든 훅이 설치·켜기만으로 실행됩니다. 홈·프로젝트 훅 다음에 실행되므로 사용자 훅이 먼저 막으면 실행되지 않고, 출력에는 어느 플러그인의 훅인지 표시가 붙습니다. - `/status`·`/plugins`·대시보드 인벤토리에서 플러그인별 훅과 그 상태를 볼 수 있습니다. 플러그인을 끄거나 지우면 다음 호출부터 그 훅이 멈춥니다. - 기본 스킬 `incident-response` 를 추가했습니다. 작업이 안전 경계를 넘었을 때(비밀 파일 접근, 승인 없는 삭제·외부 발송 등) 확산을 막고 사실과 영향을 구분한 뒤, 원인에 맞는 최소한의 개선을 제안하고 승인받은 범위에서 조치·검증합니다. 관련 지침은 기존 `confirm_feedback` 으로 필요할 때만 정리합니다. ### 변경 - 텔레그램에서 연달아 보낸 메시지와 첨부를 잠시(기본 2.5초, 최대 6초) 모아 한 번에 답합니다. 그만큼 답이 늦게 시작되며, 슬래시 명령과 버튼 답은 기다리지 않습니다. 텔레그램 플러그인 설정에서 기다리는 시간을 바꾸거나 0으로 끌 수 있습니다. - 매니저·서브에이전트의 결과를 받을 때, 맡긴 필수 조건이 실패했거나 확인되지 않았으면 완료로 보지 않는다는 판정 기준을 함께 전달합니다. - 모델을 따로 설정하지 않았을 때 쓰는 Codex 기본 모델을 받은 목록의 첫 모델 대신 공식 Codex와 같은 기준(모델 목록의 우선순위와 표시 여부)으로 고릅니다. 이 정보가 없거나 마지막 조회 성공 후 7일이 지났으면 내장 기본값을 씁니다. 직접 지정한 모델과 쓸 수 있는 프로파일(대화별 `/model` 선택 포함)은 그대로이며, 기본값으로 돌아갈 때만 새 기준이 적용됩니다. ### 제거 - 번들 자가성장(`self-growth`) 플러그인을 뺐습니다(0.71.0부터 기본으로 꺼져 있었습니다). 실패에서 지침을 자동으로 만들거나 스킬 개선을 제안하던 기능과 그 모듈 카드가 사라집니다. `confirm_feedback` 으로 남기는 확정 지침과 이미 쌓인 지침은 그대로 쓰입니다. - 비서 기본 지침과 매 턴 확정 지침 머리글에서 자가성장 관련 문구를 뺐습니다. ### 수정 - 홈·프로젝트 `settings.json` 의 훅 항목 하나가 비어 있거나(`null`) `timeout` 이 잘못되면 같은 이벤트의 뒤 훅까지 실행되지 않던 문제와, 아주 큰 `timeout` 의 훅이 시작하자마자 종료되던 문제를 수정했습니다. 이제 잘못된 항목만 건너뛰며, `command` 가 없는 항목도 실행하지 않습니다. - 원격 MCP 서버의 로그인 상태를 저장하는 도중 그 서버를 지우면 지운 서버의 «로그인 필요» 기록이 남고, 로그인 전에 보낸 요청이 거절되면 방금 마친 로그인이 «로그인 필요»로 바뀔 수 있던 문제를 수정했습니다. Windows 에서는 저장하는 로그인 토큰과 `.env` 가 상위 폴더의 접근 권한을 물려받지 않고 현재 사용자·SYSTEM·Administrators 만 접근할 수 있으며, 이 제한을 걸 수 없으면 저장하지 않습니다. ## [0.81.0] - 2026-11-02 ### 추가 - 넓은 화면의 대시보드에서 메인 메뉴를 아이콘만 남긴 좁은 막대로 접을 수 있습니다. 접은 메뉴는 항목에 마우스를 올리거나 키보드로 초점을 옮기면 이름을 보여 주고, 접힘 여부는 브라우저마다 기억합니다. 모바일 화면은 바뀌지 않습니다. ### 변경 - 0.79.0부터 일시 중단했던 `notify_owner` 작업자 알림을 대시보드 설정의 «작업자 알림»에서 켤 수 있습니다. 기본은 꺼져 있습니다. 켜 두면 실행 중인 매니저·서브에이전트가 막힌 점을 알리고, 비서가 먼저 처리합니다. 꺼 두면 작업자에게 이 도구를 주지 않으며, 작업 완료 보고는 그대로 받습니다. - 작업자 알림을 켜 두었을 때, 비서가 내부에서 해결한 알림은 처리 내용을 별도 답변으로 보내지 않습니다. 대시보드에는 내부 처리 알림 한 줄을 남기고 처리 중 쓴 글은 내부 기록으로 표시하며, 이 알림은 대화 탭의 읽지 않은 메시지 수에 들어가지 않습니다. 새 승인·결정이 필요하거나 중요한 문제가 있으면 기존처럼 알리거나 묻습니다. 선택지를 보여 줄 수 없어 글로 대신 물은 경우에도 그 질문은 전달합니다. - 작업자 알림을 처리하는 동안 보낸 메시지는 그 처리와 별도로 답합니다. - `tiguclaw-bug-report` 스킬이 버그 신고 정리본을 만든 뒤 GitHub 이슈로 보낼지 한 번 묻습니다. 동의하면 같은 문제가 이미 올라와 있는지 먼저 찾아보고, 올릴 저장소·제목·본문을 보여 드린 뒤 승인을 받아 이미 연결된 GitHub 도구로 제출합니다. 그런 도구가 없으면 직접 제출하는 방법을 안내하고, 보안 취약점은 공개 이슈로 올리지 않습니다. - 내장 `verify` 스킬이 변경을 확인할 때 요청한 동작과 실제로 바뀐 부분에 맞춰 필요한 검사를 고르고, 같은 변경에서 이미 통과한 확인은 다시 돌리지 않습니다. 프로젝트가 필수로 정한 검사는 그대로 합니다. - 비서가 할 일 목록을 갱신할 때 실제로 시작했거나 결과를 기다리는 단계만 진행 중으로 표시하도록 안내를 다듬었습니다. ### 수정 - 비서가 답하는 중에 도착한 시스템 알림이 대화 기록을 다시 불러오면 사라질 수 있던 문제를 수정했습니다. - 대시보드에서 첨부 파일의 받기(⬇)를 한 번 누르면 같은 파일이 두 번 받아지던 문제를 수정했습니다. ## [0.80.0] - 2026-11-01 ### 추가 - 번들 `tiguclaw-bug-report` 스킬을 추가했습니다. 요청하면 티구클로 자체의 문제를 개발자에게 바로 전달할 수 있는 버그 신고 정리본으로 만듭니다. 제출·전송은 하지 않습니다. - 번들 `plugin-creator` 스킬을 추가했습니다. 플러그인 제작·수정, 위젯 만들기, 공유용 패키징을 돕고, 요청한 단계만 진행합니다. 설치·켜기·공유는 따로 요청할 때만 합니다. - 플러그인이 `host.ask` 에 `profile` 을 주면 모델 설정의 그 프로필로 모델을 부릅니다. 그 프로필 안의 모델만 쓰고 다른 프로필로 넘어가지 않으며, 고를 수 없는 이름이면 모델을 부르지 않고 실패를 돌려줍니다. 결과에는 보고된 경우 실제로 응답한 모델과 사용량이 실립니다. ### 변경 - 플러그인의 모든 `host.ask` 호출에 300초 시한이 걸리고, 그 호출을 부른 작업이 취소되면 함께 멈춥니다. - 플러그인의 `host.ask` 세션을 일반 대화 목록·검색에서 제외합니다. 30일간 사용하지 않은 `scope` 의 세션 연결 정보는 정리하며, 대화 기록 자체는 보존합니다. - macOS 에서 연결 오류 `EADDRNOTAVAIL` 이 로그에 나오면 그 순간의 TCP 상태별 수와 소켓을 많이 쓰는 프로세스를 로그에 남깁니다. 24시간에 한 번, 데몬 프로세스당 최대 3회까지이고 `TIGUCLAW_SOCKET_SNAPSHOT=0` 으로 끌 수 있습니다. 원인 진단용 기록이며, 이 오류를 일으키는 네트워크 문제를 해결하지는 않습니다. ### 수정 - Windows 에서 `/update` 가 의존성 설치·빌드를 마친 뒤 다시 시작하는데도 «약 5초 후 재시작» 으로 안내하던 문제와, 받을 커밋 없이 빌드만 맞춘 업데이트의 완료 표시가 같은 버전에서 같은 버전으로 나오던 문제를 수정했습니다. 이제 완료 표시는 당시 실행 중이던 빌드를 기준으로 시작합니다. - 백그라운드 작업의 완료·실패 알림을 끝내 보내지 못하면 다시 보낼 길이 없고, 재시작하면 그 결과·오류를 조회할 수 없던 문제를 수정했습니다. - 그 작업을 시작한 대화에 다음 일반 메시지(슬래시 명령 제외)가 오면 못 간 보고를 그 메시지가 온 곳으로 다시 보냅니다. 메시지당 최대 3건, 작업당 최대 3회이며, 앞서 일부가 도착했다면 같은 내용을 두 번 받을 수 있습니다. 예약·감시 전용 세션처럼 사람의 대화가 아닌 곳에서 시작한 작업은 자동으로 다시 보내지 않고 조회만 됩니다. - 결과·오류는 최근 끝난 작업 1,000건까지, 각 256,000자까지 데이터베이스(자동 백업 포함)에 저장돼 재시작 뒤에도 비서가 다시 읽고 대시보드 카드에서 볼 수 있습니다. 더 길면 앞부분만 남기고 잘렸다고 표시합니다. - 본 작업은 끝났는데 마무리 단계에서 실패한 작업이 실패 원인과 완성된 보고를 한 덩어리로 보여 주던 문제를 수정했습니다. 실패로 표시하되 원인과 보고를 나눠 보여 주고, 대시보드 카드에 보고 전달 상태를 표시합니다. - 홈 폴더에 설치한 플러그인이 매니페스트에 선언한 호스트로도 `host.fetch` 를 보내지 못하던 문제를 수정했습니다. - 플러그인이 부팅 때 받은 호스트(서비스·트리거·관찰자)의 `host.settings` 가 설정을 바꿔도 재시작 전까지 옛 값을 돌려주던 문제를 수정했습니다. 이제 읽을 때마다 현재 값을 돌려줍니다. - `host.fetch` 가 처음 주소만 선언과 대조하고 리다이렉트는 그대로 따라가, 선언한 호스트가 선언하지 않은 호스트로 리다이렉트하면 그곳으로 요청(307·308 이면 본문까지)이 나가던 문제를 수정했습니다. 이제 리다이렉트마다 요청 전에 선언과 대조해 선언 밖이면 오류를 돌려주고, 선언 안의 리다이렉트는 최대 5번까지 따라갑니다. - 백그라운드 패널을 스크롤하면 상태 필터 줄이 범위 토글 밑에서 잘려 겹쳐 보이던 문제와, 카드로 이동했을 때 카드 머리가 그 줄 밑에 가려지던 문제를 수정했습니다. - 다른 대화에 다음 메시지 제안이 도착하면 지금 보고 있는 대화의 제안이 사라지고, 지금 대화에서 보낸 메시지가 다른 대화의 제안을 끝내던 문제를 수정했습니다. ## [0.79.1] - 2026-10-30 ### 수정 - 받을 커밋이 없을 때 실행 중인 빌드나 디스크의 빌드가 현재 소스와 달라도 `/update`가 «이미 최신»으로 끝나던 문제를 수정했습니다. 이제 의존성 설치·재빌드 뒤 다시 시작해 맞춥니다. 이 프로세스를 다시 띄울 서비스를 확인하지 못하면 아무것도 바꾸지 않고 직접 맞추는 방법을 안내합니다. ## [0.79.0] - 2026-10-30 ### 추가 - 설정 화면에 비서의 홈 폴더 경로를 표시합니다. 경로를 복사하거나, 비서가 실행 중인 컴퓨터에서 그 폴더를 열도록 요청할 수 있습니다. - 백그라운드 패널에서 셸 카드를 한 번에 접거나 펼칠 수 있습니다. ### 변경 - 이번 릴리스에서는 `notify_owner` 작업자 알림 도구를 일시 중단합니다. 작업 완료·실패 알림, 결과 합류와 작업자 지시는 그대로 유지합니다. - 온보딩을 다시 실행하면 기존 설정과 인증을 다시 만들지 않고 이어서 진행합니다. Windows에서는 설치를 다시 실행해도 같으며, Git이 없으면 동의를 받은 뒤 SHA-256을 확인한 앱 전용 Git을 준비하며, 시스템 PATH와 실행 정책은 바꾸지 않습니다. - Windows에서 CLI 업데이트가 이 홈의 데몬 실행 여부를 확인하지 못하면 의존성 설치를 시작하지 않고 멈춥니다. - 번들 `harness` 스킬은 재사용할 서브에이전트 팀을 만들 때만 쓰도록 범위를 좁혔습니다. 일회성 위임에는 이 스킬을 쓰지 않습니다. - 비서 기본 지침의 승인 규칙에서 «지난 대화·기록에서 찾은 승인을 이번 승인으로 쓰지 않는다» 구절을 뺐습니다. 파괴적·외부 영향 작업은 이전과 같이 작업마다 명시 승인을 받습니다. ### 수정 - 작업 중단이나 도구 호출 취소 신호가 전달되면 실행 중인 파일 검색(Glob·Grep)도 멈추고, 결과 없음이 아니라 취소로 알립니다. - 한글 등 ASCII가 아닌 첨부 파일 이름이 업로드·전송 중 지워지던 문제를 수정했습니다. - 프록시의 520 같은 HTML 오류 페이지가 오류 안내에 원문 그대로 실려 채팅에 제목·CSS가 보이던 문제를 수정했습니다. 답변 마크다운에서도 `style`·`title`·`script` 내용이 글자로 보이지 않으며, 작업 상태를 모르는 오류에서 «이어서 진행해줘»를 권하지 않습니다. - 바쁜 대화에서 대기 중인 선택지 답을 취소하면 그 질문이 «답함»으로 닫히지 않고 다시 열립니다(텔레그램 포함). - 서버가 거절하거나 대기 중에 취소된 선택이 대시보드 선택지 카드에 선택된 것으로 남던 문제를 수정했습니다. - 다른 탭의 선택지 답에 대한 대기 표시와 ✕ 취소가 엉뚱한 탭을 가리키던 문제를 수정했습니다. - 예약 작업처럼 대화 밖에서 실행된 작업이 낸 선택지가 대시보드 어느 탭에도 보이지 않던 문제를 수정했습니다. - 텔레그램·CLI에서 선택지로 고른 `/sessions`·`/fork` 명령이 그 대화방에 적용되지 않던 문제를 수정했습니다. - 모바일에서 머리글이 전체 화면 패널의 닫기(X) 버튼을 가로채던 문제와, 내용이 짧은 패널을 세로로 끌면 뒤 화면이 움직이던 문제를 수정했습니다. - 백그라운드 패널이 셸 출력의 끝을 최신 작업으로 오인하거나, 카드 안 스크롤·프로그램 스크롤 때문에 최신 작업 따라가기가 풀리던 문제를 수정했습니다. - `doctor`가 Codex 인증만 있는 설치를 인증 없음으로 진단하던 문제와, Windows에서 설치를 다시 실행했을 때 안내하던 업데이트 명령이 PowerShell의 `npx.ps1` 실행 정책에 막히던 문제를 수정했습니다. - Windows CLI 업데이트에서 의존성 설치나 복구가 실패하면 업데이트 직전의 `node_modules`로 되돌립니다. 되돌리지 못하면 그 사실과 백업 위치를 알립니다. 업데이트 뒤 데몬 재가동이 실패하면 이 백업을 지우지 않고 경로를 알립니다. - Windows에서 데몬 기동 확인에 실패하면 포트 조회 실패, 포트 미개방, 열렸다 닫힘, `/health` 응답 이상을 구분해 알립니다. 로그 초기화 전에 데몬이 종료되면 감독자가 비밀 값을 가린 오류 끝부분을 남깁니다. - Windows에서 화면 조작 전에 사용자 유휴 시간을 확인하지 못하면, 원문 없이 실패 종류와 종료 정보만 로그에 남깁니다. 이때 조작을 막는 동작은 그대로입니다. - `stop`과 Windows 업데이트 안내가 확인하지 않은 등록·재가동 상태를 말하던 문제를 수정했습니다. ### 보안 - 보안 권고가 나온 전이 의존성 `@hono/node-server`를 1.19.17에서 2.1.3으로 올렸습니다([GHSA-rmxm-3fg6-px4f](https://github.com/advisories/GHSA-rmxm-3fg6-px4f) — `serveStatic`이 요청 경로를 한 번 더 디코딩해 정적 경로의 미들웨어를 우회할 수 있음). ## [0.78.0] - 2026-10-28 ### 추가 - 백그라운드 자식 작업 카드에 부모 매니저 카드로 바로 이동하는 버튼을 추가했습니다. - 이번 버전부터 기록된 선택지의 질문·보기·설명도 대화 검색으로 찾을 수 있습니다. ### 변경 - 내부 작업 알림은 자동 진행 보고와 카드의 상시 요약에 노출하지 않고, 작업 상세에서 확인하도록 변경했습니다. - 대화 입력창의 정보 패널이 펼쳐졌을 때 접기 버튼을 오른쪽 위에 표시합니다. - Codex 무진전 중단 로그에 본문 없이 항목 종류·상태·수신 시각을 기록해 진단을 보강했습니다. - 텔레그램에서 답변 사본·자동 작업 알림과 다른 대화의 응답·선택지에 출처 대화를 표시합니다. ### 수정 - 텔레그램 선택지 메시지에 일반 답글을 달면 질문한 대화로 돌아가며, 대시보드의 답글 인용에서 선택지 원문으로 이동할 수 있습니다. - 텔레그램에서 제시한 선택지가 대시보드에도 표시되며, 여러 채널에서 같은 질문에 답해도 한 번만 처리합니다. ## [0.77.0] - 2026-10-26 ### Added - **매니저·에이전트가 작업을 시작한 쪽만 풀 수 있는 막힘을 한 줄로 알리고 하던 일을 계속합니다.** 알림은 그 작업을 시작한 대화나 매니저에게 갑니다. 백그라운드 패널의 작업 카드에는 가장 최근 알림이 보이고, 대화에서 시작한 매니저라면 답이 없는 알림이 진행 알림에도 한 번 실립니다. 답은 그 작업에 지시로 전달되고, 알림은 작업당 세 번까지입니다. ### Changed - **대시보드 머리글의 이름 옆에는 버전만 보입니다.** - **비서의 기본 지침이 다른 대화의 기록은 사용자가 그 대화를 가리키거나 연결해 달라고 할 때만 찾아보도록 바뀌었습니다.** «전에»·«그거» 라는 말만으로는 다른 대화를 뒤지지 않고, 지금 요청만으로 할 수 있으면 바로 진행합니다. 예전 대화에서 받은 승인은 이번 승인으로 쓰지 않습니다. ### Fixed - **OpenAI 모델에서 매니저 작업이 한 번 실행된 뒤로 메인 대화가 «Duplicate tool names» 오류로 답하지 못하고, 메인 대화가 먼저 실행되었으면 매니저가 서브에이전트에게 지시할 수 없던 문제.** - **대시보드에서 비서 답에 단 답글의 «↩ 원문» 이 눌리지 않던 문제.** 이 버전 이후에 보낸 답글부터 적용됩니다. - **서브에이전트가 읽지 못하고 돌려준 지시가 백그라운드 패널에 그 서브에이전트의 지시로 보이던 문제.** 이제 «반영 못 하고 돌려줌» 으로 보입니다. - **서브에이전트의 결과나 돌려준 지시가 매니저에게 새 지시처럼 전달되던 문제.** 셸 출력을 기다리던 매니저가 그 때문에 대기를 끝내거나, 반영할 지시가 도착한 것으로 처리했습니다. - **원격 MCP 서버의 저장된 인증이 다른 인가 서버에 묶여 있으면, 토큰 만료 직전에 호출마다 갱신을 다시 시도하면서 로그는 남기지 않던 문제.** 이제 만료 뒤 다시 로그인이 필요하다는 경고를 한 번 남깁니다. - **"텔레그램에도 보내기" 를 켜 둬도, 대시보드 대화에 건 파일 감시·스케줄·타이머의 답이 텔레그램에 가지 않던 문제.** 그 대화를 마지막으로 텔레그램에서 주고받았을 때 생겼습니다. - **대시보드 대화를 새로고침하면 도구 단계에 다른 턴의 출력이 보이던 문제.** 여러 턴이 도구를 쓴 대화에서, 펼친 도구 단계에 앞선 턴의 같은 순서 도구 출력이 붙어 있었습니다. 이미 남은 기록도 다시 열면 제 출력으로 보입니다. ## [0.76.0] - 2026-10-25 ### Added - **백그라운드 셸에 설명이 보입니다.** 비서가 셸을 띄우며 적은 설명이 «백그라운드 작업» 위젯 항목과 백그라운드 패널 셸 카드 맨 위에 나옵니다. 명령·폴더·시간·출력 표시는 그대로입니다. - **«백그라운드 작업» 위젯의 매니저·에이전트 항목에 경과 시간이 보입니다.** - **답글로 보낸 메시지 카드 위에 원문 앞부분이 보입니다.** 누르면 원문으로 이동합니다. 이 버전 이후에 보낸 답글부터 보입니다. - **입력창 위 정보를 한 번에 접을 수 있습니다.** 태그 줄 오른쪽 ▾ 를 누르면 태그·프로젝트·답글·첨부·백그라운드 표시가 접히고, 숨은 것은 맨 윗줄에 작은 표시로 남습니다. 그 표시나 ▴ 를 누르면 다시 펼쳐집니다. 처음에는 펼쳐져 있고, 고른 상태는 그 브라우저에 기억됩니다. 휴대폰에서는 «작업 중» 표시가 입력창 위 맨 윗줄에 나옵니다. - **구독 한도로 멈춘 일을 한도가 풀린 뒤 그 대화에서 자동으로 이어 갈 수 있습니다(기본 꺼짐).** 대시보드 **설정 → 한도 자동 이어가기** 에서 켜고 끕니다(`settings.json` 의 `"limitResume": { "enabled": true }` 와 같은 값). 끈 뒤에도 이미 예약된 이어 하기는 실행됩니다. 멈춘 자리에 언제 이어 가는지 안내가 붙고, `/stop` 이나 백그라운드 패널에서 예약을 취소할 수 있습니다. - **매니저가 자기가 띄운 서브에이전트에게 실행 도중 지시를 더할 수 있습니다.** 그 매니저가 띄워 지금 실행 중인 작업에만 전달되고, 받는 쪽에는 사용자 지시가 아니라 매니저의 지시로 표시됩니다. 백그라운드 패널에는 «'매니저 이름' 의 지시» 로 보입니다. ### Changed - **«백그라운드 작업» 위젯이 기본으로 대화별로 묶어 보여 줍니다.** 위젯 메뉴에서 종류별 보기로 바꿀 수 있고, 고른 보기는 기억합니다. - **위젯 항목을 누르면 백그라운드 패널이 그 카드의 윗부분을 보여 줍니다.** 카드를 펼치거나 접지 않고, 이어지는 갱신에 스크롤이 끌려가지 않습니다. - **백그라운드 작업 진행 알림에 직전 알림 이후의 파일 쓰기·커밋 수가 붙습니다.** - **답글 줄이 입력창 바로 위에 나옵니다.** 백그라운드·셸 표시는 그 위에 한 줄로 나란히 놓입니다. ### Fixed - **대시보드 메뉴의 플러그인 개수가 늘 0 으로 보이던 문제.** - **다른 매니저가 기다린 매니저의 완료 보고가 그 매니저를 띄운 대화에 오지 않던 문제.** - **비서가 완료 보고를 처리하다 띄운 매니저가 대시보드 대화로 파일을 보내지 못하던 문제.** - **끝난 작업·셸 카드의 경과 시간이 계속 늘어나던 문제.** 이제 끝난 시각에서 멈춥니다. - **끝난 매니저·에이전트 카드에 마지막으로 쓰던 도구 줄이 남아 있던 문제.** - **«백그라운드 작업» 위젯이 목록을 불러오는 동안 «없음» 으로 보이던 문제.** - **휴대폰 화면에서 대화 맨 아래를 보는 중에 입력창 위 줄이 늘어나면 마지막 메시지가 입력창에 가리던 문제.** - **작업이 실제로 진행됐는데 진행 알림이 진행이 없다고 요약하던 문제.** - **모델이 하나뿐인 프로파일이 한도에 걸렸을 때도 «다른 모델로 자동 전환합니다» 라고 안내하던 문제.** - **`UserPromptSubmit` 훅이 도는 동안 보낸 `/stop` 이 «지금 진행 중인 작업이 없습니다» 라고 답하고 턴을 멈추지 못하던 문제.** - **기존 홈에서 `tiguclaw init` 을 다시 실행하면 모델 설정을 건드리지 않았는데도 «Models = auto» 로 안내하던 문제.** - **macOS 에서 서비스로 도는 데몬이 화면을 조작할 때 입력 사이 대기와 `wait` 가 정한 것보다 길어지던 문제.** - **Windows 에서 셸 출력의 한글 등 영어가 아닌 글자가 깨지던 문제.** `ping`·`dir` 같은 콘솔 프로그램과 cmd 오류 출력이 이제 제대로 보입니다. - **Windows 에서 PowerShell 오류 문장이 중간에서 잘려 보이던 문제.** - **대시보드 답을 텔레그램으로도 받을 때, 텔레그램에서 그 답에 단 답글이 원문과 연결되지 않던 문제.** 이제 대시보드에서 그 답글의 원문 표시를 누르면 원문으로 이동하고, 비서도 어느 메시지에 단 답글인지 압니다. 이 버전 이후에 받은 답부터 적용되며, `/stop` 으로 멈춘 뒤의 안내에 단 답글은 종전처럼 연결되지 않습니다. ### Security - **보안 권고가 나온 의존성을 수정된 버전으로 올렸습니다.** 0.75.0 에 들어 있던 zod([GHSA-mrhx-c7xc-m3w5](https://github.com/advisories/GHSA-mrhx-c7xc-m3w5) — 큰 컬렉션을 검증하다 메모리를 소진할 수 있음)와 body-parser([GHSA-27r3-jxmh-p828](https://github.com/advisories/GHSA-27r3-jxmh-p828) — 압축된 요청 본문 뒤에 붙은 바이트로 서비스 거부)의 권고가 대상입니다. 함께 Claude Agent SDK 를 0.3.285 로, MCP SDK 를 1.32.2 로 올렸습니다. - **원격 MCP 서버의 OAuth 토큰을 자동으로 갱신할 때, 저장된 토큰이나 클라이언트 정보가 다른 인가 서버의 것으로 기록돼 있으면 refresh 토큰과 클라이언트 정보를 보내지 않습니다.** 이 경우 아직 만료되지 않은 액세스 토큰은 그대로 쓰지만, 만료되거나 서버가 그 토큰을 거절하면 다시 로그인해야 합니다. 인가 서버 기록이 없는 기존 연결은 다시 로그인하지 않아도 갱신되고, 갱신에 성공한 인가 서버가 기록됩니다. ## [0.75.0] - 2026-10-22 ### Added - **위젯 패널.** 어느 화면에서나 헤더의 🧩 버튼으로 오른쪽 위젯 패널을 엽니다. 데스크톱에선 백그라운드 패널과 나란히 펼칠 수 있고, 위젯 위의 손잡이를 끌어 순서를 바꿉니다. - **한 번 울리는 타이머.** «10분 뒤 빌드 확인해 줘» 처럼 부탁하면 지금부터 1분 이상 뒤에 한 번 울리고 지워집니다. 스케줄 목록에는 쌓이지 않습니다. - **Edit·Write 카드에서 지금 파일을 볼 수 있습니다.** ⤢ 를 누르면 지금 디스크의 그 파일이 문법 색과 함께 열리고, 바뀐 곳이 파일의 한 곳과 정확히 일치하면 그 자리에 지운 줄(빨강)과 새 줄(초록)을 함께 보여 줍니다. 일치하지 않으면 바뀐 조각을 위에 따로 보여 줍니다. 비밀 파일(`.env`·`.git`·`.ssh`·`.aws`)은 열리지 않습니다. - **`tiguclaw repair` (Windows).** 예약작업에 내 계정 권한만 넣어 주는 복구 명령입니다. 다른 설정은 바꾸지 않습니다. ### Changed - **새로 만드는 파일 감시는 감시를 만든 대화에서 처리됩니다.** 그 대화의 앞선 얘기(정정 포함)를 알고 판단하고, 감시가 시작한 작업도 그 대화에서 멈출 수 있습니다. 이미 있는 감시는 그대로 두고, «감시를 이 대화로 옮겨 줘» 하면 옮깁니다. - **새로 만드는 스케줄도 만든 대화에서 처리됩니다.** 파일 감시와 같습니다. 이미 있는 스케줄은 그대로이고, «스케줄을 이 대화로 옮겨 줘» 하면 옮깁니다. - **데몬이 꺼져 있던 동안 지난 스케줄은 켜진 뒤 한 번 늦게 실행됩니다.** 24시간 안의 마지막 한 번만 돌고, 그보다 오래된 것은 건너뜁니다. - **홈 화면의 위젯 영역이 위젯 패널로 옮겨졌습니다.** 놓아 둔 위젯과 순서는 그대로 패널에 나옵니다. 백그라운드 버튼도 채팅 화면만이 아니라 어느 화면에서나 헤더에 있습니다. - **«백그라운드 작업» 위젯이 백그라운드 패널을 간략하게 보여 줍니다.** 타이머·매니저/에이전트·셸을 묶음과 대화별로 보여 주고, 항목을 누르면 백그라운드 패널의 그 카드로 갑니다. 위젯마다 우클릭 메뉴가 있고 거기서 그 위젯만 끌 수 있습니다. - **설치할 때 모델을 묻지 않고, 기본 모델 프로파일은 하나입니다.** 아무것도 설정하지 않으면 모든 작업이 로그인한 공급자의 최신 모델(Claude 는 opus)로 돕니다. 다른 모델을 쓰려면 비서에게 말하면 `settings.json` 에 저장되고, 저장한 것이 이깁니다. 같은 이름의 프로파일이 없는 등급(`low` 등)은 기본 프로파일로 갑니다. 대시보드에서 기본 등급(mid 등)만 골라 두었다면 이제 기본 하나로 돕니다. - **요약·분류 같은 짧은 내부 호출은 `low` 프로파일을 씁니다(없으면 기본).** `nano` 프로파일을 먼저 찾던 규칙은 없앴습니다 — 거기에 가벼운 모델을 두었다면 `low` 로 옮기세요. ### Fixed - **JSON·YAML 의 키와 값이 같은 색이라 문법 색이 없는 것처럼 보이던 문제.** 키를 다른 색으로 칠합니다. - **Windows 에서 codex 로그인(`codex-auth`)이 브라우저 대신 파일 탐색기를 열던 문제.** - **대시보드에서 검색 패널을 연 채로 채팅을 스크롤하거나 누를 수 없던 문제.** - **부팅 때 도는 스케줄(`reboot`)을 등록하면 실제로는 문제가 없는데 «스케줄 실행 실패» 알림이 뜨던 문제.** - **파일 감시가 시작한 백그라운드 작업의 완료 보고가 감시의 배달 목적지로 가지 않고 사라지던 문제.** 보고를 못 보냈을 때 «보냄» 으로 기록하던 것도 고쳐, 이제 대신 보내기를 시도하고 그것도 실패하면 실패로 남깁니다. - **모바일 대시보드에서 업데이트 버튼이 뜨면 헤더가 넘쳐 화면이 옆으로 밀리던 문제.** - **영어 화면에서도 일부 오류 안내가 한국어로 나오던 문제.** 설정·위젯·로그인·채팅 첨부 오류, 엔드포인트 기록, 텔레그램 첨부 안내, 압축 실패 줄이 이제 화면 언어를 따릅니다. - **Windows 에서 관리자 창으로 설치하면 이후 일반 창의 정지·업데이트·제거가 «Access is denied» 로 막히던 문제.** 이제 설치할 때 내 계정에 작업 권한을 줍니다. 이미 그렇게 설치된 경우는 관리자 창에서 `tiguclaw repair` 를 한 번 실행하면 됩니다. - **Windows 에서 정지·제거가 실제로 안 됐는데 «✅» 로 끝나던 문제.** 작업이 꺼지거나 지워진 것을 확인했을 때만 성공으로 표시하고, 아니면 이유와 고치는 법을 알려 줍니다. - **다른 계정이 받은 폴더에서 업데이트하면 «git 저장소가 아니다» 로만 나오던 문제.** git 이 거절한 실제 이유와 고치는 법을 함께 보여 줍니다. ## [0.74.0] - 2026-10-20 ### Added - **원격 MCP 서버(Streamable HTTP)를 연결할 수 있습니다.** 주소와 토큰 헤더로 등록하고, 토큰은 `${변수}` 로 적어 홈 `.env` 에 둘 수 있습니다. Claude·Codex·OpenAI 어느 모델이 답하든 같은 서버를 씁니다. - **브라우저 로그인이 필요한 원격 MCP 서버(OAuth)에 로그인할 수 있습니다.** 비서가 로그인 링크를 주고, 로그인을 마치면 연결됩니다. 다른 기기에서 로그인했으면 주소창의 주소를 `/mcp_login` 뒤에 붙여 보내면 됩니다. - **답글을 보내면 비서가 어느 메시지에 대한 답글인지 정확히 압니다.** 원문이 길어 가운데가 줄었으면 비서가 그 메시지 전문을 다시 읽어 확인할 수 있습니다(대시보드·텔레그램). - **파일 감시에도 스케줄처럼 이력 정책을 둘 수 있습니다.** 실행마다 새로 시작하거나 직전 N회만 이어가게 할 수 있고, 이미 등록한 감시도 다시 등록하지 않고 바꿀 수 있습니다. 기본은 지금처럼 계속 이어갑니다. - **컴퓨터 사용에서 F1~F20·CapsLock·숫자패드 키를 누를 수 있습니다.** Windows 에서는 F21~F24·Insert·PrintScreen·ScrollLock·Pause·NumLock·메뉴·한/영·한자·볼륨·미디어·브라우저 키도 됩니다. ### Changed - **설치를 마치면 대시보드가 채팅 화면으로 열리고, 구독 로그인 때 브라우저가 열립니다.** - **Codex 가 자주 쓰지 않는 도구와 직접 추가한 MCP 서버의 도구를 접어 두었다가 필요할 때 찾아 씁니다.** 매 요청의 입력이 줄어듭니다. 끄려면 홈 `.env` 에 `CODEX_TOOL_SEARCH=0` 을 넣으세요. ### Fixed - **Windows 에서 VBScript 가 꺼져 있으면 서비스가 자동으로 시작되지 않던 문제.** - **Windows 에서 데몬이 실행 중일 때 `install` 을 다시 하면 감독자가 두 개 실행되어 같은 데이터를 함께 쓰던 문제.** - **Windows 설치 스크립트가 오류에서 창을 바로 닫아 원인을 볼 수 없던 문제.** - **Windows 에서 업데이트 도중 서비스가 다시 시작되어 설치·되돌리기가 실패하던 문제.** - **OpenAI 모델에서 `/stop`·시간 초과가 빈 답의 성공으로 처리되고, 도구를 쓴 턴의 컨텍스트 사용량이 부풀려 보이던 문제.** - **Codex 답 끝에 작성용 메모가 섞여 나가던 문제.** - **대시보드의 📁 프로젝트 메뉴와 `/` 자동완성에서 커맨드 설명이 잘리던 문제.** - **stdio MCP 서버가 연결에 실패해도 로그에 원인이 남지 않던 문제.** 이제 그 서버가 남긴 오류 출력의 끝부분이 함께 기록됩니다. - **스케줄·파일 감시의 결과를 특정 대시보드 대화로 보내도록 지정해도 공통 대화에 표시되던 문제.** 이제 지정한 대화에 나타납니다. - **대시보드에서 긴 메시지에 답글을 보내면 원문의 앞부분만 비서에게 전달되던 문제.** 이제 앞과 끝(결론·질문)이 함께 전달됩니다. - **실행 차례를 기다리던 파일 감시를 지우거나 꺼도 한 번 더 실행되어 결과가 전달되던 문제.** - **파일 감시가 파일 변경을 사용자의 제출·승인으로 여겨 판단하던 문제.** 이제 감시 실행은 파일 변경으로 시작됐다는 것과 감시를 등록한 대화의 이력이 없다는 것을 알고 판단합니다. ## [0.73.1] - 2026-10-16 ### Fixed - **윈도우에서 설치할 때 지정한 포트·주소를 `.env` 에 빈 값으로 두면, 서비스는 정상인데 `onboard`·`doctor` 가 다른 포트를 확인해 실패로 표시하던 문제.** ## [0.73.0] - 2026-10-16 ### Added - **텔레그램을 대시보드에서 연결합니다.** 플러그인 → 텔레그램 채널 설정에 봇 토큰을 넣고 재시작한 뒤, 봇에게 한 번 말을 걸고 «내 ID 찾기»에서 자기 이름을 고르면 됩니다. `.env` 를 직접 고칠 필요가 없고, 토큰은 채팅을 거치지 않습니다. - **처음 여는 빈 대화에 예시 질문이 나옵니다.** 누르면 입력창에 채워지고, 보내기는 직접 합니다. - **플러그인 설정 화면에서 비밀값을 넣고 바꿀 수 있습니다.** 값은 홈 `.env` 에 저장되고 화면에 다시 나오지 않습니다. 플러그인은 `editable` 로 화면에서 고칠 수 있는 칸을, `suggest` 로 값 후보를 내줄 수 있습니다. ### Changed - **외부 MCP 서버를 등록·변경·제거하면 재시작 없이 다음 턴부터 반영됩니다.** Codex·OpenAI 모델에서도 Claude 처럼 바로 붙습니다. - **`tiguclaw onboard` 는 서비스가 실제로 응답하고 점검에 막는 문제가 없을 때만 완료로 표시합니다.** 끝나면 대시보드 주소를 보여주고, 이 기계에 브라우저가 있으면 바로 엽니다. 텔레그램은 선택이며 점검에서도 실패로 표시하지 않습니다. - **계정이 없거나 만료돼 답을 못 하면 다시 로그인하는 방법을 안내합니다.** ### Fixed - **대시보드에서 비서가 보낸 파일이 원래 이름이 아니라 저장 이름으로 받아지던 문제.** 한글 이름도 그대로 받아집니다. - **꺼 둔 플러그인의 스킬·에이전트·커맨드가 비서의 목록에 남던 문제.** - **끊긴 외부 MCP 연결이 재시작 전까지 다시 붙지 않던 문제(Codex·OpenAI).** 대상 앱을 다시 켜면 다음 턴에 붙습니다. - **설치·업데이트가 SQLite 네이티브 모듈이 빠진 것을 놓치던 문제.** 이제 실제로 열어 보고, 안 열리면 스스로 다시 빌드합니다. - **전용 Node 로 설치한 맥·리눅스에서, 설치가 멈춘 뒤 안내한 재시도 명령이 새 터미널에서 실행되지 않던 문제.** - **`.env` 에 `DASHBOARD_HOST=` 처럼 값을 비워 두면 대시보드가 모든 네트워크 주소에 열리던 문제.** 이제 빈 값은 기본값으로 읽어 이 기계 안에서만 열립니다. 브리지 포트를 비워 두면 데몬이 시작하지 못하던 것도 함께 고쳤습니다. - **설정 안내가 실제 설정과 어긋나던 문제.** 설정 마법사는 onboard 도중 손으로 할 단계를 늘어놓지 않고, 점검(`doctor`)은 브리지 주소 설정을 따릅니다. ## [0.72.0] - 2026-10-15 ### Added - **대화를 갈라낼 수 있습니다.** 세션 탭 메뉴 «여기서 갈라내기»나 텔레그램 `/fork` 로 지금까지의 대화를 물려받은 새 대화를 만들어, 원래 대화는 그대로 두고 다른 방향을 시도합니다. - **특정 답에서 갈라낼 수 있습니다.** 비서 답 카드 메뉴 «여기까지로 갈라내기»는 그 답까지만 물려받습니다. 이미 요약된 오래된 답에서는 아직 갈라낼 수 없습니다. - **가지의 결론을 원래 대화로 보냅니다.** 가지 탭 메뉴나 텔레그램 `/fork back` 으로 보내면 가지의 비서가 정한 것과 매니저 작업 결과를 정리해 넘기고, 원래 대화의 비서가 받은 내용을 알려 줍니다. 다시 보내면 지난번 뒤에 생긴 것만 보냅니다. ### Fixed - **긴 Codex·OpenAI 대화에서 짧은 메시지에도 답이 나오기까지 몇 분씩 걸리던 문제.** 대화가 모델이 한 번에 읽을 수 있는 분량 안이면 이력 정리를 답한 뒤로 미룹니다. ## [0.71.0] - 2026-10-15 ### Added - **비서가 사용자의 반응으로 행동을 고칩니다.** 답에 대한 교정이나 마음에 든다는 반응을 한 줄 규칙으로 정리해 다음 대화부터 지킵니다. 판단이 분명하면 바로 기록하고 알려 주며, 애매할 때만 묻습니다. 규칙은 사용자가 말한 언어로 적습니다. - **오래 걸리는 백그라운드 작업이 진행 상황을 알려 줍니다.** 기본 1시간마다 한 번 보내고, `settings.json` 의 `jobs.progressNotice` 에서 끄거나 간격(10분~24시간)을 바꿀 수 있습니다. ### Changed - **`/stop` 은 진행 중인 대화 턴만 멈춥니다.** 백그라운드 작업은 계속 돌고, 몇 건이 남아 있는지 알려 줍니다. 작업을 멈추려면 그 작업을 지목해 말씀하세요. - **백그라운드 작업 카드의 중지는 ⋯ 메뉴에서 합니다.** 멈추기 전에 한 번 확인합니다. - **자가성장 플러그인이 기본으로 꺼집니다.** 반응에서 배우는 일은 이제 비서가 직접 합니다. 계속 쓰려면 대시보드의 플러그인 화면에서 켜세요. 이미 쌓인 지침은 그대로 쓰입니다. ### Fixed - **스케줄·파일 감시 작업이 같은 대화의 다른 작업과 동시에 돌던 문제.** 같은 알림이 두 번 오는 원인이었습니다. - **설정 파일 없이 기본 모델 프로파일(high·mid·low)로 쓸 때 배지 색·기본 프로파일·세션 프로파일이 지정되지 않거나 적용되지 않던 문제.** 화면에 보이는 기본 프로파일이 실제와 다르던 문제도 함께 고쳤습니다. - **맥·리눅스 대시보드에서 Claude 구독 로그인이 끝나지 않던 문제.** 로그인 코드를 넣어도 반응이 없거나 발급된 토큰이 거부됐습니다. 로그인 안내도 사용자의 언어로 나옵니다. - **백그라운드 작업 점검이 실행 중인 도구를 보지 못하던 문제.** 긴 명령 하나만 도는 작업을 멈춘 것으로 잘못 볼 수 있었습니다. ## [0.70.1] - 2026-10-13 ### Fixed - 답이 온 세션을 눌러 들어가면 같은 답이 두 번 이어서 보이던 문제를 고쳤습니다. 새로고침하면 하나로 돌아오던 표시 문제입니다. - 백그라운드 작업 카드의 할 일 머리 줄을 눌러 접거나 펼 때 글자 커서가 남던 문제를 고쳤습니다. ## [0.70.0] - 2026-10-13 ### Added - **백그라운드 작업 카드에 할 일 목록이 보입니다.** 매니저·에이전트가 할 일을 적으면 «📋 할 일 완료/전체» 와 지금 하는 일이 한 줄로 나오고, 화살표를 누르면 항목 전부가 펼쳐집니다. ### Fixed - **Codex 가 웹 검색을 쓴 뒤 같은 검색을 계속 되풀이하던 문제.** 아침 브리핑 같은 스케줄 작업이 반복 상한에 닿을 때까지 이어져 크게 늦어질 수 있었습니다. - **하위 작업을 기다리는 매니저가 그 사이 보낸 지시를 받지 못하던 문제.** 이제 지시가 오면 바로 깨어나 반영합니다. - **텔레그램에서 다른 세션의 메시지에 답글로 이어 말한 뒤, 그 턴이 띄운 선택지를 누르면 답이 기본 세션으로 가던 문제.** - **Windows 에서 커맨드 파일을 바꿀 때 파일이 잠깐 잠겨 있으면 실패하던 문제.** 이제 짧게 다시 시도합니다. - **프로젝트 화면에서 작업 카드를 눌러 백그라운드 패널의 그 작업으로 가도, 패널이 다시 맨 아래로 내려가 그 카드가 안 보이던 문제.** ## [0.69.1] - 2026-10-12 ### Fixed - **등록된 프로젝트를 모두 대화에 연결하면 대시보드의 «+ 프로젝트» 버튼이 사라지던 문제.** 이제 늘 보이고, 누르면 새 프로젝트를 등록하는 법을 알려 줍니다. - **비서가 커맨드를 다른 묶음으로 옮기며 내용을 바꿀 때, 옛 파일을 지우지 못해도 등록됐다고 답하던 문제.** 이때는 옛 내용이 계속 쓰였습니다. 이제 실패를 그대로 알립니다. - **백그라운드 작업 결과를 보고할 때 대화와 다른 언어(일본어 등)가 섞이던 경우를 줄였습니다.** 매니저·에이전트에게 맡기는 작업 이름과 지시도 사용자의 언어로 쓰게 했습니다. ## [0.69.0] - 2026-10-11 ### Added - **Codex 가 응답 도중 서버 연결이 끊겨도 스스로 이어 갑니다.** 아직 아무것도 안 나왔으면 다시 보내고, 쓰던 중이면 끊긴 곳부터 이어 씁니다. 그래도 안 되면 종전처럼 «이어서 진행해줘» 로 안내합니다. - **커맨드를 하위 폴더로 묶을 수 있습니다.** `commands/aaa/bbb/ccc.md` 는 📁 칩 메뉴에서 aaa › bbb › /ccc 로 펼쳐지고(마우스를 올리거나 누르면), `/` 목록에도 묶음이 보입니다. 부르는 이름은 그대로 `/ccc` 입니다. 전에는 하위 폴더의 커맨드가 아예 안 보였습니다. - **비서가 커맨드를 묶어서 만들고 옮길 수 있습니다.** «배포 커맨드를 배포 묶음으로 정리해 줘» 처럼 부탁하면 됩니다(전역·프로젝트 커맨드 모두). ### Changed - **Claude 구독 한도가 이 설치가 쓰는 토큰의 계정 기준으로 보입니다.** 대화하며 받은 사용률을 먼저 쓰고, 이 기계의 Claude CLI 가 다른 계정으로 로그인돼 있으면 숫자 대신 그렇다고 알립니다. 오래된 값에는 측정 시각을 붙입니다. - **Windows 에서 Claude 구독 토큰 발급을 누르면 새 창에서 발급기가 열립니다.** 로그인만 하면 저장까지 끝납니다(터미널 `claude-auth` 와 같습니다). - **백그라운드 작업 카드에서 이름 없이 띄운 서브에이전트는 제목만 보입니다.** - **등록하지 않은 폴더로 일을 맡기면 그 폴더의 `.mcp.json`·훅은 끈 채로 진행하고, 켤지 먼저 묻습니다.** 남이 만든 레포의 설정만으로 명령이 실행되지 않게 하려는 것입니다. 프로젝트로 등록하면 켜집니다. - **비서가 실행하는 셸 명령에 데몬의 비밀값(토큰·API 키)을 넘기지 않습니다.** - **화면 조작에서 수식키를 누른 채 글자를 입력하는 동작은 거절합니다.** macOS 에서 다른 단축키로 바뀌어 실행되던 문제입니다. - **📁 칩 메뉴의 «PROJECT.md 보기» 가 «프로젝트 상세 보기» 로 바뀌었습니다.** 대화에 내용을 찍는 대신 프로젝트 화면에서 그 프로젝트를 엽니다. 텔레그램 `/project` 는 그대로입니다. ### Fixed - **같은 홈으로 데몬을 두 번 실행하면 두 번째가 먼저 실행 중이던 데몬의 작업과 셸을 멈추던 문제.** 이제 두 번째는 이유를 남기고 바로 종료합니다. - **홈 `.env` 에 적은 일부 설정(작업 시한·셸 등)이 무시되던 문제.** - **텔레그램:** 일시 장애 때 답장이 조용히 사라지던 문제(뒤에서 다시 보냅니다) · 재시작 뒤 이전 선택지 버튼이 새 질문의 값을 보내던 문제 · 수신이 멈춰도 알 수 없던 문제(이제 알립니다). - **Claude 의 세션·주간 등 이름이 붙은 사용 한도를 한도로 인식하지 못해 매 턴 다시 시도하던 문제.** 이제 Claude 가 알려 주는 해제 시각까지 쉬고 그 시각을 안내합니다. - **Codex:** 토큰 갱신이 겹치면 «다시 로그인» 이 잘못 뜨던 문제 · 도구를 쓴 뒤의 한도·인증 오류를 성공으로 처리하던 문제 · 과부하로 중간에 끊긴 답을 확정하던 문제. - **OpenRouter·Gemini·Ollama 등에서 도구를 10번 넘게 쓰면 작업이 끝나 버리던 문제.** - **OpenAI 호환 서버를 프로젝트에만 정의하면 그 서버로 연결하지 않던 문제.** - **작업 중에 보낸 추가 메시지가 그 턴이 실패하면 사라지던 문제.** - **비서의 셸 명령이 시한이나 `/stop` 에도 끝나지 않던 경우 · 검색(Grep) 결과가 크면 통째로 오류가 나던 문제 · `/update` 가 멈추면 다음 업데이트까지 막히던 문제.** - **선택지 «기타» 칸에서 Shift+Enter 로 줄을 바꿀 수 없고, 한글 입력 중 Enter 가 전송되던 문제.** - **파일 수정(Edit)이 `$&` 같은 글자가 든 내용이나 UTF-8 이 아닌 파일을 망가뜨리던 문제.** - **파일 감시:** 결과를 지정한 채널로 실제로 보냅니다 · 동시에 생긴 파일을 놓치던 문제. - **대시보드:** 늦게 도착한 대화 기록이 다른 탭에 섞이던 문제 · 첨부 파일이 스크립트로 실행될 수 있던 문제 · 커맨드가 많으면 📁 메뉴가 화면 밖으로 넘치던 문제 · 모바일에서 «프로젝트 상세 보기» 가 목록으로 가던 문제 · 홈이 이벤트마다 다시 그려지던 문제 · 입력하던 칸이 지워지던 문제 · 작업 ⏹ 가 확인 없이 멈추던 문제 · 모델 선택이 저장에 실패해도 바뀐 것처럼 보이던 문제 · 브라우저 시계가 빠르면 진행 중인 답이 사라지던 문제 · 기록을 불러오는 중 탭을 바꾸면 비서 이름이 기본값으로 남던 문제. - **플러그인 하나의 오류가 모든 대화를 멈추던 문제 · 꺼 둔 플러그인의 코드가 실행되던 문제.** - **자가 성장 지침 파일이 일시적인 읽기 오류로 통째로 지워질 수 있던 문제.** ## [0.68.0] - 2026-10-09 ### Added - **대화(세션)에 프로젝트 연결.** 대시보드 입력창 위 `+ 프로젝트`, 텔레그램 `/project`, 또는 «이 대화에 ○○ 연결해 줘» 로 등록된 프로젝트를 대화에 붙입니다. 여러 개를 붙일 수 있고, 붙인 프로젝트는 대화 내내 비서가 맥락으로 압니다. 그 프로젝트 전용 스킬·에이전트·MCP 도 비서가 그 폴더로 일을 맡겨 씁니다(맡긴 매니저도 연결을 물려받습니다). - **연결한 프로젝트의 커맨드를 그 대화에서 바로 씁니다.** 📁 칩을 누르면 그 프로젝트의 커맨드·`PROJECT.md`·연결 해제가 나오고, 대시보드 `/` 목록에도 프로젝트별로 보입니다. - **실행형 커맨드.** 커맨드 파일에 `run:` 을 적으면 비서를 거치지 않고 그 프로젝트 폴더에서 바로 실행하고 결과를 대화로 보냅니다(배포·빌드·테스트 버튼). `confirm: true` 면 실행 전에 묻고, `/stop` 으로 멈춥니다. «배포 커맨드 만들어 줘» 라고 하면 비서가 내용을 보여 드린 뒤 만듭니다. ### Changed - **새 설치의 기본 포트가 17010(대시보드)·17011(브리지)로 바뀝니다.** 윈도우에서 7010·7011 이 시스템 예약 범위에 걸려 대시보드가 갑자기 안 뜨는 일이 있었습니다. 이미 쓰던 설치는 업데이트 후에도 지금 포트를 그대로 씁니다. - **입력창 위 컨텍스트 태그에서 프로젝트가 빠졌습니다.** 프로젝트는 그 아래 줄에서 대화에 연결합니다. `#이름` 을 직접 쓰는 것은 그대로 됩니다. ### Fixed - **Claude 구독 한도가 «잠시 뒤 다시»만 계속 뜨던 것.** 그 기계의 Claude Code 로그인이 풀려 있으면 이제 로그인하라고 알려 주고, 로그인 뒤 새로고침하면 바로 반영됩니다. - **대시보드·브리지가 포트를 열지 못해도 데몬이 «준비됨»만 남기던 것.** 이제 이유(윈도우 예약 범위·다른 프로그램)와 바꿀 설정을 로그와 알림으로 알리고, `tiguclaw doctor` 가 윈도우 예약 범위에 걸린 포트를 미리 경고합니다. - **Windows 에서 데몬을 멈추거나 재시작·업데이트할 때, 같은 포트 번호를 앞부분으로 쓰는 다른 프로그램(예: 3000 이면 30000)이나 그 포트를 잡은 다른 앱까지 강제 종료할 수 있던 것.** 이제 이 인스턴스의 프로세스만 멈춥니다. - **Windows 업데이트가 데몬을 멈추지 못했는데도 설치를 진행하던 것.** 이제 설치 전에 멈추고, 돌고 있던 버전을 그대로 둡니다. - **파일 감시에 이름 필터(예: `.txt`)를 주면 아무 변경도 감지하지 못하던 것.** - **외부 MCP 서버를 동시에 여러 개 추가하면 일부가 설정에서 사라지던 것.** 설정 파일이 깨져 있으면 덮어쓰지 않고 알립니다. - **웹 페이지 가져오기가 5MB 상한을 넘는 응답도 끝까지 받고, `/stop` 해도 받기를 멈추지 않던 것.** - **대시보드의 실시간 상태(백그라운드 작업 등)가 가끔 옛 값으로 돌아가던 것.** ## [0.67.0] - 2026-10-07 ### Added - **문구를 직접 바꿀 수 있습니다.** 홈의 `locales/<언어>.json` 에 같은 키를 적으면 그 문구만 바뀝니다. ### Changed - **알림·명령 응답도 언어 설정을 따릅니다.** 언어를 정하지 않았으면 이 컴퓨터의 언어로 나오고, 대시보드는 여는 브라우저의 언어를 따릅니다. 맞는 언어가 없으면 영어입니다. 설정에서 고른 언어가 항상 우선합니다. ### Fixed - **OpenAI 호환 모델로 대화할 때 `OPENAI_API_KEY` 가 있으면, 대화 내용이 담긴 실행 추적이 OpenAI 로 전송되던 것.** OpenRouter·Google·Ollama 로 대화해도 마찬가지였습니다. 이제 보내지 않고, 키가 없을 때 매 턴 로그에 남던 경고도 사라졌습니다. - **영어 화면에서도 대시보드 오른쪽 위의 «백그라운드» 버튼 글자가 한국어로 나오던 것.** ## [0.66.0] - 2026-10-06 ### Changed - **설치 스크립트·CLI·서버 알림·채팅 명령 응답·오류 문장이 영어로 통일됐습니다.** 비서의 답과 대시보드 화면은 지금처럼 설정한 언어를 따릅니다. - **긴 Codex 대화의 요약이 빨라지고, 요약한 뒤에도 앞서 준 규칙과 사실을 덜 잃습니다.** 요약으로 접힌 긴 도구 결과는 비서가 다시 꺼내 볼 수 있습니다. - **응답이 멈춰 다시 시도할 때의 알림이 이번 요청의 재시도와 작업 전체의 누적을 나눠 말합니다.** - **`/stop` 으로 멈추면 그동안 보낸 메시지는 처리하지 않고 버리고, 몇 건이었는지 알려 줍니다.** 필요한 것은 다시 보내면 됩니다. - **대시보드의 기본 세션에도 다른 세션처럼 이름(«세션1»)이 붙습니다.** - **수정한 파일 때문에 업데이트가 멈추면 그 파일 이름을 알려 줍니다.** 업데이트 실패 알림은 실제로 되돌린 범위만 말하고, 업데이트 로그가 항상 남습니다. - **Windows: 설치할 때 셸에서 준 인스턴스 설정(포트·서비스 이름 등)이 업데이트·재등록 뒤에도 유지됩니다.** 홈 `.env` 에 적은 값이 언제나 우선합니다. ### Fixed - **대시보드에서 비서가 답하는 중 입력칸이 비어 있을 때 엔터를 치면 응답이 중지되던 문제를 수정했습니다.** 이제 중지는 버튼으로만 합니다. - **대시보드에서 탭 이름을 바꾸는 중 화면이 갱신되면 편집이 사라지고 이름을 더 바꿀 수 없던 문제를 수정했습니다.** - **Codex 백엔드가 혼잡할 때 긴 대화를 요약하면서 사용자가 준 규칙을 잃던 문제를 수정했습니다.** - **비서가 답하는 중에 답글로 보낸 메시지는 어느 글에 대한 답인지가 비서에게 전달되지 않던 문제를 수정했습니다.** 긴 글에 단 답글은 이제 그 글의 앞부분과 끝부분이 함께 전달됩니다. - **텔레그램으로 대화할 때 도구가 오래 걸려도 «오래 걸린다 · `/stop` 으로 멈출 수 있다» 알림이 오지 않던 문제를 수정했습니다.** - **백그라운드 작업이나 도구가 시간 제한으로 멈췄을 때 원인이 «사용량 한도»나 «사용자 중단»으로 안내되던 문제를 수정했습니다.** ## [0.65.0] - 2026-10-04 ### Added - **정기 스케줄을 바로 실행할 수 있습니다.** 비서에게 부탁하면 정해진 시각에 도는 것과 똑같이 지금 한 번 돌립니다. - **한 기계에서 인스턴스 두 개를 실행하는 방법을 설치 문서에 적었습니다.** 평소 쓰는 비서 옆에 시험용을 두고 각자 업데이트할 수 있습니다([설치와 운영](docs/setup.ko.md#한-기계에-인스턴스-하나-더)). ### Changed - **매니저가 일을 덜 끝내고 돌아오면 비서가 이어서 마무리합니다.** - **등록한 정기 스케줄이 매번 하는 일은 실행할 때마다 다시 묻지 않습니다.** 스케줄에 없던 새 동작이 끼면 그것만 묻습니다. - **서브에이전트는 명세 없이 등급(`low`·`mid`·`high`)만 정하면 실행됩니다.** 기본 명세 `quick`·`general`·`deep`·`explore` 는 없앴습니다. 직접 만든 명세는 그대로 쓸 수 있고, 둘 다 주면 등급이 명세의 모델을 덮습니다. - **긴 Codex·OpenAI 대화에서 답한 뒤 대화를 요약하느라 다음 메시지가 늦어지지 않습니다.** 새 메시지가 오면 요약을 멈추고 먼저 답합니다. - **관리 명령(`tiguclaw restart` 등)이 모르는 인자를 무시하지 않고 거절합니다.** `--home` 을 잘못 적었다가 다른 인스턴스를 건드리는 일을 막습니다. - **로그에 모델 요청마다 걸린 시간이 남습니다.** 답이 느릴 때 서버 대기·생각·출력 중 어디서 걸렸는지 볼 수 있습니다. ### Fixed - **한 기계에 인스턴스가 둘일 때 한쪽을 재시작·업데이트하면 다른 쪽까지 멈추던 문제(Windows)를 수정했습니다.** 홈 폴더 이름의 앞부분이 같으면 생겼습니다. - **두 번째 인스턴스를 설치하면 첫 인스턴스의 서비스 등록을 덮어쓰던 문제를 수정했습니다.** 이제 인스턴스마다 정한 서비스 이름을 씁니다. - **자동 재시작 수단이 없는데 재시작 요청이 접수된 것처럼 보이던 문제를 수정했습니다.** 이제 할 수 없다고 바로 알립니다. - **Windows 계정 이름이 한글이면 자동 재시작 감독자가 엉뚱한 홈으로 뜨고, 재시작·중지가 감독자를 못 찾던 문제를 수정했습니다.** - **Windows 에서 홈 경로를 `\` 로 끝나게 적으면 자동 재시작 감독자가 엉뚱한 홈으로 뜨던 문제를 수정했습니다.** - **현지 날짜와 UTC 날짜가 다른 시간에 Codex 웹 검색을 쓰는 작업이 날짜가 맞지 않는다며 멈추던 문제를 수정했습니다.** ## [0.64.0] - 2026-10-02 ### Added - **오래 걸리는 명령을 비서가 한 번에 기다립니다.** 백그라운드 명령이 끝나거나, 기다리던 글자가 출력되거나, 출력이 한동안 멎으면 바로 결과를 봅니다. 기다리는 동안 새 메시지를 보내면 곧바로 멈추고 답합니다. - **대시보드 브라우저 탭 제목을 설정에서 바꿀 수 있습니다.** 비서에게 부탁해도 바꿔 줍니다. - **대시보드 헤더 오른쪽 끝에 GitHub 저장소 링크(⭐)가 생겼습니다.** ### Changed - **다음 메시지 제안이 기본으로 켜집니다.** 설정에서 끌 수 있습니다. - **비서가 묻지 않고 진행할 때 고른 방향을 한 줄로 밝히고, 결과는 무슨 뜻인지까지 알려 줍니다.** - **Codex 웹 검색이 사용자 시간대에 맞는 지역의 결과를 찾습니다.** ### Fixed - **메시지를 보낸 뒤에도 이전 제안이 남던 문제를 수정했습니다.** 선택지·텔레그램·다른 탭으로 보냈거나 다시 접속했을 때 생겼습니다. - **Codex 웹 검색 답에 인용 표식이 글자로 남던 문제를 수정했습니다.** - **매니저 완료 보고의 선택지가 대시보드에는 뜨지 않던 문제, 스케줄 실행에서 선택지·파일 보내기가 막히던 문제를 수정했습니다.** - **Claude 로 답하는 중에 `/stop` 을 보내도 실행 중인 명령이 멈추지 않던 문제를 수정했습니다.** - **대화 요약 알림과 `/compact` 결과가 접은 대화 양을 잘못 표시하던 문제를 수정했습니다.** - **Codex 로그인 키가 갱신될 때 다른 저장과 겹치면 무효가 된 키로 돌아가 다시 로그인해야 하던 드문 문제를 수정했습니다.** - **토큰 발급 중 버튼을 다시 누르면 새 발급이 끊기던 문제, 발급 중 데몬이 재시작되면 발급 프로세스가 남던 문제를 수정했습니다.** - **대시보드 카드의 모델·강도 표시가 다른 턴이나 실패한 시도의 값으로 바뀌거나, 알 수 없는 강도를 «강도 기본» 으로 표시하던 문제를 수정했습니다.** - **영어 설정에서 구독 로그인 버튼·안내와 탭 제목 등 일부가 한국어로 나오던 문제를 수정했습니다.** - **`.env` 저장이 실패하면 토큰이 든 임시 파일이 남던 문제를 수정했습니다.** ## [0.63.0] - 2026-10-01 ### Added - **Codex·OpenAI 비서가 이 대화에서 앞서 실행한 도구의 결과를 다시 찾아 읽습니다.** 대화가 길어져 이력이 요약된 뒤에도 예전 결과를 짐작하지 않고 원문으로 확인합니다. - **Claude 구독 토큰 발급을 대시보드에서 끝낼 수 있습니다.** 터미널에서 명령을 실행하고 토큰을 복사해 올 필요가 없습니다. - **매니저가 완료 보고로 보내는 파일에도 세션 표시와 설명이 붙습니다.** 다른 세션에서 온 파일은 `[세션]` 이 앞에 붙고, 설명은 파일과 한 메시지로 가며, 그 파일에 답장하면 보낸 세션으로 갑니다. ### Changed - **긴 Codex·OpenAI 대화의 이력 요약이 가볍고 드물어졌습니다.** 한 번에 보내는 대화 이력을 모델이 받을 수 있는 양에 맞춰 늘려, 요약하는 일과 캐시가 깨지는 일이 줄어듭니다. - **Claude 요청이 가벼워졌습니다.** tiguclaw 에서 쓸 수 없는 Claude Code 빌트인 도구를 빼고, 드물게 쓰는 도구는 필요할 때 불러옵니다. - **모델 옆 추론 강도 표시가 프로파일 화면과 같은 배지로 바뀌었습니다.** 턴이 시작될 때부터 보이고, 강도를 정하지 않은 Claude 는 «강도 기본» 으로 표시합니다. - **`/status` 의 컨텍스트 사용률이 GPT 계열 모델의 실제 입력 한도(27.2만 토큰) 기준으로 계산됩니다.** ### Fixed - **Claude 로 답하는 중에 보낸 메시지가 있으면 그 턴의 도구가 «사용자가 거부함» 으로 취소되던 문제를 수정했습니다.** - **매니저 완료 보고에서 결과물 파일을 보내려 하면 «보낼 통로가 없습니다» 로 막히던 문제를 수정했습니다.** - **토큰 저장이 다른 인증 갱신과 겹치면 방금 저장한 토큰이 `.env` 에서 사라지던 드문 문제를 수정했습니다.** ## [0.62.0] - 2026-09-29 ### Added - **채팅 카드와 백그라운드 작업 카드의 모델 옆에 그 턴에 쓴 추론 강도가 표시됩니다.** 강도를 보내지 않은 턴에는 표시하지 않습니다. ### Changed - **모델은 이제 `settings.json` 의 모델 프로파일로만 정합니다.** `.env` 의 `REGION_A_MODELS`·`MODEL_TIER_*` 는 더 이상 읽지 않습니다. 이 값으로 모델을 정하던 설치는 첫 부팅에 프로파일로 한 번 옮겨지고, 원본 설정은 `settings.json.before-legacy-model-env` 로 남습니다. `/model` 이 지금 쓰는 기본 풀과 그 출처를 보여 줍니다. - **터미널에서 `npm run claude-auth`·`npm run codex-auth` 로 다시 인증하면 재시작 없이 다음 메시지부터 새 토큰을 씁니다.** 다시 인증하면 그 인증에 걸려 있던 대기(쿨다운)도 풀립니다. ### Fixed - **긴 Codex 대화에서 답할 때마다 이력 요약을 기다리느라 몇 분씩 걸리던 문제를 수정했습니다.** 요약은 답한 뒤 미리 합니다. - **`/compact` 를 `/stop` 으로 멈출 수 없던 문제를 수정했습니다.** - **Claude 구독 토큰을 붙여넣을 때 줄바꿈으로 잘린 토큰이 확인 없이 저장되던 문제를 수정했습니다.** 잘린 토큰은 이어 붙이고, Anthropic 이 거부하는 토큰은 저장하지 않습니다. - **인증이 거부됐을 때 대시보드가 «사용량 한도» 로 안내하던 문제를 수정했습니다.** - **새로고침하거나 다른 기기에서 열면 답변의 토큰·캐시 줄이 보이지 않던 문제를 수정했습니다.** - **설치 마법사에서 모델을 직접 고른 설치의 모델 프로파일이 무시되던 문제를 수정했습니다.** - **Claude 로 답하는 중에 보낸 메시지가 드물게 처리되지 않던 문제를 수정했습니다.** - **백업이 중간에 끊기면 불완전한 파일을 최근 백업으로 세던 문제를 수정했습니다.** ## [0.61.0] - 2026-09-29 ### Changed - **Ollama 는 이제 `settings.json` 에서 연결합니다.** 내장 연결을 없애고 다른 OpenAI 호환 서버와 같은 방식으로 맞췄습니다 — `.env` 의 `OLLAMA_BASE_URL` 은 더 이상 읽지 않습니다. 쓰고 계셨다면 `settings.json` 에 `"models": { "providers": { "ollama": { "adapter": "openai", "baseURL": "http://localhost:11434/v1", "apiKeyEnv": null } } }` 를 추가하세요(`npm run doctor` 와 부팅 로그가 알려 줍니다). 키가 필요 없는 서버는 `"apiKeyEnv": null` 로 적습니다. - **도구 카드에 더 많은 내용이 보입니다.** Codex 웹 검색 카드에 검색어와 참고한 출처가, Claude의 도구 불러오기(`ToolSearch`) 카드에 불러온 도구 이름이 나옵니다. - **비서가 `PROJECT.md` 를 입구 문서로 씁니다.** 새로 쓰거나 덧붙일 때 모든 작업에 필요한 내용만 두고 나머지는 하위 문서로 옮겨 요약과 링크를 남깁니다. 이미 있는 문서를 다시 짜는 것은 안을 보여 드리고 승인받은 뒤에 합니다. 진행 중인 프로젝트의 `PROJECT.md` 가 12KB 를 넘은 채 고쳐지면 한 번 알려 드립니다. ### Fixed - **Claude 로 답하는 중에 보낸 두 번째 메시지에 답이 오지 않던 문제를 수정했습니다.** 이제 그 답이 첫 답 뒤에 이어서 옵니다. - **Codex 대화에서 이전 대화 내용이 매 턴 캐시 없이 다시 전송되던 문제를 수정했습니다.** 긴 대화일수록 사용량이 줄고 응답이 빨라집니다. - **긴 글을 한 번 붙여 넣으면 그 대화의 이전 내용이 대부분 요약돼 원문이 사라지던 문제를 수정했습니다(Codex·OpenAI).** 이제 큰 입력은 그 요청에서만 오래된 대화를 덜 보냅니다. - **스케줄의 «직전 N회만» 이력 정책이 `/clear` 등으로 이미 지운 대화를 다시 불러오던 문제를 수정했습니다.** - **스케줄 프롬프트를 고치면 «직전 N회만» 이력 정책이 적용되지 않던 문제를 수정했습니다.** 이제 발화 기록으로 셉니다. - **Windows 에서 화면 캡처가 Windows 보안(백신)에 막히던 문제를 수정했습니다.** 캡처 방식을 바꿔 Windows 보안이 더 이상 위협으로 탐지하지 않습니다. 다른 백신이 막으면 비서가 그 사실을 알리고 허용 방법을 안내합니다. - **모델 프로필을 쓰는 설치본에서 예전 버전의 모델 등급 설정이 여전히 일부 호출(게이트웨이 등급 지정·서브에이전트 등)에 쓰이던 문제를 수정했습니다.** - **Codex가 다음 요청을 위해 저장하는 도구 결과에서 비밀값(API 키 등)을 가립니다.** - **Ollama 를 쓰지 않는 설치본에서 모델 목록 조회 실패 경고가 매시간 남던 문제를 수정했습니다.** ## [0.60.0] - 2026-09-27 ### Added - **스케줄마다 대화 이력 정책을 정할 수 있습니다.** 매번 새로 시작하거나 직전 N회만 이어가게 하면, 매일 도는 스케줄의 입력이 계속 커지지 않습니다. 기본은 종전대로 계속 이어갑니다. - **대시보드 채팅에서 위로 스크롤하면 상단에 지금 보고 있는 메시지의 날짜가 표시됩니다.** ### Changed - **Codex 대화에서 캐시가 덜 깨져, 요청마다 새로 보내는 입력이 줄었습니다.** 도구를 많이 쓰는 작업과 백그라운드 작업 결과를 정리할 때 특히 줄어듭니다. ### Fixed - **Codex가 앞선 요청에서 파일 등을 읽어 알게 된 내용을 다음 요청에서 잊던 문제를 수정했습니다.** 작업 도중 보낸 추가 지시도 다음 요청까지 기억합니다. - **Codex·OpenAI의 긴 대화에서 요약되지 않은 오래된 대화가 새 메시지마다 하나씩 빠지던 문제를 수정했습니다.** 이제 오래된 대화는 요약된 뒤에만 빠집니다. - **텔레그램에서 이어 쓰는 대화에서 `/compact`가 «아직 기록이 없습니다»로 끝나던 문제를 수정했습니다.** - **대시보드 채팅을 맨 위까지 올린 뒤 첫 메시지 위가 빈 채로 멈추던 문제를 수정했습니다.** - **예전 버전의 모델 등급 설정이 남아 있으면 웹 페이지 요약 같은 내부 호출이 그 모델로 가서 시간 초과되던 문제를 수정했습니다.** 모델 프로필을 쓰는 설치본에서 생겼습니다. - **모델 인증이 거부되면(401) 매 요청마다 다시 시도하지 않고 잠시 다른 모델로 넘기며, 다시 로그인하라고 한 번 알립니다.** 다시 로그인하거나 요청이 한 번 성공하면 바로 원래 모델로 돌아옵니다. - **저장한 기억이 한도 안에 다 들어가는데도 일부가 대화에 실리지 않던 문제를 수정했습니다.** 기억을 읽을 때마다 Claude 캐시가 깨져 대화 이력을 다시 보내던 일도 줄었습니다. - **재접속 중 종료 이벤트를 놓친 기존 작업 카드가 단건 조회로 완료·취소·실패 상태와 남아 있는 결과를 복구합니다.** - **Codex 서브에이전트가 웹 검색을 완료했는데도 도구를 사용하지 않았다고 경고하던 문제를 수정했습니다.** - **비서가 사용자가 쓰는 언어로 답합니다.** 비서가 직접 쓰는 작업 결과 보고도 그 대화의 언어를 따릅니다(실패·중단 같은 고정 알림 문구는 아직 한국어입니다). - **텔레그램에서 시킨 백그라운드 작업의 결과 보고·알림이 텔레그램으로 오지 않던 문제를 수정했습니다.** 대시보드 세션에서 이어지는 대화였을 때 생겼고(특히 서브에이전트), 비서는 보고했다고 알고 있었습니다. - **백그라운드 작업 결과 보고에 텔레그램 답글을 달면 작업을 시작한 세션이 아니라 기본 세션으로 가던 문제를 수정했습니다.** - **iPhone에서 채팅 맨 끝을 넘겨 끌면 상단 헤더와 세션 탭이 밀려 올라가 가려지던 문제를 수정했습니다.** ## [0.59.0] - 2026-09-25 ### Added - **백그라운드 작업 카드에서 토큰 사용량을 확인할 수 있습니다.** 본 작업과 별도 요약의 사용량을 구분하고, 보고되지 않은 사용량은 미확인으로 표시합니다. ### Changed - **긴 대화의 요약 지침을 보완했습니다.** 완료·취소된 작업, 변경된 지시와 계속 지켜야 할 제약을 구분해 남기도록 했습니다. ### Fixed - **Codex 등으로 오래 작업한 뒤 Claude로 돌아오면 최근 대화가 누락되던 문제를 수정했습니다.** 최근 기록을 자르기 전에 세션 소속으로 전환 경계를 찾습니다. - **대시보드에서 긴 작업의 응답 대기가 약 5분 뒤 실패하던 문제를 수정했습니다.** 메시지 응답 대기에 별도 시간제한을 두지 않고, 브라우저 연결 종료 시 대기 연결을 정리합니다. - **진행 중 HTTP 요청 때문에 브리지 종료가 완료되지 않던 문제를 수정했습니다.** 종료 시 새 연결을 막은 뒤 기존 연결을 정리합니다. - **Windows에서 셸 명령의 인자가 손상되거나 백그라운드 셸·훅 실행 시 명령 창이 나타나던 문제를 수정했습니다.** - **완료된 백그라운드 작업이 중단된 것으로 표시되거나, 접힌 그룹의 답변이 클릭해도 펼쳐지지 않던 문제를 수정했습니다.** - **사용량 표시와 집계를 보완했습니다.** 채팅·작업 카드·게이트웨이의 턴 집계 기준을 맞추고, 실패 시도와 Codex 내부 재시도에서 사용량을 확인하지 못한 경우 합계가 완전한 것처럼 표시하지 않습니다. ## [0.58.0] - 2026-09-23 ### Added - **Claude Opus 5.5 를 쓸 수 있습니다.** 함께 설치되는 Claude Code 를 2.1.280 으로 올렸습니다. 종전에는 이 모델을 고르면 *"does not support this model"* 로 실패했습니다. - **`computer-use` 의 `look` 이 지난 화면을 저장본으로 다시 보여줍니다.** 비서가 앞서 본 화면을 다시 확인할 때 새로 찍지 않습니다. ### Changed - **Codex 가 같은 대화의 요청마다 같은 세션 식별자를 보냅니다.** 대화가 이어질 때 앞부분을 캐시로 다시 쓰기 쉬워집니다. ### Fixed - **Claude 모델이 함께 설치된 Claude Code 보다 새로워 거절되면, 폴백 체인을 설정해 두었어도 다음 모델로 넘어가지 않던 것.** 이제 모델을 쓸 수 없는 경우로 보고 체인의 다음 모델로 넘어갑니다. - **비서가 앞 명령의 `cd` 가 다음 셸 명령까지 이어진다고 여겨 엉뚱한 폴더에서 명령을 실행하던 일을 줄였습니다.** ## [0.57.0] - 2026-09-22 ### Added - **최신 Claude 모델을 쓸 수 있습니다.** 함께 설치되는 Claude Code 를 2.1.278 로 올렸습니다. Fable 5.1 처럼 2.1.251 이상을 요구하는 모델은 종전에 *"does not support this model"* 로 실패했고, `claude update` 를 직접 실행해도 바뀌지 않았습니다 — tiguclaw 는 함께 설치된 실행기를 쓰기 때문입니다. ### Fixed - **사진·문서·음성에 캡션을 달아 답글을 보내면 그 답이 나온 세션으로 이어집니다.** 종전에는 글로 쓴 답글만 이어지고, 첨부가 붙은 답글은 현재 세션으로 갔습니다. - **전송이 정상 처리됐는데 "연결이 끊겼지만 메시지는 서버에 도착했습니다" 안내가 뜨던 것.** 창을 닫으려다 말기만 해도 떴습니다. 정말 못 보낸 경우에는 그대로 알려줍니다. - **화면 관측 안내가 그림이 안 실렸는데도 "아래 그림" 을 가리키던 것.** 쓸 수 있는 화면 id 가 있는데 "전부 무효" 라고 하던 것도 함께 고쳤습니다. ## [0.56.2] - 2026-09-21 ### Fixed - **화면을 보고 조작할 때 같은 관측만 반복하고 진행하지 못하던 것.** 방금 본 화면이 시간이 지났다는 이유로 거절되지 않고, 비서가 지정하지 않은 값을 억지로 채워 넣던 것도 사라졌습니다. - **조작이 막혔을 때 무엇을 하면 되는지 알려주지 않던 것.** 이제 거절된 이유마다 다음에 할 일을 함께 알려줍니다. - **비서가 자기가 찍은 화면을 사용자가 보낸 사진으로 읽던 것.** 화면 관측 결과에 어디서 온 것인지가 함께 실립니다. - **대시보드에서 보낸 글이 입력창으로 되돌아오던 것.** 전송이 안 됐다고 확인됐을 때만 되돌립니다. - **화면 조작 기능이 «기본으로 꺼져 있다»고 안내하던 것.** 실제로는 기본으로 들어 있습니다. macOS 는 권한을 주기 전까지 아무것도 못 하지만 Windows 는 따로 묻지 않습니다 — 쓰지 않으려면 설정에서 끄세요. ## [0.56.1] - 2026-09-20 ### Fixed - **화면 일부를 크게 보려다 비서가 같은 요청을 끝없이 반복하던 것.** 이제 그 요청에 전체 화면을 돌려주므로 다음 단계로 넘어갑니다. - **화면을 조작하다 중간에 멈추면 누른 키가 그대로 눌려 있던 것.** 다른 창으로 전환돼 안전하게 멈춘 경우에도 눌린 키와 마우스 버튼을 놓습니다. ## [0.56.0] - 2026-09-20 ### Changed - **`computer-use` 의 도구 여섯 개가 두 개로 바뀌었습니다 — `look` 과 `do`.** `look` 으로 화면을 보고, `do` 에 클릭·입력·단축키·드래그·스크롤·기다림을 **순서대로 한 번에** 넘깁니다. `do` 는 동작을 마친 뒤의 화면을 함께 돌려줍니다. 스킬이나 지침에 옛 도구 이름을 적어 두셨다면 바꿔 주십시오. ### Fixed - **모델 세션이 사라지면 그 대화가 영구히 실패하던 것.** 이제 tiguclaw 가 가진 대화 기록으로 이어갑니다 — 복구가 돌 때 대화가 비어 있던 것도 함께 고쳤습니다. - **Windows 에서 조작이 성공했다고 답하면서 실제로는 아무 일도 안 일어나던 것.** ## [0.55.0] - 2026-09-19 ### Added - **화면을 보고 직접 조작하는 `computer-use` 플러그인**을 추가했습니다. 비서가 지금 화면을 찍어서 보고, 클릭·글자 입력·단축키·드래그·스크롤을 합니다. macOS 와 Windows 에서 돌고 설치할 것은 없습니다. - ★**조작은 되돌릴 수 없습니다.** 이 플러그인을 켜는 것은 비서에게 그 기계의 마우스와 키보드를 준다는 뜻입니다. (이 줄은 **사실이 아니었습니다** — 기본으로 들어 있습니다. 0.56.2 에서 바로잡았습니다.) - macOS 는 권한이 둘이고 서로 다릅니다 — **화면 기록**(보기)과 **손쉬운 사용**(조작). 관측만 되고 조작이 안 되는 상태가 정상적으로 존재합니다. - Windows 는 권한 대화상자가 없는 대신 **로그인한 사용자 세션**에서 실행되어야 합니다. 일부 보안 소프트웨어가 화면 캡처 스크립트를 차단할 수 있고, 그때는 그렇게 알려줍니다. - 사람이 방금 키보드·마우스를 썼으면 조작하지 않습니다. 화면을 본 뒤 30초가 지나거나 한 번 조작하면 그 화면 좌표는 무효가 됩니다. ### Fixed - **지우고 새로고침하면 옛 글이 입력창에 되살아나던 것**을 고쳤습니다. - **데몬이 꺼져 있을 때 보낸 글이 조용히 사라지던 것**을 고쳤습니다. 이제 받았는지를 받은 쪽이 말합니다. - **턴이 진행 중일 때 보낸 글이 입력창으로 되돌아오던 것**을 고쳤습니다. 60초가 넘는 턴에서도 그랬습니다. - **채팅 카드가 접히지도 펴지지도 않던 것**을 고쳤습니다. - **전송이 실패하면 첨부가 사라지던 것**을 고쳤습니다. - **백그라운드 작업 목록이 «마지막: Bash 52분 전» 이라고만 해서, 도구가 멈춘 것인지 그냥 조용한 것인지 알 수 없던 것**을 고쳤습니다. 이제 아직 돌고 있으면 그렇게 말합니다. - **대시보드가 데몬에 못 닿았을 때 원인이 아무 데도 남지 않던 것**을 고쳤습니다. - **도구가 만든 이미지가 대화에 계속 쌓이던 것**을 고쳤습니다. ## [0.54.1] - 2026-09-15 ### Fixed - **외부 MCP·플러그인 도구가 실패 뒤 두 번 실행될 수 있던 것**을 고쳤습니다. 이름이 읽기 전용처럼 보여도 다시 실행하지 않습니다. 재실행을 막은 경우에도 한도 안내와 오류 보고는 그대로 전달됩니다. - **OpenAI 계열 모델에서 긴 대화의 앞부분이 요약 없이 사라지던 것**을 고쳤습니다. 이제 다른 모델과 같은 방식으로 요약해 남기고, 압축이 일어나면 화면에 알립니다. - **일부 codex 모델에서 대화 요약이 계속 실패하던 것**을 고쳤습니다. 실패하는 동안 옛 대화가 요약 없이 잘려 나갔습니다. - **압축이 실패해도 «압축 중» 표시가 사라지지 않던 것**을 고쳤습니다. 이제 실패·건너뜀도 화면에 알립니다. Claude 모델에서는 압축이 성공해도 표시가 남아 있었습니다. - **대시보드에서 10MB 넘는 파일이 첨부되지 않던 것**을 고쳤습니다. 상한은 20MB 로 올랐는데 화면에는 옛 상한이 그대로 남아 있어, 보내기도 전에 거절했습니다. 이제 상한을 서버에서 받아 씁니다. ## [0.54.0] - 2026-09-15 ### Added - **첨부 파일 상한을 올렸습니다.** 파일 하나당 20MB, 한 번에 보낼 수 있는 합계 50MB 입니다. 같은 파일이 텔레그램으로는 되고 대시보드로는 거절되던 차이가 없어집니다. (★이 판에서는 **서버 상한만** 올랐습니다 — 대시보드 화면은 옛 상한을 그대로 들고 있어, 실제로 양쪽에서 되는 것은 0.54.1 부터입니다.) ### Changed - **채팅 카드는 이제 머리줄을 눌러야 접힙니다.** 카드 아무 데나 눌러도 접히던 것을 도구 카드와 같게 맞췄습니다. 본문 어디서든 접고 싶으면 **우클릭 메뉴**에 접기·펴기가 있습니다. - **너무 큰 요청은 받기 전에 거절합니다.** 상한을 넘으면 본문을 읽지 않고 돌려보냅니다. ### Fixed - **백그라운드 작업에 여럿을 맡기면 결과 일부가 최종 보고에서 빠지던 것**을 고쳤습니다. 늦게 도착한 결과를 반영하는 마지막 단계가 앞서 작성한 보고서를 통째로 덮어쓰기도 했습니다. - **오래전에 끝난 작업의 결과를 다시 찾을 수 없던 것**을 고쳤습니다. 최근 것만 목록에 나와서, 그보다 오래된 결과는 남아 있어도 닿을 방법이 없었습니다. - **도구가 이미 실행된 뒤 모델을 바꿔 같은 요청을 다시 돌리던 것**을 고쳤습니다. 파일을 쓰거나 메시지를 보내는 도구가 두 번 실행될 수 있었습니다. - **정기 작업의 재전송이 옛 설정을 쓰던 것**을 고쳤습니다. 전달에 실패한 뒤 다시 보낼 때, 그 사이에 정기 작업을 끄거나 보낼 곳을 바꿔도 예전 주소로 나갔습니다. - **정기 작업과 파일 감시의 중단 알림이 지정한 곳으로 안 가던 것**을 고쳤습니다. - **게이트웨이 동시 실행 제한이 지켜지지 않던 것**을 고쳤습니다. 동시에 들어온 요청이 모두 제한을 통과해 설정한 수보다 많이 실행됐습니다. - **채팅 카드의 접기 화살표가 마우스를 올려도 색이 바뀌지 않던 것**을 고쳤습니다. ## [0.53.0] - 2026-09-13 ### Added - **OpenAI 모델도 «빠름» 으로 돌릴 수 있습니다.** 프로파일 원소에 `speed: "fast"` 를 적으면 됩니다. 로컬 모델이나 호환 백엔드처럼 그 손잡이가 없는 연결에는 보내지 않습니다. - `/models` 가 «빠름» 을 적은 원소마다 **그 연결이 실제로 그걸 읽는지와 대가**를 함께 보여줍니다. 배수를 측정한 곳만 숫자를 쓰고, 나머지는 «배수 미측정» 이라고 적습니다. ### Fixed - **OpenAI 어댑터가 모델 설정을 보낼 때 그 모델의 기본값이 지워지던 것**을 고쳤습니다. 추론 강도를 지정하면 응답 장황함의 기본값이 함께 사라졌고, 도구를 지원하지 않는 모델로 넘어간 턴에서는 지정한 추론 강도 자체가 무시됐습니다. - **«빠름» 이 안 켜진 이유가 그날 로그에 없던 것**을 고쳤습니다. 거절 사유가 데몬이 뜬 뒤 한 번만 기록돼서, 며칠 지나 이유를 찾으면 로그가 비어 있었습니다. ## [0.52.1] - 2026-09-11 ### Added - **Claude 모델도 «빠름» 으로 돌릴 수 있습니다.** 0.52.0 은 codex 에만 적용돼서, 같은 설정을 적어도 모델에 따라 다르게 굴었습니다. 안 켜졌을 때는 **왜 안 켜졌는지**가 로그에 남습니다(계정에서 추가 사용량을 켜야 하는 경우 등). ### Fixed - **«빠름» 의 대가를 화면이 잘못 말하던 것**을 고쳤습니다. 직접 정의한 provider 이름으로 Claude 를 쓰면 «이 provider 는 안 읽음» 이라고 나오면서 **실제로는 2배 단가가 청구** 됐습니다. 이제 codex 는 «크레딧 2.5배», Claude 는 «비용 2배» 로 각각 맞게 나옵니다. - 변경 내역(v0.52.0)에서 **겪은 적 없는 항목들을 걷어냈습니다.** 그 판 안에서 생겼다 없어진 결함들이 마치 쓰던 중에 겪은 것처럼 적혀 있었습니다. ## [0.52.0] - 2026-09-10 ### Added - **모델 프로파일에 «빠름» 을 켤 수 있습니다**(현재 codex 계열만). 응답이 1.5~2배 빨라지는 대신 **크레딧을 2.5배** 씁니다. 기본은 꺼짐이고, `/models` 가 어디에 켜져 있는지와 그 대가를 함께 보여줍니다 — 이 값을 읽지 않는 provider 에는 그렇게 적습니다. - `/models` 가 **실제로 실려 나가는 추론 강도**를 항상 보여줍니다 — 그 값이 프로파일·설정· 모델 기본 중 어디서 왔는지까지. 종전엔 프로파일에 직접 적었을 때만 보였습니다. - **잡 아이콘을 바꿀 수 있습니다.** 매니저·서브에이전트 아이콘이 코드에서 빠져 `<홈>/locales/<언어>.json` 으로 덮입니다. - 플러그인이 기본 스킬·에이전트·커맨드·엔드포인트와 **같은 이름을 내면 경고**가 뜹니다. 막지는 않지만, 능력이 조용히 바꿔치기되지 않습니다. ### Changed - **채팅 카드 접기를 다시 만들었습니다.** 답변 메시지도 접히고(종전엔 도구 스텝 카드만), 머리줄뿐 아니라 **본문 아무 데나** 눌러도 접히며, 접어도 **세 줄은 남습니다.** 접기 삼각형도 1.7배 커졌습니다. - 접기의 기본은 **펼침**입니다 — 직전 답변이 저절로 접히던 것을 없앴습니다. 글을 드래그로 선택해도 접히지 않습니다. - 매니저가 🎖️ **금색 배지**로 서브에이전트(보라)와 구분됩니다. - 백그라운드 작업 카드가 **오래된 순**으로 쌓입니다. - **위임받아 도는 서브에이전트가 대화를 이름 바꾸거나 보관하지 못합니다.** 1턴 돌고 끝나는 위임이 사용자 대화를 건드릴 수 있었습니다. 대화 검색·조회는 그대로입니다. ### Fixed - **연결이 끊긴 외부 MCP 서버 하나가 대화 한 턴을 통째로 죽이던 것**을 고쳤습니다. 대상 앱을 껐다 켜면 다음 턴에 돌아옵니다. - **OpenAI 어댑터에서 플러그인 도구 이름이 기본 도구와 겹치면 그 턴이 통째로 죽던 것**을 고쳤습니다. 이제 세 어댑터가 같은 판정을 씁니다. - 채팅을 위로 스크롤해 이력을 불러오는 순간 **화면이 비어버리던 것**을 고쳤습니다. 가만히 두면 빈 채로 멈춰 있었습니다. - 채널 목록이 조용히 갱신되지 않던 것을 고쳤습니다. - **스킬이 조용히 사라지던 것**을 고쳤습니다. 이제 못 싣는 이유와 고치는 법이 로그에 남습니다. - 연결이 끊겼을 때 로그에 `terminated` 만 남아 **왜 끊겼는지 알 수 없던 것**을 고쳤습니다. - 캐시 경고가 근거 없이 «모델을 바꿔 보라» 고 처방하던 것을 뺐습니다. 대신 로그가 **캐시가 어디서 깨졌는지**를 직접 짚습니다. ## [0.51.1] - 2026-09-09 ### Fixed - **윈도우에서 Node 없이 설치할 때** 받기가 중간에 실패하면 반쯤 설치된 폴더가 남아, 다시 실행해도 «이미 설치돼 있습니다» 로 막히던 것을 고쳤습니다. 이제 폴더를 만들기 전에 받으므로 실패해도 아무것도 남지 않습니다. - 같은 설치기에서 **「아니오」라고 답해도 내려받기가 시작되던 것**을 고쳤습니다. `TIGUCLAW_AUTO_NODE=0` 이 오히려 «묻지 말고 받아라» 로 읽히던 것도 함께 고쳤습니다. - 설치가 실패했을 때 안내하던 명령이 전용 Node 를 쓰는 설치본에서는 실행되지 않던 것을 고쳤습니다(이제 그대로 붙여넣으면 됩니다). - 구독 한도 **새로고침(🔄)을 눌러도 조회가 끝날 때까지 화면이 그대로**이던 것을 고쳤습니다. 이제 누르는 즉시 «확인하는 중» 이 뜹니다. - 새로고침 버튼이 테마와 어울리지 않는 회색 상자로 보이던 것을 고쳤습니다. ## [0.51.0] - 2026-09-09 ### Added - **Node.js 가 없어도 설치가 끝납니다.** 한 줄 설치가 Node 20 이상을 못 찾으면, 물어본 뒤 이 설치본 전용으로 `<설치폴더>/.node` 에 받습니다. 관리자 권한이 필요 없고 시스템 PATH 를 건드리지 않으며, 설치 폴더를 지우면 같이 사라집니다. - 구독 한도 옆에 **새로고침**(🔄)이 생겼습니다. 캐시는 30초라, 다시 열면 새 값이 옵니다. ### Changed - **플러그인 메뉴가 즉시 열립니다.** 종전엔 목록을 그리기 전에 모든 구독의 한도 조회를 기다려 최대 25초까지 멈췄습니다. 이제 한도는 **플러그인 상세를 열 때** 그 하나만 가져옵니다. - 코드 리뷰가 **백그라운드 작업으로 돕니다.** 도는 동안 대화가 막히지 않고, 진행 상황은 백그라운드 패널에서 봅니다. ### Fixed - **모바일 채팅에서 검색 버튼이 안 보이던 것**을 고쳤습니다. 스크롤로 사라지는 자리에 있어 대화가 길면 닿을 수 없었습니다. 검색창을 눌렀을 때 화면이 확대되던 것도 함께 고쳤습니다. - 좁지 않은 화면에서도 헤더 글자가 사라지던 것을 고쳤습니다. - 홈에 이미 놓여 있던 기본 위젯을 끄면 **재시작마다 되살아나던 것**을 고쳤습니다. - 한도 새로고침을 연달아 누르면 조회가 겹쳐 실행되던 것을 고쳤습니다. ## [0.50.0] - 2026-09-07 ### Added - **구독 한도가 얼마나 남았는지 보여줍니다.** 플러그인 상세를 열면 시간 한도와 주간 한도가 창마다 한 줄로, 남은 양과 리셋 시각이 함께 뜹니다. 조회는 토큰을 쓰지 않고 배경에서 주기적으로 돌지도 않습니다 — 상세를 열 때만 확인합니다. - Claude 쪽 한도는 이 기기에 **로그인된 Claude Code CLI** 가 있을 때 읽습니다. 없으면 숫자 대신 조회를 못 한 이유가 뜹니다. ### Fixed - 폰에서 우상단 백그라운드 버튼이 **빈 칸**으로 보이던 것을 고쳤습니다. 진행 중인 작업이 없으면 아무것도 그려지지 않았습니다. ## [0.49.1] - 2026-09-06 ### Fixed - **폰에서 헤더 글자가 세로로 서던 것을 고쳤습니다.** 업데이트 칩이 떠 있으면 브랜드와 상태 글자가 한 글자씩 눌려 기둥이 됐습니다. ### Changed - `/diagnose` 가 명령 목록에서 빠집니다. 결과가 «백엔드 무게 / 계정» 둘인데 어느 쪽이든 사용자가 할 수 있는 일이 없는 내부 점검입니다. 직접 치면 여전히 동작합니다. - 메모리 인덱스로 되올린 자가성장 제안이 그대로 남습니다. 그동안은 재발이나 데몬 재시작이 조용히 다시 내렸고, `/status` 도 그것들을 거의 «읽음» 으로 셌습니다. - 정리해 내린 기억이 비서의 매 턴 조회에 다시 끼어들지 않습니다. 찾을 때는 그대로 나옵니다 — 정리는 상시 목록에서 내리는 것이지 손이 안 닿게 하는 게 아닙니다. ### Added - 데몬 첫 로그 줄이 **어느 버전·어느 런타임·어느 빌드**인지 말합니다. 접속할 수 없는 기기에서도 «저기서 뭐가 돌고 있나» 를 로그만으로 답할 수 있습니다. - Claude 구독 한도를 **부딪히기 전에** 읽습니다 — 어느 창이 걸려 있는지, 언제 리셋되는지, 가까워졌는지. 그동안은 요청이 거절된 뒤에야 알 수 있었습니다. ## [0.49.0] - 2026-09-05 ### Added - **작업 중인 턴을 입력창에서 멈춥니다.** 비서가 일하는 동안 입력창이 비어 있으면 전송 버튼이 정지 버튼으로 바뀝니다. 글을 치면 그대로 전송이라, 돌고 있는 턴에 말을 얹는 길은 그대로 열려 있습니다. - **Claude·Codex 인증을 대시보드에서 합니다.** 각 구독 플러그인 상세 화면에 인증 버튼이 생겼고 확인 창을 거칩니다. 터미널을 열 필요가 없습니다. ### Fixed - **텔레그램에서 답글을 달면 그 답이 나온 대화로 돌아갑니다.** 그동안은 조용히 현재 세션으로 떨어졌습니다. - 모바일 화면 문제 몇 가지: 좁은 칸에서 글자가 세로로 서던 것, 메뉴 서랍이 손가락으로 열리지 않고 설정까지 스크롤되지도 않던 것, 패널 안에서 민 스크롤이 뒤 페이지를 끌던 것, 버튼 아래 빈 상자, 인벤토리 상세가 화면 밖으로 나가던 것. ### Changed - `archive_memory`·`delete_memory` 가 이름 묶음을 받습니다. 여러 개를 한 번에 정리합니다. - 자가성장 제안이 그 교훈이 **어디로 가야 하는지**(회귀·스킬·상시 지침) 말합니다. 전에는 종류와 무관하게 «사용자에게 확인하세요» 로 끝났습니다. ## [0.48.0] - 2026-09-04 ### Changed - 위임받은 에이전트·매니저가 **자기가 할 수 있는 것만** 안내받습니다. 종전엔 작동 헌법과 스킬 목록을 비서와 똑같이 받았는데, 그중엔 그 자리에서 쓸 수 없는 도구를 쓰라는 지시가 섞여 있었습니다. 능력은 그대로입니다 — 필요하면 `find_skills` 로 찾고 이름을 지정하면 그대로 씁니다. - `find_skills` 를 **인자 없이** 부르면 쓸 수 있는 스킬 전체 목록을 돌려줍니다. 종전엔 검색어가 필수라, 무엇이 있는지 모르면 찾을 방법이 없었습니다. - 스킬 목록이 **바이트 상한**을 지킵니다. 종전엔 개수만 제한해서, 설명이 긴 스킬이 몇 개만 있어도 목록이 무한정 커질 수 있었습니다. ### Removed - `schedule-safety-check` 스킬을 뺐습니다. 스킬이 하던 일(예약을 걸기 전에 그 프롬프트가 나중에 무인으로 실행돼도 안전한지 따지는 것)은 **비서의 기본 동작으로 옮겼습니다** — 이제 위임받은 턴에서도 같은 검사가 걸립니다. ### Fixed - 백그라운드 작업 카드를 펼치면 지시문 **전문**이 보입니다. 종전엔 500자에서 잘린 채 보였고, 새로고침하면 같은 카드가 갑자기 길어졌습니다. 작업이 끝나 원문이 사라진 경우엔 그 사실을 함께 알려 줍니다. - 지운 스킬·에이전트가 설치본에 남아 계속 로드되던 것을 고쳤습니다. ## [0.47.0] - 2026-09-03 ### Added - 설정에 메모리 인덱스 크기 슬라이더가 생겼습니다 — 비서가 매 턴 보는 «무엇을 기억하고 있나» 목록의 상한입니다. 0으로 두면 목록을 아예 싣지 않고(검색으로는 계속 닿습니다), 「기본값」 버튼으로 되돌립니다. 기본값은 25 KB 입니다. - `/memory-tidy` — 저장된 기억을 훑어 중복을 합치고 버릴 것을 제안하는 명령입니다. 기억 인덱스가 상한에 닿으면 비서가 먼저 권하기도 하며, 그 상한은 `memory.indexCapBytes` 로 정할 수 있습니다. - 플러그인 목록에서 카테고리를 접고 검색합니다(인벤토리와 같은 동작). 상세에는 종류·버전· 만든 사람·웹사이트·라이선스가 함께 나옵니다 — 매니페스트에 있는 것만 보여줍니다. - 플러그인 목록이 종류별로 묶입니다 — 채널 · 트리거 · 옵저버 · 서비스. 번들 플러그인에는 설명이 붙어, 무엇을 하는 것인지 목록에서 바로 읽힙니다. - 플러그인 목록이 아이콘·이름·설명만 보여주고, 누르면 오른쪽에서 상세를 봅니다. 플러그인은 `icon` 으로 자기 아이콘(png·webp)을 둘 수 있고, 없으면 기본 아이콘을 씁니다. - 플러그인이 «이 설정은 읽기 전용» 이라고 스스로 선언할 수 있습니다. 반대로 «편집 허용» 은 선언으로 열리지 않습니다 — 비밀과 `.env` 값은 언제나 보호됩니다. - 플러그인 설정 화면이 홈 `.env` 값을 함께 보여줍니다 — 브리지·대시보드 포트, 텔레그램 허용 사용자, 봇 토큰 유무 등. 정본이 `.env` 인 값은 **보여주기만** 하고 어느 환경변수인지 같이 적습니다(비밀은 언제나 있다/없다만). - 대시보드 모듈 상세에서 각 LLM 프로바이더가 주는 모델을 봅니다 — 모델이 많으면 벤더별 개수로, 적으면 모델별 컨텍스트 크기와 도구 지원 여부까지. 벤더가 알려주지 않는 값은 빈칸으로 둡니다. - `/providers` — 붙어 있는 프로바이더와 각각이 주는 모델을 봅니다. 모델이 많은 프로바이더는 벤더별 개수로 먼저 보여주고, 이름 일부로 좁힐 수 있습니다 (`/providers openrouter sonnet`). 인증이 없어 조회하지 못한 프로바이더도 그렇게 표시합니다. ### Changed - 위임한 일이 이제 동시에 진행됩니다. 비서가 서로 독립인 작업을 한꺼번에 넘기고 한 번에 거두므로, 종전에 각 작업 시간의 합이 걸리던 네 갈래가 이제 가장 긴 하나만큼 걸립니다. - 서브에이전트와 매니저는 더 이상 기억 목록 전체를 받지 않습니다. 맡은 일과 관련된 항목은 그대로 받으므로 필요한 것은 알되, 나머지 비용은 치르지 않습니다. - `tiguclaw doctor` 가 전역 링크가 끊긴 상태를 알아봅니다 — `tiguclaw` 명령은 PATH 에 남아 있는데 가리키는 곳이 없는 경우로, 설치 폴더에서 `npm link` 를 실행하라고 알려줍니다. 종전에는 «판정 불가» 라고만 했습니다. - 다른 세션의 답이 함께 배달될 때 붙는 라벨이 `[unknown]` 대신 **세션 키**를 보여줍니다 — 어느 작업에서 온 것인지 바로 압니다. 세션에 이름을 붙였으면 그 이름이 우선입니다. - 문서 파일 이름이 언어를 표시합니다 — `docs/security.ko.md`(한국어) · `docs/security.en.md`(영어). 예전 이름으로 걸어둔 링크는 새 이름으로 바꿔야 합니다. `README.md` 는 그대로입니다. ## [0.46.0] - 2026-09-02 ### Added - 배경 작업에 제목을 붙일 수 있습니다. 작업 카드에 «에이전트 이름 · 제목» 으로 보여, 같은 에이전트를 여럿 실행해도 구분됩니다. ### Fixed - 세션 목록처럼 선택지로 답하는 명령을 쓰면 대시보드가 계속 «작업 중» 으로 남던 것. - 정기 실행·파일 감시 작업이 «진행 중» 으로 세어지지 않아, 그 사이 재시작하면 진행 중인 작업을 끊던 것. 이제 재시작 전 확인에 잡힙니다. - 설치하지 않은 구독 로그인을 설치 마법사와 진단이 계속 묻고 권하던 것. 이제 이 설치가 제공할 수 있는 것만 묻습니다. ### Changed - 변경 내역을 언어별로 나눴습니다 — [`CHANGELOG.en.md`](CHANGELOG.en.md)(영어) · [`CHANGELOG.ko.md`](CHANGELOG.ko.md)(한국어). ## [0.45.0] - 2026-09-01 ### Fixed - 배경 작업이 «완료» 라고 해놓고 계속 일하던 것. 이제 자식 결과를 받을 때 원래 맡은 일을 다시 보여주고, 그 결과는 새 지시가 아니라 참고 증거로 다룹니다. 완료조건을 실제로 깨면 이어서 고치고, 아니면 보고에만 적습니다. 권한은 그대로입니다. - 도구 한도에 걸린 배경 작업에게 «최종 요약» 을 시켜놓고 이어서 돌리던 것. 이어갈 때는 «중간 점검» 을 요청합니다. - 긴 배경 작업에 누적 상한이 없어 끝없이 돌 수 있던 것. - 모델을 못 쓴 이유를 설명하는 문장이 상류 오류 본문에 밀려 잘려나가던 것. - 프롬프트 잘림 판정에 애매한 구간을 더했습니다 — 단정할 수 없으면 그렇게 말합니다. - 같은 실패가 작업 id 때문에 기억에 매번 새로 쌓이던 것. ### Changed - 구독 로그인이 번들 플러그인이 됐습니다. 해당 폴더를 빼면 그 구독 경로만 꺼지고 API 키 사용자는 그대로입니다. 홈에 직접 설치해 되돌릴 수도 있습니다(Codex 는 토큰 갱신 때문에 아직 번들 전용). ## [0.44.1] - 2026-09-01 ### Fixed - 배경 작업이 보고를 쓰는 도중 연결이 끊기면 쓴 글이 한 글자도 안 남던 것. 이제 끊기기 전까지의 내용과 함께 끊겼다는 사실을 보여줍니다. 특정 오류가 아니라 중간에 끊기는 모든 경우입니다. ## [0.44.0] - 2026-09-01 ### Added - 붙인 모든 곳에서 모델 목록을 가져옵니다. OpenAI 호환 엔드포인트면 표준 경로로 조회합니다. 목록에 있다고 다 쓸 수 있는 건 아니며, 못 쓰면 아래 «이유» 가 알려줍니다. - `/models` 에서 각 모델의 컨텍스트 크기와 도구 사용 가능 여부를 함께 봅니다. 벤더가 안 알려주는 항목은 아무 표시도 안 붙습니다. - 모델이 프롬프트를 잘라내면 보낸 양과 처리된 양을 수치로 알려줍니다. 컨텍스트가 작은 모델은 지침·기억·능력 목록을 오류 없이 버리고 답합니다. ### Fixed - 지정한 모델을 못 쓸 때 이유를 말합니다. 종전엔 기본 모델로 답했다는 사실만 알렸습니다. - 긴 배경 작업이 도구 사용 한도에서 잘려 다시 실행하면 처음부터 반복하던 것. 이제 중간 정리를 하고 이어서 계속합니다(대화는 그대로, 배경 작업에만 적용). - 같은 실패가 작업 id 때문에 기억에 매번 별개로 기록되던 것. - 신호가 없는 주의 회고까지 매주 기록되던 것. ## [0.43.2] - 2026-08-31 ### Fixed - 플러그인이 요구하는 권한이 한국어로만 보이던 것. 보안 문서가 설치 전에 확인하라고 가리키는 자리라 판단 근거가 안 닿았습니다. 이제 화면 언어대로 나옵니다. - 플러그인을 지워도 재시작하면 살아나던 것. 껐다는 기록을 안 남기고 있었습니다. - 전에 껐던 이름을 다시 설치하면 꺼진 채로 뜨던 것. - 위젯 설정의 자격증명 차단을 값까지 봅니다 — 개인키·서비스 토큰·접속 문자열은 이름에 단서가 없어도 막습니다. 값이 평범하면 못 잡으니 설정 스펙에 secret 으로 선언하세요. - 앱과 함께 온 플러그인을 꺼두면 홈 플러그인이 그 이름을 가로챌 수 있던 것. 목록에는 원래 것의 출처·권한이 뜨는데 실제로는 다른 코드가 돌았습니다. 이제 디스크에 이름이 있으면 예약됩니다. - 플러그인 화면에서 대시보드를 끄면 확인 없이 꺼지고, 되돌릴 화면이 함께 사라지던 것. - `npm start` 로 실행하면 플러그인이 하나도 안 붙던 것. - 플러그인 설정을 바꾸다 거절당할 때 화면 언어가 아닌 문장이 뜨던 것. - 플러그인 설정을 한 번이라도 바꾸면 그 저장 폴더를 플러그인으로 읽으려다 실패해, 멀쩡한 플러그인이 매 부팅 오류로 찍히던 것. - 플러그인 이름에 대문자를 쓰면 아무 일도 안 일어나고 이유는 로그에만 남던 것. 이름 규칙을 [만드는 법](docs/plugins.ko.md) §2 에 적었습니다. ### Changed - 보안 문서에 확장 이야기를 넣었습니다([`docs/security.ko.md`](docs/security.ko.md)). 플러그인은 데몬과 같은 프로세스에서 돌고 격리가 없으며, `needs` 는 선언이지 감옥이 아닙니다. ## [0.43.1] - 2026-08-29 ### Fixed - 플러그인이 기본 기능을 가릴 수 있던 경로 셋. 목록에는 남아 있는데 기능은 사라졌습니다. - 잘못된 이름의 플러그인이 설정을 엉뚱한 곳에 쓸 수 있던 것. - 여러 역할을 겸하는 플러그인을 끌 때 정리가 여러 번 불리던 것. - 같은 경고가 매번 반복되던 것. - 플러그인 문서와 주석 네 곳이 0.43.0 의 동작 변경을 안 따라가 사실과 달랐던 것. ## [0.43.0] - 2026-08-29 ### Added - [플러그인 만드는 법](docs/plugins.ko.md) — 이 문서만 보고 위젯과 도구를 만들 수 있습니다 (영문판 포함). 그동안 능력만 있고 쓰는 법이 없었습니다. - 도구를 만드는 데 아무것도 설치할 필요가 없습니다. 이름·설명·인자만 적으면 됩니다. SDK 를 쓰던 방식도 그대로 동작합니다. - 플러그인이 대화 없이 일할 수 있습니다 — 무슨 일이 생기면 알아채고, 알림을 보내고, 필요하면 모델에게 물어봅니다. 메시지를 보내거나 모델을 부르는 플러그인은 설치할 때 그 사실이 보입니다. ### Changed - TypeScript 지원은 아직 준비 중입니다. 지금은 JavaScript 로 만들어 주세요. - 플러그인 도구가 모든 상황에서 보입니다. 종전엔 직접 대화할 때만 보이고 스케줄이나 배경 작업에서는 안 보였습니다. - 홈에 둘 수 있는 위젯이 12개에서 24개로 늘었습니다. - 플러그인에 거는 제약을 줄였습니다 — 사용자나 데몬이 실제로 다치는 것만 막습니다. ### Fixed - 플러그인을 꺼도 스케줄러·파일 감시처럼 스스로 깨어나는 것은 계속 돌던 것. - 이름이 겹치면 플러그인이 사용자의 실제 대화를 가리킬 수 있던 것. - 플러그인이 기억·스킬 같은 기본 기능을 통째로 대체할 수 있던 것. - 설정이 많은 위젯이 개수 제한에 막히던 것. - 도구와 화면을 다 제공한 플러그인이 로그에 «아무것도 없습니다» 로 찍히던 것. ## [0.42.1] - 2026-08-29 ### Fixed - `settings.json` 이 깨진 상태에서 테마나 모델을 바꾸면 «바꿨습니다» 라는 답과 함께 모델 프로파일·테마·gateway 설정이 한꺼번에 사라지던 것. 이제 멈추고 어느 파일이 왜 안 읽히는지 알려줍니다. 화면과 조회는 그대로 뜹니다. - 위젯에 값을 대는 함수가 잘못 짜여 있으면 데몬 전체가 재시작되던 것. 이제 그 위젯만 실패하고 사유가 남습니다. - 같은 카드를 여러 탭에서 동시에 열면 두 번째 요청부터 이미지 크기 제한을 지나칠 수 있던 것. ## [0.42.0] - 2026-08-29 ### Added - 대시보드 홈에 위젯을 둘 수 있습니다. 배치는 말로 합니다 — 격자를 미는 화면은 없습니다. - 「지금 돌고 있는 작업」 위젯 — 서랍을 열지 않고 홈에서 봅니다. - 플러그인이 화면과 설정을 더할 수 있습니다. 플러그인이 적어둔 설정 항목이 설정 화면에 저절로 생기고, 답변이나 홈에 자기 카드를 그립니다. 비밀번호·열쇠는 있다/없다만 보입니다. - 플러그인 메뉴 — 목록·켜기·끄기·설치·제거를 한 자리에서, 재시작 없이. 만든 사람과 요구 권한도 함께 봅니다. - 플러그인이 자기 번역을 들고 옵니다. ### Changed - 다른 대화에서 온 알림에 출처가 붙습니다(기본 대화는 그대로). - 업데이트 내역을 설정에서 전부 봅니다. - 새 화면이 나오면 브라우저가 스스로 새로고침합니다. ### Fixed - 긴 대화에서 위로 스크롤했다 내려오면 플러그인 카드가 빈 칸이 되던 것. - 새로고침하면 카드가 안 뜨던 것, 업데이트가 없는데 내역 행이 뜨던 것. - 모바일에서 턴 카드 머리글이 세로로 흐르던 것. ## [0.41.0] - 2026-08-27 ### Added - 답변 안의 ` ```mermaid ` 블록이 그림으로 그려집니다. 렌더러는 쓸 때만 내려받고 인터넷에 나가지 않습니다. - 체크박스 목록·`
`·표 정렬·`` 가 화면에 제대로 나옵니다. - 업데이트 확인 창에 이번에 받는 버전의 변경 내역이 함께 뜹니다. - Claude 구독으로 설치할 때 브라우저 로그인만으로 토큰을 받아옵니다. 종전엔 CLI 를 따로 깔고 토큰을 복사해 붙여야 했습니다(`tiguclaw claude-auth` 로 다시 받을 수 있습니다). ### Changed - 옛 대화를 열어도 도구 사용 기록이 남아 있습니다. 종전엔 대화 글은 남는데 도구 카드만 며칠 뒤 사라졌습니다. - 브랜드 아이콘 배경이 투명해져 밝은 테마에서 검은 사각형이 사라집니다. - 비서가 자기 홈 폴더와 설치 위치를 압니다 — 파일을 놓아야 하는 요청이 제자리를 찾아갑니다. ### Fixed - `doctor` 가 Claude 실행기까지 점검합니다 — 키는 있는데 실행기가 없는 상태를 정상으로 넘기지 않습니다. - Claude 실행 실패가 내부 옵션 이름 대신 알아들을 수 있는 말로 나옵니다. - 아이콘을 바꿔도 브라우저가 옛 그림을 계속 쓰던 것. ## [0.40.1] - 2026-08-27 ### Fixed - 검색(`Grep`/`Glob`)이 기반 도구 없이 조용히 죽어 있던 것. 이제 부팅할 때 없으면 받아 둡니다. 시작이 늦어지지 않고, 못 받으면 로그에 남기고 다음 부팅에 다시 시도합니다. ## [0.40.0] - 2026-08-27 ### Added - 화면 테마를 파일 하나로 바꿉니다. 홈에 `theme.css` 를 두면 배경·글자색부터 전체 글자 크기·패널별 글꼴까지 덮습니다. 홈의 `themes/` 폴더에 넣은 `<이름>.css` 가 곧 목록이 되고 (기본 `dark`·`light` 포함), 비서에게 말로 시켜도 됩니다. - 검색 결과를 한 세션으로 좁힐 수 있습니다. 「이 세션만」을 켜거나 결과의 세션 이름을 누르면 좁혀지고, 칩의 ✕ 로 풉니다. ### Changed - 업데이트 버튼이 버전이 실제로 올라갔을 때만 뜹니다. 종전엔 커밋이 하나만 쌓여도 떴습니다. `/update` 를 직접 부르면 예전처럼 최신 상태를 받습니다. - 모듈 화면의 작업 목록에서 언제나 비활성이던 버튼을 걷어냈습니다. ### Fixed - 플러그인 하나의 설정 오타가 그 뒤의 플러그인을 전부 끄던 것. 이제 그 하나만 건너뛰고 이유를 로그에 남깁니다. - 번역 파일의 빈 값이 기본 언어를 덮어써 화면 문구가 통째로 비던 것. - 지운 테마·언어 파일이 업데이트 후에도 목록에 남던 것. - HTTP 브리지가 JSON 응답을 만들다 실패하면 데몬이 종료될 수 있던 것(잠복). ## [0.39.0] - 2026-08-26 ### Added - **화면 언어를 고를 수 있습니다 — 영어가 함께 들어갑니다.** 설정에서 언어를 고르면 대시보드가 그 언어로 뜹니다. 새 언어는 홈의 `locales/` 폴더에 `<언어>.json` 파일 하나를 넣으면 늘어납니다(코드 변경 없음). **반만 번역해도 화면이 안 깨집니다** — 빠진 문구는 기본 언어로 나오므로 몇 줄씩 옮겨 가며 써도 됩니다. ### Changed - **서버가 화면 문구를 만들지 않습니다.** 모듈·능력 화면에 뜨던 문장(`claude 어댑터 · 인증됨`, `재부팅 시 · 켜짐(ok)`)을 서버가 미리 조립해 내려보내던 것을 값과 키로 바꿨습니다. 데몬은 하나인데 대시보드를 보는 사람의 언어는 브라우저마다 다를 수 있어, 서버가 고른 언어는 애초에 맞을 수가 없었습니다. 이제 문장은 화면이 만듭니다. - 날짜·시각 표기가 화면 언어를 따릅니다(종전엔 항상 한국식이었습니다). ### Fixed - **안내 문구 네 개가 번역 카탈로그에 영영 닿지 못하던 것.** 줄바꿈으로 시작하는 문구가 조회에 실패해, 언어를 바꿔도 그 넷은 늘 기본 문구로만 나왔습니다. - 백그라운드 작업 카드의 이름 판정이 **화면에 보이는 글자**에 매여 있던 것. 그 문구를 번역하면 한국어가 아닌 화면에서 작업 이름·매니저 배지가 어긋났습니다. ## [0.38.0] - 2026-08-25 ### Added - **모델 프로파일 배지 색을 대시보드에서 고릅니다.** 설정 → 모델 프로파일 카드에 실제 배지가 뜨고, 그 옆에서 색을 고르면 고르는 동안 바로 보입니다. 색을 정한 프로파일에만 「색 초기화」가 붙습니다. 이 색은 백그라운드 작업 카드·에이전트 카드에도 같이 적용돼, "어느 프로파일로 돈 작업인가"가 화면마다 같은 색으로 보입니다. ### Changed - **다음 메시지 제안이 답변과 함께 나옵니다.** 종전엔 답을 보낸 뒤 LLM 을 한 번 더 불러 제안 한 줄을 만들었습니다(그 호출만 매 턴 최대 39,600자를 다시 읽었고 캐시도 못 탔습니다). 이제 비서가 답변을 쓰면서 같이 내놓습니다 — 실측으로 제안에 쓰이던 시간이 2초에서 **0** 이 됐습니다. 켜고 끄는 것과 동작은 그대로입니다. - **배지에 프로파일 이름이 적은 그대로 뜹니다.** 종전엔 대문자로 바꿔 보여줬는데, 프로파일 이름을 직접 지으면(`gpt-high` 등) 그건 지은 이름이 아니게 됩니다. ### Fixed - **아침 알림이 두 번 오던 것** — 예약 작업이 백그라운드 매니저에게 일을 넘기면, 결과가 같은 채널로 두 번 갔습니다. "이미 보낸 곳인가"를 채널 **이름**으로 판단해서, 목적지는 같은데 이름이 다른 경우를 못 걸렀습니다. 이제 실제 배달 주소로 판단합니다 — 주소가 다르면 종전처럼 그대로 보냅니다(자리를 비웠을 때 완료 알림이 오는 건 그대로입니다). - **답변 끝에 내부 표식이 잠깐 보이던 것** — 대시보드는 글자가 타이핑되듯 그려지는데, 그 경로에서 제안용 표식이 화면에 잠깐 스쳤습니다. ## [0.37.0] - 2026-08-24 ### Added - **모델 프로파일마다 추론 강도를 따로 정합니다.** 풀 원소를 객체로 적으면(`{ "model": "anthropic:claude-opus-5", "reasoning": "high" }`) 같은 모델을 프로파일마다 다른 강도로 씁니다. 말로도 됩니다 — "high 프로파일의 opus 를 중간으로" 처럼요. 우선순위는 좁은 것이 이깁니다 (풀 원소 > `models.reasoning` 전역 > 모델 카탈로그 기본). - **프로파일 배지 색을 고릅니다.** `"color": "#34d399"` 를 적으면 대시보드 카드와 잡 배지가 그 색으로 뜹니다. 종전엔 `high`·`mid`·`low` 세 이름만 색이 있어 직접 만든 프로파일은 전부 회색이었습니다. 안 적으면 지금 색 그대로입니다. - **설정에서 변경 이력을 봅니다.** 설정 → 변경 이력 → 「보기」 로 이 설치본의 릴리스 노트 전문을 대시보드에서 읽습니다. - **백그라운드 스텝에 시각이 붙습니다.** 도구마다 "3분 전" 이 실행시간 옆에 뜨고, 지금 도는 도구는 `⏳ 16s` 로 흘러갑니다. 잡이 끝나면 그 표시는 걷힙니다. ### Changed - **다음 메시지 제안이 내가 친 턴에만 나갑니다.** 백그라운드 작업이 끝나 비서가 정리 발언을 할 때도 제안을 만들던 것을 멈췄습니다. 그리고 `suggestions.nextMessage.profile` 설정이 **실제로 동작합니다** — 종전엔 읽기만 하고 늘 기본 프로파일로 돌았습니다. 30초 데드라인도 생겨서, 백엔드 과부하 때 턴마다 3분씩 재시도하던 것이 끊깁니다. - **입력창 위 진행 표시가 내 대화만 말합니다.** 다른 세션 수 `(+N)` 를 뺐습니다 — 그 사실은 세션 탭의 진행 점이 이미 알려줍니다. - **README 를 랜딩 페이지로 다시 짰습니다.** 상세는 `docs/features.ko.md`·`docs/hooks.ko.md`· `docs/gateway.ko.md` 로 옮겼습니다(내용 그대로). - **GitHub 랜딩이 영어가 됐습니다.** `README.md`=영어, `README.ko.md`=한국어입니다(옛 `README.en.md` 는 없어졌습니다). 저장소 설명·토픽이 영어라 첫 화면만 한국어면 입구와 내용이 갈렸습니다. **하위 문서(`docs/`)는 한국어가 기본**으로 그대로입니다 — 작업 언어가 한국어고 거기가 원본이라서요. 두 README 는 상단 링크로 오갑니다. - **구독 토큰 사용에 약관 주의를 명시했습니다.** `claude setup-token`·ChatGPT 구독 로그인은 제공사 약관이 허용하지 않을 수 있고, 특히 LLM 게이트웨이와 함께 쓰면 개인 구독이 임의 앱의 API 백엔드가 됩니다. 막지는 않되 [설치와 운영](docs/setup.ko.md#구독-토큰을-쓰기-전에)에 적었습니다. ### Fixed - **새로고침하면 백그라운드 패널의 작업이 사라지던 것** — 세션을 바꿨다 돌아와야 보였습니다. "지금 무엇을 하는 중" 도 같이 사라졌는데 이제 남습니다. - **살균기가 낱말 중간의 `sk-`·`eyJ` 를 먹던 것** — 스킬 폴더 `disk-cleanup` 이 화면에 `di[REDACTED]` 로 떴습니다. 진짜 키는 그대로 가려집니다. - **스킬 배지가 `스킬:?` 로 뜨던 것** — 경로를 넘기는 호출(프로젝트 전용 스킬, 매니저· 서브에이전트가 쓰는 스킬 대부분)에서 이름이 안 보였습니다. - **모바일에서 화면이 옆으로 밀리던 것** — 긴 URL·경로가 안 끊겨 문서 전체가 튀어나갔습니다. - **`/code-review` 가 대화를 오래 막던 것** — 넓은 검토를 요청하면 여러 검토자를 **대화 앞에서** 띄워, 끝날 때까지 다른 말을 못 붙였습니다(실측 8분 37초). 이제 백그라운드 작업으로 넘기고 즉시 응답하며, 검토자는 그 안에서 돕니다. - **trigger 등록 확인을 "앞으로 묻지 마" 했는데 다시 묻던 것** — 그 설정을 기억에 적어 뒀는데 기억 색인은 오래된 것부터 접히므로, 한 번 적고 안 쓰는 설정이 가장 먼저 사라졌습니다. 이제 이 설치본의 상시 지침(`AGENT.md`)에 적습니다. - 빌트인 스킬·에이전트가 **없는 도구 이름**을 부르던 것(8곳) — 실제 이름으로 고쳤습니다. ### Security - **DNS 리바인딩 방어** — 대시보드·브리지가 `Host` 를 검사합니다. 악성 웹페이지를 열기만 해도 그 페이지가 자기 도메인을 `127.0.0.1` 로 바꿔치기해 로컬 대시보드에 도달할 수 있었고, 브라우저가 same-origin 으로 착각하므로 기존 CSRF 방어로는 막히지 않았습니다. 도달하면 대화 전문을 읽고 비서에게 지시까지 넣을 수 있습니다. **로컬·IP 접속은 설정이 필요 없습니다**(리바인딩은 이름이 있어야 성립하므로). MagicDNS 같은 **이름**으로 원격 접속할 때만 `DASHBOARD_ALLOWED_HOSTS`·`HTTP_BRIDGE_ALLOWED_HOSTS` 에 적어주세요 — 안 적어서 막히면 403 응답이 적을 값을 알려줍니다. ## [0.36.0] - 2026-08-23 **지난 대화를 찾을 수 있습니다.** 대시보드 채팅에서 `Ctrl`/`⌘`+`F` 또는 `🔍 검색` 을 누르면 옆에 검색 패널이 열리고, **모든 세션을 가로질러** 찾습니다. 결과를 고르면 그 대화의 **바로 그 메시지 위치까지** 이동해 잠깐 강조합니다. 브라우저 찾기처럼 `3/11` 을 보며 `↑`·`↓` 로 다음·이전 결과를 오갈 수 있고, 패널은 닫히지 않습니다. **백그라운드 작업이 시간에 잘리지 않습니다.** 종전엔 2시간이 지나면 매니저·에이전트를 강제로 끊었는데, 그때 끊긴 작업은 멈춰 있던 게 아니라 **잘 돌고 있던 것**인 경우가 많았습니다. 이제 시계는 죽이는 대신 **확인합니다** — 오래 조용하면 무엇을 하고 있었는지 근거를 모아 그 작업을 시킨 쪽에 보고하고, 계속할지 그만둘지는 사람이 정합니다. ### Added - **대화 검색** — 전 세션 가로질러. 조사가 붙은 한국어 어절도 찾습니다(`윈도우에서` 에서 `윈도우` 로 검색됨). 결과에 어느 대화인지, 어느 부분이 걸렸는지 함께 보입니다. - `🔍 검색` 버튼 또는 `Ctrl`/`⌘`+`F` (채팅 화면에서만 — 다른 화면에서는 브라우저 기본 찾기 그대로). 오른쪽 패널로 열리고 채팅 폭은 그대로입니다. 폭은 드래그로 조절되고 저장됩니다. - `↑`·`↓` 로 결과를 오갑니다(`3/11` 표시). 결과를 눌러도 패널은 닫히지 않습니다. - 결과를 고르면 **그 대화의 그 메시지 위치까지** 이동해 잠깐 강조합니다. - 결과가 많으면 **몇 건 중 몇 건인지 말하고**, 아래로 내리면 이어서 불러옵니다. - 보관(archive)한 대화, 대시보드에 없는 내부 작업 기록은 검색에 나오지 않습니다. - **훅이 눈에 보입니다** — 전역 훅은 인벤토리에서, 프로젝트 전용 훅은 그 프로젝트 상세에서. 어떤 이벤트에 무엇이 걸려 있는지 확인할 수 있습니다. - **작업 점검** — 오래 조용한 백그라운드 작업을 알려줍니다. 무엇을 하던 중이었는지(진행 중인 도구와 그 경과, 마지막 활동 시각)를 함께 전합니다. 판단할 상대가 아무도 없는 작업만 자동으로 정리하고, **그때도 정리했다고 알려드립니다.** - `/agents` 에 지금 무엇을 하는 중인지 한 줄 추가 — 진행 중인 도구와 경과, 없으면 마지막 활동 이후 시간. ### Changed - **백그라운드 작업의 시간제한을 없앴습니다.** 오래 걸리는 작업이 도중에 잘리지 않습니다. 멈춘 것 같으면 위 「작업 점검」이 알려주고, 중지는 언제든 직접 할 수 있습니다. - **전체 활동 카드를 펼치면 마크다운으로 보입니다** — 긴 줄은 카드 폭에 맞춰 접히고, 코드 블록만 따로 가로 스크롤합니다. - **메시지 복사가 마크다운 원문을 담습니다** — 붙여넣었을 때 서식이 살아 있습니다. - **긴 카드에서도 `⋯` 메뉴 버튼이 보입니다** — 화면에 보이는 영역을 따라옵니다. - **`/sessions` 는 조회·설정 확인을 대화 기록에 남기지 않습니다** — 목록을 보거나 대화방을 묶는 것은 그 방의 설정이지 대화가 아닙니다. 보낸 채널에 한 번 보이고 사라집니다. **실제로 무언가를 바꾼 것**(보관·복원)은 명령과 답이 짝으로 남습니다. ### Fixed - **백그라운드 에이전트가 멈춰도 아무 말이 없던 것** — 도구가 응답하지 않으면 그 작업이 영원히 「진행 중」으로 남고 결과도 알림도 오지 않았습니다. 이제 반드시 닫히고 알려줍니다. - **텔레그램 `/sessions` 목록이 대시보드와 달랐던 것** — 대시보드에 없는 대화가 텔레그램 에만 떴습니다. 이제 두 곳이 같은 목록을 보여주고, 숨긴 개수도 알려줍니다. - **`/clear` 가 무엇을 하는지 불분명했던 것** — 대화 내용만 지우고 대화 자체는 남습니다. 이제 그 사실과 함께 「대화를 목록에서 없애려면」 무엇을 하면 되는지 같이 안내합니다. - **위로 스크롤하면 같은 시각의 메시지가 사라지던 것** — 같은 밀리초에 기록된 질문과 답이 페이지 경계에 걸리면 한쪽이 영영 안 왔습니다(측정: 120개 중 96개만 도달). 이제 전부 옵니다. 검색의 「더 불러오기」도 같습니다. - **전체 활동·검색 미리보기가 글자를 먹던 것** — 마크다운 기호를 벗기는 과정에서 `ls *.md *.ts`·`node_modules`·`--include="*.ts"` 같은 셸 명령과 경로, 정규식이 조용히 달라졌습니다. 이제 그대로 보입니다(코드 표시 `` ` `` 안은 손대지 않습니다). - **검색어를 지웠는데 옛 결과가 되살아나던 것** — 두 글자 미만으로 지우면 목록은 비는데 뒤늦게 도착한 응답이 화면을 덮고, 거기서 `↑` 를 누르면 엉뚱한 대화로 갔습니다. - **보관한 대화의 이름이 복원 목록에서 사라지던 것** — 이름 대신 그 방의 첫 문장이 떴습니다. - **`/sessions` 에 모르는 하위명령을 쳤을 때 답 없이 명령만 남던 것.** ## [0.35.1] - 2026-08-22 **윈도우에서 검은 터미널이 계속 떠 있던 것을 없앴습니다.** 0.35.0 이 자동 재기동을 가져오면서 데몬을 콘솔 창으로 띄우게 됐는데, 그 창이 화면에 그대로 남았습니다. 업데이트가 도중에 실패하던 문제, 그리고 예약작업을 만들 수 없는 환경(회사 PC 등)에서 자동시작을 아예 못 걸던 문제도 함께 고쳤습니다. **0.35.0 을 쓰신다면 업데이트를 권합니다.** ### Fixed - **검은 터미널이 계속 떠 있던 것** — 이제 창 없이 조용히 돕니다. - **업데이트가 실패하고 되돌아가던 것** — 멈춰야 할 것을 다 안 멈춰서 파일이 잠긴 채 의존성 설치가 실패했습니다(`EPERM`). 업데이트가 끝까지 갑니다. - **업데이트가 되돌아갈 때 이전 상태로 못 돌아가던 것** — 되돌릴 기준점을 잘못 잡고 있었습니다. 이제 업데이트 직전 상태로 정확히 복구합니다. - **`중지` 후에도 1분 뒤 다시 살아나던 것.** - **업데이트만으로는 자동시작 설정이 갱신되지 않던 것** — 예전 방식으로 설치한 경우 업데이트해도 그대로였습니다. 이제 알아서 새 방식으로 옮겨집니다. - 업데이트 실패 원인이 로그에 안 남던 것(경고가 통째로 사라지거나 알아볼 수 없는 형식으로 기록되던 문제). ### Added - **자동시작 등록이 막힌 환경을 위한 대비책** — 회사 PC 처럼 정책으로 예약작업을 만들 수 없으면 시작프로그램 폴더로 대신 등록합니다. 이 경우 로그온 시 자동 실행은 되지만 **죽어도 자동으로 되살아나지는 않으며, 설치 중에 그 사실을 알려드립니다.** - 윈도우 명령이 응답하지 않을 때 30초 후 포기 — 설치가 무한정 멈춰 있지 않습니다. ## [0.35.0] - 2026-08-22 **윈도우에서도 비서가 죽으면 스스로 되살아납니다.** 종전엔 윈도우만 자동 재시작이 없어서(로그온 시 1회 가동) 한 번 멈추면 그대로였고, 재시작을 스스로 해보려던 방식이 Windows Defender 에 **악성 프로그램으로 차단**되기까지 했습니다. 재기동 책임을 "죽는 쪽"에서 "살아 있는 쪽(감독자)"으로 옮겨 세 OS 가 같은 방식으로 돕니다. ### Added - **윈도우 자동 재기동(KeepAlive)** — 데몬이 죽으면 감독자가 즉시 다시 띄웁니다. 감독자까지 멈추면 1분 반복 트리거가 잡아, 되살릴 수단이 하나로 몰려 있지 않습니다. macOS `launchd` · Linux `systemd` 와 같은 성질이고 **관리자 권한이 필요 없습니다.** ### Changed - **윈도우 자동시작이 예약작업으로 바뀝니다**(종전 레지스트리 Run 키 + 숨김 VBS). 업데이트하면 **자동으로 이관**되며 옛 등록은 정리됩니다 — 따로 하실 일은 없습니다. - `설치`·`시작`·`재시작`이 **데몬이 실제로 떴는지 확인한 뒤에** 성공을 알립니다. 종전엔 세 OS 모두 설치가 등록만 하고 성공을 알려, 데몬이 안 떠도 알 수 없었습니다. ### Fixed - **Windows Defender 가 재시작을 차단하던 것** — 재시작 방식이 악성 프로그램의 수법과 구분되지 않아 `Trojan:Win32/Commando.A!ml` 로 분류됐습니다. 그 방식 자체를 없앴습니다. - **윈도우에서 `중지`가 듣지 않던 것** — 멈춘 뒤 1분 안에 다시 살아났습니다. - **macOS 에서 재설치가 돌고 있던 데몬을 멈춘 채 "완료"라고 하던 것** — 등록 해제와 재등록이 겹쳐 실패했는데도 성공으로 보고했습니다. - **업데이트만 받은 기존 윈도우 설치가 멈춰 있던 것** — 새 방식으로 이관되지 않아 시작에 실패하거나, 재시작 후 되살아나지 못했습니다. ## [0.34.0] - 2026-08-21 진행 표시가 **내 대화의 상태**만 말하도록 고쳤습니다 — 다른 세션이나 백그라운드 작업 때문에 "작업 중" 이 뜨지 않고, 지금 무엇을 하는 중인지(생각 중 · 답변 쓰는 중 · 도구 실행 중)까지 보여줍니다. 적대 검토에서 나온 결함 아홉 건도 함께 고쳤습니다. ### Added - **진행 표시가 무엇을 하는 중인지 말합니다** — `생각 중` · `답변 쓰는 중` · `<도구> 실행 중`. 백그라운드 매니저·에이전트 카드도 각자 자기 상태를 같은 방식으로 보여줍니다. - **메인이 비어 있고 백그라운드만 도는 상태**를 따로 표시합니다(`대기 중 · 백그라운드 N건 진행`) — 그때는 말을 걸어도 된다는 뜻입니다. - **홈 「상태 요약」에 버전 행** — 모바일은 헤더가 좁아 버전을 숨기므로, 어떤 빌드로 도는지 볼 자리가 없었습니다. 받을 업데이트가 있는지도 같은 줄에 나옵니다. - **카드에 상대시간**(`3분 전`)과 총 소요시간 표시. - **설정에서 오늘 로그 비우기** — 파일을 지우지 않고 잘라내므로 데몬이 계속 기록합니다. - **매니저·서브에이전트가 자기 역할을 압니다** — 종전엔 셋 다 같은 지침을 받아, 매니저가 자기 안에 없는 도구를 쓰라는 안내를 읽고 있었습니다. ### Changed - **진행 표시는 내 대화의 상태입니다** — 다른 세션의 작업이나 백그라운드 잡 때문에 "작업 중" 이 뜨지 않습니다(다른 세션은 세션 탭의 진행 점이 알려줍니다). - **업데이트 칩에서 건수를 뺐습니다** — 그 숫자는 원격 커밋 수라 실제로 받는 변화량과 무관했습니다. 정확해 보이는데 뜻이 다른 숫자는 없는 편이 낫습니다. - **MCP 서버 등록 안내** — "등록 후 재시작해야 연결됩니다" 는 조건부로만 참이었습니다. 이제 "먼저 써 보고, 도구가 안 보일 때만 재시작" 으로 안내합니다. ### Fixed - **이력을 불러오는 중에 "아직 대화가 없습니다" 라고 단언**하던 것 — 첫 화면부터 그 문구가 박혀 있어, 느린 연결일수록 거짓말이 오래 보였습니다. 로드 실패도 같은 문구로 삼켜졌습니다. - **받을 업데이트가 조용히 사라지던 것** — 대시보드 스크립트 로드 순서 때문에 업데이트 판정이 예외로 삼켜져, 칩도 홈도 "받을 게 없다" 고 말했습니다. - **업데이트 완료 판정이 옛 데몬을 보던 것** — 재시작 전에 응답한 이전 프로세스를 "복귀" 로 읽어, 새로고침 후에도 옛 버전이 표시됐습니다. - **갈라진 브랜치를 "받을 수 있다" 고 말하던 것** — 로컬에만 있는 커밋이 있으면 업데이트가 실패하는데 버튼이 떴습니다. - **한글·공백이 든 파일 경로가 알아볼 수 없게 표시**되던 것(업데이트 보류 사유). - **탭을 빠르게 전환하면 "아직 대화가 없습니다" 가 다시 뜨던 것.** - **매니저가 또 다른 매니저를 띄울 수 있던 것** — 어댑터에만 있던 제한을 코어로 옮겨 무한 백그라운드 확산을 막습니다. - **새 관리 엔드포인트가 권한 표에서 누락되면 인증 없이 통과**하던 것. - **컨텍스트 사용량 표가 틀렸을 때 조용하던 것** — 이제 로그에 판정 수치와 함께 남습니다. ## [0.33.0] - 2026-08-21 대시보드에서 업데이트를 바로 받을 수 있게 됐고, `/status` 의 컨텍스트 표시가 거짓 경보를 내던 것을 고쳤습니다. 되돌릴 수 없는 삭제 명령 하나를 뺐습니다. ### Added - **대시보드 업데이트 칩.** 받을 업데이트가 있으면 헤더 우측에 뜨고, 누르면 확인 후 업데이트하고 데몬이 돌아오면 화면을 자동으로 새로고침합니다. 지금까지는 새 버전이 나왔다는 신호가 어디에도 없어서, 직접 확인하지 않으면 옛 빌드로 계속 돌았습니다. 받을 수 없는 상태(커밋 안 된 로컬 수정으로 충돌)면 버튼 대신 **이유**를 보여줍니다 — 눌러도 실패할 버튼을 내밀지 않기 위해서입니다. ### Fixed - **`/status` 가 항상 "컨텍스트 거의 참 — `/clear` 고려" 를 띄우던 것.** 컨텍스트가 찬 게 아니라 최신 모델의 창 크기를 5배 작게 적어둔 표가 원인이었습니다(실제 1M 인데 200K). 정상적인 대화가 100% 를 넘긴 것으로 계산돼, 그 경고를 보고 `/clear` 를 누르면 **멀쩡한 맥락을 잃었습니다.** 이제 실제 창 크기로 계산하고, 혹시 100% 를 넘겨 계산되면 "거의 참" 대신 **표가 틀렸을 수 있다**고 알립니다. - **백그라운드 작업이 같은 응답 안에서 두 번 실행되던 것.** 비용이 두 배로 나갔습니다. 같은 요청에 붙은 작업 요약에서 "누구를 소환했는지"가 빠지던 것도 함께 고쳤습니다. - **백그라운드 작업 배지가 이력에서 사라지던 것.** 대화를 다시 그리는 순간 조용히 없어졌습니다(화면을 그리는 코드가 두 벌인데 한쪽만 갱신돼 있었습니다). - **`도구를 쓰지 않았다` 경고가 시킨 대로 한 작업을 나무라던 것.** "한 줄만 답하라"고 지시한 경우까지 "결과가 지어낸 것일 수 있다"고 말했습니다. 이제 도구가 **필요한** 지시였는지를 함께 봅니다. - **`/clear` 가 세션을 통째로 날리던 것.** 맥락만 지웁니다. - **설치·업데이트가 조용히 실패하던 경로 두 곳** — 네이티브 모듈 보호가 다섯 경로 중 둘에 없었고, 그중 하나가 유닉스 `/update` 본체였습니다. - 작업 결과가 전달되지 않아도 아무도 모르던 것, `doctor` 의 오경보와 종료 코드. ### Changed - **`/reset` 을 슬래시 명령에서 뺐습니다.** 되돌릴 수 없는 삭제를 한 글자 차이(`/reset` ↔ `/restart`)로 놓아둘 이유가 없습니다. 같은 일이 필요하면 비서에게 말로 시키면 되고, 그때는 확인을 거칩니다. - **위임 안내가 "얼마 드는지" 대신 "어디로 보내는지"를 말합니다.** 종전엔 "위임은 대략 5배 토큰" 이라는 외부 인용 수치가 실려 있었는데, 실측하면 1명 위임은 그보다 훨씬 작았습니다. 부풀려진 가격표는 비서가 도움을 덜 부르게 만들 뿐이라, 수치를 빼고 판단 기준만 남겼습니다. ## [0.32.1] - 2026-08-20 v0.32.0 직후에 나온 것들을 잡은 핫픽스입니다. 백그라운드 작업을 쓰신다면 올려주세요. ### Fixed - **대시보드에서 진행 중인 작업 카드가 사라지던 것.** 매니저가 하위 에이전트를 기다리는 동안 카드가 목록에서 없어지고, 새로고침해도 돌아오지 않았습니다(헤더의 개수는 그대로라 숫자와 화면이 어긋났습니다). 두 원인이 겹쳐 있었습니다 — 화면이 "서버 응답에 없으니 끝난 작업" 이라고 **추측**한 뒤 그 추측을 서버 사실보다 우선했고, 원 대화를 모르는 채 만들어진 카드가 세션 필터에서 빠졌습니다. 이제 서버가 아는 사실이 이깁니다. - **`doctor` 가 정작 필요할 때 아무 말도 못 하던 것.** 네이티브 모듈(SQLite)이 안 열리면 진단 명령 자체가 같이 죽어, 원인도 조치도 안 보였습니다. 데몬이 부팅마다 죽는 바로 그 상황입니다. 이제 `[install]` 항목이 먼저 나오고, 무엇이 문제인지와 **무엇을 하면 되는지**를 알려준 뒤 멈춥니다. - `doctor` 가 전역 `tiguclaw` 명령을 점검합니다 — 없거나, **다른 설치본**을 가리키는 경우까지. 후자는 `tiguclaw update` 가 엉뚱한 설치를 고치면서도 에러가 안 나서 알아채기 어려웠습니다. ### Added - **보안 취약점 신고 경로**(비공개) · **이슈 템플릿**(버그 / 설치·업데이트 실패) · **기여 안내**. 설치 문제는 OS·Node 버전·npm 설정·로그가 있어야 원인이 갈려서, 템플릿이 그 값들을 먼저 묻습니다. 무언가 이상하면 `tiguclaw doctor` 를 돌리고 그 출력을 붙여주세요. - 문서 안내를 README 에 정리했습니다 — 잘 안 될 때 어디로 갈지, 코드를 읽을 때 무엇부터 볼지. ## [0.32.0] - 2026-08-19 비서가 여러 작업을 **동시에** 맡길 수 있게 된 판입니다. 종전엔 서브에이전트에게 일을 시키면 그 답이 올 때까지 대화가 멈췄는데, 이제 맡겨두고 계속 이야기할 수 있습니다. 맡긴 일은 **잊히지 않습니다** — 끝나면 결과가 돌아옵니다. ### Added - **백그라운드 서브에이전트.** 비서가 서브에이전트를 띄우고 기다리지 않을 수 있습니다. 여러 명을 동시에 돌리고, 끝나는 대로 결과를 받아 마무리합니다. 기다릴지 말지는 비서가 일의 성격을 보고 정합니다(짧으면 그 자리에서 기다립니다). - 백그라운드로 도는 서브에이전트도 **중지**할 수 있고, 진행 중에 **지시를 얹을** 수 있습니다(매니저와 동일). ### Changed - 일을 맡긴 쪽은 **결과를 받기 전엔 끝나지 않습니다.** 맡겨놓고 먼저 종료해 결과가 갈 곳을 잃는 일이 없습니다. - 작업을 중지하면 그 아래 작업들도 함께 멈추고, 알림은 **한 번**만 옵니다 (종전엔 하위 작업 수만큼 왔습니다). - 하위 작업만 중지하면 위로 번지지 않습니다. 그 사실이 "실패"가 아니라 **"중지됨"** 으로 전해져, 비서가 방금 멈춘 일을 다시 시작하지 않습니다. ### Fixed - 외부 MCP 서버(대상 앱)를 껐다 켜면 그 뒤 **모든 작업 위임이 즉시 실패**하던 것. 이제 그 서버만 건너뛰고, 앱을 다시 켜면 자동 복구됩니다. - `/stop` 이 그 대화에서 돌던 백그라운드 작업을 안 끊던 것. 이제 함께 멈추고 몇 건을 멈췄는지 알려줍니다. - 데몬이 재시작으로 백그라운드 작업을 잃었을 때 **알림이 안 오던 것**. - 작업 카드의 시각 자리에 숫자 원값(`1787121377393`)이 뜨던 것. - 실행 정책이 잠긴 윈도우에서 한 줄 설치가 멈추던 것 — `npm.cmd` 로 호출합니다. - Claude 구독으로 쓰려는 분께 온보딩 안내가 한 걸음 앞에서 끊기던 것. ## [0.31.0] - 2026-08-19 설치·업데이트가 조용히 실패하던 것들을 잡은 판입니다. 여러 대에 깔아 쓰신다면 이 버전 이상으로 올리시길 권합니다. ### Fixed - **훅이 데몬을 죽이던 것** — `PreToolUse` 훅이 stdin 을 읽지 않고 즉시 끝나면(`exit 0` 류) 파이프가 닫힌 뒤의 쓰기가 처리되지 않은 오류가 되어 **데몬이 통째로 종료**됐습니다. 리눅스에서 재현되고 macOS 에선 안 나던 종류라 조용했습니다. - **설치가 "성공" 했는데 못 쓰던 것** — npm 설정 `ignore-scripts=true`(회사 보안 정책 등)가 켜져 있으면 설치는 정상 종료하는데 네이티브 모듈이 빌드되지 않아, 데몬이 **부팅할 때마다 죽었습니다.** 이제 설치·업데이트가 모듈을 실제로 열어보고, 안 열리면 **스스로 다시 빌드**합니다. 그래도 안 되면 무엇을 설치해야 하는지 알려주고 멈춥니다(반쯤 설치된 채로 끝나지 않습니다). - **윈도우 설치가 "Node.js 20 이상이 필요합니다 (지금 v24.x)" 로 멈추던 것** — 자기모순 메시지였습니다. PowerShell 이 명령 인자의 따옴표를 넘기지 않아 버전 확인이 깨진 것이고, Node 는 문제가 없었습니다. - **첨부 파일이 안 보내지던 경우** — 대화방을 세션에 묶어 쓰실 때, 세션을 보관하면 그 방이 사라진 세션에 계속 묶여 있었습니다(대시보드에서 탭을 닫는 경우). - **같은 자가 점검 알림이 재시작마다 반복되던 것** — 하루 1회로 묶여 있었지만 그 시계가 재시작마다 초기화됐습니다. - **모델 프로파일이 비어 보이던 것** — 설정 파일에 프로파일이 없는 새 설치에서는 인증한 provider 로 자동 구성된 목록(high·mid·low)이 **대시보드와 비서에게 안 보였습니다.** - **기본 세션 이름을 바꿔도 `/sessions` 목록에서만 예전 이름으로 나오던 것.** - **대시보드에서 만든 세션이 목록에 첫 문장으로 뜨던 것** — 이제 이름이 붙습니다. ### Added - **세션 정리를 말로** — "이름 없는 세션들 정리해줘" 처럼 부탁하면 목록을 보여주고 보관합니다. 삭제가 아니라 숨김이라 대화 기록은 그대로 남고 되돌릴 수 있습니다. ### Changed - **도구가 오래 걸린다는 알림이 훨씬 덜 뜹니다** — 기준을 3분에서 10분으로 늘렸고, 서브에이전트처럼 **원래 오래 걸리는 작업**은 알리지 않습니다(진행 상황은 백그라운드 작업 패널에서 계속 보입니다). ## [0.30.0] - 2026-08-18 ### Security - **첨부 파일 서빙이 홈 밖 파일을 내보낼 수 있던 것을 막았습니다.** 첨부 폴더 안에 홈 바깥을 가리키는 심링크가 있으면 그 파일이 그대로 나갔습니다. 이제 실제 경로를 확인한 뒤 첨부 폴더 안에 있을 때만 서빙합니다. ### Added - **추론 강도를 말로 바꿉니다** — "솔 추론 강도 중간으로" 라고 하면 됩니다. 짧은 이름도 풀어주고(`sol` → `codex:gpt-5.6-sol`), 여러 모델에 맞으면 되묻습니다. 비우면 해제되어 그 모델의 기본값으로 돌아갑니다. 지금까지는 설정 파일을 직접 고쳐야 했습니다. ### Changed - **막혔을 때 「없어서 못 합니다」로 끝내지 않습니다.** 필요한 프로그램·라이브러리가 없으면 갖추는 방법을 찾아 제시합니다(예: "PDF 를 읽을 도구가 없습니다 → `brew install poppler` 로 갖출 수 있습니다. 할까요?"). 기계를 바꾸는 일은 전과 같이 **승인을 받고** 합니다 — 달라진 것은 *제안조차 하지 않던 것*입니다. - **코드 리뷰가 「무엇을 바꿨나」에서 「무엇을 다시 봐야 하나」를 끌어냅니다.** 계약을 바꿨으면 호출부 전부, 조건을 뒤집었으면 그 조건에 도달하는 입력 전부 — 2차 결함이 나는 자리를 체크리스트로 훑습니다. ### Fixed - **늦게 온 메시지 제안이 버려지던 것** — 응답이 도착 순서와 다르게 오면 제안이 조용히 사라졌습니다(약 10%). 순서가 아니라 최신성으로 판정하도록 고쳤습니다. - **토큰 사용량 집계에서 일부 대화가 0으로 세어지던 것** — `/status` 의 컨텍스트·사용량 수치가 실제보다 작게 나왔습니다. ## [0.29.0] - 2026-08-15 ### Added - **다음 메시지 제안에 수락 버튼** — 제안 옆 `→` 를 누르면 입력창에 채워집니다(전송은 여전히 직접). 모바일에서 입력창을 탭하는 것만으로 제안이 들어오던 동작을 대체했습니다. - **`WebFetch(prompt)` 가 실제로 동작** — 받아온 문서에 지시를 돌려 답만 돌려줍니다(토큰 절약). 그 답에는 **출처 표시**가 붙습니다 — 외부 문서에서 나온 내용이라 검증된 사실이 아닙니다. - **모델별 추론 강도**(`models.reasoning`) — 세 어댑터 모두에서 같은 설정이 먹습니다. 지정하지 않으면 백엔드가 말한 기본값을 그대로 씁니다. - **할일 카드** — 접히면 진행 상황 한 줄, 펼치면 목록. 어느 모델로 돌든 같은 모양입니다. ### Changed - **도구를 접지 않습니다** — 도구 목록을 매번 전부 싣습니다. 이름을 이미 아는 도구의 스키마를 열려고 추가 왕복을 하던 것이 사라졌습니다. 외부 MCP 서버 설정의 `alwaysLoad` 는 무시합니다 (켜면 매 턴 연결까지 기다리게 됩니다). - **백그라운드 작업을 취소하면 비서가 압니다** — 실패가 아니라 취소로 보고하고, 되돌리거나 다시 시작하지 않습니다. - **한도 리셋 안내가 시각으로** — `약 8118분 후` 대신 `8월 20일 오후 2시 31분쯤 (약 5.1일 후)`. - 오래 걸리는 도구 통지가 "멈춰 있어요" 로 단정하지 않습니다(정상일 수 있다고 먼저 말합니다). ### Fixed - **재시작이 보장될 때만 종료합니다** — 재기동 수단을 확보하지 못하면 데몬을 유지하고 알립니다. 자동 재기동이 없는 환경(Windows)에서 재시작 한 번에 무기한 멈추던 문제를 막습니다. - **기동 결과를 확인하고 보고합니다** — 포트가 열렸는지, 그게 우리 데몬인지 확인한 뒤에만 성공을 표시합니다. 업데이트가 재가동에 실패하면 성공으로 요약하지 않습니다. - **마스킹이 토큰 뒤를 지우지 않습니다** — `Bearer …` 뒤 문장이 조용히 사라지던 문제와, `id:secret`·URL 인코딩 토큰이 절반만 가려지던 문제를 함께 고쳤습니다. - 큰 인자를 만드는 도구가 "무진전" 으로 잘못 중단되던 문제. - 도구 반복 상한이 아무 기록 없이 발동하던 문제. ## [0.28.0] - 2026-08-13 ### Added - **자동 DB 백업** — 하루 한 벌, 최근 7벌 보관(`/data/backup/`). `VACUUM INTO` 로 떠서 돌고 있는 데몬을 멈추지 않고 WAL 까지 일관된 사본을 만든다. 기본 켜짐이며 `settings.json` 의 `backup.enabled: false` 로 끌 수 있다. 성공은 조용히, 실패만 알린다. 상태는 `/status` 한 줄로 보인다. - **자가 진단에 자원 축 추가** — 백업이 없거나 오래됐을 때, 그리고 기억 인덱스가 상한에 걸려 일부가 매 턴 프롬프트에 안 실릴 때 알린다(하루 1회로 묶어 배경 소음 방지). - **턴 중간 질문이 함께 보낼 채널로도 간다** — 작업 도중 비서가 선택지를 띄우면, 답변과 같은 규칙으로 텔레그램 등에도 전달된다. 버튼을 누르면 그 답이 **질문을 던진 세션**으로 돌아온다(채널↔세션 바인딩은 그대로 유지). - **LLM 게이트웨이 호출 기록** — 외부 호출 뷰에서 게이트웨이 항목을 펼치면 요청 모델·실제 처리 모델·토큰·소요와 함께 **요청·응답 본문**이 보인다. 전문은 대화 기록에 보존되고 화면에는 앞부분 미리보기(잘린 양 명시)가 뜬다. - **세션 탭 '안 본 메시지' 배지** — 다른 탭에 답이 도착하면 개수가 뜨고, 그 탭을 열면 사라진다. 진행 중 표시(점)와 별개다 — 둘은 다른 사실이다. ### Changed - **백업·자가 진단이 코어에서 돈다** — 종전에는 시계가 self-growth 플러그인에 있어서, 그 플러그인이 안 뜨면 백업과 자가 진단이 함께 조용히 멎었다. 이제 플러그인과 무관하게 돈다. - **기억 인덱스 상한 8KB → 40KB** — 종전 상한에서는 기억의 73% 가 매 턴 프롬프트에 실리지 못하고 조용히 접혔다. - **오래 걸리는 작업을 시간으로 끊지 않는다** — 도구 하드컷이 기본 해제됐다(필요하면 `TOOL_HARD_TIMEOUT_MS` 로 명시 설정). 느린 것은 실패가 아니다. ### Fixed - **실패 원인을 정확히 말한다** — 종전에는 wall-clock 상한·도구 상한·무응답을 모두 "LLM 응답이 멈춰(타임아웃)" 한 문구로 보고해, 진행 중이던 작업이 상한에 잘린 경우까지 모델 탓으로 읽혔다. 이제 원인별로 구분해 말하고 분류 못 한 경우엔 원문을 그대로 싣는다. 실패 시 `[job-failed]` 로그에 경과·분류·스레드·원문이 남는다. - **모델 과부하를 원인으로 지목한다** — 특정 모델만 과부하로 막히는 상황을 사용량 한도와 구분해 보고한다(대책은 사용자가 모델을 바꾸는 것 — 답하는 모델을 시스템이 조용히 바꾸지는 않는다). - **대시보드 메시지 순서** — 작업 중에 보낸 메시지 위로 나중 답변이 올라오던 것. - **대시보드 게이트웨이 항목이 비어 보이던 것** — 기록은 있는데 화면이 그리지 않았다. ## [0.27.0] - 2026-08-11 ### Added - **한 줄로 설치합니다.** macOS·Linux 는 `curl -fsSL .../install.sh | sh`, 윈도우는 `irm .../install.ps1 | iex`. 받고, 설치하고, 설정 마법사까지 이어집니다. 이미 깔려 있으면 덮지 않고 알려줍니다. - **공백이 들어간 이름도 태그로 걸 수 있습니다.** `#[Tigu Engine]` 처럼 대괄호로 감쌉니다 — 그동안 이름에 띄어쓰기가 있는 프로젝트는 태그를 **아예 걸 수 없었습니다**(`#Tigu` 에서 끊겼습니다). 칩을 누르면 알아서 맞는 모양으로 들어가고, 컨텍스트 바의 **+ 새 태그** 로 커서 어디서든 새 태그를 만들 수 있습니다. - **데몬이 안 뜰 때 로그가 원인과 다음 행동을 알려줍니다.** 그동안은 조용히 죽어서 아무것도 안 남았습니다. 이제 왜 죽었는지와 함께 `tiguclaw update` 로 고치라고 안내합니다. ### Fixed - **비서가 마지막 답을 쓰는 중에 보낸 메시지가 통째로 사라지던 것.** 답도 대기 표시도 없이 증발했습니다. 이제 그 메시지는 다음 턴으로 넘어갑니다. - **텔레그램에서 답장하면 원래 대화가 아니라 공통 대화로 가던 것.** "텔레그램에도 보내기" 로 받은 답에 답장할 때 그랬습니다. - **ChatGPT 로그인이 끝났는데 터미널이 안 넘어가던 것.** 이제 브라우저에 「터미널로 다시 보내기」 버튼이 뜨고, 안 되면 주소창을 붙여넣어 진행할 수 있습니다. 그냥 멈춰 있지 않습니다. - **새로고침하면 보던 화면과 세션 탭 위치가 그대로 돌아옵니다.** 홈 화면 카드로 들어간 페이지도 기억합니다. - **채팅에서 보낸 파일을 눌러도 빈 화면이 뜨던 것.** 방금 보낸 파일이 특히 그랬습니다. 문서 파일도 이제 눌러서 열립니다. - **로그를 붙여넣으면 그 안의 `#` 이 전부 컨텍스트 태그로 등록되던 것.** `#` 은 여러 언어의 주석 문자라 로그·설정 파일을 붙여넣을 때마다 태그 목록이 쓰레기로 찼습니다. - **세션 탭을 훑다가 대화가 딸려 스크롤되거나 새로고침되던 것.** - 백그라운드 작업 카드의 편집 도구에 줄 번호가 안 보이던 것. - 자주 쓰는 기억이 밀려나던 것 — 매 턴 실리는 기억 목록이 "최근에 고친 것" 대신 **자주 쓰이는 것** 순으로 남습니다. ### Changed - **뭔가 깨졌을 때는 `tiguclaw update` 한 줄입니다.** 데몬 정지 → 재설치 → 재빌드 → 기동을 순서대로 하고 실패하면 되돌립니다. `git pull` 이나 `npm ci` 를 직접 돌리면 오히려 멀쩡한 설치가 깨질 수 있어(파일 잠금), 문서에서 그 안내를 뺐습니다. - **비서가 확인한 것과 추정한 것을 구분해서 말합니다.** 직접 보지 않은 것을 본 것처럼 단언하지 않습니다. ## [0.26.0] - 2026-08-10 ### Added - **대화가 끝나면 다음에 할 말을 제안합니다.** 입력창에 회색으로 떠 있고 Tab(모바일은 입력창 터치)이면 채워집니다 — 보내는 건 직접 하셔야 합니다. **기본은 꺼져 있고** 설정 화면에서 켭니다(매 턴 토큰을 조금 씁니다). 제안은 새로고침·브라우저 재시작에도 남습니다. - **설정 화면이 생겼습니다.** 그동안 `settings.json` 을 손으로 고쳐야 하던 것을 화면에서 켜고 끕니다. - **답장하면 그 답이 나온 대화로 갑니다.** 텔레그램에서 비서 메시지에 답장하면, 여러 대화가 섞여 있어도 그 답을 만든 대화로 들어갑니다. - **비서가 작업하는 동안 텔레그램에 "입력 중" 이 뜹니다.** 대시보드에서 시킨 작업도 "텔레그램에도 보내기" 를 켜 두면 같이 보입니다. - **대화 압축이 도는 동안 무엇을 하는지 보입니다.** 긴 대화를 요약하느라 오래 걸릴 때 화면이 그냥 멈춘 것처럼 보이던 것 — 이제 이유가 뜨고 얼마나 걸렸는지도 남습니다. - **외부 호출 기록**에 LLM 게이트웨이가 추가됐습니다. 커스텀 엔드포인트와 한 화면에서 보고 필터로 나눠 봅니다. 어떤 모델이 얼마나 썼는지(토큰·소요·성공 여부)가 남습니다. - **새로고침해도 보던 화면과 백그라운드 패널 상태가 유지됩니다.** ### Fixed - **두 대화를 동시에 진행하면 나중 것이 즉시 실패하던 것.** 백그라운드로 작업을 돌리는 중에 다른 대화에서 메시지를 보내면 `Already connected to a transport` 로 턴이 통째로 죽었습니다. 일부 백엔드에서는 죽는 대신 **플러그인 도구가 조용히 사라지는** 형태로 나타났습니다. - **모르는 형식의 파일을 읽으면 깨진 글자를 정상으로 돌려주던 것.** APK·실행파일 같은 파일을 읽으면 판독 불가를 **성공**으로 답해서, 비서가 그 내용을 근거로 잘못 판단할 수 있었습니다. 이제 텍스트가 아니면 그 사실과 파일 크기를 알려주고 다른 방법을 찾도록 안내합니다. - **끝난 백그라운드 작업이 계속 "실행 중" 으로 보이던 것.** 새로고침해야 사라졌습니다. - **긴 작업이 끝났는데 알림이 안 오던 것.** "텔레그램에도 보내기" 를 켜 뒀어도 백그라운드 작업 완료·예약 발화는 그 설정을 따르지 않았습니다. 몇 시간 걸리는 작업일수록 자리를 비우기 마련이라, 정작 필요한 때 안 갔습니다. - 세션 탭이 많아지면 지금 보고 있는 탭이 화면 밖으로 나가도 따라가지 않던 것. - 답글·음성 입력 후 입력창에 커서가 가지 않던 것. ### Changed - **대화 검색이 정확해지고 저장 공간이 줄었습니다.** 검색 색인에 비서 설정 문구가 통째로 섞여 있어, 검색하면 실제 대화가 아닌 설정 문구가 대량으로 걸렸습니다(실측: 154건 중 138건). 색인을 정리해 **검색 결과가 정확해지고 데이터베이스가 45MB 줄었습니다** — 대화 원문은 그대로 보존됩니다. ## [0.25.0] - 2026-08-10 ### Added - **내 앱이 tiguclaw 에게 도구를 맡길 수 있습니다 — 구독만으로도.** OpenAI 호환 게이트웨이에 `tools` 를 실으면 모델이 **실행하지 않고** `tool_calls` 로 돌려주고, 앱이 실행한 결과를 `role:"tool"` 로 되돌려주면 대화가 이어집니다. 지금까지 이 경로는 일부 백엔드에서만 됐고, 안 되는 백엔드에서는 **아무 말 없이 무시**돼서 앱 입장에선 "AI 가 도구를 안 쓴다"로만 보였습니다. 이제 어느 모델로 돌든 똑같이 동작하며, **API 키 없이 구독 로그인만으로도** 됩니다. - **`tool_choice` 가 실제로 지켜집니다.** `"none"`(부르지 마)·`"required"`(반드시 불러)·특정 함수 지정 셋 다 집행합니다. 그전에는 조용히 무시돼서, 특정 함수를 지정해도 **다른 함수가 호출**되곤 했습니다. ### Fixed - **게이트웨이 응답에 비서의 기억이 섞여 나오던 것.** 앱이 자기 `system` 메시지를 안 보내면, 응답에 **이 컴퓨터 주인의 이름이나 진행 중인 프로젝트** 같은 정보가 딸려 나올 수 있었습니다. 게이트웨이 호출은 이제 완전히 격리된 자리에서 실행돼 비서의 인격·기억·설정이 실리지 않습니다. (백엔드 로그인 계정 정보처럼 LLM 제공사가 직접 싣는 항목은 tiguclaw 가 제어할 수 없습니다 — 완전 차단이 필요하면 API 키 방식을 쓰세요.) - **빈 응답이 성공처럼 보이던 것.** 텍스트도 함수 호출도 없는 응답을 정상(200)으로 돌려줘서, 앱은 무엇이 잘못됐는지 알 수 없었습니다. 이제 응답은 **셋 중 하나**입니다 — 함수 호출 · 텍스트 · **명확한 에러**. - **토큰·비용 수치가 실제보다 크게 낮게 나오던 것.** 도구를 여러 번 쓰는 긴 작업에서 출력 토큰이 **마지막 한 번만** 집계돼, 대시보드 카드와 비용 추정이 실제의 몇 분의 일로 보였습니다(실측: 314 vs 5,101 — 16배). 이제 작업 전체 합계를 씁니다. - **첨부 이미지가 게이트웨이 응답에서 안 보이던 것**(0.25.0 개발 중 발생·수정). 위 격리 작업의 부작용으로 이미지가 모델에 도달하지 않았습니다. ### Changed - 한국어 README 의 문체를 경어체로 통일하고, 사실과 어긋난 설명(훅 이벤트 목록·예시 모델명)을 바로잡았습니다. ## [0.24.0] - 2026-08-09 ### Changed - **셸과 검색이 어느 모델에서나 똑같이 동작합니다.** 지금까지는 Claude 로 돌 때와 Codex 로 돌 때 도구가 달라서, 같은 질문에 다른 결과가 나왔습니다. 이제 셋이 같은 도구를 씁니다. - **실행 중인 셸의 출력이 백그라운드 잡 카드에 실시간으로 보입니다.** Claude 로 돌 때는 카드는 뜨는데 **출력이 비어 있었습니다** — 셸이 SDK 안쪽에서 돌아 데몬이 화면에 보낼 내용을 쥘 수 없었기 때문입니다. - **검색이 훨씬 정교해졌습니다.** 매칭 줄만 받던 `Grep` 에 결과 형식(줄·파일 목록·개수 선택)·앞뒤 문맥 줄·대소문자 무시·파일 종류 필터·개수 상한이 생겼습니다. **결과가 잘리면 잘렸다고 알려줍니다** — 그전엔 조용히 잘려서 "그게 전부"로 읽혔습니다. - **파일 찾기가 최근 수정 순으로 나옵니다.** "방금 건드린 파일"이 위로 옵니다. - Jupyter 노트북(`.ipynb`)을 셀 단위로 읽습니다. ### Added - **검색에 필요한 ripgrep 을 자동으로 준비합니다.** 없으면 온보드·`npm run doctor`·`/update` 가 알아서 받아 둡니다. - ★그전에는 **기계에 우연히 깔려 있어야만** 검색이 됐습니다. 실측 결과 Windows 인스턴스는 검색이 **통째로 죽어 있었고**, 사용자는 "왜 못 찾지"만 겪었습니다(에러도 안 났습니다). 설치 여부는 이제 부팅 로그 한 줄로 확인됩니다. ### Fixed - **답변이 통째로 비어 나오던 것.** 백그라운드 알림이 대화 중간에 끼면 그 뒤 수십 초간 만들어진 진짜 답변이 버려지고 **빈 말풍선**만 남았습니다. 그런데 기록에는 "정상 완료"로 찍혀서 아무도 몰랐습니다. - **새로고침하면 "작업 중" 표시와 세션 탭의 진행 배지가 사라지던 것.** 비서가 실제로 일하고 있는데 화면상 놀고 있는 것처럼 보였습니다. - **짧은 대화가 세션 목록에서 사라지던 것.** 갓 시작한 대화나 비서가 만든 세션이 목록에 없어서, 어디서 무슨 일이 벌어지는지 볼 수 없었습니다. 이제 길이와 무관하게 전부 보이고, 정리는 보관(archive)으로 합니다. ## [0.23.1] - 2026-08-09 ### Fixed - **긴 답변이 대화 기록에서 끝까지 보입니다.** 12,000자가 넘는 답변이 **300자쯤에서 끊긴 채** 보였고, 새로고침해도 같았고, 펼칠 방법도 없었습니다. 원인은 두 겹이었습니다 — 이벤트 저장의 크기 상한이 답변 본문까지 잘랐고(그 상한은 원래 *조회 키*를 살리려던 값이었습니다), 기록을 다시 그릴 때 **잘린 사본을 남기고 무손실 원본을 버렸습니다**. 상한을 올리고, 본문은 항상 원본에서 가져오게 했습니다. - **대화가 길어져도 요약이 내용을 지키게 했습니다.** Codex 로 돌 때 오래된 대화를 요약으로 접는데, 그 요약이 **접은 양과 무관하게 늘 3~6문장**이었습니다. 실측하니 하루에 **623,045자를 접고 남은 요약이 589자**였고, 62턴 40,542자를 90자로 만든 회차도 있었습니다. 게다가 접을 때마다 **옛 요약을 다시 요약해서** 예전 내용이 압축을 거듭할수록 사라졌습니다. 이제 요약 분량이 접은 양에 비례하고, 새 요약은 **덧붙습니다** — 옛 구간은 처음 요약된 문장 그대로 남습니다. 요약 첫 문장에는 어느 프로젝트 일인지도 남깁니다(그게 없으면 이어서 할 수가 없습니다). - **요약이 너무 자주 돌던 것**을 고쳤습니다. 한 번 접어도 임계 바로 위에 머물러 **사실상 매 턴** 요약이 돌았습니다. 이제 한 번 걸리면 여유가 생길 때까지 접고, 한동안 돌아오지 않습니다. 여러 번 접어도 안내는 **한 번**만 뜹니다(그전엔 한 턴에 세 번 떴습니다). - **대시보드가 통째로 안 그려지던 경우**를 고쳤습니다. 스크립트 로드 순서 경합으로 렌더가 죽었는데, 화면엔 "그냥 안 나옴"으로만 보이고 콘솔에만 흔적이 남았습니다. ## [0.23.0] - 2026-08-08 ### Changed - **서브에이전트 위임이 어느 모델에서나 똑같이 동작합니다.** 지금까지 Claude 로 돌 때는 SDK 가 제공하는 위임 도구를 썼는데, 그 경로는 **대시보드에 보이지 않았고**(잡 카드가 0초 만에 사라졌습니다) 중간에 지시를 추가하거나 개별 취소를 할 수 없었습니다. 모델 프로파일도 무시돼서 Claude 등급으로 납작해졌습니다. 이제 세 어댑터가 **같은 경로**를 씁니다 — 위임이 잡으로 보이고, 스티어·취소가 되고, 설정한 모델 풀과 폴백이 그대로 적용됩니다. - **서브에이전트가 다시 서브에이전트를 띄우는 것**이 실제로 막혔습니다. 문서엔 금지라고 적혀 있었는데 Claude 경로에서만 뚫려 있었습니다. - **오래 걸리는 작업을 매니저에게 넘기는 기준이 생겼습니다.** "서브에이전트가 2명 이상 필요하면 매니저에게 통째로" — 그전엔 메인 대화가 위임 결과를 기다리느라 **몇 분씩 멈추는** 일이 있었습니다(실측 8분 37초). 매니저에게 넘기면 대화는 계속 쓸 수 있고 결과는 끝났을 때 옵니다. ### Added - **`explore` 서브에이전트.** "어디 있는지 모를 때" 넓게 훑는 읽기 전용 탐색 담당입니다. 대상이 이미 정해졌으면 `quick`, 설계·근본원인 판단은 `deep` 이 맡습니다. ### Fixed - **작업이 중간에 끊겼을 때 그 사실이 화면에 보입니다.** 그전에는 모델이 하던 말이 잘린 채로 끝나서 **정상 완료처럼** 보였습니다 — 에러는 저장만 되고 화면엔 안 떴고, 데몬 로그에도 아무것도 안 남아 원인을 찾을 수 없었습니다. 이제 끊긴 지점 뒤에 사유와 함께 **"이어서 진행해줘" 안내**가 붙고, 로그에도 판정 수치(사유·순회·도구 수)가 남습니다. - **서브에이전트를 고를 때 난이도가 기준이 됩니다.** `general`(중간 티어) 설명이 "명세 없이 아무 작업"이라 되어 있어, 설계·분석 같은 **고난도 작업까지 중간 티어로 몰렸습니다**. 이제 각 티어가 위·아래로 넘길 곳을 명시합니다. - 대소문자가 달라 서브에이전트를 못 찾던 것, 그리고 못 찾았을 때 **사용 가능한 이름을 알려주지 않던 것**을 고쳤습니다. ## [0.22.0] - 2026-08-07 ### Changed - **라이선스가 Apache License 2.0 으로 바뀌었습니다.** 이전에는 MIT 였습니다. 플러그인·어댑터를 붙여 쓰는 프로젝트라, MIT 에는 없는 **특허 허여**와 **기여 조항**이 명시된 Apache-2.0 이 더 맞다고 판단했습니다. 쓰는 데 드는 제약은 사실상 그대로입니다 — 여전히 마음대로 쓰고, 고치고, 팔 수 있습니다. - **v0.21.1 까지 받아 간 버전은 계속 MIT 조건**으로 쓸 수 있습니다. Apache-2.0 은 이 버전부터 적용됩니다. ### Added - **훅을 프로젝트별로 걸 수 있다는 걸 문서에 적었습니다.** 원래 되던 기능인데 README 에 없었습니다. `<프로젝트>/.tiguclaw/settings.json` 에 쓰면 그 프로젝트에서만 돌고, Claude Code 를 쓰던 프로젝트라면 `.claude/settings.json` 의 훅도 그대로 읽습니다. 전역 훅과 프로젝트 훅은 **함께 돕니다** — 프로젝트 설정이 전역 안전 훅을 조용히 끄지 못합니다. ## [0.21.1] - 2026-08-07 ### Fixed - **훅 문서가 실물보다 뒤처져 있던 것**을 고쳤습니다. 배선된 훅이 다섯 가지인데 넷이라고 적혀 있었고(`SubagentStop` 누락), 이미 되는 기능(훅이 출력한 내용을 비서가 맥락으로 읽는 것)을 "다음 단계로 계획"이라고 적어 뒀습니다. 쓸 수 있는 걸 예정이라고 두면 아무도 안 씁니다. - **README 첫 문단과 몇몇 문장**을 한국어로 자연스럽게 다듬었습니다. ## [0.21.0] - 2026-08-07 ### Added - **프로젝트 전용 스킬·에이전트를 눌러 내용을 봅니다.** 프로젝트 상세에서 항목을 누르면 그 자리에서 본문이 펼쳐집니다 — 어떤 지침으로 도는지 확인하려고 파일을 찾아갈 필요가 없습니다. 목록을 열 때는 이름만 가져오고, 본문은 누를 때만 받아옵니다. ### Changed - **문서 기본 언어가 한국어가 됐습니다.** `README.md`·`docs/security.ko.md` 가 한국어, 영어판은 `README.en.md`·`docs/security.en.md` 로 나란히 있습니다. 상단 링크로 오갈 수 있습니다. ### Fixed - **프로젝트 전용 MCP 서버가 전역으로 등록되던 것**을 막았습니다. 특정 프로젝트에서만 쓰는 서버가 전역에 들어가면 무관한 대화에도 도구가 실리고, 그 앱이 없는 컴퓨터에서는 켤 때마다 연결 실패가 납니다. 이제 프로젝트 폴더를 가리키는 서버를 전역으로 등록하려 하면 막고 올바른 방법을 알려줍니다. - **작업 카드에 대화 이름과 내부 식별자가 같이 뜨던 것**을 정리했습니다. 이름이 있으면 이름만 보이고, 식별자는 마우스를 올리면 나옵니다. ## [0.20.0] - 2026-08-07 ### Added - **대화 이름을 말로 바꿉니다.** "이 대화 이름 '핫딜 리팩터링'으로 바꿔줘" 처럼 부탁하면 됩니다. 세션 목록도 물어볼 수 있습니다. 삭제·보관은 일부러 넣지 않았습니다 — 되돌릴 수 없거나 사용자 판단이 필요한 일은 사람이 합니다. ### Fixed - **기본 세션은 이름을 바꿔도 새로고침하면 되돌아가던 것**을 고쳤습니다. 저장은 되고 있었는데 화면이 늘 고정 라벨을 보여줬습니다. 이제 직접 붙인 이름이 이깁니다(이름을 지우면 다시 "기본 세션"으로 돌아갑니다). - **"서브에이전트가 도구를 한 번도 쓰지 않았다" 는 경고가 잘못 뜨던 것**을 고쳤습니다. 위임한 작업이 제대로 일했는데도 경고가 나왔습니다 — 직전 버전에서 들어간 오탐입니다. ### Removed - **`nano-simple` 서브에이전트를 걷었습니다.** 매 턴 실리는 목록에서 자리만 차지하고 실제로 쓰이지 않았습니다. 가벼운 모델 등급 자체는 그대로 있습니다. ## [0.19.0] - 2026-08-07 ### Added - **코드 블록에 복사 버튼.** 비서가 알려준 명령어를 마우스로 긁을 필요 없이 한 번에 복사합니다. - **일하지 않은 서브에이전트를 알려줍니다.** 위임한 작업이 파일도 안 읽고 명령도 안 돌린 채 끝나면 화면에 표시합니다 — 그럴듯한 답이 사실은 지어낸 것일 수 있어서입니다. 실패로 단정하지는 않습니다(요약처럼 도구가 필요 없는 일도 있으니까요). ### Fixed - **백그라운드 작업 패널이 늘 비어 있던 것을 고쳤습니다.** 서브에이전트를 띄워도 "진행 중 0" 이었습니다 — 코어 SDK 가 그 도구의 이름을 바꿨는데 우리가 옛 이름을 찾고 있었습니다. 같은 이름이 네 곳에 흩어져 있어서 진행 표시·경고 임계·**작업 강제 종료 면제**·화면 링크가 한꺼번에 죽어 있었고, 특히 면제가 빠져 **정상적인 긴 위임이 13분에 끊길 수 있었습니다**. - **윈도우에서 데몬 중지·재시작이 거짓 성공을 보고하던 것을 고쳤습니다.** `중지 완료` 라고 하고선 실제로는 살아 있어, 이어지는 업데이트가 파일 잠금으로 실패했습니다. 포트 대신 프로세스 자체로 찾고, 종료를 확인한 뒤에만 성공이라고 말합니다. ## [0.18.0] - 2026-08-06 ### Added - **도구가 멈추면 알려줍니다.** 종전에는 도구 호출이 응답 없이 멈춰도 화면에 "작업 중" 만 계속 돌아, 느린 건지 멈춘 건지 알 수단이 없었습니다(실측: 39분 동안 아무 신호 없음). 이제 3분 넘게 응답이 없으면 대시보드에 표시되고, 텔레그램으로 대화 중이었다면 그쪽으로도 알립니다. - **백그라운드 작업이 어느 대화 것인지 보입니다.** 여러 대화를 동시에 굴릴 때 작업 카드와 턴 카드에 세션 이름이 붙습니다. ### Fixed - **세션이 영영 먹통이 되던 것을 고쳤습니다.** 도구가 응답하지 않으면 그 대화는 다음 메시지도 처리하지 못한 채(직렬 처리) 멈춰 있었습니다. 이제 응답 없는 도구는 13분에서 끊고 왜 끊었는지 알립니다. 오래 걸리는 게 정상인 작업(서브에이전트 등)은 제외됩니다. - **텔레그램 메시지가 가끔 안 오던 것을 고쳤습니다.** 텔레그램이 "잠시 뒤 다시 보내라"(429) 라고 답하는 경우를 영구 실패로 분류해 **재시도 없이 버리고 있었습니다.** 발송이 몰릴 때만 나던 증상입니다. 이제 서버가 알려준 대기 시간을 지켜 다시 보내고, 그래도 실패하면 어느 부분이 못 갔는지 기록에 남깁니다. - **사용량 한도 알림이 예약 작업에서는 안 오던 것을 고쳤습니다.** "한도에 걸려 다른 모델로 전환합니다" 라는 알림이 예약 실행 중에는 보낼 곳을 못 찾아 사라졌습니다. - **비서가 묻지도 않은 말에 답하던 것을 고쳤습니다.** 백그라운드 작업이 끝나면 SDK 가 대화를 자동으로 이어가는데, 그 응답이 직전 답변에 이어붙고 **원래 답변을 덮어썼습니다** — 사용자가 아무 말도 안 했는데 "알겠습니다. 멈추겠습니다" 라고 답한 사례가 있었습니다. - **입력창 위 경과시간이 다른 대화 것을 보여주던 것**을 고쳤습니다. ## [0.17.0] - 2026-08-06 ### Added - **비서에게 "앞으로는 항상 ~해줘" 라고 주는 규칙이 살 자리가 생겼습니다.** 종전에는 그런 상시 지침이 검색용 메모리로 들어갔는데, 메모리 목록에는 상한이 있어 **오래된 항목이 조용히 접혔습니다**(실측: 활성 163건 중 매 턴 보이는 건 43건). 지켜져야 할 규칙이 어느 날부터 안 보이는 구조였습니다. 이제 그런 지침은 비서의 `AGENT.md` 에 적히고 **매 턴 반드시 실립니다**. 가끔 찾는 사실은 종전대로 메모리, 특정 프로젝트 얘기는 그 프로젝트 폴더로 갑니다 — 판단 기준은 "이게 매 턴 필요한가" 하나입니다. - **돌고 있는 작업에 얹은 지시가 화면에 남습니다.** "거기에 ~도 해줘" 로 백그라운드 작업에 지시를 추가하면 종전에는 그 답변 한 줄 말고는 아무 데도 기록이 없어, 전달됐는지 확인할 수도 나중에 "왜 저렇게 했지" 를 볼 수도 없었습니다. 이제 작업 카드 타임라인에 `💬 지시 추가` 로 쌓이고, **전달되지 못한 경우**(작업이 막 끝났거나 이미 종료)도 사유와 함께 남습니다. - **비서가 배운 지침이 매 턴 실립니다.** 반복 실패에서 학습해 확정한 지침을 파일에는 적어두면서 정작 대화에는 안 싣고 있었습니다 — "지침을 읽으라는 지침" 이 배달되지 않는 상태였습니다. - **편집 카드에서 파일을 바로 엽니다.** 대시보드의 변경 카드에서 경로를 누르면 `경로:줄` 이 복사되고, 버튼으로 편집기에서 파일을 열 수 있습니다. ### Changed - **코어 SDK 를 187 릴리스만큼 올렸습니다** (`claude-agent-sdk` 0.1 → 0.3, `@openai/agents` 0.11 → 0.14). 버전 범위 표기 때문에 자동 업데이트가 **구조적으로 막혀 있었고**(0.x 에서는 캐럿이 마이너 버전을 고정합니다) 6개월 가까이 아무도 몰랐습니다. 격리 환경에서 타입 검사·회귀 검사·실제 대화 왕복까지 확인한 뒤 반영했고, 같은 드리프트가 재발하면 **검사가 실패하도록** 게이트를 넣었습니다. - **비서의 작동 규칙이 한 곳으로 모였습니다.** 규칙이 두 파일에 나뉘어 있어 **같은 상황에 서로 다른 답**을 주던 지점이 넷 있었습니다(앱 소스 수정 가부, 홈 밖 파일 접근, 위임 판단, 요청한 작업 범위). 판단은 `SYSTEM.md` 한 곳으로 모으고 나머지는 그것을 가리키게 했습니다 — 규칙을 고칠 때 한쪽만 고쳐져 갈리는 일이 없습니다. - **홈 밖 파일 확인 규칙이 지킬 수 있는 단위로 바뀌었습니다.** 종전에는 "경로마다 확인" 이라 실제로는 지켜지지 않았고, 안 지켜지는 규칙은 옆의 안전 규칙까지 무력화합니다. 이제 **작업 단위 1회** — 읽기는 지시한 범위 안에서 자유, 쓰기·삭제·실행은 새 폴더에 처음 손댈 때 한 번 확인합니다. 자격 증명·시스템 디렉터리는 범위 안이어도 항상 확인합니다. - **기본 포트가 대시보드 7010 · 브리지 7011 로 바뀌었습니다.** 3000번대는 다른 개발 도구와 자주 부딪혔습니다. ### Fixed - **세션 탭이 정리됩니다.** 서버에 없는 세션 탭이 캐시된 이름을 단 채 영영 남던 것(눌러도 빈 대화만 나옴), 같은 세션이 채널마다 다른 이름으로 보이던 것, 없는 채널 배지가 붙던 것을 고쳤습니다. - **선택지가 새로고침 후 사라지던 것**과 **끝난 작업이 계속 '진행 중' 으로 보이던 것**을 고쳤습니다. - **커스텀 엔드포인트 호출이 유실되고 기록도 안 남던 것**을 고쳤습니다(사용자 신고 2건). - **긴 대화에서 옛 맥락이 통째로 사라지던 것**을 고쳤습니다 — 대화 요약이 5자짜리 빈 결과를 성공으로 확정해 47턴 분량이 영구히 사라진 사례가 있었습니다. 요약 품질 게이트와 크기 기준 트리거를 넣었습니다. - **토큰 사용량이 항상 1 로 표시되던 것**을 고쳤습니다(SDK 업그레이드 여파 — 비용·컨텍스트 표시가 함께 틀어졌습니다). - **존재하지 않는 서브에이전트를 안내하던 것**을 고쳤습니다. 매 턴 실리는 안내문이 개발자 컴퓨터에만 있는 에이전트를 가리켜, 사용자 설치본에서는 호출하면 "없음" 에러가 났습니다. - **배포본에 개발용 지침이 섞여 있던 것**을 걷어냈습니다 — 개발 저장소 경로, 내부 구조 지시, 개발자 개인 프로젝트 이름이 모든 설치본의 매 턴에 실리고 있었습니다. - **비서가 스스로 낸 개선 제안이 방치되던 것**을 고쳤습니다(반복 신호를 무시하던 다섯 지점). ## [0.16.0] - 2026-08-01 ### Added - **커스텀 엔드포인트가 실행 모델을 고를 수 있습니다.** 정의 파일 앞머리에 `model: high` 처럼 **모델 프로파일 이름**을 적으면 그 프로파일의 풀·폴백으로 실행됩니다. 서브에이전트는 이미 되던 것인데 엔드포인트만 안 됐습니다. 이미지 판독처럼 특정 모델이 필요한 호출이 "그때 어느 백엔드가 잡히느냐"에 좌우되지 않습니다. 벤더 모델명 직접 지정은 받지 않습니다 — 정의 파일에 박아두면 모델을 교체할 때 같이 낡습니다. 미지정 시 종전과 동일합니다. - **사용량 한도에 걸리면 어디서 대화 중이든 알려줍니다.** 종전에는 이 안내가 대시보드에만 떠서, 텔레그램으로 쓰는 동안에는 답변 모델이 왜 바뀌었는지 알 수 없었습니다. 이제 **언제 풀리는지**까지 함께 알려줍니다 — 예: "사용량 한도 — 8. 5. 13:15 해제 예정(약 4일 뒤)". 한도에 처음 걸린 순간에만 한 번 보냅니다(백엔드가 풀렸는지 주기적으로 확인하는데, 그때마다 알리면 며칠간 같은 메시지가 반복됩니다). - **`/health` 가 진행 중인 대화 수를 알려줍니다.** 재시작해도 되는 시점인지 판단할 근거가 없었습니다. - **편집한 파일의 줄 번호가 도구 카드에 보입니다.** 비서가 코드를 고칠 때 대시보드에 뜨는 변경 카드가 무엇을 바꿨는지는 보여줬지만 **어디를** 바꿨는지는 안 보여줬습니다. 이제 헤더에 `파일:줄`, 각 줄 왼쪽에 실제 파일 줄 번호가 붙습니다. 표시용이라 대화 비용은 늘지 않습니다. 줄 번호를 확실히 알 수 없는 경우(파일이 매우 크거나 이미 바뀐 뒤)에는 **번호를 붙이지 않습니다** — 틀린 번호는 없는 것보다 나쁩니다. - **대시보드 입력창에서 ↑/↓ 로 이전에 보낸 메시지를 꺼냅니다.** 터미널·Claude Code 에서는 되는데 대시보드만 안 됐습니다. 세션 탭마다 따로 기억하고, 탐색 중에는 `히스토리 2/7` 처럼 위치가 표시됩니다. **쓰던 내용이 있으면 개입하지 않고**, 한글 조합 중이거나 여러 줄을 편집 중일 때도 커서 이동이 우선입니다. 히스토리 끝을 넘어 내려오면 쓰던 내용이 그대로 돌아옵니다. - **브랜드 아이콘이 적용됐습니다.** 대시보드 탭 아이콘과 헤더 마크가 실제 로고로 바뀌었습니다. 폰에서 홈 화면에 추가하면 앱처럼 아이콘이 뜹니다. ### Changed - **긴 대화에서 응답이 매끄러워집니다.** Claude로 대화할 때 매 턴 세션 기록 파일을 처음부터 끝까지 다시 읽고 있었습니다. 대화가 길어질수록 느려졌고(20MB 세션에서 한 턴마다 약 47ms 정지), 그동안 텔레그램·대시보드·예약 작업이 함께 멎었습니다. 이제 지난번에 읽은 지점부터만 읽습니다. - **백엔드가 한도에서 풀렸는지 확인하는 주기를 2시간에서 4시간으로 늘렸습니다.** 확인 자체가 실패한 요청으로 기록되고 응답도 한 박자 늦어지는데, 실제 한도는 며칠 단위라 2시간은 너무 잦았습니다. - **매 턴 반복해서 보내던 30KB를 캐시가 재사용합니다.** SYSTEM.md·스킬/에이전트 목록·모델 프로파일처럼 대화 중에 바뀌지 않는 컨텍스트를 프롬프트 앞쪽(시스템 채널)으로 옮겼습니다. 종전에는 이것들이 매 턴 프롬프트 *맨 끝*에 실려 구조적으로 캐시가 걸리지 않았습니다. 자주 바뀌는 것(환경·대화 정보·메모리)만 뒤에 남습니다. - **캐시 적중률이 로그에 주기적으로 남습니다.** 원격으로 접속할 수 없는 기기에 설치했을 때, 종전에는 문제가 있을 때만 로그가 남아 "잘 되고 있는지"를 확인할 방법이 없었습니다. 이제 50턴마다(또는 6시간마다) 집계 한 줄이 남습니다. - **대화가 왜 그 시점에 끝났는지 로그로 확인됩니다.** "하겠다고 해놓고 멈춘 것 같다"는 상황을 진단할 때, 종전에는 판단 근거가 로그에 없어 추측에 의존해야 했습니다. 턴이 끝날 때 판정 재료(중간에 끼어든 메시지 수, 마지막 응답 길이, 이후 실행한 도구, 응답 스트림이 정상 종료됐는지)를 한 줄로 남깁니다. 스트림이 완료 신호 없이 끊긴 경우에는 무엇이 오갔는지도 함께 기록합니다. 함께, 정상 동작인 mid-turn 메시지 주입이 오류 수준으로 기록되어 진짜 오류를 가리던 것도 고쳤습니다. - **어떤 모델이 실패했는지 로그에 남습니다.** 특정 모델 하나만 백엔드에서 막히는 일이 실제로 있었는데, 로그에 모델명이 없어 원인을 좁히는 데 오래 걸렸습니다. 이제 실패·재시도·턴 종료 기록에 모델명이 함께 남아 "어떤 모델이 문제인지"가 한 줄로 보입니다. - **`/status` 가 실행 중인 코드가 최신인지 알려줍니다.** 업데이트는 받았는데 빌드가 실패하면 종전에는 `/status` 가 "최신"이라고 답해 실제로는 옛 코드가 도는 것을 알 수 없었습니다(원격 기기 진단이 이것 때문에 헛돌았습니다). 이제 실행 산출물이 소스보다 오래되면 경고와 함께 해야 할 일을 알려줍니다. - **`/logs` — 최근 데몬 로그를 채팅으로 바로 봅니다.** `/logs 50` 처럼 줄 수를 줄 수 있습니다(기본 40, 최대 200). **모델을 거치지 않으므로** 응답 백엔드가 죽어 비서가 대답을 못 하는 상황에서도 동작합니다 — 그때가 정작 로그가 가장 필요한 때입니다. 토큰 같은 시크릿은 자동으로 가려집니다. - **`/diagnose` — 백엔드 거절 원인을 채팅에서 바로 가릅니다.** 아래 `diagnose:codex` 와 같은 A/B 를 슬래시 명령으로 실행합니다. 역시 모델을 거치지 않습니다. - **`npm run diagnose:codex` — 백엔드가 요청을 거절할 때 원인을 가르는 진단.** 같은 계정·같은 순간에 *가벼운 요청*과 *실제와 같은 무게의 요청*을 번갈아 보내, 실패가 요청 무게 때문인지 계정/클라이언트 쪽인지 판정합니다. 원격으로 접속할 수 없는 기기에서 직접 돌릴 수 있습니다(`--dry` 로 전송 없이 무게만 확인). - **요청 크기가 로그에 남습니다.** 백엔드가 요청을 거절할 때 "무엇이 커서인지"를 가릴 수 있도록, 매 요청의 크기를 시스템 프롬프트·대화·도구 정의로 나눠 기록합니다. - **기본 포트가 대시보드 `7010` · HTTP 브리지 `7011` 로 바뀌었습니다.** 종전 기본값 `3000`/`3001` 은 다른 개발 도구들이 널리 쓰는 번호라, 그것들이 먼저 떠 있으면 대시보드가 뜨지 못했습니다. **이미 설치해 쓰고 계신 경우 영향이 없습니다** — 설정 파일에 포트가 적혀 있으면 그 값이 그대로 유지됩니다. 새로 설치하면 `http://127.0.0.1:7010` 입니다. - **대시보드 여는 방법이 README 에 적혔습니다.** 어디로 접속하는지가 문서 어디에도 없었습니다. 함께, 왜 이 주소가 같은 기기에서만 열리는지(브라우저 로그인이 없어 **포트에 닿는 것 자체가 곧 권한**입니다)와, 폰에서 쓰려면 포트를 열지 말고 사설 네트워크로 연결하라는 안내를 넣었습니다. - **대화 요약이 훨씬 덜 일어납니다.** 긴 대화를 접는 기준이 "턴 수"였는데, 실측해 보니 같은 턴 수가 실제 분량으로는 8만 자일 때도 26만 자일 때도 있어 기준으로서 의미가 없었습니다. 이제 실제 분량(15만 자)으로 판단합니다. ### Fixed - **대화를 요약해 접을 때 내용이 사라지지 않습니다.** 모델이 요약을 제대로 못 돌려줬는데도 그것을 성공으로 확정해, 지난 대화 47턴(4만 자)이 **영구히** 컨텍스트에서 빠지는 일이 있었습니다. 그런데도 화면에는 "요약으로 압축했습니다"라고 떴습니다. 이제 쓸 수 없는 요약은 거부하고 다음 기회에 다시 시도합니다 — 거부하면 원본이 남지만, 잘못 받아들이면 되돌릴 수 없습니다. - **요약이 백엔드 한도를 무시하고 호출하던 것을 고쳤습니다.** 한도에 걸려 쉬어야 할 백엔드에 요약 요청만은 그대로 나갔고, 그 실패도 기록되지 않아 다음 판단에 반영되지 않았습니다. - **다른 앱이 대시보드 포트를 쓰고 있으면 그렇게 말합니다.** 종전에는 그 포트에서 응답이 오기만 하면 "대시보드가 이미 떠 있다"고 판단하고 넘어갔습니다. 그래서 다른 앱이 자리를 차지하고 있으면 대시보드는 뜨지 않는데 로그는 정상이라고 말했고, 그 주소를 열면 남의 앱이 나왔습니다. 이제 우리 대시보드인지 확인하고, 아니면 어떤 포트가 막혔고 무엇을 하면 되는지 안내합니다. - **재시작할 때 진행 중이던 답변이 조용히 사라지지 않습니다.** 답변을 만들고 있는 도중에 데몬이 재시작되면 그 답이 그냥 오지 않았습니다 — 오류도 안내도 없어서 기다리는 것 말고 할 수 있는 게 없었습니다. 이제 "작업이 중단됐고 내용이 남지 않았으니 다시 보내달라"고 알립니다. - **다른 세션 탭을 갔다 와도 선택지 버튼이 남아 있습니다.** 비서가 물어본 선택지가 탭을 옮겼다 오면 사라지고, 새로고침하면 다시 나타났습니다. 화면을 다시 그리는 두 경로가 서로 다른 곳에서 내용을 가져오고 있었던 것이 원인입니다. 덧붙여, 선택지가 뜬 뒤 대화가 조금 진행되면 새로고침해도 돌아오지 않던 것도 함께 해결됐습니다. - **파일을 첨부한 대화에서 새로고침해도 채팅이 비지 않습니다.** 최근 대화에 첨부가 있으면 새로고침 시 채팅 화면이 통째로 백지가 되는 경우가 있었습니다. - **이미지를 읽어달라고 하면 실제로 봅니다.** 일부 백엔드에서 이미지 파일을 열면 그림이 아니라 깨진 문자로 전달됐고, **그 실패가 성공으로 보고**돼 호출한 앱이 잘못된 결과를 정상으로 받아 저장했습니다. 이제 이미지는 이미지로 전달하고, 너무 크면 그 사실을 말합니다. - **예약 발송이 전달에 실패해도 자동으로 다시 보냅니다.** 고정 문구를 바로 보내는 방식에서만 재전송이 걸리지 않아, 같은 실패인데 예약 내용에 따라 결과가 달랐습니다. - **업데이트 실패 시 되돌리기 안전장치가 다시 작동합니다.** 미커밋 작업물을 보호하는 판단이 실제로는 항상 "보호할 게 있다"로 나와, 되돌리기가 사실상 꺼져 있었습니다. - **비서의 회고 메모가 90일 뒤 사라지지 않습니다.** 오래된 회고를 지우고 있었습니다 — 이제 목록에서만 내리고 보관합니다(검색으로 계속 찾을 수 있습니다). - **작업을 중단(`/stop`)하면 확실히 멈춥니다.** 백엔드 응답이 지연돼 대기하던 중에 중단하면, 중단이 무시되고 답이 한 통 더 오거나 중단된 작업이 성공으로 기록되는 경우가 있었습니다. - **로그가 진단에 쓸 수 있게 정리됐습니다.** 어떤 설정 파일을 읽었는지가 데몬 로그에 전혀 남지 않았고(원격 접속이 안 되는 기기에서는 확인할 방법이 없었습니다), 반대로 정상 상태 안내가 오류로 기록돼 실제 오류를 덮고 있었습니다. 민감한 값이 로그 파일 한쪽에만 가려지던 것도 함께 고쳤습니다. - **일부 조회 전용 도구를 쓴 뒤 백엔드가 실패하면 다른 모델로 이어서 시도합니다.** 부작용이 없는 도구인데도 "이미 변경을 수행했다"로 분류돼 대체 모델을 쓰지 못하고 그대로 실패했습니다. - **재시도할 다른 모델이 없을 때 "다른 모델로 이어서 시도합니다"라고 하지 않습니다.** 단일 모델로 구성한 세션에서 이 안내가 항상 떠서, 오지 않을 답을 기다리게 됐습니다. - **응답 백엔드가 실패했을 때 작업이 중간에 멈추지 않고 자동으로 다시 시도합니다.** 이 백엔드는 요청이 정상 접수된 뒤(HTTP 200) 스트림 안에서 실패를 통보하는데, 종전에는 그것을 "모델이 빈 응답을 냈다"로 잘못 진단해 같은 요청을 세 번 더 조른 뒤 작업 도중에 턴을 끝냈습니다. 이제 서버 오류와 같은 부류로 보고 같은 요청을 점점 긴 간격으로 네 번까지(총 27초) 재전송하며, 그래도 실패하면 백엔드가 준 실제 사유를 그대로 표시합니다 — 예: `server_is_overloaded: Our servers are currently overloaded`. 이미 변경을 수행한 뒤 실패한 경우에는 다른 모델로 재실행하지 않습니다(같은 변경이 두 번 적용되는 것 방지). - **다른 세션 탭을 눌렀을 때 그 세션에서 진행 중인 작업이 바로 보입니다.** 종전에는 돌고 있는 턴이 통째로 보이지 않다가, 뒤이어 도착한 내용이 별도 카드로 갈라져 한 번의 답변이 둘로 쪼개졌습니다. - **`/status`의 컨텍스트 사용량이 실제와 맞습니다.** Claude로 대화할 때 남은 컨텍스트가 항상 "~0%"로 표시돼 70%/85% 경고가 한 번도 뜨지 않았습니다. 백엔드마다 토큰을 세는 기준이 다른 것이 원인이었습니다. - **대화 비용·캐시 적중률 표시가 정확해졌습니다.** 답변 헤더의 토큰 수치가 백엔드에 따라 실제의 일부만 보이던 문제를 잡았습니다. - **OpenAI 호환 게이트웨이의 `usage.prompt_tokens`가 실제 소모량을 보고합니다.** 도구를 여러 번 쓰는 요청에서 일부만 보고해 클라이언트 쪽 비용 집계가 어긋났습니다. ## [0.15.0] - 2026-07-27 ### Added - **비서가 어떤 모델로 답했는지 화면에 보입니다.** 답변·도구 실행 카드·백그라운드 작업 카드에 실제로 응답한 모델(`gpt-5.5`·`claude-sonnet-5` 등)이 표시됩니다. 모델 프로파일(요청한 등급)과 실제 모델은 한도 소진·폴백으로 갈릴 수 있는데, 종전에는 그 차이를 확인할 방법이 없었습니다. 백그라운드 작업 카드에서는 지정한 등급 배지 바로 옆에 뜹니다. - **시스템 알림이 비서 말과 구분됩니다.** 스케줄 실패·자가 점검·작업 멈춤 같은 알림이 비서의 답변과 똑같은 말풍선으로 들어와 "묻지도 않았는데 답장이 온" 것처럼 보였습니다. 이제 "시스템 알림" 표기와 점선 테두리로 구분되고, 새로고침해도 유지됩니다. - **OpenAI 호환 LLM 프로바이더를 직접 추가할 수 있습니다.** `settings.json`의 `models.providers`에 `{ "openrouter": { "adapter": "openai", "baseURL": "…", "apiKeyEnv": "OPENROUTER_API_KEY" } }` 식으로 적으면 OpenRouter·Groq·Together·로컬 엔드포인트 등 어떤 OpenAI 호환 LLM이든 코어 수정 없이 모델 풀에서 `프로바이더:모델`로 쓸 수 있습니다. 키는 파일이 아니라 지정한 환경변수에서 읽습니다(시크릿 미노출). 기본 5종(anthropic·openai·codex·ollama·google)은 그대로이고, 사용자는 새 이름만 추가합니다. - **비서가 기억을 키워드로 직접 찾을 수 있습니다.** 새 `search_memory` 도구로 저장된 메모리를 관련도순으로 검색합니다 — 이름을 몰라도, 자동으로 딸려온 기억에 원하는 게 안 보여도 직접 찾습니다. - **능력 화면에 "커맨드" 목록이 생겼습니다.** 대시보드 "능력" 뷰에 슬래시 명령(`/status`·`/update` 등 + 직접 만든 명령)이 "⌨️ 커맨드"로 뜹니다. 기존 "커맨드 (MCP)"는 실제로 MCP 서버 목록이라 "🧩 도구 (MCP)"로 이름을 바로잡았습니다. - **비서가 자기 이상을 스스로 찾아 먼저 알립니다.** 주기적으로 최근 기록을 훑어 조용히 잘못된 것(도착하지 않은 예약 알림, 급증한 턴 실패, 같은 말 반복)을 감지하고, 이상이 있을 때만 알립니다. 되돌릴 수 있는 조치 — 전달에 실패한 스케줄 알림을 5분 뒤 한 번 다시 보내기 — 는 알아서 하고 그 사실을 통보합니다(내용을 새로 생성하지는 않습니다). `settings.json`의 `scheduler.retryFailedDispatch`로 끌 수 있습니다. 스스로 학습해 넣은 행동 지침도 이제 조용히 들어가지 않고 알려줍니다. - **한 번의 대화에 든 토큰과 캐시 적중률이 화면에 보입니다.** 답변 헤더에 `↓210.0K · 8회 · 캐시 33% · ↑1.0K` 형태로 뜨고 툴팁에 정확한 수치가 나옵니다. 도구를 여러 번 쓰는 대화는 반복 호출 전체를 합산해, 실제 소모량을 과소평가하지 않습니다. - **내 앱에 AI를 붙이는 두 갈래가 크게 넓어졌습니다.** OpenAI 호환 게이트웨이에 모델 목록 조회(`GET /v1/models`)·이미지 입력(비전)·함수 호출(tool calls) 통과가 추가돼, OpenRouter 같은 서비스를 쓰던 앱을 거의 그대로 붙일 수 있습니다. 직접 만든 HTTP 엔드포인트에는 SSE 스트리밍 옵션(`"stream":true`)과 전용 5분 타임아웃이 생겨, 오래 걸리는 작업이 중간에 끊기지 않고 진행 상황을 실시간으로 받습니다. 어느 쪽을 고를지 안내하는 `app-ai-wiring` 스킬도 함께 들어갔습니다. - **말로 시키고, 음성 파일도 알아듣습니다.** 대시보드 채팅창의 🎤 버튼을 길게 눌러 말하면(텔레그램식 press-and-hold, 옆으로 밀어 취소) 전사된 텍스트가 입력창에 채워집니다. 텔레그램·대시보드로 보낸 음성·오디오 첨부도 내용을 이해합니다. 전사 엔진은 `settings.json`에서 OpenAI 또는 로컬(whisper) 중 고르며 기본은 꺼짐입니다. - **도구 실행 앞뒤에 내가 정의한 훅이 돕니다.** `settings.json`의 `PreToolUse`·`PostToolUse`·`SubagentStop` 훅이 어떤 모델로 턴이 돌든 동일하게 동작합니다(관찰 + 차단). 등록된 훅은 인벤토리 "🪝 훅"에 보이고, 실행 내역은 전체활동에서 확인합니다(차단은 붉게). - **작업 중에 보낸 메시지가 기본으로 즉시 반영됩니다.** 옵션이던 mid-turn steering이 기본 켜짐이 됐습니다. 하던 일을 버리고 새 지시만 답하던 문제도 함께 잡혀, 진행 중인 작업을 이어가면서 새 메시지를 반영합니다. - **대화창마다 쓸 모델을 바로 고릅니다.** 채팅 입력창 옆 드롭다운에서 세션별로 모델 프로파일을 선택하며, 선택은 그 세션에 저장됩니다. - **모바일 대시보드가 앱처럼 바뀌었습니다.** 좌상단 ☰ 드로어 네비, 페이지 스크롤 방식 채팅, 상단 고정 세션 탭, 도구 버튼 위 전용 입력 행, 목록→상세 전환 화면(뒤로 가기), 입력창 자동 높이 확대(최대 화면의 36%), 세션 탭 pull-to-refresh가 들어갔습니다. - **세션 탭이 훨씬 쓸 만해졌습니다.** 탭을 끌어 순서를 바꾸고, 탭마다 쓰다 만 입력(텍스트+첨부)이 보존되며, 백그라운드 작업이 도는 탭에 진행 배지가 뜹니다(그 세션 것만 집계). - **PC에서 백그라운드 작업이 채팅을 밀어내는 사이드 패널로 열립니다.** 드로어는 "작업"과 "셸" 두 접이식 그룹으로 정리됐고, 워커 잡 📦·서브에이전트 🤖·셸 🖥️ 아이콘으로 종류가 한눈에 구분됩니다. - **진행 중인 작업의 경과 시간이 보입니다.** 답변 카드 헤더에 1초 단위로 경과가 올라가, 오래 걸리는 구간에서 "멈춘 것 아닌가" 싶던 불안이 사라집니다. 엔드포인트 호출도 ⏳진행 중 → ✅완료(소요시간)로 상태가 바뀌고, 다른 화면에 있어도 네비 배지에 진행 개수가 뜹니다. - **스케줄을 지우고 다시 만들지 않아도 고칩니다.** `update_schedule` 도구로 라벨·주기·시간대·프롬프트·전송처를 부분 수정하고 켜기/끄기를 토글합니다(잘못된 cron 식은 저장 전에 거부). - **프로젝트를 대시보드에서 이름 바꾸고 등록 해제합니다.** 제거는 등록만 푸는 비파괴 동작이라 폴더는 그대로 남습니다. 왼쪽 메뉴의 "능력"은 "인벤토리"로 바뀌며 스케줄(⏰)이 편입됐고, 각 항목 상세에서 정의 본문(스킬·에이전트·모델 프로파일 내용)을 직접 읽을 수 있습니다. - **감당 못 할 크기의 요청은 그 모델을 아예 건너뜁니다.** `settings.json`의 `models.limits`에 모델별 입력 상한을 적어두면, 큰 요청일 때 20초를 버리고 실패한 뒤 넘어가는 대신 처음부터 감당 가능한 모델로 갑니다. 기본은 상한 없음입니다. - **OpenAI 계열 모델에서도 웹 검색이 됩니다.** 예전에는 URL을 이미 알아야만 웹을 볼 수 있었습니다(claude·codex는 원래부터 가능). 이제 어떤 모델을 쓰든 "모르는 것을 찾는" 능력이 같습니다. - **잠시 쓸 수 없는 모델을 `/status`가 알려줍니다.** 한도 소진 등으로 쿨다운 중인 모델이 있으면 `⏸ codex 사용 불가 — 6.0일 뒤 복구`처럼 표시됩니다(정상일 땐 아무것도 안 나옵니다). 폴백이 조용히 가리던 공백이 드러납니다. - **계획(플랜)과 활동 로그 본문이 잘리지 않고 전부 보입니다.** 전체활동 행을 펼치면 내용 전체가 나옵니다. - **새 내장 스킬 3종.** `code-review`(코드 리뷰 강화)·`verify`(변경이 실제로 동작하는지 끝까지 확인)·`app-ai-wiring`(앱에 AI 붙이기 가이드). ### Changed - **백그라운드 작업이 도구에서 지연될 때 알림 기준을 조정했습니다.** 경고 기준을 90초에서 3분으로 늦추고, 서브에이전트 실행은 아예 알리지 않습니다 — 원래 몇 분씩 걸리는 작업이라 사용자가 할 조치가 없고 진행 상황은 작업 패널에서 이미 보입니다(실측: 알림 20건 중 12건이 이 경우였습니다). 권한 대화상자나 외부 앱 대기처럼 **사람이 직접 풀어야 하는** 멈춤은 그대로 알립니다. - **스케줄·자동 알림이 대시보드 기본 세션 대화에도 보입니다.** 예약 발화·업데이트/재시작 완료 같은 자동 알림이 예전에는 텔레그램 등 특정 채널에만 남고 대시보드 메인 채팅엔 안 떴는데, 이제 세션을 따로 지정하지 않은 자동 발화는 기본 세션 대화에 함께 표시됩니다(텔레그램 알림은 그대로). 다른 폴더에서 띄운 백그라운드 작업의 완료/실패 알림도 그 작업을 시작한 세션에 뜹니다. - **프로젝트 화면을 모듈/능력 화면과 완전히 같은 구조로 통일했습니다.** 카드 격자 대신 왼쪽 목록(검색창 포함) + 오른쪽 상세의 3-패널로, 모듈·능력·프로젝트 세 화면이 똑같이 동작합니다. 프로젝트가 많아도 이름·설명·경로로 바로 검색됩니다. - **왼쪽 메뉴의 "개요"를 "홈"으로 바꾸고, "능력" 설명 문구를 정리했습니다.** 앱 자체가 대시보드라 "개요"보다 "홈"이 명확하고, 능력 화면이 이미 설명을 담고 있어 메뉴 하단 안내문은 제거했습니다. - **오래되고 한 번도 쓰이지 않은 자동 관측 메모가 조용히 정리됩니다.** 자가성장이 남긴 관측 메모 중 오래 안 쓰인 것은 자동으로 "보관"(삭제 아님 — 검색으로는 계속 찾을 수 있음) 처리해, 매 턴 주입되는 기억 목록이 깔끔하게 유지됩니다. - **게이트웨이 설정이 재시작 없이 즉시 반영됩니다.** 환경변수 대신 `settings.json`의 `gateway:{}`에서 켜기/끄기·모델 목록·동시성을 바꾸며, 저장하는 즉시 적용됩니다(토큰만 환경변수에 남습니다 — 파일에 raw 토큰을 두지 않기 위해). `enabled:false`가 킬 스위치입니다. 기존 환경변수 설정도 그대로 동작합니다. - **대화 히스토리 상한을 70만 자에서 50만 자로 낮췄습니다.** "구독이라 토큰이 공짜"라는 이유로 크게 잡아둔 값이었는데, 실제로는 입력이 커지면 백엔드가 오류도 없이 빈 응답을 주는 구간에 닿고 있었습니다. 매우 긴 스레드(360턴 기준)에서 유지되는 턴 수가 150 → 102로 줄지만, 잘리는 것은 가장 오래된 턴이고 맥락은 요약으로 보존됩니다. - **텔레그램 서식이 HTML 방식으로 되돌아왔습니다.** MarkdownV2로 갔다가 표·긴 메시지에서 서식이 통째로 깨지던 문제 때문에 원래 방식으로 복원했고, 실패 시에도 태그 원문이 노출되지 않게 했습니다. 부수 효과로 의존성 51개가 줄었습니다. - **긴 요청·응답 기록은 화면에 앞부분만 싣습니다.** 엔드포인트 요청 같은 대용량 내용은 미리보기 4KB만 전송하고 "전체 N자 중 앞 4,000자"를 명시합니다. 전문은 대화 기록에 그대로 보존됩니다. ### Fixed - **작업 중 보낸 메시지가 내부 안내문과 함께 그대로 보이던 문제를 고쳤습니다.** 비서가 작업하는 중에 메시지를 보내면 "[진행 중 작업에 사용자가 끼어들어…]" 같은 내부 안내문이 **내가 보낸 메시지**로 화면에 표시되고, 같은 메시지가 두 번 뜨기도 했습니다. 이제 원문만 한 번 표시됩니다. - **옛날 메시지가 갑자기 대화 맨 아래에 나타나던 문제를 고쳤습니다.** 연결이 끊겼다 다시 붙을 때 과거 메시지가 최신인 것처럼 대화 끝에 붙었습니다(예: 한 시간 전 메시지가 방금 것처럼). 이제 순서가 유지됩니다. - **다른 세션인데 같은 백그라운드 작업이 "진행 중"으로 뜨던 문제를 고쳤습니다.** 서브에이전트는 자신을 띄운 작업에 소속되는데 그 정보를 세션으로 되짚지 못해, 관계없는 세션에서도 진행 중으로 표시됐습니다. - **답변이 화면 맨 아래까지 스크롤되지 않던 문제를 고쳤습니다.** 메시지를 보낸 뒤 새 답변이 화면 아래로 잘려 윗부분만 보이는 일이 잦았습니다(트랙패드에서 특히). 실제로 화면이 움직였는지를 기준으로 판정하도록 바꿔, 되돌아오면 자동으로 다시 따라갑니다. - **자가 점검이 멀쩡한 답변을 "이상"으로 알리던 문제를 고쳤습니다.** 같은 코드 블록이 여러 번 들어간 답변 등을 반복 이상으로 오인했습니다(실데이터 5,418건 검사 결과 지금까지의 알림이 전부 오탐이었습니다). 판정 기준을 산문 문단으로 좁혀 오탐을 없앴습니다. - **비서가 대화 맥락에 맞는 기억을 훨씬 잘 떠올립니다.** 예전에는 기억 검색이 문장 전체를 통째로 매칭해 "스케줄이 대시보드에 안 뜨는데 어떻게 고치지?" 같은 일상 문장으로는 관련 기억을 거의 못 찾았습니다(사실상 자동 회상이 반쯤 멈춰 있었음). 이제 키워드 단위로 찾아 관련 기억을 제대로 떠올립니다. - **업데이트/재시작할 때 홈 설정 파일(.env)의 토큰이 지워지던 문제를 고쳤습니다.** 특정 상황에서 자동 토큰 갱신이 `.env`의 다른 값(텔레그램·대시보드 토큰 등)을 통째로 날려, 이후 다른 설정으로 되돌아가던 데이터 손실 버그였습니다. 이제 파일 갱신을 안전하게(원자적·부재 아닌 읽기 오류 시 건너뜀) 처리해 다른 값이 보존됩니다. - **설치·프로덕션 모드에서 모델 프로파일이 항상 기본으로 안전하게 떨어집니다.** 기본 프로파일 이름이 커스텀이거나 지정되지 않아도 항상 첫 프로파일로 폴백하고, 각 프로파일의 폴백 사슬은 항상 지정된 기본 프로파일에서 끝납니다. - **설정 마법사(`onboard`/`init`)가 기존 모델 프로파일을 존중합니다.** 이미 프로파일이 있으면 시드를 아예 건너뛰고, 불필요하던 `nano` 시드는 제외했습니다. - **텔레그램이 통째로 먹통이 되던 문제를 고쳤습니다.** 특정 네트워크 환경(Tailscale 등 IPv6 블랙홀)에서 텔레그램 연결이 전부 타임아웃돼, 데몬은 멀쩡한데 메시지·알림이 하나도 오가지 않던 사고입니다. IPv4 우선으로 잡았고, 부팅 중 텔레그램 초기화에서 무한 대기하던 문제도 함께 해결했습니다. - **스케줄 알림이 조용히 사라지던 문제를 고쳤습니다.** 전송 순간의 일시 장애(502 등 5xx·커넥션 실패)에 재시도가 전혀 없어, 아침 브리핑 같은 알림이 내용은 생성된 채 도달하지 않았습니다. 이제 재시도하고, 그래도 실패하면 "⚠️ 스케줄 전송 실패 — '<라벨>' → <채널>, 내용은 대화 기록에 남아 있습니다"라고 알립니다. - **실패를 조용히 숨기던 문제를 고쳤습니다.** 한 모델이 실패해 같은 풀의 다른 모델로 넘어갈 때 아무 표시가 없어, 사용자는 정상 답변만 보고 무슨 일이 있었는지 몰랐습니다. 이제 "⚠️ codex 턴 실패 — <원인> / 다른 모델로 이어서 시도합니다"가 함께 표시됩니다(답변 본문은 그대로). - **같은 말을 계속 반복하던 문제(codex)를 고쳤습니다.** 한 답변 안에 "맞습니다… 하겠습니다" 류 문단이 22개까지 쌓이던 버그로, 도구를 쓰는 루프가 모델 자신의 이전 발언을 다시 넣지 않아 매번 처음부터 말하던 것이 원인이었습니다. - **끝난 작업이 계속 도는 것처럼 보이던 유령 카드를 고쳤습니다.** 절전·네트워크 전환 등으로 연결이 조용히 죽으면 브라우저가 알아채지 못해, 16분 전에 끝난 작업이 30분째 "실행 중"으로 굳어 있었습니다(새로고침해야 사라짐). 이제 연결 두절을 감지해 자동 재연결합니다. - **엔드포인트 화면이 멈추던 문제를 고쳤습니다.** 최대 1.3MB짜리 요청 본문을 전부 펼친 채 화면에 넣어 브라우저가 정지했습니다. 진입이 수십 초 이상에서 21ms로 개선됐습니다. - **`/update`가 실패하던 여러 경우를 고쳤습니다.** 빌드된 설치본 전체에서 실패하던 문제, Windows에서 파일 잠금(EBUSY)으로 실패하던 문제, Windows에서 빌드 도구가 없어 실패하던 문제를 각각 해결했습니다. 실패하면 이제 원인 단계와 로그 경로를 담아 알려줍니다(예전에는 어디에도 남지 않았습니다). - **작업이 끝나갈 무렵 보낸 메시지가 삼켜지던 문제를 고쳤습니다.** 턴 마무리 직전 창에 도착한 메시지가 처리도 대기도 아닌 채 사라졌습니다. 이제 남은 메시지를 회수해 이어갑니다. 아직 작업 중인데 "작업 중" 표시가 먼저 꺼지던 것도 함께 고쳤습니다. - **여러 세션을 오가면 도구 카드가 쪼개져 폭주하던 문제를 고쳤습니다.** 다른 탭에 갔다 돌아오면 진행 중인 작업의 카드가 분열돼, 도구 실행이 무한 반복되는 것처럼 보였습니다. - **메시지를 보낸 뒤 화면이 맨 아래에 붙지 않던 문제를 고쳤습니다.** 스트리밍 중 스크롤이 따라가지 않거나, 여러 줄 메시지를 보낸 뒤 위로 튀던 것들을 정리했습니다. - **대화를 시작하기 전에 세션 이름을 바꾸면 되돌아가던 문제를 고쳤습니다.** 이름이 저장되지 않고 '세션N'으로 복귀했습니다. - **원격(Tailscale 등)에서 대시보드가 502로 안 열리던 문제를 고쳤습니다.** 포트 충돌이 원인이었습니다. - **긴 텔레그램 메시지에 마크다운 원문(`**`·백틱 등)이 그대로 노출되던 문제를 고쳤습니다.** 4096자를 넘겨 분할될 때 서식이 유실됐습니다. - **모델 선택 드롭다운이 PC에서 보이지 않던 문제**와 목록·설정 화면이 안 뜨던 회귀, 배지·칩이 줄바꿈되며 깨지던 것, 스킬 실행 배지가 일부 모델에서만 나오던 것을 고쳤습니다. - **워커가 띄운 셸이 "실행 중" 목록에 안 뜨던 문제**, 모바일에서 채팅 스크롤이 끊기고 가상 키보드가 멋대로 올라오던 문제, 세션 탭 롱프레스 메뉴가 드래그와 충돌하던 문제를 고쳤습니다. - **로그가 전날 파일에 묻히던 문제를 고쳤습니다.** 자정이 지나면 그날 날짜 파일로 넘어가고, 스케줄 실패에는 "무엇이 어디로 실패했는지" 맥락이 함께 기록됩니다. ## [0.14.0] - 2026-07-18 ### Added - **대시보드 왼쪽 메뉴를 "모듈"과 "능력" 두 축으로 정리했습니다.** 예전에 흩어져 있던 프로바이더·인벤토리·채널·엔드포인트 화면을, "무엇이 돌고 있나"(📡 채널·⏰ 트리거·🧠 LLM 어댑터·🖥️ 서비스 = **모듈**)와 "무엇을 할 수 있나"(🛠️ 스킬·🤖 에이전트·⌨️ 커맨드·🔌 엔드포인트 = **능력**)로 나눠 보여줍니다. 각각 검색·접이식 카테고리·항목을 눌러 상세를 보는 3-패널이고, 실제로 가진 것만 뜨도록 빈 항목은 자동으로 숨깁니다. - **모듈을 대시보드에서 켜고 끌 수 있습니다.** "모듈" 뷰에서 스케줄러·파일 감시·자가성장 같은 모듈을 개별로 비활성화할 수 있습니다(다음 재시작 때 적용). 대시보드·HTTP 브리지처럼 끄면 곤란한 핵심 모듈은 확인 경고를 띄우고, 코어(데몬·메모리 등)는 항상 켜져 있어 끌 수 없습니다. - **LLM 어댑터와 엔드포인트도 목록에 나타납니다.** 연결 설정된 LLM 프로바이더(Anthropic·OpenAI·Ollama 등)가 "모듈"에 🧠 LLM 어댑터로, `endpoints/`에 정의한 HTTP 엔드포인트가 "능력"에 🔌 엔드포인트로 표시됩니다(시크릿은 노출하지 않고 인증 설정 유무만 보여줍니다). - **LLM 백엔드가 사용량 한도에 걸리면 자동으로 쉬어 갑니다.** 한 백엔드가 한도(429)나 오류로 막히면 잠시 쿨다운시키고 다음 프로바이더로 폴백해, 응답 없는 백엔드를 계속 두드리는 낭비를 없앱니다. 한도가 풀리거나 이후 요청이 성공하면 자동으로 다시 씁니다. - **실행 중인 백그라운드 셸(서버·스크립트)을 대시보드에서 보고 멈출 수 있습니다.** 비서가 `run_in_background`로 띄운 셸(개발 서버, 긴 스크립트 등)이 왼쪽 메뉴 새 "🖥️ 셸" 화면에 명령·폴더·상태·경과 시간·최근 출력과 함께 뜨고, "⏹️ Kill"로 즉시(자식 프로세스까지) 종료할 수 있습니다. 카드를 펼치면 출력이 실시간으로 따라옵니다(대시보드 미리보기는 비서가 보는 출력을 가로채지 않습니다). 채팅 안 해당 도구 단계에도 라이브 상태 칩이 붙고, 현재 세션에 도는 셸 수가 입력창 위에 "🖥️ 셸 N개 실행 중"으로 표시됩니다. 데몬을 재시작하면 이전에 남아 있던 셸(자식 포함)을 정리하고, 정리 못 한 흔적은 다음 부팅 때 신원을 확인한 뒤 회수합니다. (Claude 모델이 자체적으로 띄운 셸은 관측만 되고 중지는 모델 몫이라 "SDK 소유"로 표시됩니다.) - **어떤 모델 프로파일이든 기본으로 지정할 수 있습니다.** 대시보드 "모델 프로파일" 뷰에서 각 프로파일 카드의 "기본으로 설정" 버튼으로 메인 대화가 쓸 기본 프로파일을 바로 바꿀 수 있습니다(settings.json `models.default` 포인터). 지정하지 않으면 종전처럼 "default" 프로파일을 씁니다. 설정 파일을 매번 새로 읽으므로 바꾸면 다음 턴부터 바로 반영됩니다. - **백그라운드 작업 카드 메뉴에 옵션을 더했습니다.** 작업 카드의 ⋯ 메뉴(우클릭·길게 누르기 포함)에 "세션으로 이동"(그 작업을 시작한 대화로 점프)·"결과만 복사"·"작업 ID 복사"가 추가됐습니다(기존 상세 보기·복사·중지는 그대로). - **현재 세션에 진행 중인 백그라운드 작업이 입력창 위에 표시됩니다.** 지금 보고 있는 세션에서 돌고 있는 백그라운드 작업(워커) 수가 채팅 입력창 위에 "🔄 백그라운드 작업 N개 진행중"으로 뜨고, 누르면 작업 드로어가 열립니다(세션별로 집계, 탭을 바꾸면 그 세션 기준으로 갱신). - **대시보드에서 응답을 다른 채널로 보낼 수 있습니다.** 채팅 입력창의 채널 선택으로 "이 답은 텔레그램으로" 같은 지정이 가능합니다 — PC에서 지시하고 결과는 폰 텔레그램으로 받는 식입니다. 채널에 무관한 구조라, 앞으로 슬랙 등이 붙으면 그 채널도 선택지에 자동으로 나타납니다(코어·UI 수정 없이). - **연결된 채널을 한눈에 봅니다.** 대시보드 왼쪽 메뉴에 "📡 채널"이 생겨, 지금 연결된 채널(텔레그램·CLI·대시보드 등)과 각 상태(작동 중/꺼짐)를 보여줍니다. 텔레그램 토큰이 없으면 "꺼짐"으로 표시됩니다. (앞으로 슬랙 등 새 채널이 붙으면 여기 자동으로 나타납니다.) - **프로젝트 폴더를 파일 탐색기로 엽니다.** 프로젝트 카드의 ⋯ 메뉴(우클릭·길게 누르기 포함)에서 "📂 폴더 열기"를 누르면 그 프로젝트 폴더가 tiguclaw가 도는 컴퓨터의 파일 탐색기(Finder/탐색기)에서 열립니다 — 폰에서 눌러도 호스트 PC에서 열립니다. (등록된 프로젝트 경로만 열 수 있습니다.) - **버전을 확인할 수 있습니다.** `/status` 명령에 현재 버전(과 실행 모드)이 표시되고, 대시보드 헤더에도 실제 버전이 나옵니다(하드코딩된 옛 표기 대신 실행 중인 버전을 그대로). - **`tiguclaw update` — 터미널에서 한 번에 자가 갱신.** 채팅 `/update`와 별개로, 셸에서 `tiguclaw update`(또는 `npm run daemon:update`)를 실행하면 돌고 있는 데몬을 멈추고 → 최신 코드를 받고(`git pull`) → 의존성을 재설치(`npm ci`)하고 → 빌드한 뒤 → 다시 가동합니다. 실행 중인 데몬이 파일을 잠가 재설치가 실패하던 문제(특히 Windows)를 "먼저 멈추고 설치" 순서로 방지하고, 중간에 실패하면 자동으로 이전 커밋 상태로 되돌리며 데몬을 원복 가동합니다. `node_modules`가 깨져 있어도 `npm ci`로 스스로 복구합니다(의존성 없는 순수 실행). ### Changed - **세션 탭의 × 닫기 버튼을 없애고, 닫기는 탭의 ⋯ 메뉴(우클릭·길게 누르기 포함)의 "탭 닫기"로만 하도록 바꿨습니다.** 탭이 더 깔끔해지고 실수로 닫는 일이 줄어듭니다. - **채팅 메시지의 ⋯ 메뉴를 카드 맨 윗줄 오른쪽으로 옮기고, 붙어 있던 "↩ 답글" 버튼은 없앴습니다.** 답글은 ⋯ 메뉴(우클릭·터치 길게 누르기 포함) 안에 그대로 있어 기능은 동일합니다 — 버블을 덜 가리고 더 깔끔해집니다. - **백그라운드 작업 패널의 필터를 정리했습니다.** "현재 세션 / 전체 세션"을 맨 위 기준으로 올리고, 그 선택에 따라 아래 "진행 중 / 전체" 개수가 갱신되도록 했습니다(현재 세션만 볼 땐 그 세션 작업 수, 전체 세션일 땐 전부). 세션 버튼의 불필요한 개수 표시는 없앴습니다. - **진행 중인 하위 작업(서브에이전트)도 중지할 수 있습니다.** 예전에는 실행 중인 백그라운드 "워커"만 ⏹️ 중지가 되고 다른 작업이 불러온 하위 작업(서브에이전트)은 제외됐는데, 이제 진행 중이면 워커·하위 작업 구분 없이 카드에서 바로 멈출 수 있습니다. (claude로 도는 하위 작업을 멈추면, 모델 SDK가 개별 하위 작업만 끊는 걸 지원하지 않아 그 작업이 속한 대화 턴 전체가 함께 멈춥니다.) ### Fixed - **설치·프로덕션(built) 모드에서 "자가성장" 모듈 카드가 목록에 안 뜨던 문제를 고쳤습니다.** 모듈 자체는 정상 작동했지만 대시보드 "모듈" 목록에서만 빠져 보였는데, 이제 상태와 함께 정상적으로 표시됩니다. - **Claude 모델의 답변이 실시간으로 한 조각씩 흘러나오도록 고쳤습니다.** 예전에는 Claude로 답할 때 응답이 토큰 단위로 스트리밍되지 않고 다 생성된 뒤 한 번에 떠서, 한참 기다리는 느낌에 "작업 중" 표시도 어정쩡했습니다. 이제 다른 모델(코덱스 등)처럼 생성되는 대로 실시간으로 흘러나옵니다. - **하위 작업(서브에이전트)이 낸 선택지 질문이 화면에 뜨지 않던 문제를 고쳤습니다.** 다른 작업에 위임된 하위 작업이 "이 중에 골라주세요" 식 질문을 할 때, 질문 글만 뜨고 정작 고를 선택지(버튼)가 안 나와 답할 수 없었습니다. 이제 하위 작업의 선택지도 메인 대화와 똑같이 클릭할 수 있게 렌더링됩니다. - **다른 폴더(프로젝트)에 위임한 하위 작업·워커가 채팅에 "🤖 백그라운드 ↗" 링크로 안 뜨던 문제를 고쳤습니다.** `path`를 지정한 크로스 프로젝트 위임은 내부적으로 다른 경로의 도구로 실행되는데, 그때 하위 작업을 띄운 자리에 백그라운드 링크 칩이 붙지 않아 작업 드로어로 바로 갈 수 없었습니다. 이제 위임 방식(현재 폴더/다른 폴더)과 무관하게 링크가 붙습니다. - **새로고침 후 백그라운드 작업 이름이 "(작업)"으로 뜨던 문제를 고쳤습니다.** 오래 도는 작업은 시작 이벤트가 실시간 창을 벗어나 새로고침 시 이름이 유실됐는데, 이제 대시보드가 열릴 때 실행 중인 작업 목록을 불러와 이름을 복원합니다. - **`/update` 실패 시 실제 원인이 보이게 했습니다.** 예전에는 재빌드가 실패해도 "진입점 미생성"만 떠서 이유를 알 수 없었는데(빌드 도구의 에러 메시지가 유실됨), 이제 실패한 빌드의 마지막 오류 내용을 함께 보여줍니다. 빌드 도구가 아무 출력도 없으면 `node_modules` 손상을 의심해 `tiguclaw update`(의존성 재설치 포함)로 복구하도록 안내합니다. - **메시지를 보낸 뒤 화면이 맨 아래인데도 "↓ 최신" 버튼이 남아 있던 문제를 고쳤습니다.** 전송으로 맨 아래로 이동하면 점프 버튼이 정확히 사라집니다. - **모바일에서 백그라운드 작업 카드의 긴 이름이 한 글자씩 세로로 깨지던 문제를 고쳤습니다.** 좁은 화면에서는 작업 이름이 한 줄을 통째로 쓰고 상태 배지들이 아래로 접히도록 해, 이름이 정상적으로 표시됩니다(데스크톱은 그대로). - **백그라운드 작업 드로어가 새 항목을 제대로 따라가도록 고쳤습니다.** 펼친 작업 카드에 스텝이 쌓일 때 최신 스텝이 화면 아래로 사라지던 문제(스텝 영역이 이제 자체 스크롤로 최신을 따라감)와, 새 작업 카드가 목록 맨 위에 추가돼도 안 보이던 문제(최신을 보고 있으면 자동으로 따라가고, 과거 작업을 훑어보는 중이면 끌어당기지 않음)를 고쳤습니다. 아래로 내려 과거 작업을 보는 중 새 작업이 시작되면 **"↑ 최신" 버튼**으로 한 번에 최신으로 이동할 수 있습니다(채팅의 "↓ 최신"과 동일). ## [0.13.0] - 2026-07-16 ### Added - **백그라운드 작업을 직접 중지할 수 있습니다.** 실행 중인 백그라운드 작업(워커) 카드에 "⏹️ 중지" 버튼이 생겼고(우클릭/컨텍스트 메뉴에도 있음), 누르면 그 작업이 즉시 취소됩니다. (다른 작업에서 불러온 하위 작업은 그 작업에 종속되므로 대상에서 제외됩니다.) ### Changed - **백그라운드 작업 자동 시간제한을 30분 → 2시간으로 늘렸습니다.** 오래 걸리는 정상 작업이 30분에 잘리던 문제를 완화했습니다 — 이제 자동 제한은 "방치된 멈춘 작업"의 최종 안전망 역할이고, 보이는 작업은 위 중지 버튼으로 직접 멈출 수 있습니다. 필요하면 `WORKER_TIMEOUT_MS` 환경변수로 조정합니다. ## [0.12.1] - 2026-07-16 ### Fixed - **`/stop` 명령이 대시보드에 "대기 중"으로 멈춰 남던 문제를 고쳤습니다.** `/stop`·`/restart`·`/update` 같은 즉시 실행(out-of-band) 명령이 대시보드의 낙관적 메시지 버블을 정리하는 신호를 안 보내던 것이 원인이었습니다(새로고침해야 사라지던 증상). 이제 보내는 즉시 버블이 정상 처리됩니다. ## [0.12.0] - 2026-07-16 ### Added - **대시보드 어디서나 컨텍스트 메뉴.** 세션 탭·백그라운드 작업·채팅 메시지·전체 활동 줄에서 ⋯ 버튼·우클릭·길게 누르기(터치)로 메뉴를 열어 관련 동작(이름 변경·닫기·새 세션·답글·복사·세션으로 이동 등)을 바로 실행합니다. - **스킬이 메뉴 항목을 확장할 수 있습니다.** 스킬 정의(SKILL.md)에 `context-menu:`로 항목을 선언하면 UI 코드 수정 없이 해당 컨텍스트 메뉴에 나타나고, 클릭하면 그 대상에 스킬이 실행됩니다 — 모델을 거치므로 기존 승인·권한 게이트가 그대로 적용됩니다(코어 단순, 능력은 데이터로 확장). ## [0.11.0] - 2026-07-16 ### Added - **비서가 자기 실행 환경을 인지합니다.** 매 턴 프롬프트에 환경 정보(작업 폴더·플랫폼·OS 버전·오늘 날짜·사용 중인 셸과 그 문법)를 넣어, 비서가 경로·명령·시간을 환경에 맞게 판단합니다. - **Windows에서도 셸 명령(Bash 도구)이 동작합니다.** 이전엔 `sh` 고정이라 Windows에서 실패했으나, 플랫폼에 맞는 셸(Windows=cmd, 그 외=sh)로 실행하고 비서에게도 어떤 문법을 써야 하는지 알려줍니다. ## [0.10.0] - 2026-07-16 ### Changed - **백그라운드 작업 드로어가 세션별로 표시됩니다.** 이제 드로어는 지금 보고 있는 세션 탭에서 띄운 백그라운드 작업(워커·서브에이전트)만 기본으로 보여주고, 탭을 바꾸면 그 세션 것으로 따라 바뀝니다(채팅과 동일한 세션 스코프). "전체 세션" 토글로 모든 세션의 작업을 한 번에 볼 수도 있습니다. 모든 세션을 아우르는 전체 흐름은 "📜 전체 활동" 뷰에서 봅니다. ## [0.9.0] - 2026-07-16 ### Added - **"전체 활동" 뷰가 생겼습니다.** 대시보드 왼쪽 메뉴의 "📜 전체 활동"에서 모든 세션·채널의 대화와 작업을 시간순으로 한데 모아 볼 수 있습니다(읽기 전용 모니터). 각 줄에 어느 세션·어느 채널인지 배지로 표시되고, 접힌 한 줄 로그로 훑다가 클릭하면 펼쳐서 전체 내용을 봅니다. 실시간으로 갱신됩니다. ### Changed - **세션 표시를 번호식(세션1, 세션2 …)으로 바꿨습니다.** 이름을 안 지은 세션은 "세션N"으로 보이고(기본 세션 = 세션1), 원하면 탭 이름을 더블클릭해 바꿀 수 있습니다. ## [0.8.0] - 2026-07-15 ### Added - **세션 탭 이름을 직접 지을 수 있습니다.** 대시보드 세션 탭 이름을 더블클릭하면 바로 편집할 수 있고(Enter 저장·Esc 취소), 지은 이름은 채널과 무관하게 그 대화에 붙습니다 — 텔레그램에서 이어도, CLI에서 이어도 같은 이름입니다. 이름을 안 지은 탭은 기존처럼 최근 메시지 미리보기로 표시됩니다. ### Changed - **세션 탭을 브라우저 탭 모양으로 다듬었습니다.** 열려 있는(활성) 탭이 대화 영역과 자연스럽게 이어지는 형태가 되고, 탭이 많으면 가로로 스크롤됩니다. ## [0.7.1] - 2026-07-15 ### Fixed - **대시보드 채팅에서 과거 이력을 읽는 중 새 메시지가 오면 화면이 위로 튀던 문제를 고쳤습니다.** 이력을 스크롤해 살펴보는 동안 새 답장이 도착해도 보던 위치가 그대로 유지됩니다. 또 맨 아래 근처에서 살짝 위로 스크롤하면, 새 메시지가 와도 바닥으로 다시 끌려가지 않고 읽던 자리를 지킵니다(날짜 구분선을 매번 다시 그리지 않고 재사용하도록 개선). ## [0.7.0] - 2026-07-15 ### Changed - **채널과 세션을 분리했습니다 — 텔레그램·CLI·대시보드·HTTP 는 모두 "채널"(전송로)이고, 대화(세션)는 채널과 무관해졌습니다.** 이제 텔레그램에서 나눈 대화가 대시보드 기본 세션에 그대로 보이고, 어느 채널로 들어오든 하나의 대화로 이어집니다(한 인격·한 대화 실타래). 대시보드 세션 탭으로 여러 대화를 따로 진행하는 건 그대로이며, 각 메시지에 어느 채널로 들어왔는지("텔레그램 경유")가 표시됩니다. 비서의 답장·알림은 그 대화의 마지막 채널로 자동 배달됩니다. ### Fixed - **대시보드에 텔레그램 메시지가 안 보이던 문제를 고쳤습니다**(v0.5.0 멀티세션 탭 도입 이후의 회귀). 원인은 대화를 채널마다 쪼개 텔레그램을 대시보드에서 배제한 것 — 채널/세션 분리로 근본 해소했습니다. - **텔레그램에서 `/reset`·`/model` 등 명령이 실제 세션에 반영되지 않던 문제**를 고쳤습니다(세션 통합 과정의 키 정합). ## [0.6.0] - 2026-07-15 ### Changed - **설치·제거·재시작·멈춤이 언제나 됩니다 — 의존성이 깨져도.** 데몬 관리 명령(`install`/`uninstall`/`restart`/`stop`/`start`/`status`/`logs`)이 이제 순수 Node(`bin/daemon.mjs`)로만 동작해, `node_modules` 나 개발 도구(tsx)가 깨진 상태에서도 항상 실행됩니다. 예전엔 관리 명령까지 tsx 를 거쳐서, 정작 고장났을 때 제거·정지조차 안 되는 상황이 있었습니다. ### Added - **`tiguclaw stop` / `tiguclaw start` 신설.** 등록(자동가동 설정)은 그대로 둔 채 실행만 잠깐 멈추고(`stop`) 다시 켜는(`start`) 명령입니다. 완전 제거는 `uninstall`. macOS·Linux·Windows 모두 지원합니다. - **파일 잠금(EPERM) 복구 안내.** 데몬이 실행 중이면 네이티브 모듈 파일이 잠겨 `npm ci` 가 실패할 수 있는데, 이제 `stop → npm ci → start` 순서로 항상 복구할 수 있습니다(README·`tiguclaw` 도움말에 명시). 재설치 시 데몬이 실행 중이면 먼저 `stop` 을 권하는 안내가 표시됩니다. ## [0.5.0] - 2026-07-15 ### Added - **대시보드 멀티세션 탭.** 대시보드 채팅 상단에서 **`+`** 로 새 세션(독립 맥락/대화)을 열어 여러 작업을 따로 진행하고, 탭 전환·**닫기**(닫아도 대화는 보존)가 됩니다. 각 탭 = 독립 대화 — tiguclaw 는 원래 세션별로 대화를 독립 처리하고(메모리·인격은 공유하는 단일 비서), **서로 다른 세션의 요청을 동시에 병렬로** 처리합니다. 열린 탭은 브라우저에 저장되어 새로고침 후에도 유지됩니다. (모든 세션·채널을 한눈에 보는 "전체 활동" 뷰는 후속으로 추가 예정.) ## [0.4.10] - 2026-07-15 ### Added - **대기 중인 메시지를 취소할 수 있습니다.** 비서가 처리 중일 때 보낸 메시지는 큐에 쌓이는데(⏳ 대기 중), 아직 시작하지 않은 메시지는 대시보드에서 옆의 **✕** 로 취소할 수 있습니다 — 취소하면 실행되지 않고 "취소됨"으로 표시됩니다. (이미 시작된 턴을 멈추는 `/stop` 과는 별개.) 클라이언트가 부여한 상관 id 로 정확한 메시지만 지목해 취소하며, 큐의 직렬화·순서는 그대로 보존됩니다. ## [0.4.9] - 2026-07-15 ### Added - 대시보드 **백그라운드 작업 드로어 폭을 드래그로 조절**할 수 있습니다. 드로어 왼쪽 가장자리를 잡고 끌어 넓히거나 좁히면 됩니다 — 조절한 폭은 저장되어 다음에도 유지됩니다. ## [0.4.8] - 2026-07-15 ### Changed - 대시보드 도구 스텝 클릭을 **인라인 펼침 하나로 통일**했습니다. 예전엔 diff·출력이 있는 도구만 그 자리에서 펼쳐지고, 그 외 도구는 별도 사이드바로 상세가 떴는데 — 이제 **모든 도구가 그 자리에서** 펼쳐집니다(리치 블록이 없는 도구는 인자·상세를 인라인으로). 컨텍스트 전환 없이 일관되게. (사이드바 상세 패널 제거.) ## [0.4.7] - 2026-07-14 ### Added - **대시보드에서 스킬 사용이 한눈에 보입니다** — 비서가 스킬을 쓰면(`invoke_skill`) 활동 스텝이 일반 도구(🔧)와 구분되는 **`🛠 스킬: <이름>` 배지**로 표시됩니다. 메인 턴·서브에이전트/워커·새로고침 이력 모두 동일. (표시 전용 — 코어는 그대로, 스킬 이름은 기존 활동 데이터에서 읽어 뷰에서만 강조.) ## [0.4.6] - 2026-07-14 ### Added - **대시보드에서 모델 프로파일을 볼 수 있습니다** — 사이드바 "🧠 모델 프로파일" 에서 각 프로파일의 이름·설명·풀(`provider:model`)·폴백을 한눈에. (표시 전용 — 프로파일은 대화로 편집.) - **에이전트·워커 구성 시 모델 프로파일을 인지하고 알맞게 고릅니다** — 비서가 서브에이전트/워커를 구성·위임할 때 정의된 모델 프로파일(`default`/`high`/`mid`/`low` 또는 커스텀)을 인지하고 작업 성격에 맞는 걸 선택합니다. 에이전트 명세 `model:`·워커 `tier` 에 프로파일 이름을 쓰면 그 풀+폴백으로 실행됩니다(동작은 기존부터 있었고, 이제 안내·자동 활용을 더함). claude 네이티브 서브에이전트는 opus/sonnet/haiku 3등급으로 근사, 그 외(codex/openai/워커)는 프로파일 풀·폴백 전체를 사용. ## [0.4.5] - 2026-07-14 ### Added - 대시보드 선택지(`prompt_options`)에 **"기타 (직접 입력)" 입력칸이 항상 포함**됩니다. 제시된 보기 중 딱 맞는 게 없으면 옵션 카드 안의 입력칸에 직접 답을 써서 보낼 수 있어요(Enter 또는 보내기 버튼) — AskUserQuestion 의 "기타"와 같은 방식. 보낸 답은 보기를 고른 것과 동일하게 처리됩니다. ## [0.4.4] - 2026-07-14 ### Added - **대시보드에서 돌쇠가 보낸 파일(`send_file`)을 미리보기하고 받을 수 있습니다.** 대화 중 만들어 보낸 리포트·이미지·zip 등이 첨부 카드로 뜨고 — 이미지는 클릭해 크게 보기, 텍스트·마크다운은 인라인 미리보기, 옆의 **⬇ 받기** 버튼으로 다운로드. `send_file` 이 이제 텔레그램뿐 아니라 웹 대시보드에서도 렌더됩니다(채널 무관 추상 의도). 보낸 파일은 통제된 첨부 저장소(`/data/attachments`)로 복사해 안전하게 서빙하며, 경로 탈출(traversal)은 차단됩니다. ## [0.4.3] - 2026-07-14 ### Fixed - **프로덕션 빌드(`built`) 모드에서 웹 대시보드가 뜨지 않던 문제 수정.** 대시보드 UI(`packages/dashboard`)가 빌드 산출물에 포함되지 않아, `built` 로 설치한 인스턴스는 대시보드 포트가 빈 응답이었습니다(설치 기본이 `built` 라 신규 설치자 영향). 이제 `build:prod` 가 대시보드를 `dist/` 로 컴파일·복사하고 built 데몬이 직접 서빙합니다(source 모드는 기존대로 동작). 릴리스 검증(클린룸)에 대시보드 실서빙 게이트를 추가해 재발을 막습니다. ## [0.4.2] - 2026-07-14 ### Changed - 대시보드 백그라운드 작업 패널에서 **워커 잡에도 `📦 워커` 배지**를 표시합니다(기존엔 서브에이전트만 배지가 있었음). 서브에이전트(보라)와 워커(중립 회색)를 한눈에 구분 — 에이전트 그리드와 동일한 표기. ## [0.4.1] - 2026-07-14 ### Fixed - 대시보드 채팅에서 백그라운드 워커 완료 보고가 **2개 버블로 중복** 표시되고, 내부 완료-알림 스캐폴딩(〔…〕)이 **사용자 메시지처럼 노출**되던 문제 수정. 워커 완료 재주입 턴이 관측 이벤트를 이중 발행하던 것과, 합성 턴의 인바운드 발행을 각각 닫았습니다. (텔레그램 발신은 원래 정상 1통이었고, 실패·취소·복구 통지의 대시보드 가시성은 그대로 보존.) ## [0.4.0] - 2026-07-14 ### Changed - README(영/한)에 능력 쇼케이스 **"Highlights"** 섹션 추가 — 리치 웹 대시보드(라이브 인터리브·도구 카드·백그라운드 잡 패널)·프로젝트(폴더별 전용 스킬/에이전트/MCP)·외부 MCP 즉석 연결·직접 통제하는 모델 티어·관측 가능한 서브에이전트/워커·말로 하는 확장을 전면에 배치. 인트로에 내장 웹 대시보드 명시. (그동안 한 줄로 묻혀 있던 핵심 기능들을 제대로 드러냄.) ## [0.3.99] - 2026-07-14 ### Fixed - 레포 체크아웃이 모든 OS 에서 깨끗하게 유지되도록 `.gitattributes` 를 **레포 전체 LF 고정**(`* text=auto eol=lf`)으로 확장. 윈도우 등에서 줄바꿈(CRLF) 변환 탓에 추적 파일(`.mjs`·`.ts` 등)이 "수정됨"으로 떠 `git pull`·자가 업데이트와 충돌하던 문제를 예방합니다(이전엔 `bin/tiguclaw.mjs` 한 파일만 고정). 기존에 이미 지저분해진 클론은 `git checkout -- .` 로 원상복구하거나 다시 clone 하면 됩니다. ## [0.3.98] - 2026-07-14 ### Fixed - 시크릿(`.env`)이 항상 **런타임 홈**(`/.env`)에만 기록되도록 수정. codex(ChatGPT) OAuth 토큰의 주기적 자동 갱신과 onboard 의 codex 로그인이 `.env` 를 **레포 체크아웃**에 쓰던 문제를 고쳐, 공개 레포가 더 이상 토큰으로 더럽혀지지 않습니다(`git pull`·자가 업데이트 깔끔 유지). 데몬 관리 스크립트의 포트 조회도 홈 `.env` 기준으로 통일. ## [0.3.97] - 2026-07-14 ### Changed - 설치 기본 런타임이 **컴파일된 빌드(built)**로 바뀌었습니다. `npm run onboard` 가 이제 기본으로 `dist/` 로 컴파일한 뒤 그 빌드를 서비스로 등록합니다(부팅이 빠르고 실행 중 변환 없음). TypeScript 소스를 그대로 돌리려면 `TIGUCLAW_RUNTIME=source npm run onboard`. 런타임 모드는 **설치할 때 서비스 유닛에 고정**되어, 이후 업데이트나 기본값 변경에 흔들리지 않습니다(기존 설치는 자기 모드를 유지). 개발용 설치는 `npm run daemon:install:dev`(소스 모드 고정). ## [0.3.96] - 2026-07-14 ### Added - 프로덕션 빌드 런타임: install/프로덕션 인스턴스를 컴파일된 산출물로 실행하는 모드(`TIGUCLAW_RUNTIME=built`). `npm run build:prod` 가 `dist/src` + `dist/plugins` 를 미러 빌드하고, 데몬이 tsx 소스 대신 `node dist/src/index.js` 로 구동 — 빠른 부팅·검증된 산출물. 개발 인스턴스는 소스(tsx) 모드 유지가 기본이라 반복이 빠르다. - 빌드 모드 자가 업데이트: `built` 모드의 self-update 는 git pull 후 자동 재빌드(스테이징 빌드 → 원자 교체 → 재시작). 빌드 실패 시 롤백하고 재시작하지 않아 **이전 산출물이 계속 살아있다**(먹통 없음). - `/models` 명령: 현재 모델 프로파일 목록(이름·설명·풀·폴백)과 이 대화의 세션 모델 override 를 표시. 텔레그램·대시보드·CLI 공통. ### Changed - 플러그인 빌드 포함: 프로덕션 빌드가 플러그인(`plugins/`)과 런타임 자산(`SYSTEM.md`·skills·agents)을 `dist/` 로 함께 내보내, 컴파일된 데몬이 모든 플러그인을 온전히 로드한다. 릴리스 검증에 빌드 데몬 실부팅 + 플러그인 로드 게이트 추가. ## [0.3.95] - 2026-07-14 ### Added - 명명된 모델 프로파일: `settings.json` 의 `models.profiles` 에 이름·설명·풀(`provider:model` 배열)·폴백으로 모델 구성을 데이터로 정의. 마스터·서브에이전트·워커·세션이 프로파일 이름(`default`/`high` 등)으로 모델을 고른다. 흩어져 있던 티어(`MODEL_TIER_*`)·기본 풀(`REGION_A_MODELS`) 설정을 한 곳으로 통일 — 프로파일 추가·삭제가 파일 편집만으로 된다. - 프로파일 2층 폴백: 풀 안 순차 폴백(임의 실패 시 다음 모델) + 프로파일 간 폴백 체인(`fallback` 참조, 모델/자격증명 부재 등 구조적 불가에만 발동). 홈/프로젝트 스코프 병합으로 프로젝트별 오버라이드 지원. ### Changed - 설정 로더 일반화(`loadSettings`) — 기존 `.env` 설정(`REGION_A_MODELS`·`MODEL_TIER_*`)은 프로파일 부재 시 레거시 폴백으로 무기한 유지(기존 설치 무중단). ## [0.3.94] - 2026-07-14 ### Added - **You can now reply to a specific message in the dashboard chat.** Hover any message and click "↩ reply" to quote it; a chip above the composer shows what you're replying to, and sending threads that message's text in as context — so "continue this" is unambiguous about which message it means. Same mechanism Telegram replies already used (channel-agnostic; no new backend). ## [0.3.93] - 2026-07-13 ### Fixed - **Keyboard navigation works in the chat again, and the list no longer drifts sideways.** After the transcript became virtualized, PageUp/PageDown/Home/End stopped scrolling it (and a stray horizontal shift could crop the left edge). These keys now scroll the chat explicitly — PageUp/Down by a page, End to the newest, Home to the top of what's loaded — and the transcript is pinned against horizontal scrolling. (Keys defer to the composer while you're drafting a message.) ## [0.3.92] - 2026-07-13 ### Changed - **The assistant now carries the conversation forward instead of re-asking.** Follow-ups and ambiguous references ("that one", "keep going", an omitted subject) are resolved from the recent context of the thread (latest messages, the active topic/`#tags`, what was just done) rather than asking obvious questions — while still briefly confirming when a request is genuinely ambiguous or hard to undo. (Operating-constitution rule.) ## [0.3.91] - 2026-07-13 ### Added - **A step that spawns a background sub-agent now links to it from the chat.** The spawn shows inline at its place in the turn with a "🤖 background ↗" chip; clicking it opens the background drawer (and, where the model backend exposes the job id, jumps to and highlights that job with its live status). So you can see where in the conversation a background task was launched and jump to its progress. ## [0.3.90] - 2026-07-13 ### Added - **Dashboard chat now shows each assistant turn as an interleaved sequence of text and tool steps, in the order they happened** (like Claude Code) — e.g. *text → tool → tool → text → tool → text* — instead of bundling all tools into one block with the answer below. This is persisted, so it renders identically live, after a reload, and on any device. Works across all model backends (with per-iteration granularity on the ChatGPT/codex backend). A text segment is stored as an additive field on the existing tool-activity event (no schema migration); turns older than the event-retention window gracefully fall back to the previous bundled view. ## [0.3.89] - 2026-07-13 ### Fixed - **A choice you already made in the dashboard chat now stays selected after a reload/restart.** The interactive option buttons are pushed over a live channel and aren't persisted, so on reconnect they were re-rendered as unselected. Your pick is now remembered locally (keyed to the question) and restored — the chosen button shows selected and the group stays disabled. ## [0.3.88] - 2026-07-13 ### Fixed - **Expanding a tool step in the dashboard chat now stays open when the mouse moves away.** An expanded tool diff/output was tied to hovering the turn card (a too-broad CSS rule reached into the tool `
` blocks), so it collapsed as soon as the pointer left. Expansion is now a pure click toggle, independent of hover.

## [0.3.87] - 2026-07-13

### Changed
- **Dashboard chat now virtualizes the transcript (Claude-Code style), so scrolling up through a long history stays smooth and fast.** Only the messages near the viewport are kept in the DOM (measured heights, a single sizer + offset window), so you can scroll back indefinitely without the list getting heavy — and without the earlier "stuck at the top / blank space" failures. Live streaming, stick-to-bottom, and date separators are preserved.

## [0.3.86] - 2026-07-13

### Changed
- **Dashboard chat scrolling is simpler and more robust.** The chat list is no longer virtualized with placeholder spacers — it is now a plain bounded list with pagination. Scrolling up to read history loads older messages smoothly, and you no longer have to expand a tool step to get the scroll moving.

### Fixed
- **Scrolling up in a long chat no longer sticks at the very top or collapses into blank space.** Removing the spacer-based virtualization eliminates the whole class of scroll bugs where unmounted tool cards mispredicted their height.

## [0.3.85] - 2026-07-13

### Fixed
- **Dashboard chat no longer drops earlier messages (with the scroll stuck) during a long streaming reply.** As a multi-step reply grew, older messages could be unmounted behind a collapsed placeholder — leaving a blank top you couldn't scroll back to (only a refresh recovered them). The chat now keeps any message whose height it can't reliably measure, so scroll geometry is preserved.

## [0.3.84] - 2026-07-13

### Fixed
- **Dashboard updates now take effect on a normal refresh.** The dashboard page is served with `no-store`, so a fixed version is no longer masked by browser caching of the old page.

## [0.3.83] - 2026-07-13

### Added
- **Endpoint calls now have their own main-menu view**, with each call's full request and response and per-call collapse/expand — moved out of the background drawer, nothing truncated.
- **The assistant can now check its own runtime health.** A read-only `maintenance_status` reports whether storage stays within its designed bounds (hot working set vs. preserved records), and background job records now self-bound (running jobs are always kept).

### Fixed
- **Dashboard chat no longer blanks out earlier messages while a long response is streaming.** During a multi-step reply, previous messages stayed put instead of collapsing into empty space (a render-only issue — a refresh restored them). Message history is no longer unmounted while a turn is live.
- **The "working…" indicator stays visible through a model fallback.** When the primary model hits a transient error and the turn falls back to another model, the indicator no longer flickers off mid-response.

## [0.3.82] - 2026-07-12

### Changed
- **API endpoint calls no longer clutter the dashboard chat.** When an external app calls one of tiguclaw's custom HTTP endpoints, that machine-to-machine exchange used to stream into the chat view alongside your real conversation. Those calls now go to a dedicated "🔌 Endpoint calls" section in the background drawer — showing each call's endpoint, time, success/failure, and a response preview — while the chat stays focused on actual conversation. Full request/response records remain in the database as before.

## [0.3.81] - 2026-07-12

### Changed
- **When you work inside a registered project that has its own harness (dedicated skills and agents), tiguclaw now routes substantial work through that harness instead of quietly doing everything itself in one pass.** Design, new features, MVP builds, and multi-file refactors go to the project's purpose-built team; only genuinely small, localized changes are done inline. It decides "substantial vs simple" by whether the task involves structure or design decisions — not by how many lines it is — so asking it to "design an extensible X and build the MVP" no longer bypasses the very team you set up for that project.

## [0.3.80] - 2026-07-11

### Added
- **tiguclaw now reliably recognizes and reaches for its own capabilities when you describe a need — even an indirect one.** Previously, asked to do something in roundabout terms (e.g. "let an external app call you"), it could miss that it already had the right built-in tool and fall back to a clumsy workaround. Now it maps your request to what it can actually do first, and if nothing fits, it considers acquiring the capability — building a new skill or subagent, connecting an external tool, or exposing a custom HTTP endpoint. A new `find_capabilities` lookup lets it survey what's available in the moment across every model backend.

## [0.3.79] - 2026-07-11

### Fixed
- **Dashboard chat: mobile progress indicator, attachment remove button, and smoother typing.** On phones the "working…" indicator now stays visible while the assistant replies — previously the on-screen keyboard hid it just below the input box, so it now sits just above the input where it's always in view. The ✕ button for removing an attached file is no longer clipped by the thumbnail's rounded corner and floats fully on top of the chip. And typing in the chat box stays instant no matter how long the conversation is: the input's auto-resize no longer forces a full layout recalculation on every keystroke (which got costly as message history piled up), so keystrokes no longer lag.

## [0.3.78] - 2026-07-11

### Changed
- **The dashboard chat stays fast and smooth no matter how long the conversation gets.** The message list is now virtualized — only the messages near what you're viewing are kept rendered, so typing and scrolling stay responsive even in very long, tool-heavy conversations (previously they got progressively laggy as history piled up). Scrolling loads older messages seamlessly, and a "jump to latest" button appears when you've scrolled up. Tool-step cards restored from history now show their model backend (matching live), for consistency.

## [0.3.77] - 2026-07-11

### Added
- **The dashboard chat now scrolls sensibly.** When you send a message it jumps to the bottom, and while you're viewing the latest messages it follows new ones as they arrive — so you always see the newest reply. If you've scrolled up to read earlier history, it leaves you there instead of yanking you down; scroll back to the bottom and it resumes following.

## [0.3.76] - 2026-07-11

### Added
- **The dashboard now shows which model a background job is running on, and lets you expand a job's tool steps to see the full detail.** Background workers now display a model-tier badge (e.g. a high-tier code review shows it), matching what subagents already showed. And a background job's tool steps — which previously showed only a one-line summary — can now be clicked to reveal the same rich diff and output view as the main chat, on demand. The job timeline stays compact by default (no chat-noise), and expands only when you want the detail.

## [0.3.75] - 2026-07-11

### Added
- **Background workers can now run on a higher-quality model when the task needs it.** When the assistant kicks off a background job, it can pick the model tier for that job — so a code review, a design task, or hard reasoning runs on a stronger model, while bulk or simple jobs stay on a cheaper, faster one. Previously every background worker ran on the default model regardless of the task. There's also a dedicated high-tier code-review helper for when review quality really matters. Simple and cheap tasks are unaffected; nothing runs on an expensive model unless the work calls for it.

### Changed
- **Smarter about when to spin up a multi-agent team vs. just doing the work.** Coordinating multiple agents costs several times the tokens of a single pass, so the guidance now asks "is a team actually worth it?" up front — reserving fan-out for genuinely independent, sizable subtasks and keeping small or tightly-coupled work on a single agent. Less wasted effort, same results.

## [0.3.74] - 2026-07-11

### Added
- **A `skill-creator` skill — the assistant can now author and improve its own skills properly.** Ask it to make or refine a skill and it follows a real process: draft with the right structure and a well-targeted trigger description, do a quick sanity check, and ship on your approval. For skills where it matters, it can optionally *prove* an improvement with a small controlled eval — run test prompts with and without the skill, score them, and report a before/after table — so "this is better" is backed by data instead of a guess. The eval is opt-in, not mandatory: most skills just need the quick path. Unlike the equivalent tooling elsewhere, the eval is model-agnostic, so the same skill can be benchmarked across different backends. Skills are never changed automatically — a person always approves.

## [0.3.73] - 2026-07-11

### Added
- **Slash-command autocomplete in the dashboard chat.** Type `/` at the start of the chat box and a menu of available commands pops up — filter by typing, navigate with ↑/↓, accept with Enter/Tab or a click, dismiss with Esc. Matches the Claude Code / Telegram slash-menu experience in the web dashboard.

### Fixed
- **The command menu is now the same across every channel.** Built-in slash commands were maintained in three separate places that had drifted apart — so the Telegram menu was silently missing `/model`, `/schedule`, and `/stop`. All channels (Telegram, dashboard, and the reserved-name guard for custom commands) now draw from a single source, so the same command list shows everywhere and can't drift again.

## [0.3.72] - 2026-07-10

### Added
- **`/clear` resets a conversation's context — and it now actually works on every model backend.** Send `/clear` (or the existing `/reset`) to start a fresh conversation: earlier turns are no longer fed to the model. Previously `/reset` only took effect on the Claude backend — on the Codex and OpenAI/local backends the assistant kept re-injecting the prior conversation, so a "reset" didn't really reset. Now all three backends honor it uniformly. Your history isn't deleted (memory search and the dashboard transcript stay intact) — like Claude Code's `/clear`, only the live context is cut, matching the behavior across every channel and model.

## [0.3.71] - 2026-07-10

### Added
- **You can now interrupt a turn in progress with `/stop`.** If the assistant is working on something and you want to change direction, send `/stop` — it cancels the in-progress turn for that conversation (without restarting the daemon), and your next message is handled as a fresh turn. Works across all channels and model backends. A cancel is treated as an intentional action, not a failure, so it doesn't pollute error tracking or trigger fallbacks. (This is the "interrupt and redirect" form of steering; seamless mid-turn steering that keeps in-progress work is a separate, larger change.)

## [0.3.70] - 2026-07-10

### Added
- **Local/small models that don't support tool-calling now still respond, instead of failing.** Many local models (e.g. Ollama vision models like `llava`) don't support function-calling, so passing them tools made the whole turn fail with a "does not support tools" error. The OpenAI adapter now detects this and automatically retries once without tools, so those models can still answer (text and image questions). Models that do support tools (OpenAI, Gemini, etc.) are unaffected. Combined with the previous release, this makes vision-capable local models usable for image Q&A.

## [0.3.69] - 2026-07-10

### Added
- **The OpenAI backend can now actually see attached images (vision), matching the Claude and Codex backends.** Previously, when using OpenAI/Google(Gemini)/local OpenAI-compatible models, an attached image was only referenced as a file path in text, so those models couldn't view it. Now the image is sent to the model as visual input on vision-capable models (e.g. GPT‑4o, Gemini, and vision-capable local models). Models without vision support fall back to the previous text-reference behavior, so nothing regresses. (Past turns are reconstructed as text only, so a single un-viewable image can't wedge a conversation.)

## [0.3.68] - 2026-07-10

### Fixed
- **Self-update completion notices now appear in the same dashboard conversation you triggered them from.** When you asked the assistant to update itself from the web dashboard, the "update complete — restarted" notice was posted to a generic thread instead of the conversation you were in, so it looked out of place. It now lands in the right conversation. (Notifications from proactive actions — schedules, file-watch, background workers, self-update, restart — already showed in the dashboard; this only corrects which conversation the self-update notice is grouped under.)

## [0.3.67] - 2026-07-10

### Added
- **Images and files you attach now stay in the chat history after a reload.** Previously an attachment preview only showed during the live session and disappeared on refresh (attachments weren't stored with the message). Now the message keeps a lightweight reference to the already-saved file, and the dashboard serves it back — so your sent images/files render in past history too, including image-only messages (no caption). The image bytes aren't duplicated into the database; only a reference is stored, and the file is served from a local, token-protected endpoint with path-traversal protection.

## [0.3.66] - 2026-07-10

### Fixed
- **An image the model can't process no longer breaks the whole conversation.** Previously, if you sent an image Claude couldn't process, that failure got baked into the conversation's resumed session — so *every* later message (even plain text) kept failing with the same error until the thread was manually reset. Now the assistant detects this, self-heals the thread (dropping only the un-processable turn while keeping your conversation context and model choice), and replies with a clear "couldn't process that image — check the format/size and try another" message instead of a raw error.

## [0.3.65] - 2026-07-10

### Fixed
- **Images and files you attach in the dashboard chat now show up in your sent message card.** Previously an attachment was sent to the assistant but never appeared in the chat, so there was no visual confirmation of what you sent. Sent messages now render a thumbnail (for images) or a file chip inline in the bubble. (These previews are shown for the live session; because attachments aren't stored in the chat log, reloading the page shows past messages as text only.)

## [0.3.64] - 2026-07-10

### Changed
- **On mobile, Enter in the dashboard chat input now inserts a line break instead of sending.** On phones the on-screen keyboard's Enter key kept sending the message mid-thought; now it adds a newline, and you send with the "Send" button. Desktop is unchanged — Enter still sends, Shift+Enter still adds a newline. The distinction is based on whether the primary input is touch (not screen width), so a narrow desktop window with a physical keyboard still sends on Enter.

## [0.3.63] - 2026-07-10

### Fixed
- **Built-in slash commands now work in the web dashboard chat and no longer leave it stuck on "working".** Commands like `/status`, `/memo`, `/schedule`, and `/plugins` replied over the channel but didn't emit the completion event the dashboard uses to (1) render the reply and (2) clear the "working" spinner. As a result, in the dashboard the command appeared to do nothing and the spinner kept spinning, even though it worked fine on Telegram. Every built-in command (and error replies) now emits that event, so replies show up in the dashboard chat and the spinner clears — matching normal turns.

## [0.3.62] - 2026-07-10

### Changed
- **Hitting a backend's usage limit now gives a clear message instead of a raw error.** When an LLM backend returns a rate-limit/usage-limit error (e.g. Codex's `429 usage_limit_reached`), the assistant replied with the raw JSON, which was confusing. It now says which backend hit its limit, roughly how many minutes until it resets, and suggests switching backends or using a multi-model pool for automatic fallback. Other errors are still shown as-is. (No automatic cross-backend fallback is added — that stays a configuration choice; this only makes the message clear.)

## [0.3.61] - 2026-07-10

### Added
- **Diffs are now syntax-highlighted too, not just fenced code blocks.** The code inside an Edit/Write diff card is colored by language (detected from the file's extension), while the `+`/`-` markers keep their green/red so the added/removed signal stays clear — the GitHub-style combination of a tinted line plus highlighted code. Falls back to plain text when the language can't be determined. (Command/read output blocks are left plain for now.)

## [0.3.60] - 2026-07-10

### Changed
- **Project cards no longer show an "active" status badge.** Since almost every project is active by default, the badge appeared on every card as noise; it's now omitted for active projects and only shown for the meaningful exceptions — "paused" and "done". (The card's subtle left-edge color still reflects status.)

## [0.3.59] - 2026-07-10

### Changed
- **The context-tag bar collapses to a single line and expands with a scroll when you have many tags.** As learned tag chips accumulate, the bar no longer grows tall enough to push the input around: it shows one line by default with a toggle (that includes the tag count), and expanding it caps the height and scrolls, so it never takes over the screen no matter how many tags you have.

## [0.3.58] - 2026-07-10

### Changed
- **Code highlighting now uses the real highlight.js library instead of a hand-rolled one.** The syntax highlighter added in 0.3.57 was a small custom implementation; it's been replaced with highlight.js v11 (bundled locally as a single vendored file, like the markdown parser — no CDN, works offline), for accurate highlighting across dozens of languages.

### Fixed
- **The violet context-tag chips are easier to read.** Newly-typed tags (which don't yet match a known project or skill) were dimmed too much, and the violet chips were low-contrast; both are now brighter.

## [0.3.57] - 2026-07-10

### Added
- **Code blocks in the dashboard chat are now syntax-highlighted by language.** Fenced code in the assistant's replies gets per-language coloring for comments, strings, numbers, keywords, and common types (JavaScript/TypeScript, Python, C#, Java, Go, Rust, C/C++, shell, JSON, YAML, SQL, plus a generic fallback). It's a small self-contained highlighter bundled into the dashboard — no external library, CDN, or build step — so it works offline like the rest of the local dashboard.

## [0.3.56] - 2026-07-10

### Changed
- **Context-tag chips are now removable, toggle in and out of the input, and show which tags are real.** Clicking a chip inserts its tag if it's not in the input and removes it if it already is (so you can clear a tag you added), and the chips for tags currently in your message are highlighted. Learned tag chips have a small × to delete them from the bar (registered projects stay, since they're seeded from the registry). Tags that actually match a project, skill, or agent render solid; ones that don't (typos, ad-hoc topics) render faded/dashed so junk is easy to spot and clear.

## [0.3.55] - 2026-07-10

### Changed
- **Context tags are no longer project-only, and you can use several at once.** A `#` can point to a registered project, a skill (e.g. `#code-review`), or any recurring topic — the assistant resolves each accordingly, and multiple tags in one message are all honored (e.g. `#ProjectA #code-review`). The dashboard tag bar now seeds from your registered projects and *learns* the tags you type: any `#tag` you send appears as a chip next time (project chips in blue, other tags in violet), most-recently-used first.

## [0.3.54] - 2026-07-10

### Added
- **A context-tag bar above the dashboard chat input for one-click project context.** Your registered projects appear as chips above the input; clicking one inserts a `#` tag (e.g. `#SMGS Android`) at the cursor, so the assistant knows the message is about that project without you re-explaining the topic each time. Chips are ordered most-recently-used first, duplicate insertion is prevented, and the bar hides when you have no projects. The tag is a plain-text convention (channel- and backend-neutral — you can type it in Telegram too): the assistant matches it to the project registry and works in that project's scope.

## [0.3.53] - 2026-07-10

### Changed
- **The wrapper skills now read a project's main instructions first and reflect them into the project's context.** A Claude Code skill/agent assumes the conventions set by the project's `CLAUDE.md` (and Codex's by `AGENTS.md`); copying the skill alone loses that context. `claude-wrapper-sync` / `codex-wrapper-sync` now first read those main-instruction files and capture their essentials into the project's `PROJECT.md` before wrapping — so the imported skills operate with the right context on every backend (rather than relying on a Claude-only auto-load).

## [0.3.52] - 2026-07-10

### Fixed
- **The wrapper skills now copy the source content instead of pointing at it by an absolute path.** When importing a Claude Code/Codex skill, the assistant could create a thin wrapper that referenced the original file by a machine-specific absolute path (e.g. `E:/work/.../SKILL.md`), which breaks when the assistant's home is synced to another machine. The `claude-wrapper-sync` / `codex-wrapper-sync` skills now make a self-contained full copy the default, forbid absolute/machine-specific paths, and only allow a reference at all when it's a project-scoped wrap using a project-relative path.

## [0.3.51] - 2026-07-10

### Added
- **Import agents and skills from a Claude Code or Codex project with two new built-in skills.** `claude-wrapper-sync` brings a project's `.claude/{agents,skills,commands}` into your assistant, and `codex-wrapper-sync` brings Codex's `~/.codex/skills`. The three tools share essentially the same on-disk format (agents are `.md`, skills are `SKILL.md`), so wrapping is mostly validate-and-copy — with a dry-run preview and a confirmation before anything is overwritten. Wrapped assets are discovered live (no restart) and work identically across the Claude, Codex, and OpenAI backends.

### Changed
- **Project-scoped assets now live in a `.tiguclaw/` meta folder.** Like `.claude/` and `.codex/`, a project's tiguclaw skills/agents/commands now sit under `/.tiguclaw/{skills,agents,commands}` instead of scattered top-level folders — so they no longer collide with a project's own `skills/` or `agents/` directories. The legacy flat layout is still discovered (deprecated) so nothing breaks; new assets are written under `.tiguclaw/`. Project `.mcp.json` stays where it is (it's the Claude Code standard).

## [0.3.50] - 2026-07-10

### Added
- **Messages you send while the assistant is still working now show up immediately, marked "queued".** A message sent mid-turn is held in the per-thread queue and processed as soon as the current turn finishes (it was never lost) — but until then it didn't appear in the dashboard chat, so it was unclear whether it registered. It now shows right away with a "⏳ queued" badge, and the badge clears the moment the assistant starts processing it. No duplicate bubble appears when it does.

## [0.3.49] - 2026-07-10

### Fixed
- **A tool whose result is an error now shows its output preview tinted red across all backends.** The error tint previously relied on a backend-specific flag that the built-in file tools don't set (they return their errors as `Error: …` text rather than a flagged failure), so tool errors often rendered without the red highlight. The preview now also recognizes an `Error:`-prefixed result, so failed reads, greps, fetches, and shell commands are consistently marked — identically on the Claude, Codex, and OpenAI backends. Only a result that *starts* with `Error:` is flagged, so output that merely mentions the word isn't mislabeled.

## [0.3.48] - 2026-07-10

### Fixed
- **`Bash` and `WebFetch` timeouts are now interpreted in seconds, matching their documentation.** The tool descriptions said the timeout defaulted to 120s (Bash) / 30s (WebFetch), but the code treated the value as milliseconds — so a model passing `timeout: 120` got 120 ms and the command was killed instantly (and `WebFetch` failed after 30 ms). The parameter is now seconds as documented, clamped to the same maximums, with the unit spelled out in the parameter description. (Applies to the built-in file tools used by the Codex/OpenAI backends; the Claude backend uses the SDK's own tools, which were unaffected.)

## [0.3.47] - 2026-07-10

### Added
- **More tools show an output preview in the dashboard chat.** In addition to `Bash`, `Read`, `Grep`, and `Glob`, the collapsible output preview now also appears for `WebFetch` (fetched web content), `BashOutput` (background shell output), and `WebSearch`. Tools whose result is just a confirmation (a file write, a shell kill, a todo update) stay preview-free.

## [0.3.46] - 2026-07-10

### Changed
- **The active (and most recent) tool bundle now stays expanded, instead of collapsing the moment a turn finishes.** Since the tool cards now carry the useful detail (diffs, command output), auto-collapsing a turn the instant it completed meant fast turns flashed by before you could see anything. The live view now keeps the current/most-recent turn expanded, and collapses the previous one only when a new turn starts — so you always see what's happening now, without the chat piling up. (Older turns restored on page reload still start collapsed.)

## [0.3.45] - 2026-07-10

### Added
- **Scrolling back through older chat history now restores the tool cards too, not just the messages.** Previously only the most recent page of history rebuilt the tool steps, diffs, outputs, and per-turn grouping; scrolling further up showed a bare list of messages. Older pages now reconstruct the same collapsible "N steps" turn cards (with their diffs and output previews) as the initial view, using the shared grouping logic. (A turn that straddles a page boundary can still split into two cards — a minor, rare cosmetic edge.)

## [0.3.44] - 2026-07-09

### Fixed
- **The file drag-and-drop highlight no longer gets stuck on the dashboard.** When you drag a file over the chat panel, a dashed outline marks the drop zone. It could stay visible after you cancelled the drag, moved the pointer over a message, or dropped outside the panel, because the clear-on-leave check only fired when leaving the panel element itself. It now clears whenever the drag genuinely leaves the panel (or the window), with a global drop/drag-end safety net.

## [0.3.43] - 2026-07-09

### Fixed
- **Large tool diffs and outputs now survive to the dashboard history, and a background scan no longer breaks on them.** The rich tool cards added in 0.3.40 could produce an event record larger than the persistence size cap; when that happened the record was truncated mid-JSON into invalid JSON. That had two effects: a big diff or command output silently failed to reappear after a page reload, and an internal maintenance scan (the self-improvement/skill-proposal pass) aborted each cycle on the malformed record. Oversized records are now truncated to still-valid JSON (keeping the step's identity, dropping only the oversized preview), the size cap was raised so typical diffs/outputs are kept in full, and the queries that read these records now skip any already-malformed row instead of failing — so existing installs recover immediately.

## [0.3.42] - 2026-07-09

### Fixed
- **Tool steps stay grouped by turn after a page reload, just like they are live.** When persisted tool steps were restored on refresh, they were drawn as a flat list of individual lines instead of the collapsible "N steps" turn card you see while a turn runs — so reloading scattered a bundled turn into loose lines. History now regroups consecutive steps from the same turn into a collapsible card (matching the live view), collapsed by default; click the card to reveal its steps, and a step to reveal its diff or output.

## [0.3.41] - 2026-07-09

### Changed
- **Tool cards in the dashboard chat now expand and collapse as a single unit, and stay put.** A tool step is a compact one-line summary by default (for an edit: the file and its `+added -removed`); click anywhere on it to expand the full diff or output, click again to collapse. The expanded state is sticky — it no longer closes when you move the mouse away. Edit steps also drop the noisy inline argument echo from the collapsed line (the diff header already shows the path), and an expanded block now shows all of its captured lines instead of scrolling within a fixed height.

## [0.3.40] - 2026-07-09

### Added
- **The dashboard chat now shows what a tool actually did — diffs and output, inline and expandable.** A file edit shows a green/red line diff with a `+added -removed` count (the way a code review does); a new file write shows its added lines; and `Bash`, `Read`, `Grep`, and `Glob` show a preview of their output (errors tinted red). Each block is collapsed to a one-line summary you can click to expand, so the chat stays clean. Like the tool steps themselves, these are recorded and restored when you reload the page. The structured data is captured in the LLM runtime (identically across the Claude, Codex, and OpenAI backends) and only rendered by the dashboard, so it's backend-neutral and stays out of your chat channels; previews are size-capped so a huge file or command output can't bloat anything.

## [0.3.39] - 2026-07-09

### Fixed
- **The dashboard chat now keeps your tool steps after a refresh.** Tool activity (a file read, an edit, a shell command) was shown live while a turn ran but vanished when you reloaded the page — so revisiting a past conversation showed only the messages, not what the assistant actually did. Those steps were already recorded; the chat history now returns them alongside the messages and renders each as a compact step line, interleaved in time. Live steps and reloaded steps are de-duplicated, so a step never appears twice. (Older steps reached by scrolling further up aren't restored yet — only the recent history shown on load.)

## [0.3.38] - 2026-07-09

### Added
- **A local OpenAI-compatible LLM gateway — use tiguclaw's multi-LLM backend from your own apps.** Set `LLM_GATEWAY_TOKEN` and the daemon exposes `POST /v1/chat/completions` on the HTTP bridge, backed by tiguclaw's provider pool with fallback. Point any OpenAI-compatible client at `http://127.0.0.1:/v1` with that token and you get chat completions — streaming (`stream: true`, SSE) or not — from whichever backend you route to. The call is neutral (your `system` message is honored; the assistant's own persona, tools, memory, and transcripts are never mixed in), so it behaves like a plain model API. Route it to a different backend than the assistant (via `LLM_GATEWAY_MODELS`, e.g. a paid API vs. the assistant's subscription) to keep their rate limits separate; there's a concurrency cap (`LLM_GATEWAY_MAX_CONCURRENCY`, default 4). The endpoint is disabled unless the token is set, binds to localhost, and expects your app's server (not a browser) to hold the token.

## [0.3.37] - 2026-07-09

### Added
- **Configuration now lives in your home directory, not the repo checkout.** tiguclaw reads its `.env` from the runtime home (`$TIGUCLAW_HOME`, default `~/.tiguclaw/.env`), and `tiguclaw init` writes it there — so you can clone the public repo, keep it as pure code, and `git pull` without ever touching your config. Existing installs with a `.env` at the repo root keep working (it's used as a fallback), so nothing breaks; to migrate, just move your `.env` into the home directory. Environment variables always take precedence over the file.

### Fixed
- **The dashboard chat no longer gets stuck showing "working…" forever.** After a reconnect, the event replay could re-deliver an old "message received" event and make the chat think a long-finished turn was still running (e.g. a spinner stuck at "working · 15m 22s"). The indicator now only activates for recent turns and self-clears any turn that has been "running" implausibly long.
- **A tool step no longer blinks forever when a turn ends without a clean reply.** If a turn finished via an error or a hung tool (so no final reply arrived), the last tool step kept pulsing as if still in progress. It now stops as soon as the turn ends, however it ends.

## [0.3.36] - 2026-07-09

### Fixed
- **The dashboard now shows your assistant's name even when it's written as prose.** The assistant is guided to record its identity in `AGENT.md` as "your name is X", but the dashboard's name reader only recognized a structured `이름: X` / `name: X` field — so a naturally-worded name fell back to "tiguclaw". The reader now also understands the prose form ("(your) name is X"), and the assistant is now told to also add a clear `name:` line when it sets or changes its name.
- **The Runtime Inventory's Plugins section is no longer empty on a fresh install.** Bundled non-channel plugins (dashboard, scheduler, file-watch, self-growth) weren't listed anywhere, and a plugin declaring multiple kinds (e.g. the HTTP bridge, which is both a channel and an observer) was skipped by the channel scan. Bundled plugins now appear — the HTTP bridge under Channels, and the service/trigger/observer plugins under Plugins — alongside any home-installed plugins.

## [0.3.35] - 2026-07-08

### Added
- **The dashboard now shows each agent's model tier, and a project's own MCP servers.** Agent cards in the Runtime Inventory (and a project's dedicated agents in the project detail) now carry a small badge with the agent's model tier (`high`/`mid`/`low`/`nano`, or an explicit `provider:model`), so you can see at a glance which model an agent runs on. A project's detail panel also gained a **"dedicated MCP"** section listing the MCP servers declared in that project's `.mcp.json` — the project-scoped servers that are exposed only when work is delegated to it.

## [0.3.34] - 2026-07-08

### Added
- **Project-scoped MCP servers.** An MCP server can now belong to a specific project instead of being global: declare it in that project's `/.mcp.json` (the same format Claude Code uses) and its tools are exposed **only when work is delegated to that project** (`spawn_agent(path=…)`), not on every turn. Global servers (in `/mcp.json`) remain available everywhere. `add_mcp_server` / `list_mcp_servers` / `remove_mcp_server` take an optional `path` to target a project's config (omit it for global), and `project_capabilities(path)` now lists a project's own MCP servers. This keeps a project-specific tool (e.g. a Unity MCP) from bloating unrelated turns — and it connects lazily, only when you actually work in that project. The assistant reaches a project's MCP tools by delegating to the project, the same way it does for project-specific skills and agents.

### Fixed
- **The Runtime Inventory now shows connected external MCP servers.** Servers registered via `add_mcp_server` (stored in `/mcp.json`) were never listed in the dashboard's Runtime Inventory because it only read a different config file. They now appear alongside the built-in in-process servers.

## [0.3.33] - 2026-07-08

### Added
- **The dashboard's progress indicator now reflects turns from every channel — as one assistant.** When a message is being handled from Telegram (or CLI), the dashboard chat shows the same `✳️  작업 중 · 8m 38s` spinner and elapsed timer it shows for your own dashboard messages, clearing when the reply arrives. Whichever channel a request came from, the dashboard presents it as the single assistant at work (no per-channel labels) — consistent with the single-persona model.

### Fixed
- **Typing in the dashboard chat input is no longer laggy.** The auto-resizing input measured its height on every keystroke, forcing a full layout reflow each time on a dashboard whose DOM is constantly updating from the live stream. Measurement is now batched to one per animation frame, so typing stays responsive.

## [0.3.32] - 2026-07-08

### Added
- **Attach files to the dashboard chat — paste, drag-and-drop, or the 📎 button.** Pasted or dropped files (images, PDFs, text, etc.) are saved and passed to the assistant just like a Telegram attachment, so you can share a screenshot or a file and ask about it right from the dashboard. Attachments show as small square thumbnails above the input — a live preview for images, an extension card for other files — each removable with a corner ✕. Caps: 10MB per file, 25MB per message, 10 files; a file-only message (no text) is allowed.
- **Per-tool execution time in the activity view.** Each tool step now shows how long that tool actually took (e.g. `1.8s`), measured on the Claude, codex, and OpenAI backends alike, with a warning tint past 90 seconds — so you can see at a glance which step was slow.
- **Shift+Enter inserts a newline in the dashboard chat.** The input is now a growing multi-line box: Enter sends, Shift+Enter adds a line, and it resizes to fit (Korean/IME composition no longer mis-sends on Enter).

### Changed
- **The "working" indicator now shows a spinner and a live elapsed timer.** While a turn is in progress the chat shows `✳️  작업 중 · 8m 38s`, counting up until the reply arrives (and clearing when it does) — so a long-running turn reads as clearly working rather than stuck.

## [0.3.31] - 2026-07-08

### Added
- **A built-in `code-review` skill for debugging and code review.** When you ask "why is this bug happening", "review this code", or "is this fix okay?", the assistant now follows a consistent method: pin the *root cause* (not the symptom) by tracing the code path, then — crucially — check whether the *same root cause* also affects adjacent fields/paths (so it doesn't fix one bug and leave its siblings), propose a minimal fix that matches the codebase's existing idioms, and add a short, optional note on a more robust direction. Correctness first, brevity always.

### Changed
- **Sub-agent model tiers now follow the provider you chose at install.** Previously the `high`/`mid`/`low` tiers were hardcoded to Anthropic models regardless of your provider — so a codex- or OpenAI-only install had its sub-agent tiers pointing at Claude models it might have no key for. New installs now set the tiers to the chosen provider (Anthropic/claude-sub keep the opus/sonnet/haiku spread; OpenAI and codex default to their own models), and you can still refine them in `.env`.
- **The default model pool is now a last-resort fallback for a misconfigured tier.** If a sub-agent's tier points at a provider you have no credentials for, the run now falls back once to your `REGION_A_MODELS` default pool (with a notice) instead of failing. This only triggers on configuration errors (unknown model · missing credentials) — genuine runtime faults (stalls, hangs, timeouts) are never masked, so a backend defect still surfaces instead of silently switching models.
- **The "tool is taking a while" warning is now OS-neutral and points at the right cause.** It previously said "macOS permission dialog", which was misleading on Windows and didn't mention that an external MCP tool can hang when its server is connected but the target app/editor isn't running. The warning (and the background-worker ping) now say so.

### Fixed
- **The dashboard chat no longer shows a false "timeout" error on long turns.** A long-running turn (e.g. a multi-minute codex answer) could make the chat give up and show a timeout while the real answer was still on its way over the live stream. The chat now shows a "working…" indicator and waits for the streamed reply instead of falsely erroring.

## [0.3.30] - 2026-07-07

### Changed
- **The assistant now reliably reaches for a project's dedicated skills and agents.** Its operating guidance still said project-specific skills/agents "weren't wired up" — stale since 0.3.26 — which could stop it from using them. It now correctly discovers and uses them via the folder path (`project_capabilities`, and `spawn_agent` / `invoke_skill` with a `path`), while common (home) capabilities always remain available.

## [0.3.29] - 2026-07-07

### Added
- **Registering a folder with no `PROJECT.md` now writes one for you.** When you ask the assistant to register a folder as a project and it has no `PROJECT.md`, it briefly analyzes the folder (key files, structure, purpose), drafts a `PROJECT.md` (name · description · status, plus notes), registers it, and tells you what it named and summarized the project as — which you can adjust. An existing `PROJECT.md` is never overwritten.

## [0.3.28] - 2026-07-07

### Added
- **The Runtime Inventory view is now a clean, expandable list.** Channels, plugins, skills, agents, and MCP servers each show as a one-line row — name and a layer badge collapsed — and clicking a row expands it in place to reveal a short description plus its source path and metadata. MCP entries are tagged in-process vs. external so you can see connected external MCP servers at a glance.
- **The dashboard chat now labels the assistant with its own name.** The name comes from your `AGENT.md` (the `이름`/`name` field), falling back to `tiguclaw` when none is set — so if you give your assistant a name, it shows up in the chat instead of a hardcoded label.

### Fixed
- **The Runtime Inventory view no longer resets every ~30 seconds.** A background refresh was rebuilding the whole list on a timer, collapsing any rows you had expanded and losing your scroll position; the refresh now only rebuilds when the inventory actually changed.

## [0.3.27] - 2026-07-07

### Added
- **Connect external MCP servers by just asking.** New `add_mcp_server` / `list_mcp_servers` / `remove_mcp_server` tools let the assistant register any standard MCP server — an stdio command (e.g. `npx -y @modelcontextprotocol/server-github`) or an SSE URL — into `/mcp.json` from a normal conversation, with no config-file editing. After a restart the server connects and its tools become available to the assistant on **both the Claude and the codex/openai backends** (the assistant connects it natively on Claude, and via the standard MCP client on the others). Because adding a server runs an arbitrary command and exposes its tools, the assistant confirms with you before registering one. Previously external MCP servers were only listed in the dashboard, never actually connected.

## [0.3.26] - 2026-07-07

### Added
- **Delegate work scoped to a project folder — no "entering" required.** `spawn_agent`, `invoke_skill`, and `run_in_background` now take an optional `path`: point any of them at a folder and the sub-agent / skill / background worker runs in that folder's context — its dedicated agents and skills are discovered there, and relative file operations are resolved against it. Give different `path`s in one turn and the work fans out across projects in parallel. The assistant stays stateless — instead of switching into a project, it names the folder per task. A new `project_capabilities(path)` tool lists a folder's dedicated agents (with model tier) and skills plus the `PROJECT.md` summary, so the assistant knows what it can delegate there. Relative file paths now resolve against the working folder consistently across the Claude and codex adapters.
- **See which agents are working in each project.** A project's detail panel now shows its live agent/worker cards — the same rich cards as the Agents view (kind, model tier, status, one-line task, current step, elapsed, expandable) — split into "in progress" and "recent" sections, so you can watch what's running for that project. Each project card also shows a "🤖 N running" badge, and `run_in_background(path=…)` workers are attributed to their project too.
- **Find skills and agents by keyword when you have a lot of them.** New `find_skills(query)` / `find_agents(query)` tools search by name and description. The prompt's capability index is now capped (showing the most-used first) and points to search for the rest, so a large library of skills/agents no longer grows the prompt every turn.

### Fixed
- **`related` in `PROJECT.md` now works as a YAML list too.** Previously only the single-line comma form (`related: A, B`) was parsed; related projects written as a bullet list (`- ../other`) were silently dropped. Both forms now resolve and appear as clickable chips in the project detail.

## [0.3.25] - 2026-07-07

### Added
- **Projects — register folders as projects and see them in the dashboard.** Mark any folder as a project by adding a `PROJECT.md` (frontmatter: `name` · `description` · `status` · `related`), then register it — the assistant manages the registry with new `project_register` / `project_list` / `project_update` / `project_forget` tools (both adapters). The dashboard gains a "Projects" view: a grid of project cards (name + status), and clicking one opens a side panel with the full description, the project's **dedicated skills and agents** (discovered from its `skills/` and `agents/` folders), and any related projects. The registry is a thin index — the source of truth is each folder's `PROJECT.md`, so it travels with the folder. (This first phase surfaces and manages projects; a follow-up will let you *enter* a project so its dedicated skills/agents activate for the conversation.)

## [0.3.24] - 2026-07-06

### Fixed
- **A fresh install could report "SELF_GROWTH.md not found."** The self-growth plugin adds a note reminding the assistant to read `SELF_GROWTH.md` at the start of a task, but that file is only created once the first learned directive is written — so on a brand-new instance with no directives yet, the assistant would follow the pointer to a file that didn't exist. The plugin now seeds an empty `SELF_GROWTH.md` (header only) on startup, so the pointer never dangles.

## [0.3.23] - 2026-07-06

### Fixed
- **The dashboard "Agents" view could show an empty list under the "All" tab even when the count said there were jobs.** The running/all toggle updated the count but didn't clear the running-only CSS filter, so completed jobs stayed hidden. Switching to "All" now shows them.
- **Smoothed out rendering jank in the agents/background panels** when many events arrive at once — the view now coalesces re-renders to one per frame instead of rebuilding on every event.

### Added
- **Job cards now show what each one is working on, and can be expanded.** Every agent/worker card shows a one-line task summary under its name — so multiple same-named sub-agents (e.g. several `quick` fan-outs) are distinguishable — and clicking a card expands it to reveal the full task, the result or error, and its step timeline.

## [0.3.22] - 2026-07-06

### Added
- **Built-in general-purpose sub-agents (`quick`, `general`) — delegate small tasks cheaply without writing a spec.** `quick` runs on a low (cheap, fast) model tier for small jobs like summarize/extract/transform — ideal for fanning out many at once — and `general` is a mid-tier catch-all. The assistant is now nudged to reach for `quick` for small independent sub-tasks, so bulk simple work runs on a cheap model in parallel without you authoring any agent files. Sub-agents you define still use the tier in their own spec. (`nano`/local tier is only used when you explicitly ask.)
- **A sub-agent's model tier is now visible** — shown as a chip on the agent card in the dashboard and next to each entry in `/agents`, so you can see which grade (low/mid/high) each running sub-agent is on.

## [0.3.21] - 2026-07-04

### Changed
- **The assistant now fans out independent sub-agents in parallel on its own.** With parallel execution in place (0.3.19), the system prompt now nudges the assistant to spawn several sub-agents at once for independent sub-tasks — matching Claude Code's behavior. Ask it to summarize three unrelated documents and it runs them concurrently rather than one at a time, without you having to say "in parallel"; sub-tasks that depend on each other still run in order. Applies to both the codex and Claude adapters.

## [0.3.20] - 2026-07-04

### Fixed
- **"Cancel" could target a running sub-agent by mistake, sending a false "cancelled" notice and flipping the job's status.** After workers and sub-agents were unified into one job registry (0.3.17), the cancel path didn't distinguish them: cancelling by name/id could match a sub-agent job, which has no real abort hook — so you'd get a "🛑 cancelled" reply while the sub-agent kept running, and its later completion would overwrite the state back to "done". Cancellation is now restricted to background workers only (both in the core `cancelJob` and the cancel tool); asking to cancel a sub-agent returns a clear explanation instead. (Sub-agents still appear in the list — only cancellation is worker-only.)
- **A failed Claude sub-agent was recorded as "done" instead of "failed."** The Claude adapter ignored the tool-result error flag, so a sub-agent that failed still showed as completed — inconsistent with the codex adapter, which records failures. The error flag is now read, so a failed sub-agent is marked failed on both adapters.

## [0.3.19] - 2026-07-04

### Changed
- **Codex tool calls (and sub-agents) now run in parallel within a turn.** The codex adapter previously executed a turn's tool calls one at a time, so delegating to several sub-agents at once (fan-out) ran them serially — noticeably slower than the Claude adapter, which parallelizes. A turn's independent tool calls now execute concurrently (matching the Claude adapter and Claude Code), so multiple sub-agents and tools run at the same time. Result ordering, per-tool timeouts, slow-tool warnings and error handling are all preserved, and single-tool turns behave exactly as before. Safe concurrent tool dispatch relies on the per-turn tool-server isolation shipped in 0.3.16.

## [0.3.18] - 2026-07-03

### Added
- **A dedicated "Agents" view in the dashboard, and an `/agents` command** — see what your assistant is running in the background at a glance. The dashboard's left sidebar now has an "Agents" entry (with a live count of in-progress jobs) that opens a view listing every running background job — workers and sub-agents alike — with its type, name, elapsed time and current step, plus a running/all toggle. On Telegram, `/agents` (also added to the command menu) replies instantly with the same summary, with no LLM round-trip. Both are built on the unified job model from 0.3.17 and add no new endpoints.

## [0.3.17] - 2026-07-03

### Added
- **Sub-agents are now visible in the dashboard as background jobs, with their per-step activity.** Previously only detached background workers (`run_in_background`) showed up; sub-agents (delegated via `spawn_agent` / the Task tool) ran invisibly inline, so a long-running sub-agent looked like the assistant had simply gone quiet. Now each running sub-agent appears as its own job card — labelled with the sub-agent's name and showing its tool steps — for both the codex and Claude adapters (Claude sub-agent steps are recovered from the SDK stream via `parent_tool_use_id`). Sub-agents still return their result to the parent exactly as before; only observability was added. Workers and sub-agents are now unified under a single job model (`worker_jobs.kind = worker | agent`), with re-injection, worker timeouts, cancellation and restart-recovery kept exclusive to detached workers.

## [0.3.16] - 2026-07-03

### Fixed
- **Background jobs (and sub-agents) could hang indefinitely on their very first tool call.** Each in-process tool server (file operations, memory, to-dos) was a single shared instance that every model turn connected fresh and closed when it ended. When a turn spawned a background worker and then finished, its cleanup closed that shared instance out from under the still-running worker — so the worker's next tool call (e.g. a file read) waited forever for a reply that never came, stalling the whole job for 8–11 minutes per call until a timeout. Each turn now gets its own tool-server instances, so one turn's cleanup can no longer break another turn's concurrent tool calls. (This aligns those three servers with the pattern the other nine in-process servers already used.)

### Added
- **Optional MCP bridge tracing for diagnosing tool-call stalls** (`MCP_BRIDGE_TRACE=1`, off by default): logs each tool call's send/receive with a per-request id and the in-flight count, so a tool call that never returns is directly visible in the log.

## [0.3.15] - 2026-07-03

### Fixed
- **Dashboard background-job steps duplicated on every refresh — looking like an infinite loop.** Worker step lines weren't de-duplicated, so each time the page reconnected (a refresh replays the recent event buffer) the same steps were appended again, stacking up until it looked like the job was repeating the same actions forever. Steps are now de-duplicated by sequence, so a refresh no longer multiplies them. (The job wasn't actually looping — only the rendering was.)

### Added
- **Streaming model output is now traceable for after-the-fact diagnosis** — for interactive turns *and background workers/sub-agents*. Previously only a completed turn's final text was saved (in transcripts), and streaming was only observable for the main chat (never for background jobs), so a stuck or looping worker's narration was invisible. The token stream is now written to the log as low-volume coalesced snapshots (a `[stream-trace]` line roughly every 12 seconds or 1500 characters, per thread), for every turn including workers.
- **A stuck background job now tells you it's stuck** — instead of looking like a mysterious slowdown for tens of minutes. When a tool call on the `codex` line runs longer than a threshold (default 90s, `CODEX_TOOL_SLOW_WARN_MS`) — well before the hard 8-minute timeout — it's logged as `[tool-slow]`, and for a background job you also get a one-time notification: *"the job is stuck on tool X — check whether a permission dialog is waiting on your Mac."* This turns a silent block on a **macOS permission prompt** (or a hung/slow tool) into an actionable heads-up in seconds.

## [0.3.14] - 2026-07-03

### Fixed
- **Dashboard background-job cards missing their status badge (and the header count not updating) when the page was opened while a job was already running.** A job card can be built either from the job's start/finish lifecycle events or from its live activity. Only the lifecycle path set the status label ("🟡 running") and refreshed the header "background N" count — so if the dashboard connected mid-job (e.g. a refresh while a job runs) it only saw activity, and the card showed no status and the header count stayed empty. Card creation now sets a default running status and refreshes the count, regardless of which path created it.

## [0.3.13] - 2026-07-03

### Fixed
- **The `codex` (ChatGPT) model line no longer lets one pathologically slow response consume an entire background job.** The stall guard resets every time any answer text streams in, so if the backend dribbles output *very* slowly (a token every couple of minutes), a single turn could crawl for 10–20 minutes without the guard ever firing — and a multi-step job would hit the 30-minute wall-clock limit with nothing to show (observed live during a ChatGPT-backend slowdown). A single response turn now also has an absolute wall-clock cap (default 10 minutes, `CODEX_TURN_MAX_MS`): if one turn exceeds it — regardless of trickle — the step is retried from the same context (not switched to another model), so a spiky slowdown can recover instead of eating the whole budget. This is orthogonal to the existing no-progress guard (which still catches dead connections at 5 minutes).

### Changed
- **Dashboard shows a subtle pulse on in-progress indicators** — running background-job cards, the background-tasks badge count, and the currently-running step now gently pulse so it's obvious something is actively working. Respects `prefers-reduced-motion`.

## [0.3.12] - 2026-07-03

### Fixed
- **A hung tool call on the `codex` (ChatGPT) model line no longer freezes a background job for up to 30 minutes.** The stream-stall guard only watches the model's streaming response, and tool execution was deliberately exempt (to avoid killing legitimately long tools). But that left a gap: if a tool call itself hung, nothing caught it until the blunt 30-minute worker wall-clock limit — losing all the work with nothing to show (observed live: a maintenance job frozen ~19 minutes inside a shell command). Each tool call now has its own generous wall-clock timeout (default 8 minutes): if it's exceeded, that one call is turned into a tool error so the job keeps going and the model adapts, instead of the whole turn freezing. Tunable via `CODEX_TOOL_TIMEOUT_MS`. (The Claude line already had this via its SDK — this restores parity.)

## [0.3.11] - 2026-07-03

### Fixed
- **The `codex` (ChatGPT) model line now finishes large multi-step tasks instead of stopping partway with a "here's what I got done" report.** Background jobs like a daily wiki/library cleanup — which legitimately need dozens of tool calls (read many files, write several summaries, scan, etc.) — were hitting an internal 25-tool-call cap every run: the model was forced to wrap up mid-task, and the next day's run started over from scratch and never converged. The cap was doing double duty (runaway defense *and* task-completion signal); those are now separated. Runaway protection is handled by the progress-aware stall guard and the wall-clock turn backstop (which cut only genuine no-progress, not legitimately long work), so the tool-iteration limit is raised to a far safety ceiling (default 150) and the task now ends *naturally when the model is actually done* — matching how the Claude line already behaves (an LLM-agnostic parity fix). Tunable via `CODEX_MAX_TOOL_ITERATIONS_HARD`; `CODEX_MAX_TOOL_ITERATIONS` is now a soft progress-checkpoint interval.

## [0.3.10] - 2026-07-03

### Changed
- **`/update` is now robust to environment quirks — it never gets blocked by the on-instance typecheck.** Three times in a row the self-update typecheck step broke for environment reasons (Windows `npm.cmd`, `tsc` not on PATH, TypeScript absent on production installs), and each time the safety rollback undid a *perfectly good* pull — so the deterministic gate was blocking legitimate updates instead of catching broken code. The typecheck is now **advisory**: it still runs and logs its result when `tsc` is available, but it never rolls back or aborts the update. Every published release is already typechecked upstream (clean-room + plugin-load verification), so the on-instance re-check was redundant defense that only added brittleness. The update now always applies when the pull and dependency install succeed. (`git pull` failures and `npm install` failures still roll back — those are genuine "can't update", not environment noise.) This matches why natural-language "update yourself" was already reliable while the `/update` command was fragile.

## [0.3.9] - 2026-07-02

### Fixed
- **`/update` no longer fails on installs without the TypeScript dev-dependency** (e.g. production installs or `NODE_ENV=production`, where `npm install` omits dev-deps). The update was aborting with `Cannot find module .../typescript/bin/tsc` because the typecheck safety-gate needs `tsc`. Now the gate runs only when `tsc` is present and is skipped with a warning otherwise (published releases are already typechecked upstream), so the update proceeds instead of being permanently blocked. `npm install` also now includes dev-deps, so the gate re-enables once dependencies change.

## [0.3.8] - 2026-07-02

### Added
- **Self-growth learns from background-task failures.** When a background job fails, the assistant analyzes the cause and proposes a fix — improve a skill, adjust a prompt/setting, redesign the task (e.g. make it incremental so partial progress survives), or flag a core-code issue for the developer. Everything is a suggestion you approve; nothing is auto-applied or self-edited. (Failure signals are gated and de-duplicated so a rare failure doesn't spam.)

## [0.3.7] - 2026-07-02

### Fixed
- **The `codex` (ChatGPT) model line could hang or spin without recovering** — a background task or reply would stall for the whole 30-minute cap and then fail with nothing to show, losing the work. The stream is now guarded on *actual progress*: as long as answer text or tool calls are flowing it's never interrupted, but if only "still thinking" heartbeats arrive with no real output for a few minutes (a dead connection or a thinking-loop), the current step is aborted and **retried from the same context** (not switched to another model), so the work continues instead of failing. Applies to both background workers and interactive replies. Workers also send a brief "resuming…" note. Tunable via `CODEX_NO_PROGRESS_MS` / `CODEX_STALL_MAX_RETRIES`.

### Changed
- Dashboard now shows a persistent scrollbar in the chat and side panels (previously the OS overlay scrollbar auto-hid, making it hard to tell there was more to scroll).

## [0.3.6] - 2026-07-01

### Internal
- Removed one more piece of duplicated logic (no behavior change): the four plugins that subscribe to the event bus each repeated the same "unsubscribe safely on stop" idiom; it's now a single shared helper.

## [0.3.5] - 2026-07-01

### Internal
- Removed duplicated logic (no behavior change): the Telegram "format → split → send with plain-text fallback" flow, previously copied across four send paths, is now one helper; the system-context assembly order, previously replicated in all three model adapters (which must stay identical for cross-model parity), is now a single shared builder that structurally enforces the ordering.

## [0.3.4] - 2026-07-01

### Changed
- Proactive messages the assistant sends outside a normal reply — background-worker completions, restart/update notifications — now show up in the dashboard chat and history like everything else. Previously each of these send paths was implemented separately and only some recorded the message, so they were invisible on the dashboard. They now go through a single outbound path, so delivery and dashboard visibility are consistent.

### Internal
- Consolidated duplicated logic: one outbound helper (channel routing + send + observability) instead of per-feature copies across the scheduler, file-watch, worker, and restart/update paths; one Telegram `tg:` parser instead of five copies. No behavior change beyond the dashboard-visibility fix above.

## [0.3.3] - 2026-07-01

### Fixed
- **`/update` could get permanently stuck** with `error: Your local changes to the following files would be overwritten by merge: package-lock.json`. `package-lock.json` is regenerated by `npm install` and drifts across platforms/npm versions, which blocked the `git pull --ff-only` that self-update relies on — so the daemon could no longer update itself. Self-update now discards local drift in that one generated file before pulling (your own uncommitted changes to any other file are still left untouched, so a genuine conflict is still reported honestly). If an instance is already stuck, run one natural-language "update yourself" first — the assistant reconciles it — after which `/update` works again.

## [0.3.2] - 2026-07-01

### Fixed
- **Scheduler plugin failed to load** (regression in 0.3.1) — a stray quote in the `add_schedule` help text broke the plugin's parse, so it silently didn't start and **every cron and reboot schedule stopped firing**. Fixed the string. Upgrade from 0.3.1 as soon as possible.

### Added
- **Built-in restart notification** — after any restart (`/restart`, a crash, or an automatic supervisor restart) the assistant sends a `✅ 재시작 완료` message to your most recent chat, with zero setup (it uses the last active conversation, so there's nothing to configure at install time). If you already run your own reboot-notification schedule, the built-in stays quiet so you don't get duplicates.

### Internal
- Release gate now parse-checks every plugin entrypoint (`verify:plugins`). Plugins are loaded at runtime and were outside `tsc`'s scope, which is how the 0.3.1 scheduler breakage slipped through.

## [0.3.1] - 2026-07-01

### Fixed
- Windows `/update` typecheck gate — ran `tsc` directly via node instead of through `npm run` so the update no longer fails with "'tsc' is not recognized" on Windows.
- Fixed-message notification schedules (e.g. a restart alert) no longer arrive with a spurious "message sent" report or a "shall I send it?" prompt. The `add_schedule` guidance now steers the assistant to phrase such schedules as *reply with exactly this text* — which the scheduler delivers — instead of *send this message*, which tripped the external-send confirmation and tacked a completion narration onto the alert.

### Changed
- Dashboard chat is back to the standard order — newest message at the bottom, opening pinned to the bottom (scroll up for history). Also a smaller top bar on mobile.

## [0.3.0] - 2026-06-30

### Added
- Dashboard labels each sub-agent's activity with its name (e.g. `🤖 researcher`) so you can tell who did what in a multi-agent turn.
- Background shell commands for the codex/openai model lines — `Bash(run_in_background)` + `BashOutput` (poll) + `KillShell`, matching what the Claude line already has. Long builds/servers/scripts run without blocking the conversation.

### Changed
- Guideline: prefer the minimal structure when adding automation — fold related rollups (e.g. weekly/monthly summaries) into one routine that handles them by date, instead of a separate schedule per cadence.
- Guideline: when unsure what/where/how to act (ambiguous target, intent, or structure), confirm first instead of guessing — added to the assistant's required confirmation triggers.
- Guideline cleanup: the assistant authors approved skills directly (a skill is just a markdown file); the harness meta-skill is reserved for building multi-agent teams/orchestration. Removes a self-contradiction in the operating rules.

### Fixed
- Dashboard mobile chat: smaller, fixed header (subtitle hidden) with the message list scrolling on its own and the input pinned to the bottom — the header no longer scrolls away or eats the screen.

## [0.2.1] - 2026-06-30

### Changed
- **Proactive skill proposals** — the assistant now offers to save a workflow as a skill the moment it recognizes a clearly reusable one (by judgment, even on first sight), instead of only after it repeats. It also picks the right scope — a project-local skill for project/folder-specific work, a shared skill for general use. Still always a proposal you approve; never silent self-editing. Complements the existing frequency-based detection.

## [0.2.0] - 2026-06-30

### Added
- **Interactive dashboard chat** (Claude-Code-style) — live step-by-step progress as it works (each step shows what it touched), token streaming, clickable option buttons, and conversation history that survives restarts with scroll-back pagination.
- **Background tasks panel** — a side drawer that tracks background jobs (status, steps, and results) so you can watch long work without leaving the chat.
- **Self-update** — `update_self` tool + `/update` command: pulls the latest, gates on typecheck, auto-rolls-back on failure, and restarts.
- **Self-growth** — learns from its own mistakes and proposes reusable skills / skill improvements for you to approve (never silent self-editing).
- **Out-of-band restart** — Telegram `/restart` and a dashboard button to recover a stuck turn.
- **Per-tool activity for local/Gemini models** — openai-agents adapter parity, so tool steps are visible for `ollama`/`google` too.
- **Observability event sink** — persists observability events as an audit/metrics base.

### Changed
- Dashboard chat: newest message at the top, local date dividers, and time-only timestamps on each message.
- Scheduled (cron) messages now appear in the dashboard chat and history, not just on the destination channel.
- Worker delegation guidance refined (induce, don't force); codex history compaction via rolling summary (preserve instead of truncate) with an input-proportional first-token timeout.

### Fixed
- Windows: `/restart` respawn without a supervisor, `/update` `npm.cmd` ENOENT, and onboard/service registration without admin rights.
- Daemon hard backstop so a hung tool can't freeze the channel poller (fixes a multi-hour outage); crash-fast safety net for unhandled errors.
- Cross-platform `Glob`/`Grep` via bundled ripgrep; codex MCP tool timeout; HTTP bridge resource leak; `send_file` dedup recorded only on a successful send.

## [0.1.0] - 2026-06-18

First public release.

### Added
- **Always-on assistant** — runs as a background service (macOS launchd) and restarts itself.
- **Multi-LLM routing** — mix `anthropic`, `openai`, `codex` (ChatGPT), `ollama` (local), and `google` (Gemini) via a single `provider:model` line; same abilities across adapters.
- **One assistant across channels** — Telegram, CLI, and HTTP share one conversation memory.
- **Background worker** — long tasks run in the background so the assistant stays chatty.
- **Local sub-agents** (`nano` tier) — delegate simple tasks to a free local model.
- **Onboard wizard** (`npm run onboard`) — guided setup: pick a provider, paste keys, write `.env`, register the service, health check.
- **Doctor** (`npm run doctor`) — checks keys, bot reachability, home, and service.
- **`tiguclaw` CLI** — `status | restart | logs` from anywhere after `npm link`.
- **HTTP bridge** — call the assistant from other local apps; data-driven custom endpoints and commands.
- **Bilingual README** (English + 한국어) with step-by-step key/token guides and an uninstall guide.

[Unreleased]: https://github.com/tigu77/tiguclaw/compare/v0.82.0...HEAD
[0.82.0]: https://github.com/tigu77/tiguclaw/compare/v0.81.0...v0.82.0
[0.81.0]: https://github.com/tigu77/tiguclaw/compare/v0.80.0...v0.81.0
[0.80.0]: https://github.com/tigu77/tiguclaw/compare/v0.79.1...v0.80.0
[0.79.1]: https://github.com/tigu77/tiguclaw/compare/v0.79.0...v0.79.1
[0.79.0]: https://github.com/tigu77/tiguclaw/compare/v0.78.0...v0.79.0
[0.78.0]: https://github.com/tigu77/tiguclaw/compare/v0.77.0...v0.78.0
[0.77.0]: https://github.com/tigu77/tiguclaw/compare/v0.76.0...v0.77.0
[0.76.0]: https://github.com/tigu77/tiguclaw/compare/v0.75.0...v0.76.0
[0.75.0]: https://github.com/tigu77/tiguclaw/compare/v0.74.0...v0.75.0
[0.74.0]: https://github.com/tigu77/tiguclaw/compare/v0.73.1...v0.74.0
[0.73.1]: https://github.com/tigu77/tiguclaw/compare/v0.73.0...v0.73.1
[0.73.0]: https://github.com/tigu77/tiguclaw/compare/v0.72.0...v0.73.0
[0.72.0]: https://github.com/tigu77/tiguclaw/compare/v0.71.0...v0.72.0
[0.71.0]: https://github.com/tigu77/tiguclaw/compare/v0.70.1...v0.71.0
[0.70.1]: https://github.com/tigu77/tiguclaw/compare/v0.70.0...v0.70.1
[0.70.0]: https://github.com/tigu77/tiguclaw/compare/v0.69.1...v0.70.0
[0.69.1]: https://github.com/tigu77/tiguclaw/compare/v0.69.0...v0.69.1
[0.69.0]: https://github.com/tigu77/tiguclaw/compare/v0.68.0...v0.69.0
[0.68.0]: https://github.com/tigu77/tiguclaw/compare/v0.67.0...v0.68.0
[0.67.0]: https://github.com/tigu77/tiguclaw/compare/v0.66.0...v0.67.0
[0.66.0]: https://github.com/tigu77/tiguclaw/compare/v0.65.0...v0.66.0
[0.65.0]: https://github.com/tigu77/tiguclaw/compare/v0.64.0...v0.65.0
[0.64.0]: https://github.com/tigu77/tiguclaw/compare/v0.63.0...v0.64.0
[0.63.0]: https://github.com/tigu77/tiguclaw/compare/v0.62.0...v0.63.0
[0.62.0]: https://github.com/tigu77/tiguclaw/compare/v0.61.0...v0.62.0
[0.61.0]: https://github.com/tigu77/tiguclaw/compare/v0.60.0...v0.61.0
[0.60.0]: https://github.com/tigu77/tiguclaw/compare/v0.59.0...v0.60.0
[0.59.0]: https://github.com/tigu77/tiguclaw/compare/v0.58.0...v0.59.0
[0.58.0]: https://github.com/tigu77/tiguclaw/compare/v0.57.0...v0.58.0
[0.57.0]: https://github.com/tigu77/tiguclaw/compare/v0.56.2...v0.57.0
[0.56.2]: https://github.com/tigu77/tiguclaw/compare/v0.56.1...v0.56.2
[0.56.1]: https://github.com/tigu77/tiguclaw/compare/v0.56.0...v0.56.1
[0.56.0]: https://github.com/tigu77/tiguclaw/compare/v0.55.0...v0.56.0
[0.55.0]: https://github.com/tigu77/tiguclaw/compare/v0.54.1...v0.55.0
[0.54.1]: https://github.com/tigu77/tiguclaw/compare/v0.54.0...v0.54.1
[0.54.0]: https://github.com/tigu77/tiguclaw/compare/v0.53.0...v0.54.0
[0.53.0]: https://github.com/tigu77/tiguclaw/compare/v0.52.1...v0.53.0
[0.52.1]: https://github.com/tigu77/tiguclaw/compare/v0.52.0...v0.52.1
[0.52.0]: https://github.com/tigu77/tiguclaw/compare/v0.51.1...v0.52.0
[0.51.1]: https://github.com/tigu77/tiguclaw/compare/v0.51.0...v0.51.1
[0.51.0]: https://github.com/tigu77/tiguclaw/compare/v0.50.0...v0.51.0
[0.50.0]: https://github.com/tigu77/tiguclaw/compare/v0.49.1...v0.50.0
[0.49.1]: https://github.com/tigu77/tiguclaw/compare/v0.49.0...v0.49.1
[0.49.0]: https://github.com/tigu77/tiguclaw/compare/v0.48.0...v0.49.0
[0.48.0]: https://github.com/tigu77/tiguclaw/compare/v0.47.0...v0.48.0
[0.47.0]: https://github.com/tigu77/tiguclaw/compare/v0.46.0...v0.47.0
[0.46.0]: https://github.com/tigu77/tiguclaw/compare/v0.45.0...v0.46.0
[0.45.0]: https://github.com/tigu77/tiguclaw/compare/v0.44.1...v0.45.0
[0.44.1]: https://github.com/tigu77/tiguclaw/compare/v0.44.0...v0.44.1
[0.44.0]: https://github.com/tigu77/tiguclaw/compare/v0.43.2...v0.44.0
[0.43.2]: https://github.com/tigu77/tiguclaw/compare/v0.43.1...v0.43.2
[0.43.1]: https://github.com/tigu77/tiguclaw/compare/v0.43.0...v0.43.1
[0.43.0]: https://github.com/tigu77/tiguclaw/compare/v0.42.1...v0.43.0
[0.42.1]: https://github.com/tigu77/tiguclaw/compare/v0.42.0...v0.42.1
[0.42.0]: https://github.com/tigu77/tiguclaw/compare/v0.41.0...v0.42.0
[0.41.0]: https://github.com/tigu77/tiguclaw/compare/v0.40.1...v0.41.0
[0.40.1]: https://github.com/tigu77/tiguclaw/compare/v0.40.0...v0.40.1
[0.40.0]: https://github.com/tigu77/tiguclaw/compare/v0.39.0...v0.40.0
[0.39.0]: https://github.com/tigu77/tiguclaw/compare/v0.38.0...v0.39.0
[0.38.0]: https://github.com/tigu77/tiguclaw/compare/v0.37.0...v0.38.0
[0.37.0]: https://github.com/tigu77/tiguclaw/compare/v0.36.0...v0.37.0
[0.36.0]: https://github.com/tigu77/tiguclaw/compare/v0.35.1...v0.36.0
[0.35.1]: https://github.com/tigu77/tiguclaw/compare/v0.35.0...v0.35.1
[0.35.0]: https://github.com/tigu77/tiguclaw/compare/v0.34.0...v0.35.0
[0.34.0]: https://github.com/tigu77/tiguclaw/compare/v0.33.0...v0.34.0
[0.33.0]: https://github.com/tigu77/tiguclaw/compare/v0.32.1...v0.33.0
[0.32.1]: https://github.com/tigu77/tiguclaw/compare/v0.32.0...v0.32.1
[0.32.0]: https://github.com/tigu77/tiguclaw/compare/v0.31.0...v0.32.0
[0.31.0]: https://github.com/tigu77/tiguclaw/compare/v0.30.0...v0.31.0
[0.30.0]: https://github.com/tigu77/tiguclaw/compare/v0.29.0...v0.30.0
[0.29.0]: https://github.com/tigu77/tiguclaw/compare/v0.28.0...v0.29.0
[0.28.0]: https://github.com/tigu77/tiguclaw/compare/v0.27.0...v0.28.0
[0.27.0]: https://github.com/tigu77/tiguclaw/compare/v0.26.0...v0.27.0
[0.26.0]: https://github.com/tigu77/tiguclaw/compare/v0.25.0...v0.26.0
[0.25.0]: https://github.com/tigu77/tiguclaw/compare/v0.24.0...v0.25.0
[0.24.0]: https://github.com/tigu77/tiguclaw/compare/v0.23.1...v0.24.0
[0.23.1]: https://github.com/tigu77/tiguclaw/compare/v0.23.0...v0.23.1
[0.23.0]: https://github.com/tigu77/tiguclaw/compare/v0.22.0...v0.23.0
[0.22.0]: https://github.com/tigu77/tiguclaw/compare/v0.21.1...v0.22.0
[0.21.1]: https://github.com/tigu77/tiguclaw/compare/v0.21.0...v0.21.1
[0.21.0]: https://github.com/tigu77/tiguclaw/compare/v0.20.0...v0.21.0
[0.20.0]: https://github.com/tigu77/tiguclaw/compare/v0.19.0...v0.20.0
[0.19.0]: https://github.com/tigu77/tiguclaw/compare/v0.18.0...v0.19.0
[0.18.0]: https://github.com/tigu77/tiguclaw/compare/v0.17.0...v0.18.0
[0.17.0]: https://github.com/tigu77/tiguclaw/compare/v0.16.0...v0.17.0
[0.16.0]: https://github.com/tigu77/tiguclaw/compare/v0.15.0...v0.16.0
[0.15.0]: https://github.com/tigu77/tiguclaw/compare/v0.14.0...v0.15.0
[0.14.0]: https://github.com/tigu77/tiguclaw/compare/v0.3.82...v0.14.0
[0.5.0]: https://github.com/tigu77/tiguclaw/compare/v0.4.10...v0.5.0
[0.4.10]: https://github.com/tigu77/tiguclaw/compare/v0.4.9...v0.4.10
[0.4.9]: https://github.com/tigu77/tiguclaw/compare/v0.4.8...v0.4.9
[0.4.8]: https://github.com/tigu77/tiguclaw/compare/v0.4.7...v0.4.8
[0.4.7]: https://github.com/tigu77/tiguclaw/compare/v0.4.6...v0.4.7
[0.4.6]: https://github.com/tigu77/tiguclaw/compare/v0.4.5...v0.4.6
[0.4.5]: https://github.com/tigu77/tiguclaw/compare/v0.4.4...v0.4.5
[0.4.4]: https://github.com/tigu77/tiguclaw/compare/v0.4.3...v0.4.4
[0.4.3]: https://github.com/tigu77/tiguclaw/compare/v0.4.2...v0.4.3
[0.4.2]: https://github.com/tigu77/tiguclaw/compare/v0.4.1...v0.4.2
[0.4.1]: https://github.com/tigu77/tiguclaw/compare/v0.4.0...v0.4.1
[0.4.0]: https://github.com/tigu77/tiguclaw/compare/v0.3.99...v0.4.0
[0.3.99]: https://github.com/tigu77/tiguclaw/compare/v0.3.98...v0.3.99
[0.3.98]: https://github.com/tigu77/tiguclaw/compare/v0.3.97...v0.3.98
[0.3.97]: https://github.com/tigu77/tiguclaw/compare/v0.3.96...v0.3.97
[0.3.96]: https://github.com/tigu77/tiguclaw/compare/v0.3.95...v0.3.96
[0.3.95]: https://github.com/tigu77/tiguclaw/compare/v0.3.94...v0.3.95
[0.3.94]: https://github.com/tigu77/tiguclaw/compare/v0.3.93...v0.3.94
[0.3.93]: https://github.com/tigu77/tiguclaw/compare/v0.3.92...v0.3.93
[0.3.92]: https://github.com/tigu77/tiguclaw/compare/v0.3.91...v0.3.92
[0.3.91]: https://github.com/tigu77/tiguclaw/compare/v0.3.90...v0.3.91
[0.3.90]: https://github.com/tigu77/tiguclaw/compare/v0.3.89...v0.3.90
[0.3.89]: https://github.com/tigu77/tiguclaw/compare/v0.3.88...v0.3.89
[0.3.88]: https://github.com/tigu77/tiguclaw/compare/v0.3.87...v0.3.88
[0.3.87]: https://github.com/tigu77/tiguclaw/compare/v0.3.86...v0.3.87
[0.3.86]: https://github.com/tigu77/tiguclaw/compare/v0.3.85...v0.3.86
[0.3.85]: https://github.com/tigu77/tiguclaw/compare/v0.3.84...v0.3.85
[0.3.84]: https://github.com/tigu77/tiguclaw/compare/v0.3.83...v0.3.84
[0.3.83]: https://github.com/tigu77/tiguclaw/compare/v0.3.82...v0.3.83
[0.3.82]: https://github.com/tigu77/tiguclaw/compare/v0.3.81...v0.3.82
[0.3.81]: https://github.com/tigu77/tiguclaw/compare/v0.3.80...v0.3.81
[0.3.80]: https://github.com/tigu77/tiguclaw/compare/v0.3.79...v0.3.80
[0.3.79]: https://github.com/tigu77/tiguclaw/compare/v0.3.78...v0.3.79
[0.3.78]: https://github.com/tigu77/tiguclaw/compare/v0.3.77...v0.3.78
[0.3.77]: https://github.com/tigu77/tiguclaw/compare/v0.3.76...v0.3.77
[0.3.76]: https://github.com/tigu77/tiguclaw/compare/v0.3.75...v0.3.76
[0.3.75]: https://github.com/tigu77/tiguclaw/compare/v0.3.74...v0.3.75
[0.3.74]: https://github.com/tigu77/tiguclaw/compare/v0.3.73...v0.3.74
[0.3.73]: https://github.com/tigu77/tiguclaw/compare/v0.3.72...v0.3.73
[0.3.72]: https://github.com/tigu77/tiguclaw/compare/v0.3.71...v0.3.72
[0.3.71]: https://github.com/tigu77/tiguclaw/compare/v0.3.70...v0.3.71
[0.3.70]: https://github.com/tigu77/tiguclaw/compare/v0.3.69...v0.3.70
[0.3.69]: https://github.com/tigu77/tiguclaw/compare/v0.3.68...v0.3.69
[0.3.68]: https://github.com/tigu77/tiguclaw/compare/v0.3.67...v0.3.68
[0.3.67]: https://github.com/tigu77/tiguclaw/compare/v0.3.66...v0.3.67
[0.3.66]: https://github.com/tigu77/tiguclaw/compare/v0.3.65...v0.3.66
[0.3.65]: https://github.com/tigu77/tiguclaw/compare/v0.3.64...v0.3.65
[0.3.64]: https://github.com/tigu77/tiguclaw/compare/v0.3.63...v0.3.64
[0.3.63]: https://github.com/tigu77/tiguclaw/compare/v0.3.62...v0.3.63
[0.3.62]: https://github.com/tigu77/tiguclaw/compare/v0.3.61...v0.3.62
[0.3.61]: https://github.com/tigu77/tiguclaw/compare/v0.3.60...v0.3.61
[0.3.60]: https://github.com/tigu77/tiguclaw/compare/v0.3.59...v0.3.60
[0.3.59]: https://github.com/tigu77/tiguclaw/compare/v0.3.58...v0.3.59
[0.3.58]: https://github.com/tigu77/tiguclaw/compare/v0.3.57...v0.3.58
[0.3.57]: https://github.com/tigu77/tiguclaw/compare/v0.3.56...v0.3.57
[0.3.56]: https://github.com/tigu77/tiguclaw/compare/v0.3.55...v0.3.56
[0.3.55]: https://github.com/tigu77/tiguclaw/compare/v0.3.54...v0.3.55
[0.3.54]: https://github.com/tigu77/tiguclaw/compare/v0.3.53...v0.3.54
[0.3.53]: https://github.com/tigu77/tiguclaw/compare/v0.3.52...v0.3.53
[0.3.52]: https://github.com/tigu77/tiguclaw/compare/v0.3.51...v0.3.52
[0.3.51]: https://github.com/tigu77/tiguclaw/compare/v0.3.50...v0.3.51
[0.3.50]: https://github.com/tigu77/tiguclaw/compare/v0.3.49...v0.3.50
[0.3.49]: https://github.com/tigu77/tiguclaw/compare/v0.3.48...v0.3.49
[0.3.48]: https://github.com/tigu77/tiguclaw/compare/v0.3.47...v0.3.48
[0.3.47]: https://github.com/tigu77/tiguclaw/compare/v0.3.46...v0.3.47
[0.3.46]: https://github.com/tigu77/tiguclaw/compare/v0.3.45...v0.3.46
[0.3.45]: https://github.com/tigu77/tiguclaw/compare/v0.3.44...v0.3.45
[0.3.44]: https://github.com/tigu77/tiguclaw/compare/v0.3.43...v0.3.44
[0.3.43]: https://github.com/tigu77/tiguclaw/compare/v0.3.42...v0.3.43
[0.3.42]: https://github.com/tigu77/tiguclaw/compare/v0.3.41...v0.3.42
[0.3.41]: https://github.com/tigu77/tiguclaw/compare/v0.3.40...v0.3.41
[0.3.40]: https://github.com/tigu77/tiguclaw/compare/v0.3.39...v0.3.40
[0.3.39]: https://github.com/tigu77/tiguclaw/compare/v0.3.38...v0.3.39
[0.3.38]: https://github.com/tigu77/tiguclaw/compare/v0.3.37...v0.3.38
[0.3.37]: https://github.com/tigu77/tiguclaw/compare/v0.3.36...v0.3.37
[0.3.36]: https://github.com/tigu77/tiguclaw/compare/v0.3.35...v0.3.36
[0.3.35]: https://github.com/tigu77/tiguclaw/compare/v0.3.34...v0.3.35
[0.3.34]: https://github.com/tigu77/tiguclaw/compare/v0.3.33...v0.3.34
[0.3.33]: https://github.com/tigu77/tiguclaw/compare/v0.3.32...v0.3.33
[0.3.32]: https://github.com/tigu77/tiguclaw/compare/v0.3.31...v0.3.32
[0.3.31]: https://github.com/tigu77/tiguclaw/compare/v0.3.30...v0.3.31
[0.3.30]: https://github.com/tigu77/tiguclaw/compare/v0.3.29...v0.3.30
[0.3.29]: https://github.com/tigu77/tiguclaw/compare/v0.3.28...v0.3.29
[0.3.28]: https://github.com/tigu77/tiguclaw/compare/v0.3.27...v0.3.28
[0.3.27]: https://github.com/tigu77/tiguclaw/compare/v0.3.26...v0.3.27
[0.3.26]: https://github.com/tigu77/tiguclaw/compare/v0.3.25...v0.3.26
[0.3.25]: https://github.com/tigu77/tiguclaw/compare/v0.3.24...v0.3.25
[0.3.24]: https://github.com/tigu77/tiguclaw/compare/v0.3.23...v0.3.24
[0.3.23]: https://github.com/tigu77/tiguclaw/compare/v0.3.22...v0.3.23
[0.3.22]: https://github.com/tigu77/tiguclaw/compare/v0.3.21...v0.3.22
[0.3.21]: https://github.com/tigu77/tiguclaw/compare/v0.3.20...v0.3.21
[0.3.20]: https://github.com/tigu77/tiguclaw/compare/v0.3.19...v0.3.20
[0.3.19]: https://github.com/tigu77/tiguclaw/compare/v0.3.18...v0.3.19
[0.3.18]: https://github.com/tigu77/tiguclaw/compare/v0.3.17...v0.3.18
[0.3.17]: https://github.com/tigu77/tiguclaw/compare/v0.3.16...v0.3.17
[0.3.16]: https://github.com/tigu77/tiguclaw/compare/v0.3.15...v0.3.16
[0.3.15]: https://github.com/tigu77/tiguclaw/compare/v0.3.14...v0.3.15
[0.3.14]: https://github.com/tigu77/tiguclaw/compare/v0.3.13...v0.3.14
[0.3.13]: https://github.com/tigu77/tiguclaw/compare/v0.3.12...v0.3.13
[0.3.12]: https://github.com/tigu77/tiguclaw/compare/v0.3.11...v0.3.12
[0.3.11]: https://github.com/tigu77/tiguclaw/compare/v0.3.10...v0.3.11
[0.3.10]: https://github.com/tigu77/tiguclaw/compare/v0.3.9...v0.3.10
[0.3.9]: https://github.com/tigu77/tiguclaw/compare/v0.3.8...v0.3.9
[0.3.8]: https://github.com/tigu77/tiguclaw/compare/v0.3.7...v0.3.8
[0.3.7]: https://github.com/tigu77/tiguclaw/compare/v0.3.6...v0.3.7
[0.3.6]: https://github.com/tigu77/tiguclaw/compare/v0.3.5...v0.3.6
[0.3.5]: https://github.com/tigu77/tiguclaw/compare/v0.3.4...v0.3.5
[0.3.4]: https://github.com/tigu77/tiguclaw/compare/v0.3.3...v0.3.4
[0.3.3]: https://github.com/tigu77/tiguclaw/compare/v0.3.2...v0.3.3
[0.3.2]: https://github.com/tigu77/tiguclaw/compare/v0.3.1...v0.3.2
[0.3.1]: https://github.com/tigu77/tiguclaw/compare/v0.3.0...v0.3.1
[0.3.0]: https://github.com/tigu77/tiguclaw/compare/v0.2.1...v0.3.0
[0.2.1]: https://github.com/tigu77/tiguclaw/compare/v0.2.0...v0.2.1
[0.2.0]: https://github.com/tigu77/tiguclaw/compare/v0.1.0...v0.2.0
[0.1.0]: https://github.com/tigu77/tiguclaw/releases/tag/v0.1.0