# LazyEnter 소파에서 엔터나 치자. 로컬 PC의 Claude/Codex CLI 세션을 Slack Socket Mode로 중계해 모바일에서도 원격으로 입력/승인을 처리하는 브릿지입니다. ## 동작 방식 1. 로컬에서 Claude 또는 Codex를 tmux 세션으로 미리 실행 - Claude: `tmux new -s claude claude` - Codex: `tmux new -s codex codex` 2. Slack에서 `/start-claude` 또는 `/start-codex` 실행 3. 브릿지가 기존 tmux 세션에 attach 4. Slack 채널 메시지가 CLI 입력으로 전달됨 5. CLI 출력이 Slack으로 다시 전송됨 6. `/stop-claude`로 브릿지 연결 해제 (tmux 세션은 유지) ## 빠른 시작 ```bash git clone cd LazyEnter python -m venv .venv source .venv/bin/activate pip install -e . ``` `.env` 파일을 생성하고 값을 채우세요: ```bash cp .env.example .env ``` 필수 환경 변수: - `SLACK_BOT_TOKEN` - `SLACK_APP_TOKEN` - `SLACK_ALLOWED_USER_ID` - `SLACK_ALLOWED_CHANNEL_ID` 선택 환경 변수: - `TMUX_SESSION_NAME` (기본: `claude`, `/start-claude` 대상) - `CODEX_TMUX_SESSION_NAME` (기본: `codex`, `/start-codex` 대상) - `PTY_READ_TIMEOUT` (기본: `5`) - `OUTPUT_BUFFER_INTERVAL` (기본: `2.0`) - `OUTPUT_SETTLE_SECONDS` (기본: `4.0`, 출력이 잠잠해진 뒤 전송 대기 시간) - `OUTPUT_FLUSH_INTERVAL_SECONDS` (기본: `15.0`, 출력이 계속 이어질 때 강제 전송 주기) - `MAX_MESSAGE_LENGTH` (기본: `3000`) - `RECONNECT_DELAY_SECONDS` (기본: `5.0`, Socket Mode 재연결 대기 시간) - `OUTPUT_IDLE_REPORT_SECONDS` (기본: `120`, 출력 정지 보고 임계값) - `INPUT_IDLE_REPORT_SECONDS` (기본: `300`, 입력 정지 보고 임계값) `SLACK_ALLOWED_USER_ID`, `SLACK_ALLOWED_CHANNEL_ID`가 비어 있으면 실행이 중단됩니다. ## Slack 앱 설정 - Socket Mode 활성화 - Bot Token Scopes에 `chat:write`, `commands` 추가 - Slash Commands 생성: - `/start-claude` - `/stop-claude` - `/start-codex` - `/stop-codex` - 앱을 워크스페이스에 설치 후 토큰을 `.env`에 반영 ## 실행 먼저 로컬에서 원하는 tmux 세션을 실행: ```bash tmux new -s claude claude # 또는 tmux new -s codex codex ``` 그 다음 브릿지 실행: ```bash lazy-enter # 또는 python -m lazy_enter ``` 실행 후 Slack의 허용된 채널에서: - `/start-claude`, `/start-codex`: 기존 세션에 연결 - 일반 메시지 전송: 현재 연결된 CLI(Claude/Codex)로 입력 전달 - `/stop-claude`, `/stop-codex`: 브릿지 연결 해제 (세션 유지) ## 테스트 및 품질 점검 ```bash pytest ruff check src/ tests/ ruff format src/ tests/ mypy src/ ``` ## hooks 알림 사용 (선택) `hooks.py`는 JSON 이벤트를 받아 Slack 알림 문구로 변환합니다. ```bash echo '{"type":"prompt","tool":"Bash"}' | python -m lazy_enter.hooks ``` `SLACK_ALLOWED_CHANNEL_ID`가 설정된 경우 해당 채널로 알림을 보냅니다.