Fleet plan
Agent Skills for documentation, fleet orchestration, and parallel task execution — works with Claude Code, Cursor, Copilot, Gemini CLI, Codex, and 25+ agents
npx -y skills add quickcall-dev/skills --skill fleet-planAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Analyze a task, pick the right fleet type, and generate a ready-to-launch fleet (fleet.json + prompt.md files). Discovers available fleet skills dynamically. Use when the user wants to run work in parallel, asks to "plan a fleet", or says "fleet-plan".
The file declares its own license as Apache-2.0. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
15.3 KB, as published. Nobody here has run it
Fleet Plan
Analyze work, pick the right fleet type, generate fleet.json + worker prompts. You plan — the fleet skills execute.
Step 0: Pick a fleet type
Use the built-in decision tree below. No external lookup needed.
Available fleet types
| Fleet type | When to use | When NOT to use |
|---|---|---|
| dag-fleet | One-shot DAG workers with dependencies, budgets, mixed models/providers. Persistent across sessions. | Workers need git isolation or edit overlapping files. |
| worktree-fleet | Independent tasks touching non-overlapping files. Each worker in its own git worktree/branch. Merge-safe isolation. | Tasks share files or need coordination/read each other's output. |
| iterative-fleet | Work needs reviewer-in-the-loop (builder → reviewer → verdict → repeat). Quality-gated iteration. | One-shot work without review cycles. |
| autoresearch-fleet | Optimizing a single metric with fast eval harness. Autonomous overnight runs. Plateau-triggered web search. | No eval harness exists, or task isn't optimization. |
Decision tree
Q1: Can one agent handle this in a single session?
YES → "No fleet needed — this fits in one session." STOP.
Q2: Are the tasks independent (no shared files, no shared state)?
YES → worktree-fleet
NO → continue
Q3: Does the work need iteration with a reviewer making accept/iterate decisions?
YES → iterative-fleet
NO → continue
Q4: Is the work a one-shot DAG (each agent runs to completion, dependencies via depends_on)?
YES → dag-fleet
NO → continue
Q5: Is it an optimization loop with a fast eval harness?
YES → autoresearch-fleet
NO → "Open multiple sessions — you're the orchestrator." STOP.
After picking, read ONLY the chosen fleet's SKILL.md for the full schema. Never read all fleet SKILL.md files — that wastes context.
Step 0.5: Verify prerequisites
Before generating the fleet, warn the user if any prerequisite is missing:
- bash >= 4.0 — required for associative arrays in launch.sh. On macOS:
brew install bashand invoke with/opt/homebrew/bin/bash - flock — Linux has it built-in. On macOS:
brew install flockor uselaunch.sh --no-lock - tmux —
brew install tmuxorapt install tmux - jq —
brew install jqorapt install jq
If the user is on macOS, mention these upfront so they don't hit launch failures.
Step 1: Ask where to place the fleet
Before analyzing anything, ask the user:
Where should I place the fleet root? (Press enter for default)
- If the user provides a path → use it
- If the user ignores, says "default", or doesn't respond → use:
fleet-{YYYYMMDD-HHMMSS}-{fleet-name}/in the current working directory
Always use absolute paths for the fleet root.
Step 2: Pick a fleet type
Use the table and decision tree above to match the user's task. Quick heuristic:
Q1: Can one agent handle this in a single session?
YES → "No fleet needed — this fits in one session." STOP.
Q2: Does the decision tree match a fleet type?
YES → Pick it. Read its SKILL.md for the full schema.
Q3: No match?
→ "Open multiple Claude Code sessions — you're the orchestrator." STOP.
After picking, read the chosen fleet's SKILL.md to get the exact fleet.json schema, worker type rules, and output path conventions. Do not guess schemas from memory — read the SKILL.md. STOP HERE.
**Show the user your reasoning.** Don't just pick a type — explain why.
## Step 3: Generate fleet.json
### Guardrail: unsupported provider or model
If the user requests a provider or model not in the valid lists below, you MUST either:
1. **Map to closest valid equivalent** and explicitly disclose: *"Fleet mode only supports [valid providers]. Mapped your request to [X] with [Y]."*
2. **Error and refuse to generate** if no reasonable mapping exists.
**Never silently emit invalid config.** The agent's own thinking recognizing a value is unsupported is not sufficient — the output must be valid.
### Valid models — ONLY use these
**Claude models (provider: "claude", default):**
| Alias | Full ID | When to use |
|-------|---------|-------------|
| `sonnet` | `claude-sonnet-4-6` | Default for most workers |
| `opus` | `claude-opus-4-6` | Complex reasoning, architectural review, large-context synthesis |
| `haiku` | `claude-haiku-4-5` | Cheap/fast — validators, linters, simple checks |
**Codex models (provider: "codex"):**
| Model | When to use |
|-------|-------------|
| `gpt-5.5` | Latest flagship — strongest reasoning, use when available |
| `gpt-5.4` | Flagship — strong reasoning, reliable default |
| `gpt-5.4-mini` | Fast/cheap — validators, simple tasks |
| `gpt-5.3-codex` | Coding-focused (migrating to gpt-5.4) |
**Default:** `sonnet` for Claude workers, `haiku` for fallback_model.
**Only use `opus`** when the task clearly needs it. Cost difference is significant.
**Use codex** when the user requests it or the task benefits from OpenAI models (e.g. research with web search via codex).
### Model family guidance
When the user says "use the [family]" without per-worker specifics, assign models by worker role:
**Claude family (provider: "claude"):**
| Worker role | Model | Why |
|-------------|-------|-----|
| Synthesis, architecture, complex reasoning | `opus` | Highest intelligence, largest context |
| General workers, researchers, builders | `sonnet` | Default — best cost/performance |
| Validators, linters, simple checks | `haiku` | Cheap/fast |
**Pi / Kimi family (provider: "pi"):**
| Worker role | Model | reasoning_effort |
|-------------|-------|------------------|
| Synthesis, deep reasoning, complex analysis | `kimi-k2-thinking` | `high` (or `medium` if not deeply analytical) |
| General coding, research, builders | `kimi-for-coding` | `medium` |
| Simple checks, validators | `kimi-for-coding` | `low` |
**Codex / GPT family (provider: "codex"):**
| Worker role | Model | reasoning_effort |
|-------------|-------|------------------|
| Complex reasoning, flagship tasks | `gpt-5.5` | `high` |
| General workers, research | `gpt-5.4` | `medium` |
| Validators, simple tasks | `gpt-5.4-mini` | `medium` or `low` |
**Rule:** Match model capability to task complexity. Don't put `opus` on a linter or `haiku` on an architecture review.
### Budget guidelines
| Task complexity | max_budget_usd |
|----------------|---------------|
| One-line change, simple edit | 0.25 - 0.50 |
| Moderate task (new function, refactor one file) | 1.00 - 2.00 |
| Complex task (new feature, multi-file changes) | 3.00 - 5.00 |
| Large task (architectural change, full module) | 5.00 - 10.00 |
**Do NOT set max_turns.** It defaults to unlimited. Budget is the only limiter.
### Validation checklist (MUST complete before output)
Before writing fleet.json to disk, verify EVERY item:
- [ ] `type` field present at top level (`"worktree"`, `"dag"`, or `"iterative"`)
- [ ] `max_turns` is NOT set on any worker (omit entirely for unlimited)
- [ ] `reasoning_effort` only paired with `codex` or `pi` provider
- [ ] All provider/model values are from the valid lists above
- [ ] Status command template uses `<fleet-root>` path, not fleet name
### Worker type selection — CRITICAL
Pick the worker type based on what the worker **needs to output**, not what it reads:
| Worker role | Correct type | WRONG type | Why wrong |
|-------------|-------------|------------|-----------|
| Researcher (web + findings file) | `research` | `read-only` | read-only has no WebFetch/WebSearch and cannot Write |
| Synthesizer (reads inputs, writes synthesis) | `write` | `read-only` | read-only cannot Write — burns entire budget trying |
| Code builder (shell + files) | `code-run` | `write` | write has no Bash |
| Reviewer (reads code, runs tests, writes verdict) | `reviewer` | `write` | reviewer has full access (Bash, Edit, etc.) for verification |
**`read-only` CANNOT write files.** Only use it for workers whose output is captured from assistant messages in session.jsonl, not from output files. If a worker needs to save ANY file, use `write`, `research`, `code-run`, or `reviewer`.
### fleet.json rules by type
**All types:**
```json
{
"fleet_name": "<descriptive-kebab-case-name>",
"type": "<worktree|dag|iterative>",
"config": {
"max_concurrent": 3,
"model": "sonnet",
"fallback_model": "haiku",
"provider": "claude",
"reasoning_effort": ""
},
"workers": [...]
}
"type" is a required top-level field.
Provider fields (optional):
config.provider—"claude"(default) or"codex". Per-worker override:worker.provider.config.reasoning_effort—"low","medium", or"high"(codex only). Per-worker override:worker.reasoning_effort.- When
provider: "codex", thefallback_modelfield is ignored (codex has no fallback). - When
provider: "codex",max_budget_usdis NOT enforced per-worker (codex has no budget flag). Fleet-level cost tracking still works via token estimation.
worktree-fleet additions:
- Every worker MUST have
target_files(array of file globs) andbranch(unique branch name) - No two workers can have overlapping target_files
- Default worker type:
code-run(worktree workers need Bash for git commit)
iterative-fleet additions:
- Exactly one worker with
type: "reviewer"(usedepends_onto ensure it runs after builders) - Must include
stop_whenblock with at leastmax_iterationsandreviewer_lgtm_count - Workers have
max_budget_per_iterinstead ofmax_budget_usd
dag-fleet additions:
- Use
depends_on: ["worker-id"]for dependency ordering - Workers without dependencies run in parallel
Config → prompt sync rule
After ANY change to fleet.json (models, budgets, methodology, provider), you MUST regenerate ALL prompt.md files to match. Prompts are not automatically synced — stale prompts cause partial update propagation bugs.
Specifically verify in each prompt.md:
- Model name matches fleet.json
- Budget value matches fleet.json
- Methodology (MECE, citations, web search) matches user requirements
- Output path rules match fleet type
Step 4: Generate prompt.md for each worker
Create $FLEET_ROOT/workers/{id}/prompt.md for each worker. Every prompt MUST include:
- Clear task description — what to do, in specific terms
- Scope boundaries — what files to touch, what NOT to touch
Output path rules (CRITICAL — different per fleet type)
worktree-fleet:
- Do NOT include a "Save ALL output to output/" line. The worker edits files in its worktree at the real repo paths.
- MUST include at the end:
When you are done, commit your changes on the current branch with a descriptive message.
dag-fleet:
- Workers that produce artifacts (research, summaries, matrices) → include:
Save ALL output files to $FLEET_ROOT/workers/{id}/output/ — use absolute paths. - Workers that edit repo files (code changes, creating docs at specific paths) → tell them the exact target path. Do NOT also mention output/. One destination only.
iterative-fleet:
-
Same as dag-fleet: if the deliverable is a specific file, give the exact path. Do not also mention output/.
-
Reviewer prompt MUST include verdict-writing instructions. Without these, the reviewer won't write a verdict file and the orchestrator defaults to
iterate, wasting an iteration. Every reviewer prompt.md must end with:## Writing your verdict 1. Determine the current iteration number: list the `iterations/` directory and find the highest-numbered subdirectory that does NOT yet contain a `review.md`. 2. Write your verdict to `iterations/<N>/review.md` (relative to your working directory). **Never use absolute paths.** 3. The file MUST contain a line exactly like one of: - `verdict: lgtm` - `verdict: iterate` - `verdict: escalate` 4. Below the verdict line, list **actionable fix instructions** per worker — not just what's wrong, but exactly where and how to fix it (file path, function name, what to change). 2-3 precise points per worker. The builder sees this on next iteration, so vague feedback wastes a cycle.This is non-negotiable. Fleet 02 burned an iteration because the reviewer prompt didn't specify where/how to write the verdict.
The rule: Never give a worker two destinations. One task = one output location. Conflicting instructions cause workers to write to the wrong place.
Step 5: Output to user
After generating everything, tell the user:
- Plan summary — what each worker does (a table)
- Fleet type chosen and why
- Launch command:
For worktree-fleet, suggestbash <path-to-fleet-skill>/scripts/launch.sh <fleet-root>--dry-runfirst. - Status command:
bash <path-to-fleet-skill>/scripts/status.sh <fleet-root><fleet-root>is the absolute path to the fleet directory. While status.sh can resolve fleet names, always give the user the absolute path to avoid confusion.
ALWAYS give the user the status command. This is mandatory.
Preferred defaults
- Implementation workers: codex
gpt-5.3-codex,reasoning_effort: "medium" - Reviewer workers: claude
opus(claude-opus-4-6),reasoning_effort: "medium" - max_turns: unset (unlimited)
- max_iterations (iterative-fleet
stop_when):10
Override only when user specifies different models/caps in the request.
Rationalizations to reject
| Agent says | Rebuttal |
|---|---|
| "I can handle this without a fleet" | If the user asked for fleet-plan, they want parallel execution. Walk the decision tree and pick a type. Only say "no fleet" if Q1 is genuinely YES. |
| "I'll use opus for all workers since it's better" | Sonnet is the default. Opus costs ~5x more. Only use opus when the task demonstrably needs complex reasoning. |
| "I'll skip the decision tree and just use dag-fleet" | Walk the tree. Worktree-fleet is better for independent work (git isolation). Iterative-fleet is better for reviewer-gated work. dag-fleet is the fallback, not the default. |
| "The tasks overlap a little but worktree-fleet will work" | Overlapping files = not worktree-fleet. Use dag-fleet with depends_on, or restructure the split so files don't overlap. |
| "I'll set max_budget_usd high to be safe" | Budget should match task complexity. $0.50 for simple edits, $2 for medium, $5 for complex. Don't waste money. |
| "I don't know which fleet type to pick" | You have a decision tree. Walk it. If genuinely ambiguous after the tree, default to dag-fleet. |
| "The synthesizer just reads outputs, so read-only is fine" | NO. read-only cannot Write. The synthesizer reads inputs but WRITES a synthesis file. Use write. This mistake burned $1.23 in experiment 007 when Opus spent 26 turns trying to find a Write tool. |
| "Researchers should be read-only since they're reading" | NO. read-only has no WebFetch/WebSearch and no Write. Researchers need research type. |
$ARGUMENTS