stui

한 장치에서 도는 오픈소스판(Apache-2.0). tmux 세션과 그 안의 코딩 에이전트, 오케스트레이션 런과 CI를 계정도 릴레이도 없이 봅니다.

stui는 tmux와 그 안에서 도는 코딩 에이전트를 위한 터미널 UI입니다. 세션, 윈도우, pane을 보여 주고, Claude Code, Codex, opencode, Pi 에이전트 중 어느 것이 쉬는지, 일하는지, 나를 기다리는지 알려 줍니다. pane마다 그 저장소의 GitHub Actions 상태도 보여 주고, 한 에이전트가 다른 에이전트에게 일을 나눠 주는 오케스트레이션 런도 보여 줍니다. 한 장치에서 도는 판이라 st도 계정도 릴레이도 필요 없습니다. 오픈소스(Apache-2.0)이며 저장소는 sophonz-labs/stui입니다. 지금 릴리스는 v0.2.3입니다. tmui, st ui와 무엇이 다른지는 tmui 페이지의 표에 있습니다.

모든 것이 이 장치에 머뭅니다. stui는 127.0.0.1에서 작은 서버를 띄워 tmux와 에이전트의 훅을 지켜보고, 상태는 ~/.stui에 둡니다. 네트워크 호출은 두 가지입니다. gh가 GitHub에 CI 런을 묻고, 사용량 폴러가 Anthropic과 OpenAI에 요금제 한도를 묻습니다(stui usage poll off로 멈춥니다).

설치

curl -fsSL https://dl.sophonz.io/stui/install.sh | sh
stui hooks install    # Claude Code, Codex, opencode, Pi 등이 자기 턴을 알리게 합니다

스크립트는 SHA-256을 확인한 뒤 stui를 ~/.local/bin에 둡니다(STUI_INSTALL_DIR, STUI_VERSION=v0.2.3). Go가 있으면 go install github.com/sophonz-labs/stui@latest도 됩니다. 훅이 없어도 stui는 에이전트 화면을 읽지만, 일하는 중인지 묻는 중인지를 확실히 가르는 것은 훅입니다.

stui upgrade는 같은 방식으로 SHA-256을 확인하고 최신 릴리스로 바꾼 뒤, 백그라운드 서버를 새 판으로 다시 띄웁니다. Homebrew가 설치한 stui는 건드리지 않고 brew upgrade stui를 실행하라고 알려 줍니다.

tmux 3.0 이상(팝업으로 붙으려면 3.2)과 macOS나 Linux가 필요하고, CI에는 gh가 필요합니다.

사용하기

stui                  # UI. 백그라운드 서버가 없으면 띄웁니다
stui ui agents        # 이 화면으로 열기: sessions, agents, orch, ci, usage
stui status           # 서버와 모든 에이전트의 훅 상태
stui stop             # 서버 멈추기

1–5로 화면을 바꿉니다(sessions, agents, orch, ci, usage). enter는 한 단계 아래로, esc는 위로 돌아옵니다. ?는 모든 키를 보여 줍니다. working은 청록, asking(에이전트가 나를 기다림)은 주황입니다. pane의 프로그램이 자기 상태를 직접 알려 준 것이면(OSC 7501) working (reported)처럼 표시가 붙습니다(v0.2.3). Claude Code는 tmux 안에서 이렇게 알리지 않아 훅과 화면으로 읽습니다.

stui의 agents 화면: 위쪽 머리글에 OS, tmux, pane 수, CI, Claude 요금제 한도, 에이전트 수와 키. 아래에 세션 work의 에이전트 다섯과 각각의 윈도우, 에이전트, 상태(claude 하나는 asking, 셋은 working, 하나는 idle), 턴 시간, CI 상태, 오케스트레이션 역할, 제목
에이전트와 그 CI, 요금제 한도
키어디서하는 일
a세션, 윈도우, pane, agents, orch붙기. tmui처럼 prefix d로 돌아옵니다
c, opane, agents, CI그 pane의 CI 런, 런을 브라우저에서 열기
n세션, 윈도우새 세션, 새 윈도우(에이전트와 함께 띄울 수도 있습니다)
ctrl-d세션, 윈도우, orch없애거나 멈추기(먼저 묻습니다)
r dorch워커의 답, 그 diff 읽기
ctrl-e어디서나머리글 켜고 끄기
:어디서나화면, :ext, :config, 또는 stui 명령(:worker list, :orch history)

복사는 tmui와 같습니다. y와 Y는 줄을 복사하고, v와 y는 pane 출력을 골라 복사하며, z는 터미널의 마우스 선택을 쓰도록 출력만 보여 줍니다.

에이전트의 pane을 보여 주는 stui: Claude Code가 파일 두 개를 고친 뒤 npm run build 실행 허락을 기다립니다
허락을 기다리는 에이전트의 pane

오케스트레이션

코디네이터인 에이전트 하나가 다른 에이전트를 각자의 tmux 윈도우에 워커로 띄우고, 일을 맡기고, 기다렸다가 보고를 읽습니다. 이 명령은 에이전트가 씁니다. stui plugin install이 Claude Code와 Codex에 그 쓰는 법을 가르칩니다.

stui orch start --objective "make the parser tests pass"
stui worker start --agent claude --name tests --task task.md
stui worker wait --check-in 3m
stui worker read tests
stui의 오케스트레이션 화면: 코디네이터 하나와 워커 api, web, docs, tests가 있는 런, 각각의 pane, 에이전트, 상태, 턴 시간, 윈도우, 요약
오케스트레이션 런: 코디네이터와 워커들

같은 장치에 st가 있을 때

같은 장치에서 st가 돌면 stui는 st의 런과 에이전트도 읽기 전용으로 보여 줍니다. 새로 읽을 때마다 st의 로컬 서버(127.0.0.1, GET만)에 묻고, st의 런에는 (st)를 붙입니다.

  • 읽는 것은 st의 줄에서도 됩니다. 출력, 붙기, CI, 복사, r과 d입니다.
  • 바꾸는 것은 안 됩니다. st의 워커에서 ctrl-d를 누르면 this is st's run: use st ui라고 알려 줍니다. 런은 그 코디네이터를 띄운 도구의 것입니다.
  • 설정에서 st.read: false로 끕니다.

다른 장치는 st ui의 몫입니다. stui는 이 장치만 봅니다.

플러그인과 설정

stui는 tmui와 같은 플러그인(tui-plugins)을 읽습니다. stui ext install|list|remove <이름>으로 다룹니다. (stui plugin은 다른 것으로, 코딩 에이전트에게 주는 오케스트레이션 스킬입니다.)

설정은 $XDG_CONFIG_HOME/stui/config.yaml(기본은 ~/.config/stui/config.yaml)에 두고, stui config와 stui config edit로 봅니다. 키는 tmui와 같고(ui.logo, ui.headless, ui.color, refreshRate, startView, plugins.enabled, plugins.disabled), 여기에 st.read가 더해집니다. startView는 sessions, agents, orch, ci, usage 중 하나입니다.