
Для чего ?
Архитектура
Три независимых процесса через одну SQLite-базу в WAL-режиме:
-
Worker — опрашивает очередь, запускает задачу через
subprocess, сохраняет результат. Намеренно однопоточный: одна задача в момент времени, никаких гонок за API-лимит. -
Server — FastAPI + Web UI на чистом JS. Принимает задачи через REST.
-
Bot — Telegram-бот, полный менеджмент задач через чат.
Все три можно запускать независимо или вместе через tray.
Установка
git clone https://github.com/your/promptpilot
cd PromptPilot
pip install -e .
Или просто скачай exe из публикации и запусти, если ты на win
Требования: Python 3.10+, хотя бы один AI CLI в PATH.
Создай .env в папке проекта (или рядом с pp.exe):
# Telegram бот (опционально)
PP_TG_TOKEN=7123456789:AAF...
PP_TG_ALLOWED_PHONES=+79001234567 Для авторизации бота
PP_TASK_PASSWORD=12345 Вдруг другие вайбкодеры украдут телефон уже авторизованный
# Claude
PP_CLAUDE_EXE=C:\Users\username\.local\bin\claude.exe
PP_DEFAULT_CLI=claude
# Папка с проектами — для выбора директории кнопками в боте/веб
PP_PROJECTS_ROOT=C:\Projects
# Таймаут и retry
PP_TASK_TIMEOUT=300
PP_BASE_DELAY=60
PP_MAX_DELAY=3600
Запуск: CLI, tray и .exe
Вариант 1 — CLI (для разработки и серверов)
# Три процесса в трёх терминалах
pp worker # выполняет задачи
pp server # веб-интерфейс http://127.0.0.1:8420
pp bot # Telegram-бот
# Или воркер + сервер одной командой
pp start
Вариант 2 — PowerShell-скрипт
.\start.ps1 # воркер + сервер; если PP_TG_TOKEN задан в .env — бот тоже запустится автоматически
.\start.ps1 -Bot # явно запустить бот, даже если PP_TG_TOKEN не в .env (нужен в переменных окружения)
.\stop.ps1 # остановить все запущенные сервисы
Вариант 3 — Tray (.exe, рекомендуется на Windows)

Двойной клик на pp.exe — иконка в трее. Воркер и сервер стартуют автоматически. Иконка меняет цвет: 🟢 всё работает / 🟠 частично / черный - остановлено.
Чтобы собрать .exe самому:
.\build.ps1
# результат: dist\pp.exe (~40 МБ, Python внутри, зависимостей не нужно)
PyInstaller упаковывает Python, все зависимости и статику в один файл. На целевой машине ничего устанавливать не нужно — только .env рядом с pp.exe.
Нюанс с .env:
load_dotenv()читает файл один раз при запуске. Порядок поиска: папка рядом сpp.exe→ рабочая директория →~/.promptpilot/.env. Переменные окружения системы имеют приоритет над.env.
Интерфейсы: CLI, Web UI, Telegram-бот
CLI
Самый быстрый способ добавить задачу:
# Простая задача
pp add "Отрефактори модуль db.py, избавься от дублирования"
# С директорией и приоритетом
pp add "Напиши тесты для api.py" \
--dir C:\Projects\PromptPilot \
-p 1
# Запланировать на конкретное время
pp add "Сгенерируй отчёт за месяц" \
-a "2026-04-01T09:00"
# Использовать другой провайдер
pp add "Explain this codebase" --provider codex
# Пакетная загрузка из файла (каждая строка — задача)
pp add --file prompts.txt
# Список задач
pp list
pp list --status pending
pp list --status completed --limit 5
Web UI

Минималистичный интерфейс на http://127.0.0.1:8420:
-
Выбор провайдера → для Claude совместимых автоматически появляется кнопка Skills
-
Промпт (Ctrl+Enter для отправки)
-
Чекбокс
--dangerously-skip-permissions -
Пресеты расписания (+1ч / +3ч / +8ч / +24ч) или ручной ввод ISO-даты
-
Фильтры по статусу с бейджами-счётчиками
-
Раскрытие задачи — полный результат, метаданные (модель, стоимость, токены)
-
Автообновление каждые 5 секунд

Весь UI — один HTML-файл, ванильный JS, никаких npm-зависимостей.
Telegram-бот

