关于 jules-dispatch
jules-dispatch 是用于并行向 Google Jules 派发编码任务的命令行工具和 MCP 服务。它支持 YAML 批量任务、计划审批、会话监控和 PR 收集,适合开发者及编码 Agent。
主要功能
- 01最多并行创建 50 个会话
- 02使用 YAML 定义批量任务
- 03轮询会话并收集 PR 链接
- 04审批计划并发送后续消息
- 05监控、取消和查看会话
- 06可选的 LLM 任务规划
适用场景
- 01在多个模块并行补充测试
- 02将迁移拆分为并行任务
- 03在多个仓库应用同一变更
- 04为高风险工作设置计划审批
MCP 相关
将 Google Jules 会话创建、监控和交互作为工具提供给 Claude Code 或 Codex。配置 LLM 密钥后,还会注册可选的规划工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @yuuqq/jules-dispatchJULES_API_KEY密钥Google Jules API keyJULES_DEFAULT_SOURCEDefault Jules source, e.g. sources/github/owner/repo (optional if every task sets source)JULES_DEFAULT_BRANCHDefault git branch for sessions (defaults to main)本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
15收录的工具列表 · 更新于 2 周前
此工具无需参数。
详细介绍
jules-dispatch 🚀
并行批量向 Google Jules 分派任务 — 并在 Claude Code 或 OpenAI Codex CLI 中将其用作 MCP 工具。
🌐 语言:English · 简体中文
🌐 落地页和交互式文档
https://yuuqq.github.io/jules-dispatch/ — 完整的入门指南和 MCP 集成示例
这是什么?
jules-dispatch 是一个面向 Google Jules API 的 CLI 和 MCP 服务,可让你:
- 分派任意数量的 Jules 任务,最多支持 50 个会话同时创建,还可选择控制创建节奏
- 将任务定义为简单的 YAML 文件 — 包含标题、仓库、分支和提示词
- 轮询任务完成状态并收集生成的 PR 链接
- 批准计划、发送后续消息、取消失控的会话、实时查看活动
- 将其作为 MCP 服务接入 Claude Code 或 Codex — 由 AI 助手调用 Jules 作为工具
它将 Jules 从“一次处理一个任务”的工具,变成一支大规模并行的编码团队,既可由用户通过命令行控制,也可由其他 AI 通过 MCP 控制。
🏗 工作原理
flowchart LR
O["🧠 Orchestrator<br/>(Claude / Codex / you)"]
O -->|writes| T["📄 tasks/*.yaml"]
T --> D["⚡ jules-dispatch batch"]
D -->|parallel| J1["🤖 Jules #1"]
D -->|parallel| J2["🤖 Jules #2"]
D -->|parallel| J3["🤖 Jules #3"]
D -->|parallel| J4["🤖 Jules #N"]
J1 --> P1["🔀 PR #1"]
J2 --> P2["🔀 PR #2"]
J3 --> P3["🔀 PR #3"]
J4 --> P4["🔀 PR #N"]
classDef orch fill:#7c3aed,stroke:#5b21b6,color:#fff
classDef tool fill:#0891b2,stroke:#0e7490,color:#fff
classDef worker fill:#f59e0b,stroke:#b45309,color:#fff
classDef pr fill:#10b981,stroke:#047857,color:#fff
class O orch
class D tool
class J1,J2,J3,J4 worker
class P1,P2,P3,P4 pr
✨ 1.2 版新功能 — 可选的 AI 任务规划(自带 LLM)
完全可选。 所有核心命令都无需 LLM 密钥即可运行。如果你只需要直接分派任务,可跳过本节。
不必再手动编写任务 YAML。只需给 jules-dispatch 一句话,即可让 LLM 将其扩展为 N 个并行的 Jules 会话。
$ jules-dispatch auto "Migrate every Express route to Fastify and add request-validation tests"
Planning with gpt-4o-mini...
Planned 6 task(s):
1. Migrate auth routes (/api/auth/*) to Fastify
2. Migrate user routes (/api/users/*) to Fastify
3. Migrate billing routes (/api/billing/*) to Fastify
4. Replace Express middleware with Fastify hooks
5. Update server bootstrap to use Fastify instance
6. Add Vitest request-validation tests for all migrated routes
Dispatch all 6 task(s)? [y/N]
自带 LLM — 兼容任何 OpenAI 兼容的 /chat/completions 端点:
| 提供方 | LLM_BASE_URL | 示例 LLM_MODEL |
|---|---|---|
| OpenAI(默认) | (省略 — 默认使用 https://api.openai.com/v1) | gpt-4o-mini、gpt-4o、o3-mini |
| OpenRouter | https://openrouter.ai/api/v1 | openrouter/auto、anthropic/claude-opus-4.7 |
| Ollama(本地,免费) | http://localhost:11434/v1 | llama3.1、qwen2.5-coder:32b |
| Groq | https://api.groq.com/openai/v1 | llama-3.3-70b-versatile |
| Together / Fireworks / DeepInfra / vLLM / LiteLLM / Azure OpenAI | (各自的端点) | (各自的模型 ID) |
可通过环境变量(LLM_API_KEY、LLM_BASE_URL、LLM_MODEL)或每次调用的标志(--llm-key、--llm-base-url、--llm-model)进行配置。也会将 OPENAI_API_KEY 和 OPENROUTER_API_KEY 识别为备用项。
| 命令 / 工具 | 功能 |
|---|---|
jules-dispatch plan-tasks "<intent>" | 仅规划 — 打印任务或将其写入 YAML 文件 |
jules-dispatch auto "<intent>" | 一次完成规划和分派(需确认) |
MCP jules_plan_tasks | 同样的规划功能,开放给 Claude Code / Codex 使用 (仅在配置了 LLM 密钥时注册) |
MCP jules_auto | 一次完成规划和分派 (仅在配置了 LLM 密钥时注册) |
✨ 1.1 版本新特性
- 🧰 MCP 服务(
jules-dispatch mcp)——8 个始终注册的工具;配置 LLM 密钥后,还会提供 2 个可选规划工具,以及 7 个可选启用的旧版别名 - 🤖
--json模式——每条命令都支持机器可读输出,适用于 AI Agent 和 Shell 管道 - ✅ 计划审批工作流——
plan、approve命令,以及requirePlanApproval: true任务选项 - 📡 实时跟踪——
tail <id>会实时流式输出活动事件 - ❌ 取消会话——
cancel <id>可中止失控的运行 - 🔍 直接查找——
get <id>、status --ids不再受限于最近一页结果 - 🛡️ 真实故障检测——使用 session.state,快速失败,并返回不同的退出码
- ⚡ 智能重试——采用带抖动的指数退避策略,并遵循
Retry-After - 📥 标准输入——
dispatch -从管道读取 YAML/JSON - 🔑
--api-key标志——按次调用传递密钥,无需.env
✨ 主要功能
| 功能 | 详情 |
|---|---|
| ⚡ 有界、按节奏分发 | 持续补充 1–50 个工作线程的池,并可使用 --pace-ms 控制启动间隔 |
| 📋 YAML 任务文件 | 支持多文档 YAML(以 --- 分隔) |
| 🔄 状态轮询 | 自动检测 PR、计划审批和故障 |
| 💬 计划与消息控制 | 审批计划、发送后续消息、取消会话 |
| 🤖 MCP 服务 | 作为工具接入 Claude Code 或 Codex |
| 📦 结构化输出 | 使用 --json 模式,便于将输出通过管道传递给 Agent 和脚本 |
| 📝 分发日志 | 记录每次分发运行的 JSON 审计轨迹 |
💡 五种常见用例
当一项变更可以拆分为彼此独立、适合提交 PR 的任务时,jules-dispatch 效果最佳。如果任务会编辑相同文件,或依赖前序输出,请分批分发,而不要并发运行。
1. 为多个模块补充测试覆盖
假设 auth、billing、users 和 audit 模块都需要测试。为每个模块在专用目录中创建一个独立的任务文件,然后将整个目录作为一批任务分发:
jules-dispatch batch tasks/add-tests --parallel 4
每个 Jules 会话负责一个模块。启用 AUTO_CREATE_PR 后,结果将是一组范围明确的 PR,可分别审查和合并。任务失败时,可以单独重试,无需重启其余任务。
**好处:**彼此独立的测试工作可以同时进行,避免最终变成一个庞大且难以审查的变更。
2. 将大型迁移拆分为可执行任务
对于将 Express API 迁移到 Fastify 这类目标,可使用可选的 LLM 规划器来识别彼此独立的路由、中间件、启动代码和测试工作:
jules-dispatch auto "Migrate the Express API to Fastify and add request-validation tests" \
--max 8 --parallel 4
auto 会显示建议的任务,并在分发前请求确认。如果希望在将任何内容发送给 Jules 之前保存并编辑生成的 YAML,请改用 plan-tasks。
**好处:**规划器降低了拆解宽泛目标的成本,同时让任务边界清晰可见,便于审查。
3. 在多个代码仓库中推出相同的变更
若要在多个已连接 Jules 的代码仓库中添加共用的 CI 检查、安全基线或贡献政策,请为每项任务指定自己的 source:
title: "Add the security baseline to the API"
prompt: "Add the agreed security checks and open a focused PR."
source: "sources/github/acme/api"
branch: "main"
---
title: "Add the security baseline to the worker"
prompt: "Add the agreed security checks and open a focused PR."
source: "sources/github/acme/worker"
branch: "main"
将任务文件放在专用的批次目录中,并通过受控的并发数和启动间隔来分发:
jules-dispatch batch tasks/security-baseline --parallel 6 --pace-ms 250
**好处:**一条命令即可协调整个推广过程,同时为每个代码仓库保留独立的会话和 PR,并为该批次生成审计日志。
4. 为高风险变更保留人工审批关卡
身份验证、授权和数据库迁移通常需要在开始实施前进行审查。要求 Jules 在规划后暂停:
title: "Refactor authorization checks"
prompt: "Centralize API authorization checks without changing the public API."
requirePlanApproval: true
检查计划,必要时发送修正意见,批准后继续监控:
jules-dispatch plan abc123
jules-dispatch message abc123 "Do not change the public API"
jules-dispatch plan abc123 # inspect the revised plan
jules-dispatch approve abc123
jules-dispatch wait abc123
**好处:**既能掌控高影响决策,又不必放弃委派执行。
5. 让 Claude Code 或 Codex 协调整个运行过程
配置 MCP 服务后,描述你想要的结果,而不是亲自操作每个会话:
分析此代码库,将测试缺口拆分为相互独立的任务,并将它们分派给 Jules。请在批准计划或回复反馈请求前先询问我。所有会话完成后,汇总结果并列出每项任务对应的 PR URL。
编码助手可以调用 jules_dispatch、使用 jules_monitor 等待、检查需要采取操作的会话(使用 jules_interact),并返回最终的 PR 摘要。
好处: 你负责管理目标和重要决策,助手则处理分派、跟进和结果收集。
🤖 在 Claude Code 或 Codex 中使用(MCP)
MCP 服务会将 Jules 作为一组工具提供出来,供你的编码 AI 直接调用。
sequenceDiagram
autonumber
actor U as 👤 You
participant CC as 💬 Claude Code / Codex
participant MCP as ⚡ jules-dispatch (MCP)
participant J as ☁️ Google Jules
U->>CC: "Add tests to 5 modules"
CC->>MCP: jules_dispatch(tasks)
MCP->>J: POST /sessions × 5
J-->>MCP: 5 session IDs
MCP-->>CC: {dispatched: 5}
CC->>MCP: jules_monitor(ids, wait=true)
loop until terminal or action required
MCP->>J: GET /sessions/{id}
end
MCP-->>CC: {sessions, wait: {completed, actionRequired, ...}}
opt a session requires action
CC->>MCP: jules_interact(id)
MCP-->>CC: state + plan + activities
CC->>MCP: jules_approve_plan(id) or jules_send_message(id, text)
CC->>MCP: jules_monitor(ids, wait=true)
end
CC->>MCP: jules_interact(id)
MCP-->>CC: terminal status + PR output
CC-->>U: "Done. PRs: #42, #43, #44, #45, #46"
为 Claude Code 安装
npm install -g @yuuqq/jules-dispatch
完整设置指南(包括 GSD 集成):docs/MCP-INTEGRATION.md
添加到 ~/.config/claude-code/mcp.json(或使用 claude mcp add):
{
"mcpServers": {
"jules-dispatch": {
"command": "jules-dispatch",
"args": ["--project", "/path/to/your/project", "mcp"],
"env": {
"JULES_API_KEY": "your-api-key-here",
"JULES_DEFAULT_SOURCE": "sources/github/owner/repo",
"JULES_DEFAULT_BRANCH": "main"
}
}
}
}
然后在 Claude Code 中输入:"分派 5 项 Jules 任务,为 auth、payments、users、sessions 和 audit 模块添加测试。" Claude 会调用 jules_dispatch,使用 jules_monitor 监控任务,并在需要完整上下文或 PR 输出时使用 jules_interact。
为 OpenAI Codex CLI 安装
添加到 ~/.codex/config.toml:
[mcp_servers.jules-dispatch]
command = "jules-dispatch"
args = ["--project", "/path/to/your/project", "mcp"]
env = { JULES_API_KEY = "your-api-key-here", JULES_DEFAULT_SOURCE = "sources/github/owner/repo" }
作为 Agent Skill 安装
此代码库还附带一个轻量级 Skill 封装,位于 skills/jules-dispatch/。此 Skill 会教会 Claude Code、Codex 或任何兼容 Agent Skills 的宿主何时以及如何使用 jules-dispatch MCP 工具。
对于 Codex,将文件夹复制或安装为 Codex 技能目录中的 jules-dispatch,然后重启 Codex:
cp -R skills/jules-dispatch "${CODEX_HOME:-$HOME/.codex}/skills/jules-dispatch"
对于使用共享技能目录的兼容 Agent Skills 的宿主,将同一文件夹复制到该宿主的技能目录中。此 Skill 仅提供指令层;你仍需使用 jules-dispatch mcp 配置 MCP 服务,并设置有效的 JULES_API_KEY。
MCP 工具
整合工具(推荐)
该服务默认注册 8 个工具:3 个推荐的整合工具和 5 个实用工具。配置 LLM 密钥后,还会注册另外 2 个规划工具。另有 7 个已弃用的别名,可通过 --legacy-tools / JULES_MCP_LEGACY_TOOLS=1 启用,但默认不会注册,因此除非你需要,否则不会占用上下文。
jules_dispatch — 创建一个或多个会话
接受单个任务对象、任务数组或 YAML/JSON 字符串。
参数:
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
tasks | object | object[] | string | 是 | — | 任务定义。对象需要包含 title + prompt。字符串会按 YAML/JSON 解析。 |
format | "yaml" | "json" | 否 | "yaml" | tasks 为字符串时使用的格式 |
parallel | number | 否 | 10 | 最大并发分派数(1–50) |
paceMs | number | 否 | 0 | 会话创建开始之间的全局最小延迟(0–60000 ms) |
{
"tasks": [
{ "title": "Fix auth bug", "prompt": "Fix the null check in login()" },
{ "title": "Add tests", "prompt": "Add unit tests for auth.ts" }
],
"parallel": 5,
"paceMs": 250
}
分派使用持续补充的工作池,而不是固定批次:每当一个任务完成会话创建,下一个排队任务就可以启动。paceMs 在所有工作进程间全局生效,因此连续启动的创建操作至少间隔该时长,同时结果顺序仍与任务顺序一致。
jules_monitor — 检查状态或等待下一个解决节点
参数:
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
sessionIds | string[] | 是 | — | 要监控的会话 ID |
wait | boolean | 否 | false | 如果为 true,则轮询,直到所有会话均已结束、任一会话需要操作或超时 |
intervalMs | number | 否 | 10000 | 轮询间隔,单位为 ms(最小值为 1000) |
timeoutMs | number | 否 | 600000 | 最长等待时间,单位为 ms(最小值为 1000) |
failFast | boolean | 否 | false | 首次失败时立即退出 |
{
"sessionIds": ["abc123", "def456"],
"wait": true,
"timeoutMs": 300000
}
需要操作的状态包括 AWAITING_PLAN_APPROVAL、AWAITING_USER_FEEDBACK 和 PAUSED。当结果包含 actionRequired 时,使用 jules_interact 检查这些会话,酌情批准计划或发送反馈,然后再次调用 jules_monitor,监控尚未解决的 ID。
jules_interact — 在完整上下文中检查会话
一次调用即可返回会话详情、推导出的状态、全局最新计划、活动时间线和 PR 输出。服务会扫描完整的活动动态(按时间从早到晚排列),然后按时间顺序返回最新的 activityCount 条记录,并提供完整动态的 activityTotal。
参数:
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
sessionId | string | 是 | — | 要检查的会话 ID |
activityCount | number | 否 | 10 | 最近活动的数量(1–100) |
{ "sessionId": "abc123", "activityCount": 20 }
实用工具
| 工具 | 参数 | 说明 |
|---|---|---|
jules_list_sources | (无) | 列出所有已连接 Jules 的 GitHub 仓库 |
jules_list_sessions | pageSize?, pageToken? | 分页列出最近的会话 |
jules_approve_plan | sessionId | 批准需要计划审批的会话 |
jules_send_message | sessionId, text | 发送后续消息 |
jules_cancel_session | sessionId | 取消正在运行的会话 |
可选的 LLM 驱动工具(需要 LLM 密钥)
| 工具 | 参数 | 说明 |
|---|---|---|
jules_plan_tasks | description, maxTasks?, source?, branch?, context? | 根据高层级描述规划任务 |
jules_auto | description, maxTasks?, source?, branch?, parallel?, paceMs? | 一次性完成规划和分派 |
响应格式
所有工具均返回:
{ "success": true, "data": { ... } }
错误返回:
{
"success": false,
"error": {
"message": "Authentication failed",
"status": 401,
"name": "Error",
"recovery_hint": "Check your API key"
}
}
旧版工具(已弃用的别名,选择启用)
jules_dispatch_task、jules_dispatch_batch、jules_get_session、jules_list_activities、jules_get_plan、jules_status 和 jules_wait_for_completion 为保持兼容仍可使用,但默认不注册。通过以下任一方式启用:
jules-dispatch mcp --legacy-tools
JULES_MCP_LEGACY_TOOLS=1 jules-dispatch mcp
新的集成应使用整合后的工具。
🚀 快速开始(纯 CLI)
前提条件
- Node.js 20+
- Google Jules 账号和 API 密钥(Google Jules)
- 已连接 Jules 的 GitHub 仓库
1. 安装
npm install -g @yuuqq/jules-dispatch
2. 设置(交互式向导)
jules-dispatch init
向导会提示你输入 API 密钥、默认源和分支,并写入 .env 文件。
用于 CI/脚本(非交互式):
jules-dispatch init --api-key sk-xxx --source sources/github/owner/repo
3. 验证设置
jules-dispatch doctor
4. 编写任务
# tasks/add-dark-mode.yaml
title: "Add Dark Mode Support"
prompt: |
Add a dark mode toggle to the React app:
1. Add a ThemeContext with light/dark state
2. Wrap App with ThemeProvider
3. Add a toggle button in the Header
4. Persist preference in localStorage
5. Open a PR
5. 分派任务
jules-dispatch dispatch tasks/add-dark-mode.yaml
# ✓ Add Dark Mode Support
# Session: https://jules.google.com/session/abc123
# ID: abc123
6. 批量分派整个目录中的任务
jules-dispatch batch tasks/ --parallel 10
就这么简单——从安装到创建首个 PR,只需 6 个步骤。
📖 CLI 参考
全局标志
| 标志 | 默认值 | 说明 |
|---|---|---|
-p, --project <dir> | . | 包含 .env 文件的目录 |
--api-key <key> | Jules API 密钥(覆盖 JULES_API_KEY) | |
--json | off | 机器可读输出。流式命令使用 NDJSON。 |
命令
| 命令 | 功能 |
|---|---|
init | 交互式首次运行向导(API key、来源、分支) |
dispatch <taskFile> | 分发单个任务。使用 - 从标准输入读取。 |
batch [taskDir] | 分发目录中的所有 .yaml/.yml/.json 文件 |
auto <description> | 一次性完成大模型规划和分发(需确认) |
plan-tasks <description> | 使用大模型将意图扩展为 N 个任务草案(不分发) |
status | 最近会话的摘要(或指定 --ids) |
get <sessionId> | 查看单个会话的完整详情 |
wait <ids...> | 轮询,直到会话进入终止状态、需要操作或超时 |
tail <sessionId> | 实时流式显示会话的活动事件 |
plan <sessionId> | 显示最近生成的计划 |
approve <sessionId> | 批准待处理的计划 |
message <sessionId> <text> | 发送后续消息 |
cancel <sessionId> | 取消正在运行的会话 |
sources | 列出已连接的 GitHub 仓库(自动翻页) |
doctor | 验证环境、API key、连接状态和任务文件 |
mcp | 通过标准输入/输出作为 MCP 服务运行 |
退出代码(适用于 Shell 脚本和 Agent)
| 代码 | 含义 |
|---|---|
0 | 成功 |
1 | 通用错误 |
2 | 身份验证错误(缺少或被拒绝的 API key) |
3 | 验证或配置错误(任务文件、参数或 Jules 设置有误) |
4 | 部分失败(部分 batch 任务失败) |
5 | 超时(wait 等待时间耗尽) |
监控错误行为
status 会明确报告会话或活动查询失败,显示为 status: "error",并以非零状态码退出,而不会捏造 Jules 故障或信任可能过时的状态。轮询命令只会重试网络错误、速率限制错误和服务器错误;无效请求、身份验证失败和会话不存在时会立即失败,并在错误上下文中注明受影响的会话 ID。
dispatch 示例
# Override repo/branch
jules-dispatch dispatch tasks/my-task.yaml \
--source sources/github/org/other-repo --branch develop
# Read from stdin
echo 'title: Quick fix\nprompt: Fix typo in README' | jules-dispatch dispatch -
# JSON output (great for piping)
jules-dispatch dispatch tasks/my-task.yaml --json | jq -r '.sessionId'
batch 示例
jules-dispatch batch tasks/ # default tasks/ dir
jules-dispatch batch tasks/ --parallel 20 # 20 concurrent
jules-dispatch batch tasks/ --parallel 10 --pace-ms 250 # globally space starts by 250 ms
jules-dispatch batch tasks/ --no-log # don't write dispatch log
jules-dispatch batch tasks/ --json # one JSON summary at the end
batch 和 auto 均使用相同的持续补充工作池。--parallel 限制同时进行的会话创建数量,--pace-ms 设置创建启动之间的全局最小间隔;它不会在每个工作线程内部额外添加延迟。
wait 示例
# Chain dispatch → wait via JSON output:
ID=$(jules-dispatch dispatch tasks/x.yaml --json | jq -r '.sessionId')
jules-dispatch wait "$ID" --interval 10000 --timeout 1800000
tail 示例
jules-dispatch tail abc123 # human-readable stream
jules-dispatch tail abc123 --json # NDJSON event stream
🔄 会话生命周期
jules-dispatch 会跟踪每个 Jules 会话的完整生命周期,并通过 CLI / MCP 显示各项状态:
stateDiagram-v2
[*] --> QUEUED
QUEUED --> PLANNING
PLANNING --> IN_PROGRESS
PLANNING --> AWAITING_PLAN_APPROVAL: approval required
AWAITING_PLAN_APPROVAL --> IN_PROGRESS: approve plan
IN_PROGRESS --> AWAITING_USER_FEEDBACK: input required
AWAITING_USER_FEEDBACK --> IN_PROGRESS: send feedback
IN_PROGRESS --> PAUSED: execution paused
PAUSED --> IN_PROGRESS: execution resumes
IN_PROGRESS --> COMPLETED: success
IN_PROGRESS --> FAILED: error
COMPLETED --> [*]
FAILED --> [*]
| 官方状态 | 含义 | 建议操作 |
|---|---|---|
STATE_UNSPECIFIED | 未提供特定状态 | 使用 jules_monitor 重新检查,或使用 jules_interact 查看 |
QUEUED / PLANNING / IN_PROGRESS | Jules 正在积极处理 | 继续监控;使用 tail 查看实时活动 |
AWAITING_PLAN_APPROVAL | 生成的计划需要批准 | 使用 jules_interact 查看,然后使用 approve / jules_approve_plan |
AWAITING_USER_FEEDBACK | Jules 需要澄清或输入 | 查看上下文,然后使用 message / jules_send_message |
PAUSED | 执行已暂停,需要关注 | 查看上下文,酌情提供指导,然后再次监控 |
COMPLETED | 成功终止 | 查看会话并收集 PR 输出 |
FAILED | 失败终止 | 查看最新的失败活动,并决定重试还是替换任务 |
为保持兼容性,jules-dispatch 也会规范化旧版 API 状态:PENDING、RUNNING、AWAITING_USER_INPUT、CANCELLED 和 CANCELED。取消操作通过 Jules 的 DELETE /sessions/{id} 操作发送。
📄 任务文件格式
字段参考
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
title | string | 是 | — | 在 CLI 状态和会话列表中显示的易读任务名称 |
prompt | string | 是 | — | 为 Jules Agent 提供的详细说明。越具体,输出越好。 |
source | string | 否 | .env 中的 JULES_DEFAULT_SOURCE | Jules 源标识符,例如 sources/github/owner/repo。可针对每个任务单独覆盖。 |
branch | string | 否 | .env 中的 JULES_DEFAULT_BRANCH(或 main) | Jules 会话开始时使用的 Git 分支 |
autoMode | string | 否 | AUTO_CREATE_PR | 自动化模式。取值:AUTO_CREATE_PR(Jules 自动创建 PR)、NONE |
requirePlanApproval | boolean | 否 | false | 为 true 时,Jules 生成计划后会暂停,并等待执行 jules-dispatch approve <id> |
YAML 示例
title: "Add unit tests for auth module"
prompt: |
Add comprehensive unit tests for src/auth.ts:
1. Test login with valid credentials
2. Test login with invalid credentials
3. Test token refresh flow
4. Test session expiry handling
5. Open a PR with the test file
source: "sources/github/myorg/myrepo"
branch: "develop"
autoMode: "AUTO_CREATE_PR"
requirePlanApproval: false
在一个文件中定义多个任务(YAML --- 分隔符)
title: "Fix lint errors in src/auth"
prompt: "Fix all ESLint errors in src/auth.ts"
---
title: "Fix lint errors in src/api"
prompt: "Fix all ESLint errors in src/api.ts"
---
title: "Fix lint errors in src/utils"
prompt: "Fix all ESLint errors in src/utils.ts"
JSON 格式
{
"title": "Fix the thing",
"prompt": "Find the bug in src/auth.ts and fix it.",
"source": "sources/github/owner/repo",
"branch": "main"
}
JSON 数组(用于通过 MCP 批量分发):
[
{ "title": "Task 1", "prompt": "Do thing A" },
{ "title": "Task 2", "prompt": "Do thing B" }
]
🤖 AI 编排的并行开发
最具价值的用例:将 jules-dispatch 与 Claude Code 或 Codex 结合使用。
“我有一个 Node.js 后端,需要从 Express 迁移到 Fastify。请分析代码库,将工作拆分为相互独立的迁移单元,并使用 jules-dispatch MCP 工具将它们全部并行分发给 Jules。然后轮询任务完成状态,并报告 PR URL。”
安装 MCP 服务后,你的助手将:
- 分析代码库
- 提交并推送目标分支,因为 Jules 使用远程源分支,而非尚未推送的本地更改
- 使用 N 个任务定义调用
jules_dispatch - 使用
wait: true调用jules_monitor;如果需要采取操作,则使用jules_interact检查、批准或发送反馈,然后再次监控 - 使用
jules_interact收集终端上下文和 PR URL
你将获得由一个策略型 Agent协调的 N 个并行编码 Agent,全程无需动手。
📁 项目结构
jules-dispatch/
├── src/
│ ├── cli.ts CLI entry point (Commander)
│ ├── client.ts Jules REST client (retries, pagination)
│ ├── config.ts .env + task file loading
│ ├── dispatcher.ts Task dispatch logic
│ ├── collector.ts Status polling & wait
│ ├── errors.ts Structured error translation (Problem/Cause/Fix)
│ ├── output.ts Text vs JSON output mode, color detection
│ ├── init.ts Interactive init wizard
│ ├── doctor.ts Environment validation (doctor command)
│ ├── mcp.ts MCP server (8 tools + 2 optional planner tools + 7 opt-in aliases)
│ ├── mcp-helpers.ts MCP response helpers (ok/fail/recovery hints)
│ ├── polling.ts Shared poll-with-callback engine
│ ├── tail.ts Bounded, cursor-aware activity tailing
│ ├── planner.ts Optional LLM task planner
│ ├── log.ts Verbose logging
│ └── types.ts TypeScript types
├── tasks/ Your task YAMLs live here
├── .env Generated by jules-dispatch init
└── .dispatch-logs/ JSON audit trail
🛠 开发
npm install
npm run build # compile TypeScript → dist/
npm run dev # run CLI directly with tsx
npm run lint
npm run test
📜 许可证
MIT — 参见 LICENSE
旨在让 Google Jules 真正实现规模化。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。