Powrót do strony głównej

PromptPilot dla AI CLI: harmonogram zadań

PromptPilot — planer kolejek dla AI CLI w rodzaju Claude Code. Obsługuje CLI, Web UI, bot Telegram z obsługą rate limits i wznawianiem sesji. Architektura na SQLite + jednowątkowy worker zapewnia niezawodność.

Automatyzacja AI CLI z PromptPilot: boty i kolejki
Advertisement 728x90

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:

Google AdInline article slot
  • 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:

Google AdInline article slot
  • 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:

Google AdInline article slot
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

Advertisement 728x90

Czytaj dalej