Loading...
Loading...
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".
npx skill4agent add quickcall-dev/skills fleet-planGlob**/fleet/FLEET-INDEX.mdFLEET-INDEX.mdSKILL.mdGlob**/<chosen-fleet>/SKILL.mdWhere should I place the fleet root? (Press enter for default)
fleet-{YYYYMMDD-HHMMSS}-{fleet-name}/Q1: Can one agent handle this in a single session?
YES → "No fleet needed — this fits in one session." STOP.
Q2: Does FLEET-INDEX.md have a matching 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.
**Show the user your reasoning.** Don't just pick a type — explain why.
## Step 3: Generate fleet.json
### 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.4` | Flagship — strongest reasoning, recommended 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).
### 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.
### 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": [...]
}config.provider"claude""codex"worker.providerconfig.reasoning_effort"low""medium""high"worker.reasoning_effortprovider: "codex"fallback_modelprovider: "codex"max_budget_usdtarget_filesbranchcode-runtype: "reviewer"depends_onstop_whenmax_iterationsreviewer_lgtm_countmax_budget_per_itermax_budget_usddepends_on: ["worker-id"]$FLEET_ROOT/workers/{id}/prompt.mdWhen you are done, commit your changes on the current branch with a descriptive message.Save ALL output files to $FLEET_ROOT/workers/{id}/output/ — use absolute paths.iterate## 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.bash <path-to-fleet-skill>/scripts/launch.sh <fleet-root>--dry-runbash <path-to-fleet-skill>/scripts/status.sh <fleet-root>| 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 |
| "Researchers should be read-only since they're reading" | NO. read-only has no WebFetch/WebSearch and no Write. Researchers need |