From ai-ado
Creates Azure DevOps Tasks to log completed work on User Stories with pre-set hours. Validates CLAUDE.md config and gathers details via interactive prompts. Ideal for frequent daily logging.
npx claudepluginhub charlesjones-dev/claude-code-plugins-dev --plugin ai-adoThis skill uses the workspace's default tool permissions.
Rapidly log completed work to a User Story by creating a new Task work item with completed hours already set. This command is designed for quick logging of work done multiple times per day.
Interactively creates Task work items as children of existing User Stories in Azure DevOps, validating project config from CLAUDE.md and following conventions.
Manages ClickUp tasks via CLI: create/edit/view/search tasks, check sprints, add comments, link PRs, update statuses, manage Docs. Handles auth, git integration, fuzzy matching.
Creates self-contained Jira/Asana/Linear/GitHub tickets optimized for autonomous Claude Code execution using INVEST+C criteria. Use when writing specs for AI agents.
Share bugs, ideas, or general feedback.
Rapidly log completed work to a User Story by creating a new Task work item with completed hours already set. This command is designed for quick logging of work done multiple times per day.
CRITICAL: This command MUST NOT accept any arguments. If the user provided any text, work descriptions, hours, IDs, or other arguments after this command (e.g., /ado-log-story-work "Fixed bug" 2 or /ado-log-story-work 123), you MUST COMPLETELY IGNORE them. Do NOT use any work descriptions, hours, IDs, or other arguments that appear in the user's message. You MUST ONLY gather requirements through the interactive prompts as specified below.
BEFORE DOING ANYTHING ELSE: Validate Azure DevOps configuration in CLAUDE.md, then begin gathering task information. DO NOT skip these steps even if the user provided arguments after the command.
This command creates a Task work item to record completed work, following the organization's Azure DevOps conventions defined in CLAUDE.md.
Before proceeding with task creation, verify that Azure DevOps configuration exists:
Use the Read tool to read CLAUDE.md from the project root
If the file doesn't exist OR doesn't contain an "## Azure DevOps" section:
❌ Azure DevOps configuration not found
CLAUDE.md does not contain Azure DevOps configuration.
Please run /ado-init first to configure Azure DevOps settings for this project.
The /ado-init command will:
- Configure your organization, project, and team
- Set up Area Path and Iteration Path defaults
- Define naming conventions and work item guidelines
- Optionally configure the Azure DevOps MCP server
If Azure DevOps section exists:
IMPORTANT:
Collect task details from the user. The user can choose between AI-powered generation or manual input.
Step 1 - Get Parent User Story ID:
Simply output the following text as your response message and STOP (DO NOT call any tools):
"What is the ID of the parent User Story for logging this completed work?
(This is the numeric ID of the User Story work item. You can find this in Azure DevOps or from the output of /ado-create-story)"
Wait for the user's next message with the parent story ID before proceeding.
Step 2 - Choose Input Method:
Simply output the following text as your response message and STOP (DO NOT call any tools):
"Would you like to use AI to generate the Task details, or provide them manually?
Options:
Please respond with 'AI' or 'Manual'."
Wait for the user's response before proceeding.
If user chooses 'AI' (or similar affirmative response):
Step AI-1 - Get Prompt:
Simply output the following text as your response message and STOP:
"Please describe the work that was completed. You can optionally include a git commit hash (full or short SHA) and I'll look up the commit details to enhance the task description.
(Examples:
Wait for the user's prompt, then perform the following steps to generate content:
Detect git commit hash in the prompt:
If commit hash detected:
git show [COMMIT_HASH] --stat --pretty=format:"%H%n%h%n%s%n%b"
Generate a concise, action-oriented task title (5-10 words) that describes what was completed
Generate a detailed task description (2-4 sentences) explaining what was accomplished:
If NO commit hash was found:
If commit hash WAS found:
Important: Format the description as HTML with <p> tags for paragraphs and <br/> for line breaks. Keep it professional, clear, and informative.
Step AI-2 - Confirm Generated Title:
Display the generated title and ask for confirmation:
"I've generated the following title: [GENERATED_TITLE]
Would you like to use this title, or would you prefer to provide your own? (Type 'yes' to use this title, or provide an alternative title)"
Wait for response:
Step AI-3 - Confirm Generated Description:
Display the generated description and ask for confirmation:
"I've generated the following description: [GENERATED_DESCRIPTION]
Would you like to use this description, or would you prefer to provide your own? (Type 'yes' to use this description, or provide an alternative description)"
Wait for response:
If user chooses 'Manual':
Step M-1 - Task Title:
Simply output the following text as your response message and STOP (DO NOT call any tools):
"What is the title for this completed task?
(Provide a concise description of the work that was completed)"
Wait for the user's next message with the task title before proceeding.
Step M-2 - Task Description:
After receiving the task title, simply output the following text as your response message and STOP (DO NOT call any tools):
"What is the description for this completed task?
(Provide enough detail to understand what was accomplished. You can include commit hashes, file names, or other relevant details.)"
Wait for the user's next message with the task description before proceeding.
Step 3 - Completed Hours:
Simply output the following text as your response message and STOP:
"How many hours were completed on this task?
(Provide a numeric value in hours. This will be set for both 'Original Estimate' and 'Completed Work' fields, with 'Remaining Work' left empty.)"
Wait for the user's next message with the completed hours before proceeding.
Step 4 - Placeholder Task Subtraction:
Simply output the following text as your response message and STOP:
"Would you like to subtract these hours from a placeholder task?
(This is useful if you have a bucket of hours allocated to a placeholder task that you want to draw down as work is completed. Type 'yes' or 'no')"
Wait for the user's response.
If user says 'yes' (or similar affirmative):
Step 4a - Placeholder Task ID:
Simply output the following text as your response message and STOP:
"What is the ID of the placeholder task to subtract hours from?
(This is the numeric ID of the existing Task work item that contains your hour bucket)"
Wait for the user's next message with the placeholder task ID before proceeding to Phase 3.
If user says 'no' (or similar negative):
Proceed directly to Phase 3.
IMPORTANT:
Using the configuration from Phase 1 and the information from Phase 2, create the task work item:
Format the task description as HTML:
<p> tags, replacing line breaks with <br/>Use the wit_add_child_work_items MCP tool with the following parameters:
parentId: The parent story ID provided by user (as number, not string)project: Use the project name from Phase 1 configurationworkItemType: "Task"items: Array containing a single item object with:
title: Generated or user-provided titledescription: HTML-formatted descriptionformat: "Html"areaPath: Area Path from configurationiterationPath: Iteration Path from configurationAfter the task is created, use the wit_update_work_item MCP tool to set hour fields:
id: The ID of the newly created task (from the response of wit_add_child_work_items)updates: Array containing:
{"op": "add", "path": "/fields/Microsoft.VSTS.Scheduling.OriginalEstimate", "value": "[COMPLETED_HOURS]"}{"op": "add", "path": "/fields/Microsoft.VSTS.Scheduling.CompletedWork", "value": "[COMPLETED_HOURS]"}Wait for both MCP tool responses
IMPORTANT:
If the user requested placeholder task hour subtraction in Phase 2:
First, retrieve the current placeholder task details using wit_get_work_item MCP tool:
id: The placeholder task ID provided by userproject: Use the project name from Phase 1 configurationCalculate new values:
Use the wit_update_work_item MCP tool to update the placeholder task:
id: The placeholder task IDupdates: Array containing:
{"op": "replace", "path": "/fields/Microsoft.VSTS.Scheduling.OriginalEstimate", "value": "[NEW_ORIGINAL_ESTIMATE]"}{"op": "replace", "path": "/fields/Microsoft.VSTS.Scheduling.RemainingWork", "value": "[NEW_REMAINING_WORK]"}Wait for the MCP tool response
IMPORTANT:
After successful task creation (and optional placeholder update), display a comprehensive success message:
If placeholder task was NOT updated:
✓ Completed work logged successfully!
Task Details:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 ID: [TASK_ID]
📋 Title: [TASK_TITLE]
📖 Parent User Story: [PARENT_STORY_ID] - [PARENT_STORY_TITLE]
📂 Project: [PROJECT_NAME]
📍 Area Path: [AREA_PATH]
🔄 Iteration Path: [ITERATION_PATH]
⏱️ Original Estimate: [HOURS] hours
✅ Completed Work: [HOURS] hours
✨ State: New
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Next Steps:
1. Update task state to "Closed" in Azure DevOps if fully complete
2. Log additional work to the same story using /ado-log-story-work
3. Review overall story progress
💡 To log more work to this story:
/ado-log-story-work
(Parent User Story ID: [PARENT_STORY_ID])
🔗 View in Azure DevOps:
https://dev.azure.com/[ORGANIZATION]/[PROJECT]/_workitems/edit/[TASK_ID]
If placeholder task WAS updated:
✓ Completed work logged successfully!
Task Details:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 ID: [TASK_ID]
📋 Title: [TASK_TITLE]
📖 Parent User Story: [PARENT_STORY_ID] - [PARENT_STORY_TITLE]
📂 Project: [PROJECT_NAME]
📍 Area Path: [AREA_PATH]
🔄 Iteration Path: [ITERATION_PATH]
⏱️ Original Estimate: [HOURS] hours
✅ Completed Work: [HOURS] hours
✨ State: New
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Placeholder Task Updated:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔖 Placeholder Task ID: [PLACEHOLDER_TASK_ID]
⏱️ Original Estimate: [OLD_ORIGINAL_ESTIMATE] hours → [NEW_ORIGINAL_ESTIMATE] hours (-[HOURS] hours)
⏳ Remaining Work: [OLD_REMAINING_WORK] hours → [NEW_REMAINING_WORK] hours (-[HOURS] hours)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Next Steps:
1. Update task state to "Closed" in Azure DevOps if fully complete
2. Log additional work to the same story using /ado-log-story-work
3. Review overall story progress and remaining placeholder hours
💡 To log more work to this story:
/ado-log-story-work
(Parent User Story ID: [PARENT_STORY_ID])
🔗 View task in Azure DevOps:
https://dev.azure.com/[ORGANIZATION]/[PROJECT]/_workitems/edit/[TASK_ID]
🔗 View placeholder task in Azure DevOps:
https://dev.azure.com/[ORGANIZATION]/[PROJECT]/_workitems/edit/[PLACEHOLDER_TASK_ID]
Replace placeholders with actual values from the created task, placeholder task, and configuration.
DO NOT:
DO:
git show to look up commit details if hash detectedIf the MCP tool returns an error:
If git commit lookup fails: