엔진이 senpi 2026.9.20으로 이동하며, 오래된 두 가지 TUI 불편함이 해결됩니다.
공급자 네트워크 장애가 이제 모든 시도마다 전체 오류 페이로드를 출력하는 대신 단일 재시도 상태로 축약됩니다. 상태는 제자리에서 업데이트되고, 공급자가 복구되면 자신을 삭제하며, 턴을 취소하면 실패한 재시도 신청을 중단합니다. 소진된 체인은 다음 단계가 있는 하나의 알림을 남기며, 부분 답변과 저장된 오류 세부사항은 세션을 다시 열어도 유지됩니다.
마우스로 ask_user_question 카드에 답변해도 더 이상 키보드가 죽지 않습니다. 옵션 행과 제출 줄을 클릭하면 주변 래퍼에 포커스가 전달되었는데, 이 래퍼에는 키 핸들러가 없어서 이후의 모든 키 입력이 아무 곳으로도 가지 않았으며, 출력과 도구는 평소대로 계속 작동했습니다. 포커스가 이제 키를 받을 수 있는 컴포넌트로 해결되며, 클릭 핸들러로 인한 포커스 변화는 더 이상 나중에 덮어쓰여지지 않습니다.
대화가 맞지 않는 모델을 선택해도 더 이상 선택이 버려지지 않습니다. 전환이 유지되고, 다음 메시지가 먼저 압축되며, 전체 대화를 여전히 읽을 수 있는 모델이 요약한 후 이동하려는 윈도우 크기로 조정되고, 새 모델이 거기서 인수받습니다. 자동 폴백은 같은 방식으로 한 단계를 복구하며 거부하지 않으며, Ctrl+P는 세션을 제공할 수 없었던 모델만 건너뜁니다. Fable 5도 다시 기본 폴백 체인을 가지며, Anthropic 계열에 머뭅니다: Opus 5, 그 다음 Opus 4.8, 그 다음 Opus 4.6.
시작과 세션 열기가 더 빨라졌습니다. senpi 명령이 여전히 번들되지 않은 모듈 그래프를 부팅했는데, 이는 실제 TUI 시작을 6.3초에서 1.2초로 단축했습니다. 공유 호스트가 모든 세션마다 동일한 모델 카탈로그 재구축과 동일한 설치된 패키지 재해석을 중단했으므로, 단일 열기가 약 40% 더 빠르고 동시에 8개는 약 30% 더 빠릅니다. 다른 열기 뒤에서 기다리는 열기는 이제 요청이 수락되는 즉시 대기열의 위치를 보고하므로, 느린 시작을 깨진 것과 구별할 수 있으며, 각 열기는 전송될 때부터 측정한 자신의 기한을 받습니다.
엔진에서: Ctrl+V가 발행된 번들에 다시 붙여넣기, 패키지 바이너리 내부에 배포된 스킬이 충돌 경고로 삭제되는 대신 로드, 확장명의 import ... with { type: "file" }이 다시 경로를 반환, . 전송이 차단된 목표를 재개, 보류 중인 질문이 기한을 재설정하거나 두 번 답변하지 않으면서 재로드 후 유지, 세션 파일을 다시 열 때 그 위에 두 번째 파일을 시작하는 대신 기존 세션에 합류합니다.
관리형 omob 시작이 엔진 시작 전에 약 절반의 시간을 소비하며, omo 전용 재구축이 약 3분의 1 더 빠르게 완료됩니다. 런처가 엔진을 실행하기 전에 새로고침 확인을 실행했으며, 이 확인은 엔진의 자체 시작보다 많은 비용이 들었습니다: senpi와 omo 캐시 복제가 하나씩 가져와졌으며, 각 복제는 4개의 git 프로세스로 동일한 질문에 답했으며, 설치된 바이너리가 순전히 확인이 --version을 읽을 수 있도록 생성되었습니다. 이제 두 개의 가져오기가 함께 실행되며, 단일 git log가 커밋과 그 날짜에 모두 답하며, 버전은 실행 파일 옆에 기록된 공급 출처 마커에서 나옵니다. 마커는 설명하는 바이트의 sha256을 기록하므로, 여전히 디스크의 파일을 설명하는 동안만 신뢰되며, 누락되거나, 오래되거나, 형식이 잘못되거나, 일치하지 않는 마커는 이전처럼 실행 파일 생성으로 폴백됩니다. 측정된 pre-exec 오버헤드: 1287.7ms에서 649.8ms. 별도로, 모든 omob 빌드가 Senpi 플러그인 페이로드를 두 번 생성했습니다. bun install이 캐시 복제에서 전체 제품 그래프를 실행했기 때문에 바이너리가 네이티브 빌드 단계가 자체적으로 생성하는 것만 포함합니다. 빌드 그래프는 이제 소비자가 필요로 하는 노드를 이름 지정하는 프로필을 허용하며, 이는 17개의 그래프 노드에서 omo 전용 재구축을 15.27초에서 9.53초로, 3개로 단축합니다. 프로필이 없으면 그래프는 변경되지 않으므로 bun run build, 발행 및 CI는 여전히 이전과 동일하게 구축됩니다. (#8521, #8522)
deep은 이제 두 개의 레인이며, 더 저렴한 것이 기본값입니다. 기존 카테고리는 백엔드, 로직, 알고리즘, 브라우저 사용 및 멀티모달 작업에 필수로 자신을 발표했습니다. 거의 모든 코딩 작업이 이 목록과 일치하므로, 거의 모든 위임된 작업이 높은 추론의 gpt-6-astra에서 실행되었으며, 아래의 gpt-5.6-sol 단계는 Astra가 연결되지 않았을 때만 도달했습니다. 이제 얻는 레인은 도메인이 아닌 능력에 따라 결정됩니다. deep-low (gpt-5.6-sol medium)는 기본값이며 자식이 읽은 것에서 결정을 정할 수 있는 모든 목표를 가져갑니다. deep-high (gpt-6-astra high)는 중앙 결정을 그 방식으로 정할 수 없는 목표를 가져갑니다: 정답이 없는 트레이드오프, 패키지 또는 프로세스 경계를 넘는 계약 변경, 저장소에 복사할 패턴이 없는 메커니즘, 또는 불변식에서 주장해야 하는 정확성. 너비만으로는 불충분합니다. 광범위하지만 기계적인 작업은 deep-low에 남습니다. 도메인 목록이 호출자 대면 deep-low 설명으로 이동했으며, 여기서 라우팅 선택이 실제로 이루어지고, 자식 프롬프트는 그대로 남겨졌습니다. deep-low 자식이 이러한 결정 중 하나에 직면하면 편집 전에 중단하고 읽은 내용과 본 옵션과 함께 ESCALATE: deep-high를 반환하며, 호출자가 에스컬레이션 레인에서 동일한 브리프를 다시 생성합니다. 각 레인은 자신의 모델에서 게이트된 하나의 단계이므로, Astra가 없는 머신은 그 이름으로 조용히 Sol을 얻는 대신 deep-high를 잃습니다. (#8516)
작성 카테고리는 낮은 추론으로 실행되고 Claude 폴백을 유지합니다. 내장 writing 체인은 중간 수준의 claude-fable-5-1로 시작했고 최대 수준의 kimi-k3으로 폴백했으므로, 산문 위임은 필요하지 않은 추론 예산을 사용했으며, Fable 중단은 모든 작성 작업을 Claude 단계 없이 최대 변형 Kimi 실행으로 이동했습니다. 체인은 이제 낮은 수준의 세 단계입니다: claude-fable-5-1, 그 다음 kimi-k3, 그 다음 claude-opus-4-6. (#8525)
할 일이 없는 deep 카테고리 이름. omo.json이 categories.deep을 설정하면, 첫 번째 시작이 categories.deep-low로 이름을 바꾸며, 팀 구성원의 카테고리 또는 메모리 반영 카테고리로 사용되는 deep도, 기본 블록, [senpi]/[opencode]/[codex] 내부, 그리고 모든 프로필 내부에서도 마찬가지입니다. deep을 언급하지 않은 설정은 전혀 건드리지 않습니다: 재작성 없음, 백업 파일 없음, 마이그레이션 마커 없음. 실행이 잠겨있거나 파일이 읽기 전용이기 때문에 재작성이 도달할 수 없는 파일은 여전히 작동합니다. 설정을 읽을 때 이름이 정규화되고 시작 알림이 바꿀 키를 이름 지으므로. 스킬이나 AGENTS.md의 task(category: "deep")는 deep-low에서 여전히 실행됩니다. (#8516)
텔레메트리 스탬프를 지속할 수 없는 머신은 더 이상 모든 시작 시 자신을 활성으로 보고하지 않습니다. 일일 활성 게이트가 스탬프를 읽고, 다시 썼으며, 쓰기 실패를 삼키면서 읽은 것에서 결정했으므로, 쓸 수 없는 상태 디렉터리가 무기한으로 새로운 활성 날을 보고했으며, 새로운 날에 동시에 시작하는 여러 프로세스가 각각 하나를 보고했습니다. 이제 결정은 배타적 파일 생성의 결과이므로, UTC 일당 정확히 하나의 호출자가 진행되고 쓸 수 없는 디렉터리는 프로세스당 하나의 보고로 제한됩니다. 이벤트 이름, 속성 및 ID 파생은 건드리지 않으며, 이미 스탬프된 날은 아무것도 쓰지 않고 반환됩니다. (#8519)
메모리 압박 권고가 모델에 실제로 표시되는 텍스트를 다시 계산합니다. 최근 변경이 git이 저장한 크기에서 추정했으며, 이는 유효하지 않은 UTF-8을 보유한 system/ 파일에 대해 낮게 읽고 저장소를 읽을 수 없을 때 압박이 전혀 보고되지 않았습니다; 둘 다 복원되고, 추정은 프롬프트당 한 번이 아닌 커밋당 한 번만 계산됩니다.
omo doctor가 실행 중인 세션을 다시 봅니다. 명령줄의 한 가지 맞춤법로 엔진을 인식했으며, 런처가 엔진의 사전 링크된 번들로 이동했을 때 해당 맞춤법 생성을 중단했으므로, 오래된 세션 보고서와 그 수확 명령이 현재 설치에서 빈 목록을 보고 있었습니다.
영혼 파일이 변경되었다는 미리 알림이 더 이상 전체 메모리 기록을 다시 읽어서 알아내지 않습니다. system/을 건드린 마지막 알림 이후의 모든 커밋에 대해 git을 요청했는데, 수천 개의 커밋이 있는 ID에서 모든 프롬프트에서 대부분 1초가 소요됩니다; 이제 한 페이지를 읽고 해당 페이지가 전적으로 메모리 도구 쓰기인 경우에만 더 보입니다. 생성되는 알림은 동일한 것입니다.
메모리 ID가 있는 디렉터리의 모든 프롬프트가 git에서 동일한 파일을 다시 읽었습니다. 메모리 압박 권고가 저장소 트리를 나열하고 모든 system/*.md blob을 모든 턴에서 다시 읽었으며, 저장 미리 알림이 전체 커밋 기록에 대해 git을 요청하고 여기서 검색했습니다. 두 답변 모두 메모리 저장소가 커밋을 얻을 때만 변경되므로, 이제 둘 다 커밋당 한 번 파생됩니다: 프롬프트당 5개 더 적은 git 프로세스, 3,000개 커밋이 있는 저장소에서 더 이상 프로세스 경계를 넘지 않는 메가바이트의 커밋 기록. 모델이 받는 것은 변경되지 않았습니다.
분리된 작업 세션이 더 이상 하트비트 또는 종료 중에 호스트를 크래시하지 않습니다. 상태 폴링은 이제 동기 연결 오류를 포착하며, 종료는 연결을 삭제하기 전에 폴링을 중단합니다. 실패한 중단이 자식이 닫히는 것을 방지하지 않으면서 로그됩니다. 자식 프로세스 하트비트 호출은 동일한 보호를 가지며, 폐기는 처리되지 않은 거부를 남기는 대신 실패한 분리를 관찰하고 기록합니다. @ayden94가 하트비트 수정을 위해 감사합니다. (#8494)
건축가 미세 조정이 이제 하나의 모델 ID가 아닌 거부를 따릅니다. 모델이 턴을 거부할 때 세션이 폴백되면, omo는 에이전트에게 task(category: "architect")로 어려운 부분을 라우팅하도록 지시하는 숨겨진 지시어를 주입합니다. claude-fable-5가 거부 모델일 때만 무장했으므로, claude-fable-5-1의 세션(건축가 카테고리 자체가 실행하는 모델)이 이를 보지 못했습니다. 이제 거부 기반 폴백이 무장되며, 지시어는 거부한 모델이 아닌 한 거부 모델을 상담가로 부르지 않습니다. (#8513)
작성 메모리는 더 이상 Windows에서 포커스를 빼앗지 않습니다. 모든 memory 도구 쓰기는 자동 커밋되며, 그 뒤의 각 git 명령이 git.exe를 windowsHide 없이 생성했으므로, Windows가 새로운 콘솔 창을 만들고 전면으로 가져왔습니다. 잠금 프로토콜의 시작 시간 프로브가 powershell.exe로 동일한 작업을 수행했으며, Node 런타임에서는 모든 프로브에서 수행했습니다. 해당 프로브는 Node가 가져올 수 없는 bun:ffi를 통해 도달한 처리 중 kernel32 리더에서 폴백되므로, 보이는 폴백은 거기서 정상적인 경로였습니다. 이제 두 생성 모두 숨겨졌으며, 포매터, worktree-root 조회 및 동일한 방식으로 플래시된 init-deep git 프로브도 숨겨졌습니다. 대화형 런처는 의도적으로 콘솔을 유지하고 호출 사이트에서 이를 말합니다. (#8501)
npm i -g omo-ai@beta