skills/omc-ado-sprint/SKILL.md
Sprint planning and iteration management for Azure DevOps projects. WHEN: User wants to plan sprints, manage iterations, check team capacity, groom backlogs, or assign work to sprints. DO NOT USE FOR: Work item triage (use omc-ado-triage), PR reviews (use omc-ado-review), pipeline management, or non-ADO projects.
npx skillsauth add RobinNorberg/oh-my-copilot omc-ado-sprintInstall 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.
Perform a full Azure DevOps sprint planning cycle for the current project. Reads .omcp/config.json for connection settings, queries iterations and team capacity, reviews the backlog, and helps assign work items to sprints.
When this skill is invoked, immediately execute the workflow below. Do not only restate or summarize these instructions back to the user.
Read .omcp/config.json:
cat .omcp/config.json 2>/dev/null || echo "NOT_FOUND"
Extract from the ado key:
org — full org URL (e.g. https://dev.azure.com/contoso)project — ADO project nameteam — team name (e.g. contoso Team)repo — repository nameareaPath — area path filter (optional)iterationPath — current iteration path (optional)If config is NOT_FOUND or missing the ado key: tell the user to run /oh-my-copilot:omc-ado-setup first and stop.
Fetch all iterations assigned to the team to understand the sprint timeline.
MCP (preferred):
mcp__azure-devops__work_list_team_iterations
→ project: "{project}"
→ team: "{team}"
Also fetch all project-level iterations for reference:
mcp__azure-devops__work_list_iterations
→ project: "{project}"
az CLI fallback:
az boards iteration team list \
--team "{team}" \
--project "{project}" \
--org "{org}" \
-o json 2>&1
Present the iterations in a table:
### Current Iterations
| Name | Start Date | End Date | Status |
|------|-----------|----------|--------|
| Sprint 22 | 2026-03-01 | 2026-03-14 | current |
| Sprint 23 | 2026-03-15 | 2026-03-28 | future |
Identify the current iteration (today's date falls within its date range) and the next iteration for planning purposes.
Fetch capacity for the current and upcoming iterations in parallel.
MCP (preferred):
mcp__azure-devops__work_get_team_capacity
→ project: "{project}"
→ team: "{team}"
→ iterationId: "{currentIterationId}"
mcp__azure-devops__work_get_iteration_capacities
→ project: "{project}"
→ team: "{team}"
→ iterationId: "{nextIterationId}"
az CLI fallback:
az boards iteration team show-capacity \
--iteration "{iterationPath}" \
--team "{team}" \
--project "{project}" \
--org "{org}" \
-o json 2>&1
Present capacity as:
### Team Capacity — {iterationName}
| Member | Activity | Capacity/Day | Days Off | Total Capacity |
|--------|----------|-------------|----------|----------------|
| Alice | Development | 6h | 2 | 60h |
| Bob | Testing | 6h | 0 | 84h |
Total Available: {N}h | Committed: {N}h | Remaining: {N}h
If capacity data is unavailable (team has not set capacity), note this and continue.
Fetch unassigned backlog items — work items not yet assigned to a sprint.
MCP (preferred):
mcp__azure-devops__wit_list_backlog_work_items
→ project: "{project}"
→ team: "{team}"
az CLI fallback (WIQL query for items at the root iteration — unplanned):
az boards query \
--wiql "SELECT [System.Id],[System.Title],[System.WorkItemType],[System.State],[Microsoft.VSTS.Common.Priority],[Microsoft.VSTS.Scheduling.StoryPoints] \
FROM WorkItems \
WHERE [System.TeamProject] = '{project}' \
AND [System.IterationPath] = '{project}' \
AND [System.State] NOT IN ('Done','Closed','Removed') \
ORDER BY [Microsoft.VSTS.Common.Priority] ASC, [System.CreatedDate] ASC" \
--project "{project}" --org "{org}" -o json 2>&1
Present the backlog:
### Unplanned Backlog ({N} items)
| ID | Title | Type | Priority | Story Points | State |
|----|-------|------|----------|-------------|-------|
| #1234 | Add export feature | User Story | 1 | 5 | New |
| #1235 | Fix login timeout | Bug | 2 | 2 | Active |
For each backlog item the user wants to assign, update its IterationPath.
MCP (preferred):
mcp__azure-devops__wit_update_work_item
→ id: {workItemId}
→ fields:
System.IterationPath: "{project}\\{sprintName}"
az CLI fallback:
az boards work-item update \
--id {id} \
--fields "System.IterationPath={project}\\{sprintName}" \
--org "{org}" \
-o json 2>&1
After assigning, confirm:
Assigned #1234 "Add export feature" → Sprint 23
When assigning multiple items, batch them in parallel calls where possible.
If the user needs a new sprint that does not yet exist, create it at the project level and then assign it to the team.
6a. Create the iteration:
MCP (preferred):
mcp__azure-devops__work_create_iterations
→ project: "{project}"
→ name: "{sprintName}"
→ startDate: "{YYYY-MM-DD}"
→ finishDate: "{YYYY-MM-DD}"
az CLI fallback:
az boards iteration project create \
--name "{sprintName}" \
--start-date "{YYYY-MM-DD}" \
--finish-date "{YYYY-MM-DD}" \
--project "{project}" \
--org "{org}" \
-o json 2>&1
6b. Assign the iteration to the team:
MCP (preferred):
mcp__azure-devops__work_assign_iterations
→ project: "{project}"
→ team: "{team}"
→ iterationId: "{newIterationId}"
az CLI fallback:
az boards iteration team add \
--iteration-id "{iterationId}" \
--team "{team}" \
--project "{project}" \
--org "{org}" \
-o json 2>&1
Confirm creation:
Created iteration "{sprintName}" ({startDate} – {finishDate}) and assigned to {team}.
If the user wants to set or adjust team member capacity for an iteration:
MCP (preferred):
mcp__azure-devops__work_update_team_capacity
→ project: "{project}"
→ team: "{team}"
→ iterationId: "{iterationId}"
→ teamMemberCapacities: [
{ teamMember: { id: "{userId}" }, capacityPerDay: {hours}, daysOff: [] }
]
Note: Capacity updates are not well-supported by the az CLI. Use the ADO web interface as fallback if the MCP call fails.
After updating, re-fetch with work_get_team_capacity and display the updated capacity table.
| Tool | Purpose |
|------|---------|
| work_list_iterations | List all project iterations |
| work_list_team_iterations | List iterations assigned to a team |
| work_create_iterations | Create new iteration |
| work_assign_iterations | Assign iteration to a team |
| work_get_iteration_capacities | Get capacity for an iteration |
| work_get_team_capacity | Get team capacity across iterations |
| work_update_team_capacity | Update team member capacity |
Use these when MCP tools are not available in the current session:
# List team iterations
az boards iteration team list \
--team "{team}" --project "{project}" --org "{org}" -o table
# Show capacity for an iteration
az boards iteration team show-capacity \
--iteration "{iterationPath}" \
--team "{team}" --project "{project}" --org "{org}" -o json
# Query unplanned backlog items
az boards query \
--wiql "SELECT [System.Id],[System.Title],[System.WorkItemType],[System.State],[Microsoft.VSTS.Common.Priority] \
FROM WorkItems WHERE [System.TeamProject]='{project}' \
AND [System.IterationPath]='{project}' \
AND [System.State] NOT IN ('Done','Closed','Removed') \
ORDER BY [Microsoft.VSTS.Common.Priority] ASC" \
--project "{project}" --org "{org}" -o table
# Assign a work item to a sprint
az boards work-item update \
--id {id} \
--fields "System.IterationPath={project}\\{sprintName}" \
--org "{org}" -o json
# Create a new iteration
az boards iteration project create \
--name "{sprintName}" \
--start-date "{YYYY-MM-DD}" \
--finish-date "{YYYY-MM-DD}" \
--project "{project}" --org "{org}" -o json
# Assign iteration to team
az boards iteration team add \
--iteration-id "{iterationId}" \
--team "{team}" --project "{project}" --org "{org}" -o json
| Error | Action |
|-------|--------|
| .omcp/config.json missing | Tell user to run /oh-my-copilot:omc-ado-setup first |
| team not found in config | Prompt user to provide team name; use project name as default |
| az login required | Prompt user to authenticate; skip that step and continue with available data |
| Iteration not found | Verify the iteration name/path matches exactly what ADO returns in Step 2 |
| Capacity data unavailable | Note that team has not configured capacity; continue with backlog review |
| Rate limit / 429 | Wait 2 seconds and retry once; if still failing, note the section as unavailable |
| work_update_team_capacity fails | Advise user to set capacity via ADO web UI at {org}/{project}/_sprints/capacity |
tools
Durable multi-goal workflow that persists plan/ledger artifacts under .omcp/ultragoal and prints Claude /goal handoff text for the active session
tools
testing
Evidence-driven tracing lane that orchestrates competing tracer hypotheses in Claude built-in team mode
tools
Consensus planning entrypoint that auto-gates vague ralph/autopilot/team requests before execution