PromptPilot: planista kolejek dla narzędzi AI CLI
PromptPilot umożliwia dodawanie zadań do kolejki dla narzędzi AI CLI, takich jak Claude Code, Codex czy Qwen. Narzędzie uruchamia prompty według harmonogramu poprzez CLI, interfejs webowy lub bota Telegram. Obsługuje priorytety, ponawianie przy limitach szybkości (rate limit) oraz przywracanie sesji. Worker przetwarza jedno zadanie naraz, unikając wyścigu o limity API.
Rzeczywiste scenariusze: rozgrzewanie limitów przed pracą, wykorzystanie pozostałych kwot przed końcem miesiąca, dodawanie zadań zdalnie przez bota. Zadania przechowywane są w SQLite z trybem WAL dla współbieżności.
Praktyczne przypadki użycia
Narzędzie rozwiązuje codzienne problemy programistów:
- Rozgrzewanie limitów: Zaplanuj lekki prompt na 5:00, aby sesja rozpoczęła się wcześniej. Do 9:00 limit częściowo wykorzystany, o 10:00 — reset.
- Nocny rate limit: Późnym wieczorem dodaj zadanie na czas resetu — rano wynik gotowy.
- Zdalne uruchomienie: Z taksówki przez bota wyślij audyt kodu — po powrocie limit odnowiony, zadanie wykonane.
- Mobilne poprawki: Dodaj walidację w payments.py z testami prosto z Telegrama.
- Umiejętności Claude: Wywołaj umiejętność, np. demo-invite.md, przez /skills w bocie lub przycisk w UI.
Przykład uruchomienia CLI:
pp add "Napisz testy dla api.py" --dir C:\Projects\PromptPilot -p 1 -a "2026-04-01T05:00"
Architektura systemu
Interfejsy (CLI, Web UI, TG Bot) zapisują do SQLite (~/.promptpilot). Worker sprawdza kolejkę co 5s, uruchamia subprocess z AI CLI.
Interfejsy → SQLite (WAL) → Worker (sprawdzanie 5s) → subprocess (claude.exe | codex | qwen)
Server: FastAPI + JS UI
Bot: API Telegram
Procesy niezależne:
- Worker: jednowątkowy, jedno zadanie naraz. Przy rate limit — exponential backoff.
- Server: REST na :8420, vanilla JS UI.
- Bot: dialogi krok po kroku, autoryzacja przez numer.
Odzyskiwanie po awarii: przy starcie zadania running cofane do pending.
Instalacja i konfiguracja
Sklonuj repozytorium, zainstaluj editable:
git clone https://github.com/your/promptpilot
cd PromptPilot
pip install -e .
Utwórz .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
Uruchamianie serwisów
Tryb CLI:
pp worker # przetwarzanie kolejki
pp server # http://127.0.0.1:8420
pp bot # Telegram
pp start # worker + server
Tray (.exe dla Windows): Podwójne kliknięcie — ikona w zasobniku (🟢/🟠/⚫). Kompilacja: \.build.ps1 → dist/pp.exe (40MB, samodzielny).
PowerShell: \.start.ps1 (wszystkie serwisy), \.stop.ps1.
Interfejsy zarządzania
CLI
pp add "Zrefaktoruj db.py" --dir /path -p 5
pp add --file prompts.txt
pp list --status pending
Web UI (:8420)
- Prompt + Ctrl+Enter
- Umiejętności dla Claude
- Presety harmonogramu
- Filtry według statusu
- Szczegóły: tokeny, koszt, model
Automatyczne odświeżanie 5s, jeden plik HTML.
Bot Telegram
Autoryzacja: udostępnienie kontaktu (PP_TG_ALLOWED_PHONES). Krok po kroku: prompt → dostawca → priorytet → dir → harmonogram.
Komendy: /skills, lista zadań z paginacją, szczegóły z przyciskami [Odpowiedz|Usuń].
Obsługa rate limits
Wykrywanie przez stderr: "rate limit", "429", "quota exceeded".
Exponential backoff:
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)
Opóźnienia: 60s → 120s → ... → 3600s + ±10% jitter. Po max_retries — failed.
Kontynuacja dialogów
Claude może zapytać: "auth.py czy auth_v2.py?". Zadanie zapisuje session_id. W bocie/UI: 💬 Odpowiedz → nowe zadanie z --resume <session_id>.
Co jest ważne
- Jednowątkowy worker gwarantuje brak wyścigu o limity API.
- SQLite WAL + odzyskiwanie po awarii dla niezawodności.
- Trzy interfejsy: CLI dla szybkości, UI/bot dla wygody.
- Exponential backoff z jitter dla rate limits.
- Obsługa umiejętności i wznowień sesji Claude Code.
— Editorial Team
Brak komentarzy.