From groundwork
Finds and executes the next uncompleted task from project specs, with model/effort recommendations for optimal reasoning.
How this skill is triggered — by the user, by Claude, or both
Slash command
/groundwork:work-on-next-taskThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Finds the next uncompleted task from `{{specs_dir}}/tasks/` (or `{{specs_dir}}/tasks.md`) and delegates execution to the `work-on` skill.
Finds the next uncompleted task from {{specs_dir}}/tasks/ (or {{specs_dir}}/tasks.md) and delegates execution to the work-on skill.
Your current effort level is {{effort_level}}.
Skip this step silently if effort is high, xhigh, or max (the scale is low < medium < high < xhigh < max, so xhigh and max are already above high) AND you are Sonnet or Opus.
If effort is low or medium (i.e. below high), you MUST show the recommendation prompt — regardless of model.
If you are not Sonnet or Opus, you MUST show the recommendation prompt - regardless of effort level.
Otherwise → use AskUserQuestion:
{
"questions": [{
"question": "Do you want to switch? Dependency resolution and task selection benefits from consistent reasoning.\n\nTo switch: cancel, run `/effort high` (and `/model sonnet` if on Haiku), then re-invoke this skill.",
"header": "Recommended: Sonnet or Opus at high effort",
"options": [
{ "label": "Continue" },
{ "label": "Cancel — I'll switch first" }
],
"multiSelect": false
}]
}
If the user selects "Cancel — I'll switch first": output the switching commands above and stop. Do not proceed with the skill.
IMPORTANT: Your job is NOT to build a plan or build anything, it is to exclusively to find the next task to execute. Don't do planning or building until the full workflow is executed. If you find yourself planning or executing, STOP and follow the workflow.
Before loading specs, ensure project context is resolved:
.groundwork.yml exist at the repo root?
{{project_name}} non-empty?
Skill(skill="groundwork:select-project") to select a project, then restart this skill.{{project_name}}, specs at {{specs_dir}}/..groundwork.yml).AskUserQuestion:
"You're working from
<cwd>(inside [cwd-project]), but the selected Groundwork project is [selected-project] ([selected-project-path]/). What would you like to do?"
- "Switch to [cwd-project]"
- "Stay with [selected-project]" If the user switches, invoke
Skill(skill="groundwork:select-project").
{{specs_dir}}/ paths will resolve to the correct location.Read only the task index to find available tasks — do NOT read individual task files:
{{specs_dir}}/tasks/_index.md (preferred — contains status table){{specs_dir}}/tasks.mdDetection: Check for {{specs_dir}}/tasks/_index.md first, then {{specs_dir}}/tasks.md. Do NOT aggregate all task files — the index contains the status table with all the information needed to find the next task.
Parse the status table in _index.md to find the next task:
| # | Task | Milestone | Status | Blocked by |
|---|------|-----------|--------|------------|
| TASK-001 | Auth setup | M1 | Complete | None |
| TASK-002 | Login UI | M1 | In Progress | TASK-001 |
| TASK-003 | Dashboard | M2 | Not Started | TASK-002 |
Look for all rows with Status = Not Started
Check dependencies — filter to unblocked tasks (all tasks in Blocked by column are Complete)
Detect ambiguity:
candidates = unblocked not-started tasksnext_sequential = lowest numbered candidate (e.g., TASK-004)completed_after = any complete task with number > next_sequentialIf ambiguous (completed tasks exist after candidates): Present options to user with context about the gap:
"Multiple tasks are available. Tasks 1,2,3,5 are complete.
- TASK-004: [Title] - Earlier in sequence, may have been skipped intentionally
- TASK-006: [Title] - Next sequential after completed work
Which would you like to work on? (or use
/groundwork:work-on Nto select a specific task)"
Wait for user selection before proceeding.
If unambiguous: Select the first unblocked, not-started task
Dependency check: A task is blocked if its Blocked by column lists any task that is not Complete in the status table.
Fallback: If _index.md has no status table, read individual task files to find statuses (legacy single-file format).
Tip: For direct task selection, use /groundwork:work-on N to work on a specific task by number.
| Situation | Response |
|---|---|
No specs/ directory | "No specs directory found. Run /groundwork:design-product to start defining your project." |
| Missing tasks file | "Tasks file not found. Run /groundwork:create-tasks to generate tasks from your PRD and architecture." |
| No tasks found | "No tasks found in {{specs_dir}}/tasks/. The directory may need to be regenerated with /groundwork:create-tasks." |
| All tasks complete | "All tasks complete! Consider running /groundwork:source-product-specs-from-code to update documentation or plan the next phase." |
| Only blocked tasks | "All remaining tasks are blocked. Blocked tasks: [list]. Would you like to override and work on one anyway?" |
| Parse error | "Could not parse tasks.md. Expected format: ### TASK-NNN: Title with **Status:** field." |
You MUST call the Skill tool now: Skill(skill="groundwork:work-on", args="<task-id>")
Replace <task-id> with the identified task identifier (e.g., TASK-004).
Do NOT load project context, explore the codebase, present summaries, or begin task execution yourself. The work-on skill handles the complete workflow including worktree setup, TDD, and validation.
npx claudepluginhub etr/groundworkPicks the next executable task from project-root TODO.md by priority and dependency, marks it in-progress, and executes it. Uses a structured task format with priority, ID, and dep fields.
Executes all remaining tasks in sequence until completion, stopping on first failure. Includes pre-flight recommendation for Sonnet/Opus at high effort and monorepo project context resolution.