umux 1.7.0: 창을 닫아도 작업은 유지
요약
umux는 Linux, Windows, macOS용 오픈 소스 터미널 워크스페이스 매니저입니다. v1.7.0에서는 데몬 기능을 추가하여 창을 닫아도 세션이 지속되도록 개선되었습니다. 이를 통해 에이전트가 진행 중인 장시간 작업을 유지하고 나중에 다시 접근할 수 있게 합니다.
핵심 포인트
- 데몬 기능으로 창을 닫아도 작업 세션을 유지 가능합니다.
- Storestation 활성화 시, 헤드리스 바이너리로 데몬 상태 확인 및 관리 가능합니다.
- umux attach 명령어로 중단된 작업을 이어서 진행할 수 있습니다.
지난 2주 동안 조용했습니다. 이번 릴리스가 그 침묵을 깨는 계기입니다.
랜딩 페이지: https://umux.pages.dev
GitHub: https://github.com/CrystalPlatforms/umux
umux는 Linux, Windows 및 macOS용 무료 오픈 소스 터미널 워크스페이스 매니저입니다. 프로젝트당 하나의 워크스페이스를 갖고, 그 안에 탭을 만들고, 모든 탭은 필요한 만큼의 패널로 분할됩니다. 이 앱이 구축된 핵심 기능은 다음과 같습니다: umux는 Claude Code와 같은 AI CLI가 긴 작업이 완료될 때 방출하는 OSC 9;9, 99 및 777 이스케이프 시퀀스를 읽어 데스크톱 알림으로 변환합니다.
v1.6.2에서는 앱이 에이전트가 작업 중간에 멈추는 것을 감지하도록 학습시켰습니다. v1.7.0은 지난 게시물에서 약속하고 미뤄왔던 기능을 탑재하여 출시했습니다: 세션이 창을 초과하여 생존할 수 있게 해주는 데몬입니다. 이전 릴리스 노트는 '기다릴 수 있다'로 끝났습니다. 하지만 기다릴 수 없었습니다. 해당 포스트가 언급한 Core 데몬이 umux Storestation으로 탑재되었습니다.
데몬(The daemon)
기본적으로 비활성화되어 있으며, 이는 v1.6.x의 정확한 상태입니다: 앱은 자체 셸을 소유하며, 이를 닫으면 이전과 마찬가지로 바이트 단위로 종료됩니다. 설정에서 Storestation을 활성화하면 소유권이 이동합니다. 작은 헤드리스 바이너리가 로컬 소켓 하나를 서비스하고 모든 세션을 소유하게 됩니다. 데스크톱 앱은 그 외부에서 살아있는 작업의 '뷰'가 됩니다: 모든 창을 닫아도 셸은 계속 실행되고, 에이전트는 작업 중간에 진행되며, 출력은 나중에 읽을 수 있는 스크롤백으로 계속 쌓입니다.
설정(Settings) 페이지는 메인 페이지를 간결하게 유지합니다. umux Storestation이 그곳의 하나의 항목이며, 이를 열면 전체 페이지가 데몬과 자동 시작이라는 두 개의 스위치와 실시간 상태 표시줄만 있는 것으로 교체됩니다. 공장 초기화(Factory reset)도 같은 공간을 차지하므로, 메인 페이지는 스위치의 벽 대신 문 목록으로 유지됩니다.
연결(attach)
umux attach가 해결책입니다. 터미널에서 실행하면 데몬이 관리하는 활성 세션에 바인딩된 앱을 실행하거나 이미 열려 있는 것을 포커스합니다. 오프라인 상태의 데몬은 정직한 실패를 보여줍니다: attach는 아무것도 실행되고 있지 않다고 설명하고 종료됩니다. 핵심 목적은 몇 분 또는 몇 시간 후에 돌아와서 하던 작업을 그대로 발견하는 것입니다.
헤드리스(headless) 인터페이스
CLI가 창 없이 Storestation을 구동합니다:
umux status는 데몬의 상태를 알려줍니다. 오프라인은 오류가 아니라 상태이므로: 0으로 종료하며 그렇게 알립니다.umux status --json은 기계가 읽기 쉬운 문서(machine-readable document)를 제공합니다: 실행 중인지, 버전, pid, 가동 시간(uptime), 세션, 연결된 클라이언트.umux sessions list는 데몬이 소유한 활성 세션을 출력합니다.umux agent-context는 CLI 자체를 데이터로 설명하여 스크립트가 도움말 텍스트를 파싱하는 대신 인터페이스(surface)를 발견할 수 있게 합니다.
종료 코드는 두 바이너리 모두에서 하나의 카탈로그를 따릅니다: 0은 정상 또는 오프라인, 2는 사용법 오류(usage), 3은 연결 불가(unreachable), 4는 이미 실행 중(already running), 5는 내부 오류(internal). 두 번째 데몬은 절반만 시작하는 대신 이 4 코드로 시작을 거부합니다.
생명주기 관리(Lifecycle discipline)
세 가지 규칙이 전체 설계를 지탱합니다. 깨끗한 종료(clean stop)는 소유한 모든 쉘을 종료하므로, 데몬을 중지해도 고아 프로세스(orphan processes)가 남지 않습니다. 강제 종료(hard kill)는 흔적을 남기며, 다음 시작 시 이를 감지하고 정리합니다. 그리고 소켓이 생존 여부를 결정하며, pid 파일이 아닙니다. 따라서 충돌한 데몬의 오래된 파일들이 실행 중인 것처럼 속일 수 없습니다.
로그인 시 자동 시작(Autostart)은 플랫폼별로 기본 제공됩니다: Linux에서는 systemd 사용자 유닛을, macOS에서는 LaunchAgent를, Windows에서는 숨겨진 콘솔에서 실행되는 Run 키를 사용합니다. 왜냐하면 로그인 시 실행되는 콘솔 바이너리는 부팅할 때마다 창을 깜빡이게 할 것이기 때문입니다.
설치 프로그램에 포함되어 배포됩니다
Storestation을 활성화한다고 해서 추가적인 설치가 필요하다는 의미는 아닙니다. 다섯 가지 패키지(.deb, .AppImage, .rpm, NSIS 인스톨러, 범용 .dmg) 모두 CLI와 함께 데몬(daemon)을 포함하고 있습니다. macOS의 PATH 라인은 두 바이너리 모두를 커버하며, Linux 패키지는 이를 /usr/bin에 배치하고, 일반 CLI 설치 스크립트 역시 마찬가지입니다. 앱 업데이트는 앱과 함께 데몬도 교체합니다. 전체 작업 공간(workspace)에 하나의 버전 번호가 적용되며, umux status 명령어로 확인할 수 있습니다.
스토어프론트에서 실제 모습을 보여주다
랜딩 페이지는 이번 릴리스 내내 스크린샷 대신 회색 플레이스홀더로 채워져 있었습니다. 이제 사라졌습니다. 네 개의 실제 사진이 각 기능 타일(feature tile)마다 배치되었습니다: 작업 공간, 터미널, 업데이트 설정, cmux 가져오기 마법사입니다. SSH 타일은 다른 경로를 택했습니다. 대체 이미지를 제공하는 대신, 기능 목록의 맨 끝에 아무것도 없습니다. 공개 페이지의 플레이스홀더는 나중에 수정하겠다는 약속이었고, 그 '나중'이 도착한 것입니다.
수치들
지난 게시물 이후 23개의 커밋, 134개 파일, 약 12,100줄 추가 및 5,100줄 제거되었습니다. 프론트엔드 스위트는 739개의 테스트를 통과했습니다. Rust 측면은 21개의 스위트를 걸쳐 282개를 실행했으며, 이 중 대부분은 이번 릴리스에서 새로 추가된 것입니다: 프로토콜(protocol), 라이프사이클 강화(lifecycle hardening), 재연결(reattach), 실시간 세션 목록(live session lists), 연결 해상도(attach resolution).
인스톨러: Linux용 .deb, .AppImage 및 .rpm, macOS 11 이상용 범용 .dmg, Windows 10 이상용 NSIS 인스톨러. MIT 라이선스를 따르며 계정은 필요 없습니다. 앱 내 업데이트기는 자체적으로 1.7.0 버전을 가져옵니다.
랜딩 페이지: https://umux.pages.dev
GitHub: https://github.com/CrystalPlatforms/umux
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기