OpenCode 백그라운드 에이전트 자동 감시 & 복구 시스템. 에이전트가 멈추면(stall) 자동으로 abort → 동일 세션 resume하고, 완료된 작업은 건드리지 않습니다.
- 자동 감시 — 실행 중인 OpenCode 세션을 폴링하며 idle 시간 추적
- 자동 복구 — FAST MODE 기준 5s slow / 10s suspect / 15s stall →
Continue your work.자동 전송 - 완료 감지 — 작업이 끝난 세션은 stall로 오인하지 않고 복구 대상에서 제외
- 서버 자가 치유 — OpenCode 서버가 죽으면 자동 재시작 후 세션 복원
- WSL2 + tmux 통합 — 백그라운드 tmux 세션에서 실행, Windows Terminal 탭 자동 오픈
- 모델 fallback — LLM 사용 제한(rate limit) 발생 시 무료 모델로 자동 전환
- Subagent 모델 상속 — 부모의
/models선택을 네이티브 및 OmO category/direct subagent가 상속 - 다크 테마 — tmux 상태 표시줄 기본 다크 테마 적용
- Windows 11 + WSL2 (Ubuntu)
- Python 3.11+
- Node.js + npm (OpenCode CLI 설치에 필요)
- tmux (
bash install.sh가 자동 설치) - OpenCode CLI (
npm install -g opencode-ai— install.sh가 자동 설치) - Windows Terminal (자동 탭 열기용, 선택)
WSL2 터미널에서:
git clone https://github.com/cozozoc/opencode-control-tower.git
cd opencode-control-tower
bash install.sh
source ~/.bashrcinstall.sh가 하는 일:
- Python 3.11+ / tmux / opencode 확인 (없으면 설치)
pip install -e .~/.tmux.conf에 다크 테마 추가- OpenCode config에 fallback 플러그인 + 무료 모델 등록 (rate limit 대비)
~/.config/opencode/plugins/inherit-parent-model.js에 모델 상속 플러그인 설치~/.bashrc에ctw명령어 등록
설치 또는 갱신 후에는 실행 중인 OpenCode를 완전히 종료하고 다시 시작해야 플러그인이 로드됩니다.
Control Tower 저장소가 아니라 실제 작업할 회사 프로젝트 폴더에서 실행합니다:
cd ~/company-project
ctw실행되는 것:
- OpenCode 서버 자동 시작 (
opencode serve, 로컬 포트 자동 할당) - tmux 세션
octower-XXXXXX백그라운드 생성 - 건강 확인 → Windows Terminal 새 탭에서 tmux attach
- 세션 폴링: 5초 slow / 10초 suspect / 15초 stall 감지 시
Continue your work.자동 전송 - 열심히 일하는 중이면 타이머 리셋
- 작업 완료된 세션은 복구 안 함
- 서버 다운 → 자동 재시작 + 세션 복원
Ctrl+C안전 종료
다른 터미널에서 수동 attach:
tmux attach -t octower-XXXXXX # 세션명은 ctw 로그에서 확인OpenCode에서 /models로 모델을 선택하면 이후 생성되는 native/OmO subagent가 같은
provider, model, variant를 상속합니다. 이미 실행 중인 subagent에는 소급 적용되지 않습니다.
~/.tmux.conf를 편집하고 tmux source-file ~/.tmux.conf로 즉시 적용:
set -g status-bg colour235 # 하단 바 배경 (초록 → 회색)
set -g status-fg white # 글자색
set -g status-left "#[bg=colour24] #S " # 좌측 세션명 배경실행 중인 기존 tmux 세션은
tmux source-file ~/.tmux.conf를 실행해야 반영됩니다 (tmux는 세션 생성 시점의 설정을 사용합니다).
~/.config/opencode/opencode-fallback.jsonc:
{
"fallback_models": ["opencode/deepseek-v4-flash-free"],
"cooldown_seconds": 300,
"notify_on_fallback": true
}기본 모델이 rate limit(429/quota)에 걸리면 자동으로 opencode/deepseek-v4-flash-free로 전환되고,
5분 쿨다운 후 원래 모델로 복귀합니다.
전역 플러그인은 OpenCode 설정을 로드할 때 agent.*.model override만 제거합니다. 최상위
model, small_model과 agent의 permission, prompt, tools 등 다른 설정은 변경하지 않습니다.
또한 child session의 메시지를 보내기 직전에 부모의 최신 user 메시지에 기록된 모델과 variant를
적용합니다. 따라서 부모 세션에서 /models로 모델을 바꾸면 OpenCode 네이티브 task와 OmO의
category/direct subagent 모두 동일한 provider, model, variant를 사용합니다.
플러그인을 설치하거나 새 버전으로 갱신한 뒤에는 OpenCode를 완전히 종료하고 다시 시작하세요.
rm -rf ~/opencode-control-tower
rm -f ~/.config/opencode/plugins/inherit-parent-model.js
sed -i '/function ctw/d' ~/.bashrc
pip uninstall opencode-control-tower