name: backlog-grooming description: "Groom Planning tasks: verify readiness, prioritize, promote to Todo, and group into 3-8 task work units. The only gate from Planning to Todo. Invoked as /agiflow:backlog-grooming. Uses list_tasks, update_task, reorder_tasks, batch_create_work_units, list_work_units." tags: - agiflow - mcp - grooming - work-units - prioritization metadata: mirrors: backend/apis/agiflow-api .../prompts/backlogGrooming.md
Invoked as
/agiflow:backlog-grooming. In hosts without slash-prompts, this skill is triggered by matching intent and drives AgiFlow via its MCP tools.
Usage:
/agiflow:backlog-grooming- Groom the planning backlog/agiflow:backlog-grooming <tag-filter>- Groom tasks with specific tags
Examples:
/agiflow:backlog-grooming(review all planning tasks)/agiflow:backlog-grooming feature:auth(groom auth-related tasks only)
Purpose Prioritize tasks from "Planning" to "Todo", group them into work units, and validate readiness for execution. This is the ONLY skill that moves tasks from Planning to Todo — no other workflow should bypass this gate.
Guardrails
- ONLY operate on tasks in "Planning" status
- REFUSE to promote tasks that lack acceptance criteria (minimum 2) — suggest
refine-taskfirst - REFUSE to promote tasks with vague descriptions — suggest
refine-taskfirst - Work units are created ONLY during this skill (not during project-plan or run-work)
- All promoted tasks must have a clear "done" definition
- Work-unit dependencies must be explicit at the work unit level, not hidden inside mixed task groupings
- If a task can ship independently, it MUST live in its own standalone path or its own work unit; do NOT mix it into a downstream dependent work unit
AgiFlow Project Management Guidelines
Follow the shared AgiFlow project-management guidelines in references/agiflow-agents.md — agent assignment, the task status workflow and transitions, work-unit best practices, and the tags strategy apply to this workflow.
Steps
1. Load Planning Backlog
- Use
list_tasksMCP tool withstatus: "planning"to load all tasks awaiting grooming. - Use
list_work_unitsMCP tool to understand existing work unit organization. - Use
list_membersMCP tool to understand available agents and their capabilities.
If no tasks are in "Planning" status, report: "No tasks to groom. Use project-plan to create tasks first."
2. Assess Readiness
- For each planning task, check:
| Criterion | Required? | If missing |
|---|---|---|
| Has 2+ acceptance criteria | Yes | Flag — suggest refine-task |
| Description has sufficient context | Yes | Flag — suggest refine-task |
| Priority is set | Yes | Can be set during grooming |
| Tags are applied | Recommended | Can be set during grooming |
| Assignee is set | Optional | Can be assigned during grooming |
Categorize tasks:
- Ready: Meets all required criteria — can be promoted
- Needs refinement: Missing acceptance criteria or vague description — suggest
refine-task - Blocked: Has unresolved dependencies or unknowns
Present readiness report to user:
- N tasks ready for promotion
- M tasks need refinement (list them with reasons)
- K tasks are blocked (list blockers)
Do NOT promote tasks that need refinement. The user must address them first.
3. Prioritize
- For ready tasks, apply prioritization criteria:
| Factor | Weight | How to assess |
|---|---|---|
| Business value | High | User-facing > internal tooling > tech debt |
| Risk / uncertainty | High | Higher risk = do sooner to fail fast |
| Dependencies | Must respect | Blockers before dependents |
| Effort vs. impact | Medium | Quick wins first if equal priority |
| Tags | Grouping | Related tags suggest natural batches |
Present ranked priority list to user for confirmation:
- Rank, title, tags, priority, estimated effort
- Call out any dependency constraints ("Task A must come before Task B")
- Highlight quick wins (high impact, low effort)
Get user confirmation on priority order before promoting.
4. Group into Work Units
- Analyze ready tasks and identify cohesive groups:
GROUP INTO WORK UNIT when:
- 3-8 related tasks that deliver a single cohesive feature
- Tasks share the same tag prefix (e.g. all
feature:authtasks) - Tasks can be completed in ONE agent session (2-4 hours)
- Tasks have clear dependencies and should be executed together
- All tasks in the work unit share the same upstream dependency story and can merge back to
maintogether
DO NOT CREATE WORK UNIT when:
- Only 1-2 tasks (leave as standalone)
- Unrelated tasks (bugs across different areas)
- Maintenance work (dependency updates, config changes)
- More than 8 tasks (split into multiple work units)
- Some tasks are independently executable now, but others are blocked on upstream work — split them into separate work units or leave the smaller independent slice standalone
- Use
batch_create_work_unitsMCP tool to create all work units at once. Each work unit should have:
- title: Clear feature name (e.g., "Authentication Feature")
- type: "feature" (most common), "epic" (multi-feature), "initiative" (business goals)
- description: What this work unit delivers and why
- status: "planning"
- priority: Based on business impact
- estimatedEffort: Story points (Fibonacci: 1, 2, 3, 5, 8, 13)
- taskIds: List of task IDs belonging to this work unit
- devInfo: Include
executionPlandescribing implementation order
Leave standalone tasks (1-2 tasks) ungrouped — they can be executed individually via run-task.
5. Cross-Work-Unit Dependency Analysis
Before promoting ANY tasks, you MUST analyze dependencies across ALL work units — not just the ones you're creating now.
CRITICAL: Work units merge back to main only after the work unit completes. Because of that, dependency management must be explicit at the work-unit level. Do NOT create a work unit that contains both:
- tasks that can start immediately, and
- tasks that depend on another work unit being completed and merged.
If you find mixed readiness inside a proposed work unit, split it into:
- an independent standalone task or parallel work unit, and
- a downstream dependent work unit that stays in
Planninguntil its upstream work units are completed and merged.
Load full WU context: Use
list_work_unitsto retrieve ALL existing work units inplanning,in_progress, orreviewstatus. You need the complete picture, not just the new WUs.Identify cross-WU touchpoints: For each new work unit, check if it shares any of the following with existing or other new WUs:
- Shared files/modules: Two WUs modifying the same source files (high merge conflict risk)
- API contracts: A WU producing an API that another WU consumes
- Shared schemas: Database migrations or model changes that other WUs depend on
- Shared UI components: A WU creating components another WU needs to use
Determine execution order across WUs:
Relationship Rule WU-B consumes API/schema/component created by WU-A WU-A must finish first (upstream) WU-A and WU-B modify the same core files Run sequentially — do NOT run in parallel WU-A and WU-B are fully independent Can run in parallel Merge-aware rule: if WU-B needs code from WU-A to exist on
main, then WU-B is downstream even if one or two tasks inside it look independently executable. Split those tasks out rather than keeping a mixed WU.Annotate dependencies in WU descriptions: For any downstream WU, add to its description:
**Depends on:** [WU slug/title] — [reason: e.g., "needs the user API endpoints from WU-A"] **Cannot start until:** [WU slug] is "completed" and merged back to `main` **Merge rule:** this work unit must not be dispatched until all upstream dependencies are mergedApply sequential gating:
- Upstream WUs (no dependencies): Promote their tasks to "Todo" normally
- Downstream WUs (depend on upstream): Keep all of their tasks in "Planning" — do NOT promote any of them to "Todo" yet
- Mixed readiness discovered inside one proposed WU: do NOT promote only the independent tasks while leaving the rest behind. Split the work into separate WUs or leave the independent slice standalone, then promote only the standalone/upstream unit.
Promotion rule: REFUSE to promote tasks that depend on work from an upstream WU that is not yet "completed" and merged. The merge train must be respected.
Present the cross-WU execution plan to the user:
Work Unit Execution Order: 1. [WU-A slug] — no dependencies, can start immediately 2. [WU-B slug] — no dependencies, can run in parallel with WU-A 3. [WU-C slug] — depends on WU-A and WU-B being completed and merged; all tasks held in Planning
6. Promote Tasks: Planning -> Todo
- For each approved task (in priority order), respecting the gating rules from Step 5:
- Use
update_taskMCP tool withstatus: "todo" - Set
positionfor ordering within the Todo column (lower = higher priority) - Assign agent if not already assigned
- Respect dependency order: prerequisite tasks get lower position numbers
- Do NOT promote tasks that are gated by an upstream work unit that is not yet completed and merged
This is the ONLY path from Planning to Todo. No other skill should bypass this.
7. Verify
- Use
list_taskswithstatus: "todo"to confirm all promotions. - Use
list_work_unitsto confirm groupings are correct. - Present summary to user:
- N tasks promoted from Planning to Todo
- M work units created (with task counts)
- K tasks left in Planning (need refinement)
- J tasks held in Planning (gated by upstream WU dependencies and merge order)
- Cross-WU execution order
- Dependency order and execution sequence
- Agent assignments
- Recommend next steps:
- "Use run-work to execute a work unit (implements all its tasks sequentially)."
- "Use run-task to execute standalone tasks individually."
- "Use orchestrate for automated priority-based task dispatch."
- If downstream WUs are gated: "After [upstream WU] completes and is merged to
main, run backlog-grooming again to promote the held tasks."
Common Mistakes to Avoid
- Promoting tasks without acceptance criteria (quality gate violation)
- Creating work units with >8 tasks (too complex for one session)
- Grouping unrelated tasks into one work unit (not cohesive)
- Skipping user confirmation on priority order
- Not respecting dependency ordering when setting positions
- Promoting blocked tasks (resolve blockers first)
- Creating work units during project-plan (that's this skill's job)
- Promoting dependent WU tasks while the upstream WU is still in progress (causes merge conflicts)
- Creating WUs in isolation without checking existing WUs for shared file/module touchpoints
- Mixing independent and downstream-dependent tasks inside one work unit when work units only merge at completion
- Promoting a subset of tasks from a downstream-dependent work unit instead of splitting that work into separate merge-safe units
- Not annotating cross-WU dependencies in WU descriptions (next grooming session loses context)