103 lines
2.7 KiB
Markdown
103 lines
2.7 KiB
Markdown
# 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 <repo-url>
|
|
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`)
|
|
- `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`가 설정된 경우 해당 채널로 알림을 보냅니다.
|