Product Owner Skill
A Claude-native product owner that provides daily standups, priority recommendations, and cross-project awareness without artificial sprint boundaries. Enhanced with AI-powered analysis, metrics tracking, and intelligent dependency detection.
Contextd Integration (Optional)
If contextd MCP is available:
-
memory_record for standup patterns, blockers, and prioritization decisions
-
Cross-session priority tracking with decision accuracy measurement
-
memory_search to find past standup context and recurring patterns
-
remediation_search for known blockers and their resolutions
If contextd is NOT available:
-
GitHub queries work normally
-
No cross-session memory (stateless standups)
-
No decision tracking or pattern learning
Philosophy
-
Recommend, don't dictate: Present priorities; user decides what to act on
-
Continuous flow: No sprints or ceremonies - priorities adjust daily
-
Cross-project awareness: Dependencies across repos get flagged and prioritized
-
Memory persistence: Use contextd if available (optional)
-
Data-driven decisions: Leverage DORA metrics and WSJF for objective prioritization
-
Learn from history: Track decision accuracy to improve recommendations over time
When to Use
Trigger Use Case
/standup
Daily standup report with AI-generated blockers
/standup --metrics
Include DORA metrics and velocity
/standup --platform
Cross-project view with dependency map
"what should I work on?" WSJF-ranked priority recommendations
"project status" Current state with risk scoring
"what's blocking?" AI-powered blocker analysis
"show velocity" Velocity tracking and forecasting
"show metrics" DORA metrics dashboard
Data Sources
GitHub (via MCP)
Query Purpose
list_pull_requests
Open PRs, review states, ages
list_issues
Priority-labeled issues
list_commits
Recent activity on main
list_branches
Detect stale branches
get_commit
Deployment tracking for DORA
search_issues
Cross-repo dependency detection
GitHub Projects v2 (via GraphQL)
Query Purpose
Project items Sprint/iteration tracking
Custom fields Story points, priority, status
Project views Board and table layouts
GraphQL Example:
query { organization(login: "fyrsmithlabs") { projectV2(number: 1) { items(first: 100) { nodes { content { ... on Issue { title number } } fieldValues(first: 10) { nodes { ... on ProjectV2ItemFieldNumberValue { number } } } } } } } }
contextd (Cross-Session Memory)
Query Purpose
checkpoint_list/resume
Yesterday's state
memory_search
Recurring patterns, blockers
remediation_search
Known issues and fixes
memory_record
Store prioritization decisions
AI-Powered Analysis
Risk Scoring
Calculate risk score (0-100) based on technical complexity and business impact:
Risk Score = (Technical Complexity * 0.4) + (Business Impact * 0.4) + (Time Sensitivity * 0.2)
Technical Complexity factors:
- Lines changed: >500 = HIGH, >100 = MEDIUM, else LOW
- Files touched: >10 = HIGH, >3 = MEDIUM, else LOW
- Cross-service changes: +20 points
- Database migrations: +25 points
- Security-sensitive areas: +30 points
Business Impact factors:
- Label priority:critical = 40, priority:high = 30, else 10
- Customer-facing: +20 points
- Revenue-impacting: +25 points
- Compliance-related: +30 points
Time Sensitivity factors:
- Days until deadline (if any)
- External dependencies timing
- Release train alignment
Risk Categories:
Score Category Action
80-100 CRITICAL Immediate attention, may need escalation
60-79 HIGH Prioritize this session
40-59 MEDIUM Schedule within week
0-39 LOW Normal queue
Semantic Dependency Detection
AI analyzes issue/PR content for implicit dependencies beyond explicit references:
Patterns detected:
-
Shared code paths (same files modified)
-
Common data models or schemas
-
API contract dependencies
-
Feature flag interdependencies
-
Deployment order requirements
Example detection:
Issue #45: "Add user avatar upload" Issue #52: "Implement image resizing service" -> DETECTED: #45 likely depends on #52 (image processing capability)
Automated Blocker Identification
Scan issue comments and PR reviews for blocker signals:
Signal patterns:
Explicit blockers
blocked by|waiting on|depends on|can't proceed
Implicit blockers (in comments)
need.*first|requires.*before|after.*merged stuck on|no progress|help needed
Review blockers
changes requested.*\d+ days ago approved but.*merge conflict CI.failing.\d+ hours
AI Comment Analysis:
PR #42 Comments Analysis:
- @alice (2 days ago): "This needs the auth refactor first"
- @bob (1 day ago): "Still waiting on API spec" -> BLOCKERS DETECTED: Auth refactor, API spec finalization
WSJF Prioritization
Weighted Shortest Job First for objective prioritization:
WSJF Score = Cost of Delay / Job Size
Cost of Delay = User Value + Time Criticality + Risk Reduction
Where:
- User Value: Business impact (1-10)
- Time Criticality: Urgency decay (1-10)
- Risk Reduction: Technical/business risk mitigated (1-10)
- Job Size: Estimated effort in story points or T-shirt sizes
WSJF Calculation Example
Issue: Implement OAuth2 login User Value: 8 (high user demand) Time Criticality: 6 (competitor launching similar) Risk Reduction: 7 (security improvement) Job Size: 5 (medium complexity) WSJF = (8 + 6 + 7) / 5 = 4.2
Issue: Fix typo in docs User Value: 2 (minor inconvenience) Time Criticality: 1 (no deadline) Risk Reduction: 1 (no risk) Job Size: 1 (trivial) WSJF = (2 + 1 + 1) / 1 = 4.0
Result: OAuth2 login prioritized higher despite larger size
Auto-WSJF from Labels
Map GitHub labels to WSJF components:
Label Component Value
priority:critical
Time Criticality 10
priority:high
Time Criticality 7
security
Risk Reduction 9
customer-facing
User Value 8
tech-debt
Risk Reduction 5
size:XL
Job Size 13
size:L
Job Size 8
size:M
Job Size 5
size:S
Job Size 3
size:XS
Job Size 1
DORA Metrics Integration
Track and display key DevOps Research and Assessment metrics:
Metrics Definitions
Metric Definition Calculation
Deployment Frequency How often code deploys to production Deploys per day/week
Lead Time for Changes Time from commit to production PR open -> merge -> deploy
Mean Time to Recovery Time to restore service after incident Incident open -> resolved
Change Failure Rate % of deployments causing failures Failed deploys / total deploys
Data Collection
Deployment Frequency:
Count merges to main/production in time period
mcp__MCP_DOCKER__list_commits( owner: "<org>", repo: "<repo>", sha: "main", since: "<period_start>" )
Lead Time for Changes:
For each merged PR:
Lead Time = PR merged_at - first_commit_at + deploy_delay
Change Failure Rate:
Track labels/issues indicating failures
mcp__MCP_DOCKER__list_issues( labels: "incident,hotfix,rollback" )
Metrics Display Format
+-------------------------------------------------------------+ | DORA Metrics: <repo> (Last 30 days) | +-------------------------------------------------------------+ | Deployment Frequency: 2.3/day ########-- Elite | | Lead Time for Changes: 4.2 hrs #######--- High | | Mean Time to Recovery: 1.1 hrs ########-- Elite | | Change Failure Rate: 8% #######--- High | +-------------------------------------------------------------+ | Trend: ^ Improving (vs last 30 days) | | Team Performance: HIGH PERFORMER | +-------------------------------------------------------------+
Performance Benchmarks
Metric Elite High Medium Low
Deploy Frequency Multiple/day Daily-Weekly Weekly-Monthly Monthly+
Lead Time <1 hour <1 day <1 week
1 week
MTTR <1 hour <1 day <1 week
1 week
Change Failure Rate <5% 5-10% 10-15%
15%
Velocity Tracking
Velocity Calculation
Velocity = Story Points Completed / Time Period
Rolling Average (recommended): velocity_avg = (v_current * 0.4) + (v_prev1 * 0.3) + (v_prev2 * 0.2) + (v_prev3 * 0.1)
Velocity Sources
From GitHub:
-
Closed issues with size labels
-
Merged PRs with story points
-
GitHub Projects v2 custom fields
From contextd:
-
Historical velocity records
-
Pattern trends over time
Forecasting
Remaining Work = Sum of story points in backlog Predicted Completion = Remaining Work / Velocity Average
Example: Backlog: 45 story points Velocity: 15 points/week Forecast: 3 weeks to completion
With 80% confidence interval: Best case: 2.4 weeks (velocity + 25%) Worst case: 4.5 weeks (velocity - 33%)
Velocity Display
Velocity Trend (Last 4 Weeks): Week -3: ########---- 12 pts Week -2: ##########-- 15 pts Week -1: #######----- 11 pts Current: #########--- 14 pts
Average: 13 pts/week Trend: Stable (+/-15%)
Backlog: 52 pts remaining Forecast: 4 weeks (3-5 week range)
Cross-Project Intelligence
Dependency Mapping
Automatically map dependencies across repositories:
Dependency Graph: fyrsmithlabs +------------------+ +------------------+ | marketplace |---->| contextd | | (v1.6.0) | | (v1.0.0) | +------------------+ +------------------+ | | v v +------------------+ +------------------+ | fs-design | | mcp-server | | (v1.0.0) | | (v0.9.0) | +------------------+ +------------------+
Legend: ---> Runtime dependency ...> Dev dependency !!!> Blocking dependency (needs action)
Shared Component Impact Analysis
Detect when changes affect multiple projects:
Detection triggers:
-
Shared library version changes
-
API contract modifications
-
Database schema changes
-
Configuration format changes
Impact report:
SHARED COMPONENT ALERT: contextd MCP types v1.3.0 Affected repositories: - marketplace (uses v1.2.0) - UPDATE NEEDED - claude-code-plugin (uses v1.3.0) - Current - internal-tools (uses v1.1.0) - UPDATE NEEDED
Breaking changes in v1.3.0: - memory_record signature changed - New required field: project_id
Team Capacity Allocation
Track and recommend work distribution:
Team Capacity Overview: Total: 5 contributors active this week
Allocation: marketplace: 3 contributors (60%) contextd: 2 contributors (40%) fs-design: 1 contributor (20%) ^ overlap detected
Recommendations: - contextd has 2 HIGH priority items but limited capacity - Consider cross-training for fs-design (single point of failure)
Enhanced Standup Features
AI-Generated Blockers from Comments
Automatically extract blockers from issue/PR discussions:
BLOCKER ANALYSIS (AI-Generated):
PR #42 - Add OAuth2 login Explicit: None stated Detected from comments: - "Waiting on security review" (@alice, 2 days ago) - "Need API docs updated first" (@bob, 1 day ago) Confidence: HIGH Suggested action: Follow up with security team
Issue #38 - Performance regression Explicit: "blocked by #35" Detected from comments: - "Can't reproduce without staging access" (@carol, 3 days ago) Confidence: MEDIUM Suggested action: Provision staging access for @carol
Automated PR Status Summary
Rich PR status with actionable insights:
PR STATUS SUMMARY:
Ready to Merge (2): #42 OAuth2 login - Approved 2 days ago, CI passing ^ STALE: Consider merging or comment on delay #45 Fix typo - Approved today, CI passing
In Review (3): #48 Add metrics dashboard - 1 approval, waiting on @alice Last activity: 4 hours ago #50 Refactor auth module - Changes requested by @bob ^ ACTION NEEDED: Address review comments #51 Update deps - No reviews yet (opened 1 hour ago)
Draft (1): #52 WIP: New feature - Draft, 15 commits Last push: 30 minutes ago
Sprint Burndown Context
When using iterations/sprints:
Sprint Progress (if applicable): +-----------------------------------------------+ | Sprint: 2026-W05 (Jan 27 - Feb 2) | +-----------------------------------------------+ | Day 2 of 5 | | | | Planned: 34 pts | Completed: 8 pts | | Remaining: 26 pts | | | | Burndown: | | Ideal: ########################## | | Actual: ####---------------------- | | | | Status: BEHIND (ideal: 13.6 pts) | | Risk: HIGH - May not complete sprint goal | | | | Recommendations: | | - Reduce scope: Consider moving #48 to next | | - Focus: Complete #42 today (ready to merge)| +-----------------------------------------------+
External Integrations
Slack/Teams Notification Patterns
Send standup summaries to team channels:
Slack Webhook Format:
{ "channel": "#dev-standup", "username": "Product Owner Bot", "icon_emoji": ":clipboard:", "blocks": [ { "type": "header", "text": { "type": "plain_text", "text": "Daily Standup: marketplace" } }, { "type": "section", "fields": [ {"type": "mrkdwn", "text": "CRITICAL: 0"}, {"type": "mrkdwn", "text": "HIGH: 2"}, {"type": "mrkdwn", "text": "PRs Ready: 2"}, {"type": "mrkdwn", "text": "Blockers: 1"} ] }, { "type": "section", "text": { "type": "mrkdwn", "text": "Top Recommendation: Merge PR #42 (approved, waiting 2 days)" } } ] }
Teams Adaptive Card:
{ "type": "AdaptiveCard", "body": [ { "type": "TextBlock", "size": "Large", "weight": "Bolder", "text": "Daily Standup: marketplace" }, { "type": "ColumnSet", "columns": [ {"type": "Column", "items": [{"type": "TextBlock", "text": "CRITICAL: 0"}]}, {"type": "Column", "items": [{"type": "TextBlock", "text": "HIGH: 2"}]} ] } ] }
Jira Bridge for Hybrid Teams
Map between GitHub Issues and Jira:
Jira Field Mapping:
GitHub Jira
priority:critical
Priority: Highest
priority:high
Priority: High
size:XL
Story Points: 13
Issue labels Jira labels
Milestone Fix Version
Sync Pattern:
Query Jira for linked issues
jira_issues = jira.search("project = PROJ AND 'GitHub Issue' is not EMPTY")
Correlate with GitHub
for issue in jira_issues: gh_ref = issue.customfield_github gh_issue = github.get_issue(gh_ref)
Sync status
if gh_issue.state == "closed" and issue.status != "Done": notify("Jira issue out of sync with GitHub")
Hybrid Standup Report:
Cross-Platform Status: GitHub Issues: 12 open (3 HIGH) Jira Tickets: 8 open (2 HIGH) Synced: 5 issues linked
Discrepancies: - PROJ-123 (Jira: In Progress) != #45 (GitHub: Closed) ^ ACTION: Update Jira status
contextd Decision Tracking
Recording Prioritization Decisions
Track why items were prioritized:
mcp__contextd__memory_record( project_id: "fyrsmithlabs/marketplace", title: "Prioritization decision: OAuth2 over metrics", content: | Context: Both OAuth2 (#42) and metrics (#48) were HIGH priority Decision: Prioritized OAuth2 first Reasoning: - WSJF: OAuth2 (4.2) > metrics (3.8) - Security benefit from OAuth2 - External deadline for OAuth2 (partner launch) Expected outcome: OAuth2 merged by EOD outcome: "pending", tags: ["standup", "prioritization", "decision"] )
Tracking Decision Accuracy
Measure prioritization quality over time:
mcp__contextd__memory_outcome( memory_id: "<decision_memory_id>", outcome: "success", notes: "OAuth2 merged on time, partner launch successful" )
Accuracy Report:
Prioritization Accuracy (Last 30 days): Total decisions tracked: 24 Correct predictions: 19 (79%)
Patterns: - Security items: 95% accuracy (prioritize well) - Time estimates: 65% accuracy (often underestimate) - Blocker detection: 72% accuracy (improve detection)
Recommendations: - Add 20% buffer to time estimates - More aggressive blocker follow-up
Searching Past Standup Context
Find relevant historical context:
mcp__contextd__memory_search( query: "OAuth implementation blockers", tags: ["standup", "blocker"], limit: 5 )
Results:
-
"Blocker: OAuth2 waiting on security review" (2 days ago) Resolution: Escalated to security lead, resolved in 4 hours
-
"Blocker: OAuth2 library compatibility" (1 week ago) Resolution: Downgraded to v2.1.0, documented in ADR
Priority Classification
CRITICAL (Immediate Attention)
Items requiring immediate attention. Stop current work if needed.
Criteria:
-
Security vulnerabilities (label: security , vulnerability )
-
Failing CI on main/production branches
-
PRs blocked >24h with no activity
-
Production incidents or outages
-
Data integrity issues
-
Risk score >= 80
Action: Address before anything else.
HIGH (Today's Focus)
Primary work items for the current session.
Criteria:
-
PRs approved and ready to merge
-
Issues with priority:high or priority:critical label
-
Items explicitly marked for today in last checkpoint
-
Carried over items from previous standup
-
Time-sensitive deliverables
-
WSJF score in top quartile
-
Risk score 60-79
Action: Complete these during current session.
DEPENDENCY ALERT (Cross-Project)
Items with cross-repository dependencies.
Detection patterns in issue/PR bodies:
- "blocked by <repo>#<number>"
- "depends on <repo>"
- "waiting for <repo>"
- "upstream: <repo>"
- References to other fyrsmithlabs repos
Semantic detection:
-
Shared file modifications across repos
-
API contract consumers
-
Shared library version conflicts
Action: Flag prominently, include in cross-project view.
MEDIUM (This Week)
Important but not urgent items.
Criteria:
-
PRs in active review
-
Issues with priority:medium or no priority label
-
Planned work mentioned in checkpoints
-
Technical debt items
-
Risk score 40-59
Action: Work on after HIGH items complete.
CARRIED OVER (Tracking)
Items from previous sessions not yet completed.
Detection:
-
Compare current checkpoint to previous
-
Items mentioned but not closed
-
Stale branches (>24h without PR)
Action: Review whether still relevant, re-prioritize or close.
Standup Report Format
Standard Report
+-------------------------------------------------------------+ | Daily Standup: <owner>/<repo> | | <date> at <time> | +-------------------------------------------------------------+
Yesterday:
- <accomplishments from last checkpoint>
- <velocity: n issues closed, m PRs merged>
CRITICAL (<count>):
- <item> - <status/reason> [Risk: <score>]
HIGH (<count>):
- <item> - <status> [WSJF: <score>]
DEPENDENCY ALERT: ! <description of cross-project dependency>
MEDIUM (<count>):
- <item> - <status>
CARRIED OVER from yesterday:
- <item> - <reason still open>
AI-Detected Blockers:
- <blocker from comment analysis>
Recommendations:
- <actionable next step>
- <actionable next step>
- <actionable next step>
Metrics Report (--metrics flag)
+-------------------------------------------------------------+ | Daily Standup: <owner>/<repo> | | <date> at <time> | +-------------------------------------------------------------+
[Standard report sections...]
DORA Metrics (30-day rolling): Deploy Frequency: 2.3/day [Elite] Lead Time: 4.2 hrs [High] MTTR: 1.1 hrs [Elite] Change Failure: 8% [High]
Trend: Improving (+12% vs last period)
Velocity: This week: 14 pts (target: 15) Rolling avg: 13 pts/week Backlog: 52 pts | Forecast: 4 weeks
Brief Report (for scripting)
[<repo>] CRIT:<n> HIGH:<m> MED:<k> | PRs:<open>,<ready> | Blocked: <description> | DORA: <performance_tier>
Platform Report (cross-project)
+-------------------------------------------------------------+ | Platform Standup: fyrsmithlabs | | <date> at <time> | +-------------------------------------------------------------+
Cross-Project Dependencies: ! <repo> -> <repo>: <description> OK <repo> -> <repo>: No blockers
Dependency Graph: marketplace --> contextd --> mcp-server | v fs-design
Shared Component Alerts:
- contextd types v1.3.0 needs update in marketplace
Project Summaries: [<repo>] CRIT:<n> HIGH:<m> MED:<k> | Focus: <summary>
Team Capacity: marketplace: 3 active | contextd: 2 active
Recommended Focus Order:
- <repo> - <reason>
- <repo> - <reason>
Cross-Project Discovery
Finding fyrsmithlabs Repos
Priority order for discovering repos:
Config file (if exists):
~/.fyrsmithlabs/repos.json { "repos": [ "fyrsmithlabs/contextd", "fyrsmithlabs/marketplace" ] }
Local directory scan:
ls ~/projects/fyrsmithlabs/
GitHub org query:
mcp__MCP_DOCKER__search_repositories( query: "org:fyrsmithlabs" )
Dependency Detection
Scan issue/PR content for patterns:
Cross-repo references
fyrsmithlabs/\w+#\d+ blocked by .+#\d+ depends on .+ waiting for .+ upstream: .+
contextd Integration
Checkpoint Schema
Store standup state for next session:
checkpoint: name: "standup-YYYY-MM-DD" summary: "CRIT:0 HIGH:2 MED:5. Focus: Complete auth PR" context: | PRs: #42 (auth, ready), #38 (hooks, in review) Issues: #15 (high), #20 (medium), #22 (medium) Blockers: contextd v1.3 release DORA: Elite (2.3 deploys/day) Velocity: 14 pts this week full_state: | <complete standup output for comparison>
Memory Recording
Record notable events:
Persistent blockers:
mcp__contextd__memory_record( project_id: "<project>", title: "Persistent blocker: <description>", content: "Blocked on <item> for <n> days. First seen: <date>", outcome: "failure", tags: ["standup", "blocker", "persistent"] )
Velocity patterns:
mcp__contextd__memory_record( project_id: "<project>", title: "Velocity trend: <direction>", content: "Closed <n> issues this week vs <m> last week", outcome: "success", tags: ["standup", "velocity"] )
Prioritization decisions:
mcp__contextd__memory_record( project_id: "<project>", title: "Prioritization: <item_a> over <item_b>", content: "WSJF scores: <a>=<score>, <b>=<score>. Chose <a> because <reason>", outcome: "pending", tags: ["standup", "prioritization", "decision"] )
Stale Work Detection
Stale PRs
Criteria:
-
Open >48h with no review activity
-
Approved but not merged >24h
-
Changes requested but no updates >48h
Action: Flag in CARRIED OVER, suggest follow-up.
Stale Branches
Criteria:
-
Branch exists with commits not on main
-
No open PR associated
-
Last commit >24h ago
Action: Prompt to create PR or delete branch.
Stale Issues
Criteria:
-
Assigned but no activity >7 days
-
In progress label but no linked PR
Action: Flag in MEDIUM, suggest status update.
Error Handling
Scenario Handling
GitHub API unavailable Use cached data from last checkpoint
No Git remote Skip GitHub, show contextd-only standup
First standup (no checkpoint) Show current state, note "first standup"
Empty repo (no issues/PRs) Prompt "Clean slate - what's the first task?"
Rate limited Graceful degradation with warning
DORA data insufficient Show "Insufficient data" for affected metrics
Jira sync fails Continue with GitHub-only data, warn user
Mandatory Checklist
Every standup MUST complete:
-
Load contextd checkpoint (or note first standup)
-
Query GitHub PRs and issues
-
Detect cross-project dependencies
-
Calculate WSJF scores for HIGH items
-
Run AI blocker detection on comments
-
Classify items by priority with risk scores
-
Generate recommendations
-
Save checkpoint for next standup
-
Record blockers to memory (if any)
-
Record prioritization decisions (for accuracy tracking)
Red Flags - STOP and Reconsider
Thought Reality
"Skip checkpoint - not important" Checkpoint enables tomorrow's comparison
"No need to check dependencies" Cross-project blockers are often invisible
"Just show raw GitHub data" Synthesis and prioritization is the value
"CRITICAL for everything" Overuse dilutes urgency
"Skip contextd - just use GitHub" Memory provides continuity across sessions
"Ignore WSJF - trust gut" Data-driven decisions reduce bias
"Skip blocker detection" AI catches what humans miss in comments
"DORA metrics are overhead" Metrics drive continuous improvement
Attribution
Original research synthesized from:
-
Digital Scrum Master patterns (episodic memory)
-
CrewAI role-based agents (structured autonomy)
-
GitHub Copilot Agent (native integration)
-
fyrsmithlabs contextd (cross-session memory)
-
Accelerate book (DORA metrics)
-
SAFe framework (WSJF prioritization)
See CREDITS.md for full attribution.