一键导入
fuel-make-plan-actionable
Convert an approved plan into well-defined Fuel tasks with epics, dependencies, and review tasks. Use after exiting plan mode.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Convert an approved plan into well-defined Fuel tasks with epics, dependencies, and review tasks. Use after exiting plan mode.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Create a fuel epic and detailed implementation plan for new functionality. Use when the user wants to plan something, or they're building something across multiple files/tasks, designing implementations, entering plan mode, exiting plan mode, or when explicitly requested. This must be used when planning.
Control a headless browser for testing, screenshots, and web automation. Use when testing web pages, taking screenshots, interacting with web pages, verifying UI changes, or scraping rendered HTML.
基于 SOC 职业分类
| name | fuel-make-plan-actionable |
| description | Convert an approved plan into well-defined Fuel tasks with epics, dependencies, and review tasks. Use after exiting plan mode. |
Convert an approved plan into well-defined Fuel tasks using tasks.json + fuel add:json.
Invoke this skill immediately after exiting plan mode, when you have an approved implementation plan to convert into trackable tasks.
Every multi-task plan needs an epic to group related work:
fuel epic:add "Feature name" --description="What this achieves and why"
Note the epic ID (e.g., e-abc123) for linking tasks.
Save the plan file to .fuel/plans/{title-kebab}-{epic-id}.md:
You must create an epic if you don't already have one.
Tasks working on this epic will read the plan for context and update it with discoveries.
First, check if this is a self-guided epic:
fuel epic:show [epic-id]
If the epic shows self_guided: true:
If self_guided is false (default), proceed with normal task breakdown.
Before creating tasks, identify what can run in parallel.
Split by independent files/features, NOT by architectural layers.
Bad (linear chain, low parallelism):
Model → Service → Command → Tests
Good (parallel where possible):
Model (shared prereq) ──┬──→ API changes (separate files)
└──→ UI changes (separate files)
Then: Tests → Review
Rules for parallelism:
Ask: "Can task B start immediately, without waiting for A's output?" If no, add a dependency or merge them.
Create a tasks.json file in a temporary directory with all tasks. This is the ONLY way to add multiple tasks to an epic.
JSON Structure (required format):
{
"version": 1,
"defaults": {
"type": "task",
"priority": 2,
"complexity": "simple",
"labels": []
},
"tasks": [
{
"id": "T1",
"title": "Create UserPreference model and migration",
"description": "Add model at app/Models/UserPreference.php with fields: user_id, key, value. Create migration.",
"type": "feature",
"priority": 1,
"complexity": "simple"
},
{
"id": "T2",
"title": "Add preferences API endpoints",
"description": "Add GET/POST /api/preferences routes. Return JSON. Follow existing API patterns in routes/api.php.",
"type": "feature",
"priority": 1,
"complexity": "moderate",
"blockedBy": ["T1"]
},
{
"id": "T3",
"title": "Add preferences UI component",
"description": "Create PreferencesPanel.vue component. Fetch from API, allow editing, save on change.",
"type": "feature",
"priority": 1,
"complexity": "moderate",
"blockedBy": ["T1"]
},
{
"id": "T4",
"title": "Add preferences tests",
"description": "Unit tests for model, feature tests for API endpoints. Cover CRUD operations.",
"type": "test",
"complexity": "moderate",
"blockedBy": ["T2", "T3"]
},
{
"id": "review",
"title": "Review: User preferences",
"description": "Verify epic complete. Criteria: 1) Preferences save and load correctly, 2) UI reflects saved state, 3) All tests pass, 4) No debug code",
"type": "task",
"complexity": "complex",
"blockedBy": ["T1", "T2", "T3", "T4"]
}
]
}
Field Reference:
| Field | Required | Description |
|---|---|---|
id | Yes | Local reference ID (for blockedBy within this file) |
title | Yes | Task title |
description | No | Detailed description with file paths, behavior, patterns |
type | No | task|bug|fix|feature|epic|chore|docs|test|refactor |
priority | No | 0 (highest) to 4 (lowest), defaults to 2 |
complexity | No | trivial|simple|moderate|complex |
labels | No | Array of strings |
blockedBy | No | Array of local IDs (T1) or external Fuel IDs (f-abc123) |
Always set complexity for every task. Fuel routes work by complexity; correct complexity enables cheaper/faster agents on trivial/simple tasks. When a task could split into a simple + trivial task instead of one moderate, prefer the split — cheaper agents handle the pieces faster.
Required structure:
version, defaults, and tasks keystasks must be an array (not empty)id and titleAnti-patterns (will be rejected):
// BAD: Wrapper object
{ "prd": { "version": 1, "tasks": [...] } }
// BAD: Wrong array key
{ "version": 1, "userStories": [...] }
{ "version": 1, "items": [...] }
// BAD: Nested phases
{ "version": 1, "phases": { "phase1": { "tasks": [...] } } }
blockedBy rules:
id from another task in the same file (e.g., "T1")f-xxxxxx (lowercase hex)Import all tasks in one command:
fuel add:json e-abc123 tasks.json
Alternative input methods:
# From STDIN
cat /tmp/tasks.json | fuel add:json e-abc123 -
cat /tmp/tasks.json | fuel add:json e-abc123
# Machine-readable output
fuel add:json e-abc123 /tmp/tasks.json --json
The command:
Every epic needs a final review task. Include it in your tasks.json (see example above).
Review tasks should:
complexity: "complex"Review tasks must verify:
Epics start paused to prevent tasks from being consumed before setup is complete. Once tasks are imported, unpause to start execution:
fuel unpause e-abc123
Bad: "Fix the bug"
Good: "In app/Services/TaskService.php:145, the find() method throws when ID not found. Change to return null and update callers in ShowCommand.php:68 and StartCommand.php:42 to handle null."
Include:
Give one clear solution, not options—subagents execute, they don't decide.
Plan: "Add user preferences with API and UI"
1. Create epic:
fuel epic:add "Add user preferences" --description="Allow users to set and retrieve preferences via API and UI"
# Returns: e-abc123
2. Create tasks.json:
{
"version": 1,
"defaults": {
"type": "feature",
"priority": 1,
"complexity": "simple"
},
"tasks": [
{
"id": "model",
"title": "Create UserPreference model and migration",
"description": "Add model at app/Models/UserPreference.php with user_id (FK), key (string), value (text). Create migration with index on user_id.",
"complexity": "simple"
},
{
"id": "api",
"title": "Add preferences API endpoints",
"description": "Add routes in routes/api.php: GET /api/preferences (list), POST /api/preferences (upsert). Controller at app/Http/Controllers/PreferenceController.php. Return JSON, follow existing patterns.",
"complexity": "moderate",
"blockedBy": ["model"]
},
{
"id": "ui",
"title": "Add preferences UI component",
"description": "Create resources/js/components/PreferencesPanel.vue. Fetch from GET /api/preferences on mount, POST on change. Use existing Vue patterns.",
"complexity": "moderate",
"blockedBy": ["model"]
},
{
"id": "tests",
"title": "Add preferences tests",
"description": "Feature tests in tests/Feature/PreferencesTest.php: test list, upsert, validation. Unit tests for model in tests/Unit/UserPreferenceTest.php.",
"type": "test",
"complexity": "moderate",
"blockedBy": ["api", "ui"]
},
{
"id": "review",
"title": "Review: User preferences",
"description": "Verify epic complete. Criteria: 1) Preferences save and load correctly, 2) UI reflects saved state, 3) All tests pass: vendor/bin/pest tests/Feature/PreferencesTest.php tests/Unit/UserPreferenceTest.php, 4) No debug code",
"type": "task",
"complexity": "complex",
"blockedBy": ["model", "api", "ui", "tests"]
}
]
}
3. Import and unpause:
fuel add:json e-abc123 tasks.json
fuel unpause e-abc123
Notes:
api and ui can run in parallel (different files, both only depend on model)tests waits for both api and uireview waits for everything