여러 프로젝트의 claude remote-control 서버를 한 화면에서 켜고·끄고·상태 보고·로그 보는 Go TUI. tmux 없이 바이너리 하나로 돈다.
등록·생명주기·상태판 TUI·scan·로그·설치까지 동작한다. 기능 명세는
docs/SPEC.md, 설계 결정과 근거는docs/ARCHITECTURE.md가 SSOT.
폰·브라우저(claude.ai/code)에서 여러 워크스페이스를 오가며 claude remote-control로 작업한다. 서버를 프로젝트마다 하나씩 띄워야 하는데, 그 관리가 번거로웠다.
- 실행 스크립트가 갈라져 있었다 — 단일 포그라운드용·전체 실행용이 따로, 게다가 특정 저장소에만 묶여 다른 프로젝트는 관리 대상 밖.
- 폰으로 파일이 안 갔다 — 서버가 spawn한 자식 세션에서
SendUserFile도구가 안 떴다. 원인은CLAUDE_CODE_REMOTE_ENVIRONMENT_TYPE=1누락(자세한 건 docs/ARCHITECTURE.md). - 뭐가 떠 있는지 몰랐다 — 어느 서버가 살아있는지 한눈에 보고 켜고/끄는 수단이 없었다.
필요한 건 단순했다: 등록한 프로젝트가 지금 떠 있는지 한눈에 보고, 키 하나로 토글하고, 로그를 보는 것.
$ crc
╭─ crc ─ workspaces ──────────────────────╮
│ ● proj-a running ↑ 12m │
│ ● proj-b running ↑ 12m │
│ ○ proj-c stopped │
│ ○ proj-d stopped │
╰─ ↵ toggle l log f fg a all q quit ──╯
등록한 워크스페이스 목록 + 실행 상태(running/stopped/dead)를 한 화면에. 키 하나로 서버를 켜고 끄고, 로그를 보고, 미심쩍을 땐 포그라운드로 띄운다.
- 한다 — 프로젝트마다 하나씩 띄우는 remote-control 서버(보통 3~4개)의 등록·토글·상태·로그.
- 안 한다(비목표) — 로컬 TTY attach(조작은 폰·웹에서), 세션 내부 조작, tmux 대체 일반화, 폰/데스크탑 환경 라벨 관리(claude가 basename+브랜치로 고정 — crc 밖 영역).
기능별 상세 명세는 docs/SPEC.md가 SSOT.
remote-control 서버는 조작을 폰·웹에서 받는 백그라운드 데몬이다. 로컬 터미널로 attach할 일이 없다. 그래서 tmux의 핵심 가치인 양방향 attach가 이 용도에선 무의미하다. 남는 건 백그라운드 유지·상태·로그뿐이고 셋 다 Go 표준 라이브러리로 된다 → tmux 같은 외부 런타임 없이 바이너리 하나 복사로 배포. 이건 tmux를 뺀 것이지 의존성을 금하는 게 아니다 — 값어치 있는 Go 패키지는 쓴다(TUI는 bubbletea/lipgloss). (이 판단의 전체 과정은 docs/ARCHITECTURE.md.)
Go 1.26+ 필요. ~/.local/bin에 바이너리 하나를 설치한다:
make install # → ~/.local/bin/crc (PREFIX=... 로 위치 변경 가능)
~/.local/bin이 PATH에 있으면 바로 crc로 실행된다. 없으면 셸 설정에 추가:
export PATH="$HOME/.local/bin:$PATH"
crc 상태판 TUI (아래 키맵)
crc ls 등록 목록 + 상태·업타임
crc add <path> [name] 워크스페이스 등록 (name 기본 basename, 충돌 시 자동 유니크)
crc rm <name> 등록 삭제 (실행 중이면 정지 후)
crc up [name...] 서버 시작 (없으면 전체)
crc down [name...] 서버 정지 (없으면 전체)
crc status 상태 판정
crc log <name> 로그 tail -f
crc fg <name> 포그라운드 실행
crc scan [root] 등록 후보 나열 (기본 현재 폴더)
TUI 키맵 — ↑↓/jk 이동 · ↵ 토글 · l 로그 · a 추가 · d 삭제 · f fg · A 전체시작 · x 전체정지 · r 새로고침 · q 종료
MIT.
