PromptPilot:AI CLI 工具的队列调度器
PromptPilot 允许您为 Claude Code、Codex 和 Qwen 等 AI CLI 工具排队任务。该工具可通过 CLI、Web 界面或 Telegram 机器人按计划运行提示。它支持优先级、速率限制重试和会话恢复。工作进程一次处理一个任务,避免 API 限制竞争。
实际应用场景:工作前预热限制、月底前使用剩余配额、通过机器人远程排队任务。任务存储在启用 WAL 模式的 SQLite 中,以支持并发。
实际用例
该工具解决开发者的日常问题:
- 预热限制:在凌晨 5:00 安排一个轻量提示,以便会话提前开始。到上午 9:00,限制已部分使用;上午 10:00 — 限制重置。
- 夜间速率限制:深夜,为重置时间排队任务 — 结果在早晨就绪。
- 远程启动:通过机器人从出租车发送代码审核 — 返回时,限制已刷新,任务完成。
- 移动端调整:直接从 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、Web 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
Web 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
暂无评论。