PromptPilot: AI CLI 도구를 위한 큐 스케줄러
PromptPilot는 Claude Code, Codex, Qwen과 같은 AI CLI 도구에 대한 작업을 큐에 넣을 수 있게 해줍니다. 이 도구는 CLI, 웹 인터페이스 또는 텔레그램 봇을 통해 일정에 따라 프롬프트를 실행합니다. 우선순위, 속도 제한 시 재시도, 세션 복구를 지원합니다. 작업자는 한 번에 하나의 작업만 처리하여 API 제한 경쟁을 방지합니다.
실제 시나리오: 업무 전 제한을 미리 사용하기, 월말 전 남은 할당량 사용하기, 봇을 통해 원격으로 작업 큐에 넣기. 작업은 동시성을 위해 WAL 모드의 SQLite에 저장됩니다.
실용적인 사용 사례
이 도구는 개발자의 일상적인 문제를 해결합니다:
- 제한 미리 사용하기: 세션이 일찍 시작되도록 오전 5시에 가벼운 프롬프트를 예약합니다. 오전 9시까지 제한이 부분적으로 사용되고, 오전 10시에 재설정됩니다.
- 야간 속도 제한: 늦은 밤에 재설정 시간에 작업을 큐에 넣으면 아침에 결과가 준비됩니다.
- 원격 실행: 택시에서 봇을 통해 코드 감사를 보내면, 돌아왔을 때 제한이 재설정되고 작업이 완료됩니다.
- 모바일 수정: Telegram에서 직접 테스트와 함께 payments.py에 유효성 검사를 추가합니다.
- Claude 스킬: 봇의 /skills 또는 UI의 버튼을 통해 demo-invite.md와 같은 스킬을 호출합니다.
CLI 실행 예시:
pp add "api.py에 대한 테스트 작성" --dir C:\Projects\PromptPilot -p 1 -a "2026-04-01T05:00"
시스템 아키텍처
인터페이스(CLI, 웹 UI, TG 봇)는 SQLite(~/.promptpilot)에 기록합니다. 작업자는 5초마다 큐를 확인하고 AI CLI로 서브프로세스를 실행합니다.
인터페이스 → SQLite (WAL) → 작업자 (5초마다 확인) → 서브프로세스 (claude.exe | codex | qwen)
서버: FastAPI + JS UI
봇: Telegram API
프로세스는 독립적입니다:
- 작업자: 단일 스레드, 한 번에 하나의 작업. 속도 제한 시 지수 백오프.
- 서버: :8420에서 REST, 바닐라 JS UI.
- 봇: 단계별 대화, 전화번호로 인증.
충돌 복구: 시작 시 실행 중인 작업은 보류 상태로 롤백됩니다.
설치 및 구성
저장소를 복제하고 편집 가능하게 설치합니다:
git clone https://github.com/your/promptpilot
cd PromptPilot
pip install -e .
.env 파일 생성:
PP_CLAUDE_EXE=C:\Users\username\.local\bin\claude.exe
PP_DEFAULT_CLI=claude
PP_PROJECTS_ROOT=C:\Projects
PP_TASK_TIMEOUT=300
PP_BASE_DELAY=60
PP_MAX_DELAY=3600
PP_TG_TOKEN=...
PP_TG_ALLOWED_PHONES=+79001234567
PP_TASK_PASSWORD=12345
서비스 실행
CLI 모드:
pp worker # 큐 처리
pp server # http://127.0.0.1:8420
pp bot # Telegram
pp start # 작업자 + 서버
트레이 (Windows용 .exe): 더블클릭 → 트레이 아이콘 (🟢/🟠/⚫). 빌드: \.build.ps1 → dist/pp.exe (40MB, 독립 실행형).
PowerShell: \.start.ps1 (모든 서비스), \.stop.ps1.
관리 인터페이스
CLI
pp add "db.py 리팩터링" --dir /path -p 5
pp add --file prompts.txt
pp list --status pending
웹 UI (:8420)
- 프롬프트 + Ctrl+Enter
- Claude용 스킬
- 일정 사전 설정
- 상태 필터
- 세부 정보: 토큰, 비용, 모델
5초마다 자동 새로고침, 단일 HTML 파일.
Telegram 봇
인증: 연락처 공유 (PP_TG_ALLOWED_PHONES). 단계별: 프롬프트 → 제공자 → 우선순위 → 디렉토리 → 일정.
명령어: /skills, 페이지네이션된 작업 목록, 버튼이 있는 세부 정보 [답장|삭제].
속도 제한 처리
stderr를 통해 감지: "rate limit", "429", "quota exceeded".
지수 백오프:
def compute_next_run(retry_count: int) -> datetime:
delay = min(BASE_DELAY * (2 ** retry_count), MAX_DELAY)
jitter = delay * 0.1 * (random.random() * 2 - 1)
return datetime.now(timezone.utc) + timedelta(seconds=delay + jitter)
지연: 60초 → 120초 → ... → 3600초 + ±10% 지터. 최대 재시도 후 실패.
대화 계속하기
Claude가 "auth.py 또는 auth_v2.py?"라고 물을 수 있습니다. 작업은 session_id를 저장합니다. 봇/UI에서: 💬 답장 → --resume <session_id>가 있는 새 작업.
핵심 포인트
- 단일 스레드 작업자는 API 제한에 대한 경쟁 조건을 보장합니다.
- WAL SQLite + 충돌 복구로 신뢰성 확보.
- 세 가지 인터페이스: 속도를 위한 CLI, 편의를 위한 UI/봇.
- 지터가 있는 지수 백오프로 속도 제한 처리.
- 스킬 및 Claude Code 세션 재개 지원.
— Editorial Team
아직 댓글이 없습니다.