| name | ob-userstory |
| description | 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'. |
| license | MIT |
| compatibility | Requires opencode-browser extension and openspec CLI. |
| metadata | {"author":"copilots","version":"1.0"} |
This skill is used when the backlog platform is set to "Others (Browser)": when there is no CLI integration for the backlog system, or the user doesn't have API tokens. Work items are read directly from the web page using the opencode-browser plugin.
This skill OVERRIDES the browser-automation skill's "external navigation forbidden" rule: but ONLY for URLs the user explicitly provides as work items. Do not navigate to arbitrary URLs.
Prerequisites
- opencode-browser extension installed and running (installed during onboarding)
- The user must be authenticated to the backlog system in their browser (e.g. logged into Azure DevOps, Jira, Trello, Linear, etc.)
Steps
-
Extract the URL from the user's message
- The user provides a direct URL to a work item, issue, ticket, or PBI
- Examples:
https://dev.azure.com/org/project/_workitems/edit/123, https://linear.app/team/issue/ENG-123, https://trello.com/c/abc123, https://your-tool.com/ticket/456
-
Navigate to the URL
browser_open_tab url="https://the-url-the-user-provided"
-
Wait for the page to load
browser_wait ms=3000
-
Read the work item content
browser_query mode="page_text"
Also try to get structured content:
browser_snapshot
The accessibility snapshot often reveals the work item title, description, and fields more precisely than raw page text.
-
Parse work item fields
From the page text and/or snapshot, extract:
- Title/Summary: usually the main heading or the
<h1> / page title
- Description: the body text, acceptance criteria, or "Definition of Done" section
- ID/Key: the work item ID from the URL or page (e.g.
123, ENG-123)
- Status: if visible (e.g. "To Do", "In Progress", "Active")
- Assignee: if visible
- Priority: if visible
- Labels/Tags: if visible
If the page is a SPA (Single Page Application) that loads content dynamically:
- Wait longer (
browser_wait ms=5000)
- Use
browser_query with mode=page_text after the wait
- Try
browser_snapshot which may capture more structured content
-
Create OpenSpec Change
openspec new change "{slug-from-title}"
Write proposal.md with:
- Title: the work item title from the page
- Context: mention the source URL and the work item ID
- Requirements: extracted from description + acceptance criteria
- Scope: what's in/out based on the ticket
-
Report
Tell the user:
- Work item fetched from: {url}
- Title: {title}
- ID: {id} (if found)
- OpenSpec change created: {change-name}
After reporting, 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.
Working with common backlog tools
Azure DevOps (browser fallback)
- URL:
https://dev.azure.com/{org}/{project}/_workitems/edit/{id}
- Title: visible in the work item header
- Description: "Description" field section
- Acceptance Criteria: "Acceptance Criteria" field section
- State: visible in the top-right area
Linear
- URL:
https://linear.app/{team}/issue/{key}
- Title: the issue title
- Description: the issue body
- Status: visible as a dropdown
Jira (browser fallback)
- URL:
https://yoursite.atlassian.net/browse/{key}
- Title: the issue summary
- Description: the description field
- Status: visible in the status badge
Trello
- URL:
https://trello.com/c/{short-id}
- Title: the card title
- Description: the card description
- Labels: visible as colored badges
Other tools (generic)
- Look for
<h1> or page title for the work item title
- Look for the main content area for description
- Use
browser_snapshot to get structured accessibility tree data
Rules
- ONLY navigate to URLs the user explicitly provides: never guess or browse randomly
- The user must already be authenticated in their browser to the backlog system
- If the page requires login and the user isn't authenticated, tell them to log in via their browser and retry
- Do NOT use this skill for GitHub/Azure/Jira URLs when the CLI is configured for those platforms: use the CLI-based skill instead (faster, more reliable, no browser needed)
- Do NOT modify anything on the page: this skill is read-only (no clicking buttons, no changing status)
- Do NOT store or output any credentials or sensitive page content
- Browser is a backlog-only platform: it has no PR or repo integration. PR creation uses the repo platform configured separately