원클릭으로
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