Agent Orchestrator 0.12.0

0.11.2 이후 80개의 커밋. 데스크톱 앱이 8개 언어를 지원하고, 새로운 색상 팔레트를 적용했으며, 세션을 고정하고 세션마다 리뷰어를 고를 수 있습니다. 모바일 앱에는 테마와 길게 눌러 말하는 받아쓰기가 추가되었습니다. 세션이 시작한 컨테이너는 세션이 종료되면 정리됩니다.

v0.11.2 이후의 모든 변경 사항을 다룹니다.

macOS 사용자는 바로 0.12.1 이상으로 업데이트하세요. 이 빌드는 파일 디스크립터를 누수하며, 몇 시간 사용하면 파일(Files) 보기와 작업 생성이 동작하지 않습니다.

0.11.0이 기반이 하중을 견디게 만드는 일이었다면, 0.12.0은 그 위에 쌓아 올린 결과입니다. 앱이 8개 언어를 지원하고, 사이드바와 설정이 기대한 대로 동작하며, 보드의 모든 세션을 날려 버릴 수 있던 유형의 오류가 사라졌습니다.

이번 릴리스는 기존 워크플로를 깨뜨리지 않으면서 새로운 제품 기능과 안정성 개선을 추가합니다.

주요 내용

8개 언어를 지원하는 앱

