skills/greenfield/gf-create-tasks/SKILL.md
Generate a structured task list (tasks.json) from an existing spec. Tasks follow the walking skeleton philosophy — Task 1 builds the thinnest end-to-end system, each subsequent task replaces a hardcoded seam with real functionality. Writes to .aw/greenfield-progress/tasks.json. Part of the gf (greenfield) skill family.
npx skillsauth add ricky-yosh/agent-workflows gf-create-tasksInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generate a structured task list from the spec. Tasks follow the walking skeleton philosophy — start with the thinnest end-to-end system, then fill in real behavior one task at a time.
Read .aw/greenfield-progress/spec.xml — if missing, tell the user to run /gf-create-spec first.
Build options from the spec's <requirements> sections (or top-level groupings), then ask:
AskUserQuestion:
question: "What scope should I create tasks for?"
options:
- "Full spec"
- "<Section/requirement group 1>"
- "<Section/requirement group 2>"
- "..."
Always include "Full spec" as the first option. The remaining options should be the natural groupings from the spec — requirement groups, feature areas, or scope sections. The user is in a narrow tmux sidebar, so this must be a single multiple-choice interaction, not a typed response.
Generate tasks for the chosen scope. For each task, produce an object with:
id: sequential numbercategory: "feature", "infrastructure", or "polish"description: concise statement of what the task accomplishessteps: array of ordered implementation steps (strings)approach: "direct" or "plan" — how to implement this taskneeds_tests: true or false — whether this task needs testsdone: falseDeciding approach:
| Signal | Direct | Plan | |--------|--------|------| | Files touched | 1-2 | 3+ | | New abstractions needed | No | Yes | | Existing pattern to follow | Yes | No | | Ambiguous scope | No | Yes |
Walking skeleton tasks are almost always "direct". Tasks that introduce new abstractions or touch many files across layers are candidates for "plan".
Deciding needs_tests:
Example (for a TODO app):
[
{
"id": 1,
"category": "infrastructure",
"description": "Walking skeleton — one hardcoded TODO visible in the browser",
"steps": [
"Scaffold project (package.json, framework init, entry point)",
"Create a single route that returns a hardcoded TODO item",
"Create a minimal page/component that renders it",
"Verify: run the app, see the TODO in the browser"
],
"approach": "direct",
"needs_tests": false,
"done": false
},
{
"id": 2,
"category": "feature",
"description": "Real storage — create, list, and persist TODOs end-to-end",
"steps": [
"Define the TODO data model/interface",
"Replace hardcoded data with an in-memory store and add/list operations",
"Wire a form in the UI to create a TODO through the API",
"Verify: add a TODO in the browser, see it appear in the list"
],
"approach": "direct",
"needs_tests": true,
"done": false
}
]
Write the task list to .aw/greenfield-progress/tasks.json.draft.
Invoke the /create-digest skill to write a digest of the task list to .aw/digests/tasks-digest.md. The source document is the tasks you just generated — the digest should be a narrative overview of the implementation arc, not a JSON dump.
Tell the user the digest is ready for review, then ask:
AskUserQuestion:
question: "How does this task list look?"
options:
- "Approved"
- "Too granular — combine some tasks"
- "Too coarse — break tasks down more"
- "Add tasks for something missing"
- "Remove some tasks"
- "Other — I'll explain"
For any option other than "Approved", use follow-up AskUserQuestion calls to drill into what needs changing. Update both the .draft file and the digest, and ask again until approved.
Once approved, rename .aw/greenfield-progress/tasks.json.draft to .aw/greenfield-progress/tasks.json and confirm: "Tasks saved."
A walking skeleton is the thinnest possible end-to-end implementation — just enough to connect all the layers (UI → API → data) with hardcoded or trivial behavior. Task 1 is always the skeleton. Every subsequent task replaces a hardcoded seam with real functionality, so the system is working and verifiable after every single task.
Do this (walking skeleton):
Not this (horizontal layers):
Within each task too. The steps array inside a task should follow the same principle — the first steps get the thinnest version working, the later steps fill it in. Never have all the "define" steps first and all the "wire" steps last. Get something running, then build on it.
This approach exists because:
done field may be modified on existing tasks — never remove, reorder, or edit category, description, or steps on tasks that already exist. New tasks may be appended.development
Write tests for a batch of tasks BEFORE implementation. Detects the project's test framework and language, then writes tests that cover happy paths, edge cases, and failure modes. All tests should fail initially since there is no implementation yet. Part of the gf (greenfield) skill family. Use when the user says /gf-write-tests or wants to write tests before implementing a feature or task batch.
testing
Generate readable testing notes after a feature is complete. Compares spec against implementation to produce a concise list of what was built, how to test it, and any scope gaps. Writes testing-notes.md to .aw/greenfield-progress/. Part of the gf (greenfield) skill family.
testing
Save current session work to .aw/greenfield-progress/progress.txt. Captures decisions (why, not just what) that git diff cannot show. Updates tasks.json to mark completed tasks. Part of the gf (greenfield) skill family.
testing
Gate the greenfield workflow on user verification after an implementation step. Reads the implementation digest, shows verification steps, and waits for the user to confirm before advancing. Part of the gf (greenfield) skill family.