一键导入
ob-userstory
Parse Azure DevOps user story URL and create OpenSpec change. Use when user provides an Azure DevOps URL.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Parse Azure DevOps user story URL and create OpenSpec change. Use when user provides an Azure DevOps URL.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Read-only exploration of an idea, problem, or requirement before creating a change. Clarifies what is being asked for (scope, acceptance criteria, edge cases, alternatives), using the codebase as grounding evidence, and recommends an approach. Load when exploring or clarifying a task before planning. Invoked by the /plan-explore command (interactive) and the plan-goal pipeline (autonomous).
Parse work item from any URL using browser automation. Use when user provides a URL that doesn't match GitHub/Azure/Jira CLI platforms, or when backlog platform is 'browser'.
Parse GitHub Issue URL and create OpenSpec change. Use when user provides a GitHub Issue URL.
Parse a Jira work item and create an OpenSpec change. Use when the user provides a Jira URL or a bare issue key (e.g. PROJ-123).
Generate or update ARCHITECTURE.md by analyzing the codebase structure. Safe to run at any time. Invoked by the /make-architecture command and the repo-initialize flow.
Generate or update DESIGN.md by analyzing the codebase design system (Tailwind, CSS vars, tokens, UI framework config). Safe to run at any time. Invoked by the /make-design command and the repo-initialize flow.
| name | ob-userstory |
| description | Parse Azure DevOps user story URL and create OpenSpec change. Use when user provides an Azure DevOps URL. |
| license | MIT |
| compatibility | Requires openspec CLI and Azure CLI. |
| metadata | {"author":"copilots","version":"3.1"} |
Browser MCP tools are FORBIDDEN for all Azure DevOps operations.
az config set extension.dynamic_install_allow_preview=true
az extension add --name azure-devops
az login
az devops login --organization https://dev.azure.com/{org}
az devops configure --defaults organization=https://dev.azure.com/{org} project={project}
The configure --defaults line is required: every command below relies on the default org/project instead of passing --organization.
PAT Token, go to https://dev.azure.com/{org}/_usersSettings/tokens
Create with scopes: Work Items (Read & Write) + Code (Read & Write)
Extract Work Item ID from URL
?workitem=193208 → ID: 193208/workitems/edit/193208 → ID: 193208Fetch Work Item
az boards work-item show --id 193208
Do NOT use --organization flag (uses default org).
Extract Key Fields from JSON response:
fields.System.Title → Titlefields.System.Description → Description (may be HTML, strip tags)fields.System.WorkItemType → Typefields.System.IterationPath → Sprintfields.System.State → Statefields.System.AcceptanceCriteria → AC (if present)Create OpenSpec Change
openspec new change "us-{id}-{slug}"
Use these for ALL DevOps operations, browser MCP is FORBIDDEN.
# Read work item
az boards work-item show --id <id>
# Update work item state
az boards work-item update --id <id> --state "Active"
# Read all threads
az devops invoke \
--area git --resource pullRequestThreads \
--route-parameters project={project} repositoryId=<repo> pullRequestId=<id> \
--http-method GET --api-version 7.1
# Post new comment thread (requires body.json)
az devops invoke \
--area git --resource pullRequestThreads \
--route-parameters project={project} repositoryId=<repo> pullRequestId=<id> \
--http-method POST --api-version 7.1 --in-file body.json
# Reply to existing thread
az devops invoke \
--area git --resource pullRequestThreadComments \
--route-parameters project={project} repositoryId=<repo> pullRequestId=<id> threadId=<tid> \
--http-method POST --api-version 7.1 --in-file reply.json
{
"comments": [
{
"parentCommentId": 0,
"content": "Your markdown comment here.",
"commentType": 1
}
],
"status": "active"
}
For replies, parentCommentId should be the ID of the first comment in the thread (usually 1).
Never upload images as PR attachments. Save to openspec change folder and reference via raw URL.
openspec/changes/{change-name}/images/{screenshot}.png
https://dev.azure.com/{org}/{project}/_apis/git/repositories/{repo}/items?path=openspec/changes/{change}/images/{file}.png&versionType=branch&version={branch}&api-version=7.1
Do NOT use _git/ URLs, they return HTML, not raw binary.
# Sprint board with work item
https://dev.azure.com/{org}/{project}/_sprints/backlog/{team}/{project}/Sprint%20110?workitem=193208
# Direct work item
https://dev.azure.com/{org}/{project}/_workitems/edit/193208
# PR
https://dev.azure.com/{org}/{project}/_git/{repo}/pullrequest/{pr-id}
## User Story Parsed
**Work Item:** #{id}
**Title:** {title}
**Type:** User Story
**Iteration:** {sprint}
**State:** {state}
**Change Created:** us-{id}-{slug}
After outputting the above, the lead MUST load the ob-plan-propose skill (interactive mode) to generate the proposal, specs, and tasks. After it completes, STOP and ask the user: "Ready to implement? (yes/no)", do NOT load ob-plan-apply until confirmed.
az CLI for all Azure DevOps operationsob-plan-propose skill after parsing, never skip to implementationob-plan-apply