Авторизация — без паролей в чате. Пользователь жмёт «Поделиться контактом», Telegram передаёт номер, бот сверяет с PP_TG_ALLOWED_PHONES. Авторизованные пользователи сохраняются в JSON — при перезапуске авторизация не слетает.
Опционально: PP_TASK_PASSWORD — пользователь вводит пароль один раз за сессию перед созданием задачи.
Список задач — пагинация по 5, кнопки перехода, клик на задачу — детали.
Rate limits и exponential backoff
Воркер определяет rate limit по stderr или по событиям stream-json:
RATE_LIMIT_PATTERNS = [
"rate limit", "rate_limit", "ratelimit",
"overloaded", "too many requests", "429",
"quota exceeded", "capacity", "try again later",
]
При срабатывании задача переходит в rate_limited и уходит в 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)
Задержки: 60с → 120с → 240с → 480с → … → 3600с. Джиттер ±10% — чтобы не молотить синхронно, если несколько задач rate-limited одновременно. После max_retries попыток — failed.
Воркер при запуске вызывает db.recover_running() — все задачи со статусом running (зависшие при прошлом краше) откатываются в pending. Crash recovery из коробки.
Продолжение диалога — reply в боте
Claude Code может задать вопрос в середине задачи:
«Нашёл два файла:
auth.pyиauth_v2.py. Какой актуальный?»
Задача завершается — Claude ждёт ответа. Но терминала нет, сессия закрыта.
Теперь в деталях завершённой задачи есть кнопка 💬 Ответить:

Нажимаешь → вводишь «auth.py, auth_v2.py — устаревший черновик» → новая задача создаётся с флагом --resume <session_id>. Claude продолжает разговор в том же контексте, помнит всё, что было.

Скилы Claude Code
Скилы — это файлы .md в ~/.claude/commands/ или ~/.claude/skills/, в плагинах (~/.claude/plugins//commands/), а также в локальных папках проекта (.claude/commands/ или .claude/skills/). Claude Code вызывает их через /skill-name [args].
PromptPilot умеет читать эти файлы, показывать список и подставлять /skill-name в промпт.
Web UI: при выборе Claude-провайдера появляется кнопка Skills. Клик → список с описаниями. Выбор скила подставляет /skill-name в поле промпта — дополняешь аргументами и отправляешь.
Telegram-бот: команда /skills или кнопка в меню:
/skills
Скилы (claude)
[commit] Create a git commit
[review-pr] Review a pull request
[demo-invite] Формирует приглашение на демо для клиента
[feature-dev] Guided feature development
[demo-invite]
Введите аргументы: ООО Ромашка, среда 14:00
Задача #47 добавлена!

Скилы из рабочей директории проекта (workdir/.claude/commands/ или workdir/.claude/skills/) добавляются к глобальным — то есть у каждого проекта могут быть свои скилы, и они будут видны в боте при выборе этой директории.
При нажатии на кнопку "Скилы проекта" отображаются только те проекты, у которых есть скилы

Работает только с провайдерами claude и claude-z — для Codex и Qwen скилы не отображаются.
Провайдеры и кастомные команды
Встроенные:
|
Имя |
Описание |
Скилы |
|---|---|---|
|
|
Claude Code (Anthropic) |
+ |
|
|
Claude Code через GLM/z.ai |
+ |
|
|
OpenAI Codex |
— |
|
|
Qwen Code |
— |
Кастомный провайдер:
pp provider add myai \
--cmd "myai run {prompt}" \
--desc "My AI Tool" \
--env "MYAI_API_KEY=sk-..."
Провайдер — шаблон команды с {prompt}. Воркер подставляет промпт, добавляет флаги и запускает через subprocess.run с нужными переменными окружения.
Конфигурация
Что дальше
-
Уведомления в Telegram — сообщение, когда задача завершилась (или упала)
-
История диалогов — показывать цепочку задача → ответ → ответ в одном view
-
Параллельные воркеры — отдельный воркер для каждого провайдера
Итог
Если коротко: отправляешь промпт откуда угодно — с компа, телефона, по расписанию — воркер сам разберётся с rate limits, дождётся своей очереди, выполнит и отдаст результат. Если модель задала вопрос — отвечаешь прямо из Telegram, не открывая терминал.
Код на GitHub: https://github.com/ivanarama/PromptPilot
Ссылка ютуб, на видеоверсию (можно скачать, если тут не открывается)
Буду рад вопросам и фидбеку — особенно если используете что-то похожее или есть идеи, как улучшить.
Предыдущие статьи про вайбкодинг:
Вайб-кодинг в 1С: как рефакторить код бесплатно с помощью VS Code и Roo Code
Вайб-кодинг в 1С: как заставить ИИ БЕСПЛАТНО писать новый код с помощью MCP-серверов
Вайб-кодинг в 1С: Подключаем локальные MCP-сервера к любой нейросети через MCP SuperAssistant
Вайб-кодинг в 1С: Создаём MCP для 1С 7.7 за вечер и пишем обмен с Бухгалтерией 3
Вайб-кодинг в 1С: Codex Desktop + GPT-5.4 пишет обработку САМ (Скайнет?)
Вайб-кодинг в 1С: Настраиваем эффективный workflow
Вайб-кодинг в 1С: Обходим лимиты поиска в Z AI и Claude: поднимаем свой поисковый движок через MCP
Вайб-кодинг в 1С: Бесплатное выполнение рутинных скиллов Claude Code
Вступайте в нашу телеграмм-группу Инфостарт

