이제 데스크톱 앱에 i18next 기반의 제대로 된 현지화 계층이 있으며, 언어는 Settings > General에서 고르고 ~/.ao/ui-settings.json에 저장됩니다. 중국어 간체가 가장 먼저 적용되어 셸 크롬, 사이드바, 보드, 설정, 대화상자, 인스펙터 탭, 명령 팔레트, 터미널 문구를 다룹니다. 이어서 일본어, 한국어, 스페인어, 프랑스어, 독일어, 브라질 포르투갈어가 추가되었고, 각 언어의 README도 제공됩니다. 영어는 기본값이자 대체 언어로 유지되므로, 번역되지 않은 문자열은 키 대신 영어로 표시됩니다. (#3465, #3541)

모바일: 테마, 네이티브 시트, 길게 눌러 말하기

모바일 앱이 더 이상 다크 모드 전용이 아닙니다. 라이트 및 다크 팔레트와 함께, 실행 시 읽은 값에 고정되지 않고 OS 설정을 계속 따르는 "시스템" 옵션을 제공합니다. 앱 셸은 네이티브 시트로 다시 만들어졌고, 세션 보드는 완료 상태가 아니라 런타임 종료 여부로 세션을 나눕니다.

푸시 투 토크 받아쓰기도 추가되었습니다. 입력창에서 마이크 키를 길게 눌러 말하고, 손을 떼면 입력되며, 위로 밀면 손을 떼고도 계속 녹음됩니다. 음성 인식은 기기에서 실행되므로(iOS SFSpeechRecognizer, Android SpeechRecognizer) API 키도 분당 비용도 없으며, 에이전트 프롬프트에 자주 나오는 어휘에 맞춰 조정되어 "get"이나 "MPM"이 아니라 "git"과 "npm"으로 인식됩니다. 음성 인식은 코드를 잘못 알아듣는 경우가 많아 조용히 전송하는 것은 안전하지 않으므로, 받아쓴 내용은 바로 전송되지 않고 편집 가능한 초안으로 입력창에 들어갑니다. 여러 번 눌러 말하면 내용이 이어 붙어 하나의 프롬프트가 됩니다.

또한 데스크톱 빌드와 어울리는 Liquid Glass 앱 아이콘이 추가되었고, 기본 LAN 포트가 3011번의 모바일 브리지가 아니라 루프백 전용 데몬 포트를 가리켜 새로 설치하면 직접 수정하지 않고는 연결할 수 없던 문제가 해결되었습니다. (#3399, #3400, #3304, #3494)

새로운 색상 기반

렌더러가 oklch 디자인 토큰 팔레트로 전환되었으며, UI 글꼴은 Geist를 사용하고 shadcn 색상 별칭이 이에 매핑되어 컴포넌트 라이브러리 전반의 하드코딩된 값을 대체합니다. 세션 상태는 이제 어디에 표시되든 일관된 팔레트를 사용합니다. 작업 중은 파란색, 확인 필요는 주황색, 리뷰 중은 노란색, 준비 완료는 초록색입니다. (#3421)

자주 돌아오는 세션 고정

세션을 사이드바 맨 위의 Pinned 섹션에 고정할 수 있으며, 서버 측에 저장되므로 재시작 후에도 유지됩니다. 사이드바 자체도 접을 수 있게 되었습니다. Pinned와 Projects를 각각 접을 수 있고, 프로젝트의 폴더 아이콘을 클릭하면 해당 프로젝트로 전환하지 않고도 펼치거나 접을 수 있습니다. (#3511, #3310)

세션마다 리뷰어 선택

예전에는 리뷰어 에이전트가 프로젝트 전체에 하나만 설정되었습니다. 이제 개별 세션마다 리뷰어를 고를 수 있으며, 해당 리뷰를 실행해도 프로젝트의 다른 세션 설정은 바뀌지 않습니다. 리뷰(Reviews) 탭도 PR의 현재 및 이전 실행만이 아니라 세션에 기록된 모든 리뷰를 보여 주므로, 서로 다른 두 리뷰어의 의견을 비교할 수 있습니다. 데몬이 새 리뷰를 실행하지 않고 기존 리뷰를 재사용해 리뷰 요청이 거절된 경우, 더 이상 성공으로 보고되지 않습니다. (#3477)

설정이 모달로 열림

설정과 프로젝트 설정이 보드에서 다른 화면으로 이동하지 않고 보드 위에 열리며, General, Updates, Developer, Help 사이드바를 제공합니다. Esc를 누르거나 바깥을 클릭하면 닫히고, 원래 있던 곳으로 돌아갑니다. (#3497)

바로 대응할 수 있는 알림

세션에 사용자의 확인이 필요하고 창에 포커스가 없으면 macOS Dock 아이콘이 튀어 오르고, Windows 작업 표시줄은 돌아올 때까지 깜박이며, 읽지 않은 알림의 배지 수가 macOS, Windows, Linux에서 동기화됩니다.

패널 안에서는 제목 텍스트만이 아니라 행 전체를 클릭할 수 있으며, 수동 Unread/All 탭과 읽음으로 표시 기능은 사라졌습니다. 이제 알림은 두 가지를 별도로 추적합니다. 알림을 봤는지(패널을 열면 해제)와 근본 문제가 아직 열려 있는지(라이프사이클만 기록)입니다. 이미 읽은 알림도 보고한 문제가 해결되지 않는 동안에는 목록에 남아 있고, 세션이 입력 대기 상태를 벗어나거나, 종료되거나, PR이 머지되거나 닫히면 스스로 닫힙니다. 데몬이 꺼져 있는 동안 일어난 상태 전환은 시작 시 다시 확인합니다. (#2534, #3296, #3495, #3558)

명령 팔레트 액션과 메뉴 막대 트레이

이제 Cmd/Ctrl+K에서 내비게이션뿐 아니라 세션 액션도 실행할 수 있으며, 새 작업(New Task)의 작업 입력기를 분리해 팔레트에서도 같은 UI로 작업을 생성할 수 있습니다. macOS에는 사용자를 기다리는 세션을 위한 주의 트레이 아이콘이 메뉴 막대에 추가되었습니다. (#3531)

세션이 시작한 컨테이너 정리

세션이 실행한 Docker 컨테이너는 직접 종료할 때뿐 아니라 크래시나 SIGKILL을 포함해 세션이 종료 상태가 되면 제거됩니다. 컨테이너에 ao.session=$AO_SESSION_ID 레이블을 붙이면 정리 대상이 되고, 세션보다 오래 유지되어야 하는 공유 인프라에는 ao.spare=true를 붙이세요. Docker 호출에는 타임아웃이 있으며, 로드에 실패한 프로젝트는 정리하지 않는 안전한 쪽으로 실패합니다. (#3153)

파일 및 diff

파일(Files) 패널은 토글형 검색 버튼과 파일 개수 레이블을 항상 보이는 검색 입력란으로 바꾸고, 새로고침 버튼을 없앴으며(목록이 이미 폴링함), 탭에 실시간 파일 개수가 표시되는 아코디언 목록으로 다시 만들었습니다. diff 뷰어는 워크스페이스 변경 사항을 실시간으로 스트리밍하고, 더 명확한 레이아웃 토글과 파일별 인라인 피드백을 제공하며, 최대화 보기에서도 제대로 펼쳐집니다. 워크스페이스 diff는 이제 기준 브랜치를 인식하므로, 하위 세션은 고정된 기준이 아니라 실제로 분기한 브랜치를 기준으로 비교합니다. (#3466, #3503, #3492, #3369, #3214)

안정성

한 번의 장애로 보드가 비워지지 않습니다. 이번 릴리스의 가장 큰 수정입니다(#3475). 서로 다른 세 가지 버그가 모든 세션을 한꺼번에 아카이브할 수 있었습니다. 프리뷰 정리 과정에서 PID가 여전히 자신이 실행한 프로세스인지 다시 확인하지 않고 그룹 단위로 종료했기 때문에, 재사용된 PID 번호가 관련 없는 프로세스 그룹을 종료시켰습니다. tmux 서버는 자체 그룹 리더이므로 오래된 그룹 종료 한 번으로 모든 세션이 사라졌습니다. tmux의 "no server running" 프로브 결과는 개별 세션에 대해 아무것도 말해 주지 않는데도 세션별 종료로 해석되어, 서버가 잠깐 문제를 일으키면 보드 전체가 아카이브되었습니다. 그리고 실패한 마이그레이션이 500 오류를 반환하자 보드가 이를 세션이 없는 것으로 처리했습니다. 이제 활성 확인 프로브는 종료 대신 판단 불가를 보고하고, 정리 프로세스는 보드 대부분이 동시에 종료로 확인되면 결론을 내리지 않으며, 마이그레이션 원장은 이미 망가진 기록에서도 스스로 복구됩니다. (#3491, #3598)

오케스트레이터. 같은 프로젝트에 활성 오케스트레이터가 중복으로 생성되지 않으며, ao session ls가 숨겨진 오케스트레이터 세션을 표시하고 숨겨진 종료 세션을 조용히 빼지 않고 개수로 보여 줍니다. 자동 오케스트레이터 재참여 메시지는 유용하기보다 시끄럽다는 것이 확인되어 되돌렸습니다. (#3397, #3393, #3394)

에이전트. Droid는 역할별 모델 설정을 설정 파일로 전달하며, 이 파일은 임시 디렉터리가 아닌 데이터 디렉터리에 기록됩니다. Grok 프롬프트는 아직 입력을 받지 않는 터미널이 아니라 TUI 시작이 끝난 뒤에 전달되며, 터미널이 휠로 스크롤됩니다. 내부용 가짜 테스트 하네스가 더 이상 에이전트 선택기에 나타나지 않습니다. (#3156, #3534, #3533, #3518)

브라우저. 프롬프트가 전송되는 동안 주석 선택이 잠겨 전송 중 클릭으로 대상이 바뀌지 않고, 숨겨진 네이티브 뷰가 더 이상 앱 위에 그려지지 않으며, macOS의 최대화된 브라우저에서 URL 편집이 동작하고, 요소 선택기 배지가 주석 대화상자에서 빠졌으며, 세션을 떠났다가 돌아와도 이미 벗어난 프리뷰 URL로 다시 이동하지 않습니다. (#3232, #3295, #3488, #3464, #3538, #3370)

데스크톱. 자동 업데이터는 릴리스 매니페스트가 없을 때 갖고 있지도 않은 인증 토큰을 확인하라는 대화상자를 띄우지 않고 404를 로그로 남깁니다. 사이드바와 인스펙터를 끌 때 갑자기 닫히지 않고 최소 너비에서 멈춥니다. 데몬은 닫힌 출력에서 SIGPIPE를 무시합니다. 인스펙터의 PR 및 Completion 섹션은 내용이 없으면 숨겨지고, 중복된 PR 요약은 하나로 합쳐집니다. 이와 함께 UI 크롬도 손봤습니다. 타이틀 바 내비게이션을 macOS 신호등 버튼에 맞춰 정렬하고, 터미널 탭 바를 다듬고, 설정 및 아카이브의 구분선, 터미널 상단 바 여백을 정리했으며, 앱 크롬과 마케팅 페이지에서 텍스트 선택을 비활성화했습니다. (#3012, #3478, #3193, #3325, #3250, #3505, #3480, #3507, #3556, #3508, #3520)

내부 개선

텔레메트리에 런타임 차단 스위치가 생겼습니다. AO_TELEMETRY_DISABLED_EVENTS로 릴리스 없이도 이름이 지정된 스트림을 끌 수 있으며(* 접두사 매칭 지원), 꺼진 스트림도 로컬 SQLite에는 기록되므로 디버깅할 수 있습니다. 데몬 이벤트에 버전이 기록되고, 업데이트 이벤트가 저장되며, PostHog 제어가 강화되었고, 테스트에서 자동 수집이 꺼져 있는지 확인합니다. CI는 이제 .deb와 함께 Linux .rpm도 생성합니다.

사이트에서는 문서가 Markdown 사본으로도 게시되고 전체 계층이 llms.txt에 노출되며, 에이전트 비교 페이지가 추가되었고, 히어로 보드, 위임 데모, 모바일 목업이 실제 데스크톱 앱 모습에 맞게 다시 만들어졌으며, iOS 베타 CTA가 공개되었습니다. 중복된 Organization 구조화 데이터를 제거했고, 콘텐츠 신호가 이제 허용된 크롤러에 적용됩니다. (#3401, #3388, #3406, #3395, #3363, #3438, #3344, #3430, #3496, #3428, #3429, #3500, #3521, #3522, #3144, #3367, #3365, #3389)

업그레이드

지원되는 설치 경로는 GitHub Releases와 Homebrew입니다. 기존 설치는 그대로 업데이트됩니다. 이전 업데이트로 마이그레이션 원장이 망가진 상태라면, 0.12.0이 부팅을 실패시키지 않고 시작 시 이를 복구합니다.

전체 변경 로그: https://github.com/OrchestratorInc/agent-orchestrator/compare/v0.11.2...v0.12.0