← Plugin catalog
Productivity

Atlassian Rovo

Atlassian Pty Ltd v2.0.1

The Atlassian Rovo MCP Server connects ChatGPT and Codex to your Atlassian workspace, so you can work with Jira, Confluence, Bitbucket, Loom, and more directly from your conversation. Find and summarize Jira issues, create and update tickets, transition statuses, and add comments without switching tabs. Search, read, draft, and edit Confluence pages with full context. Supporting both read and write actions, the server lets you retrieve information and take action in real time. Dedicated UI components for Jira and Confluence bring issue details, page content, and updates right into ChatGPT, so you can review and act without leaving the conversation.

Language: English · Automatically detected from descriptions.

Package details

Publisher declarations from the archived package. These are separate from our research and the live service's terms.

Package author
Atlassian Pty Ltd

Package observed Sep 30, 2026.

Files & skills

File archives

Plugin package17 files · 51.6 KBBrowse files →
Skill instructions
capture-tasks-from-meeting-notes14.7 KB

View saved version →

---
name: capture-tasks-from-meeting-notes
description: "Analyze meeting notes to find action items and create Jira tasks for assigned work. When an agent needs to: (1) Create Jira tasks or tickets from meeting notes, (2) Extract or find action items from notes or Confluence pages, (3) Parse meeting notes for assigned tasks, or (4) Analyze notes and generate tasks for team members. Identifies assignees, looks up account IDs, and creates tasks with proper context."
---

# Capture Tasks from Meeting Notes

## Keywords
meeting notes, action items, create tasks, create tickets, extract tasks, parse notes, analyze notes, assigned work, assignees, from meeting, post-meeting, capture tasks, generate tasks, turn into tasks, convert to tasks, action item, to-do, task list, follow-up, assigned to, create Jira tasks, create Jira tickets, meeting action items, extract action items, find action items, analyze meeting

## Overview

Automatically extract action items from meeting notes and create Jira tasks with proper assignees. This skill parses unstructured meeting notes (from Confluence or pasted text), identifies action items with assignees, looks up Jira account IDs, and creates tasks—eliminating the tedious post-meeting ticket creation process.

**Use this skill when:** Users have meeting notes with action items that need to become Jira tasks.

---

## Workflow

Follow this 7-step process to turn meeting notes into actionable Jira tasks:

### Step 1: Get Meeting Notes

Obtain the meeting notes from the user.

#### Option A: Confluence Page URL

If user provides a Confluence URL:

```
getConfluencePage(
  cloudId="...",
  pageId="[extracted from URL]",
  contentFormat="markdown"
)
```

**URL patterns:**
- `https://[site].atlassian.net/wiki/spaces/[SPACE]/pages/[PAGE_ID]/[title]`
- Extract PAGE_ID from the numeric portion
- Get cloudId from site name or use `getAccessibleAtlassianResources`

#### Option B: Pasted Text

If user pastes meeting notes directly:
- Use the text as-is
- No fetching needed

#### If Unclear

Ask: "Do you have a Confluence link to the meeting notes, or would you like to paste them directly?"

---

### Step 2: Parse Action Items

Scan the notes for action items with assignees.

#### Common Patterns

**Pattern 1: @mention format** (highest priority)
```
@Sarah to create user stories for chat feature
@Mike will update architecture doc
```

**Pattern 2: Name + action verb**
```
Sarah to create user stories
Mike will update architecture doc
Lisa should review the mockups
```

**Pattern 3: Action: Name - Task**
```
Action: Sarah - create user stories
Action Item: Mike - update architecture
```

**Pattern 4: TODO with assignee**
```
TODO: Create user stories (Sarah)
TODO: Update docs - Mike
```

**Pattern 5: Bullet with name**
```
- Sarah: create user stories
- Mike - update architecture
```

#### Extraction Logic

**For each action item, extract:**

1. **Assignee Name**
   - Text after @ symbol
   - Name before "to", "will", "should"
   - Name after "Action:" or in parentheses
   - First/last name or full name

2. **Task Description**
   - Text after "to", "will", "should", "-", ":"
   - Remove markers (@, Action:, TODO:)
   - Keep original wording
   - Include enough context

3. **Context** (optional but helpful)
   - Meeting title/date if available
   - Surrounding discussion context
   - Related decisions

#### Example Parsing

**Input:**
```
# Product Planning - Dec 3

Action Items:
- @Sarah to create user stories for chat feature
- Mike will update the architecture doc
- Lisa: review and approve design mockups
```

**Parsed:**
```
1. Assignee: Sarah
   Task: Create user stories for chat feature
   Context: Product Planning meeting - Dec 3

2. Assignee: Mike
   Task: Update the architecture doc
   Context: Product Planning meeting - Dec 3

3. Assignee: Lisa
   Task: Review and approve design mockups
   Context: Product Planning meeting - Dec 3
```

---

### Step 3: Ask for Project Key

Before looking up users or creating tasks, identify the Jira project.

**Ask:** "Which Jira project should I create these tasks in? (e.g., PROJ, PRODUCT, ENG)"

#### If User is Unsure

Call `getVisibleJiraProjects` to show options:

```
getVisibleJiraProjects(
  cloudId="...",
  action="create"
)
```

Present: "I found these projects you can create tasks in: PROJ (Project Alpha), PRODUCT (Product Team), ENG (Engineering)"

---

### Step 4: Lookup Account IDs

For each assignee name, find their Jira account ID.

#### Lookup Process

```
lookupJiraAccountId(
  cloudId="...",
  searchString="[assignee name]"
)
```

**The search string can be:**
- Full name: "Sarah Johnson"
- First name: "Sarah"
- Last name: "Johnson"
- Email: "sarah@company.com"

#### Handle Results

**Scenario A: Exact Match (1 result)**
```
✅ Found: Sarah Johnson (sarah.johnson@company.com)
→ Use accountId from result
```

**Scenario B: No Match (0 results)**
```
⚠️ Couldn't find user "Sarah" in Jira.

Options:
1. Create task unassigned (assign manually later)
2. Skip this task
3. Try different name format (e.g., "Sarah Johnson")

Which would you prefer?
```

**Scenario C: Multiple Matches (2+ results)**
```
⚠️ Found multiple users named "Sarah":
1. Sarah Johnson (sarah.johnson@company.com)
2. Sarah Smith (sarah.smith@company.com)

Which user should be assigned the task "Create user stories"?
```

#### Best Practices

- Try full name first ("Sarah Johnson")
- If no match, try first name only ("Sarah")
- If still no match, ask user
- Cache results (don't lookup same person twice)

---

### Step 5: Present Action Items

**CRITICAL:** Always show the parsed action items to the user BEFORE creating any tasks.

#### Presentation Format

```
I found [N] action items from the meeting notes. Should I create these Jira tasks in [PROJECT]?

1. [TASK] [Task description]
   Assigned to: [Name] ([email if found])
   Context: [Meeting title/date]

2. [TASK] [Task description]
   Assigned to: [Name] ([email if found])
   Context: [Meeting title/date]

[...continue for all tasks...]

Would you like me to:
1. Create all tasks
2. Skip some tasks (which ones?)
3. Modify any descriptions or assignees
```

#### Wait for Confirmation

Do NOT create tasks until user confirms. Options:
- "Yes, create all" → proceed
- "Skip task 3" → create all except #3
- "Change assignee for task 2" → ask for new assignee
- "Edit description" → ask for changes

---

### Step 6: Create Tasks

Once confirmed, create each Jira task.

#### Determine Issue Type

Before creating tasks, check what issue types are available in the project:

```
getJiraProjectIssueTypesMetadata(
  cloudId="...",
  projectIdOrKey="PROJ"
)
```

**Choose the appropriate issue type:**
- Use "Task" if available (most common)
- Use "Story" for user-facing features
- Use "Bug" if it's a defect
- If "Task" doesn't exist, use the first available issue type or ask the user

#### For Each Action Item

```
createJiraIssue(
  cloudId="...",
  projectKey="PROJ",
  issueTypeName="[Task or available type]",
  summary="[Task description]",
  description="[Full description with context]",
  assignee_account_id="[looked up account ID]"
)
```

#### Task Summary Format

Use action verbs and be specific:
- ✅ "Create user stories for chat feature"
- ✅ "Update architecture documentation"
- ✅ "Review and approve design mockups"
- ❌ "Do the thing" (too vague)

#### Task Description Format

```markdown
**Action Item from Meeting Notes**

**Task:** [Original action item text]

**Context:**
[Meeting title/date]
[Relevant discussion points or decisions]

**Source:** [Link to Confluence meeting notes if available]

**Original Note:**
> [Exact quote from meeting notes]
```

**Example:**
```markdown
**Action Item from Meeting Notes**

**Task:** Create user stories for chat feature

**Context:**
Product Planning Meeting - December 3, 2025
Discussed Q1 roadmap priorities and new feature requirements

**Source:** https://yoursite.atlassian.net/wiki/spaces/TEAM/pages/12345

**Original Note:**
> @Sarah to create user stories for chat feature
```

---

### Step 7: Provide Summary

After all tasks are created, present a comprehensive summary.

**Format:**
```
✅ Created [N] tasks in [PROJECT]:

1. [PROJ-123] - [Task summary]
   Assigned to: [Name]
   https://yoursite.atlassian.net/browse/PROJ-123

2. [PROJ-124] - [Task summary]
   Assigned to: [Name]
   https://yoursite.atlassian.net/browse/PROJ-124

[...continue for all created tasks...]

**Source:** [Link to meeting notes]

**Next Steps:**
- Review tasks in Jira for accuracy
- Add any additional details or attachments
- Adjust priorities if needed
- Link related tickets if applicable
```

---

## Action Item Pattern Examples

### Pattern 1: @Mentions (Most Explicit)

```
@john to update documentation
@sarah will create the report
@mike should review PR #123
```

**Parsed:**
- Assignee: john/sarah/mike
- Task: update documentation / create the report / review PR #123

---

### Pattern 2: Name + Action Verb

```
John to update documentation
Sarah will create the report
Mike should review PR #123
Lisa needs to test the feature
```

**Parsed:**
- Assignee: name before action verb
- Task: text after "to/will/should/needs to"

---

### Pattern 3: Structured Action Format

```
Action: John - update documentation
Action Item: Sarah - create the report
AI: Mike - review PR #123
```

**Parsed:**
- Assignee: name after "Action:" and before "-"
- Task: text after "-"

---

### Pattern 4: TODO Format

```
TODO: Update documentation (John)
TODO: Create report - Sarah
[ ] Mike: review PR #123
```

**Parsed:**
- Assignee: name in parentheses or after ":"
- Task: text between TODO and assignee

---

### Pattern 5: Bullet Lists

```
- John: update documentation
- Sarah - create the report
* Mike will review PR #123
```

**Parsed:**
- Assignee: name before ":" or "-" or action verb
- Task: remaining text

---

## Handling Edge Cases

### No Action Items Found

If no action items with assignees are detected:

```
I analyzed the meeting notes but couldn't find any action items with clear assignees.

Action items typically follow patterns like:
- @Name to do X
- Name will do X
- Action: Name - do X
- TODO: X (Name)

Options:
1. I can search for TODO items without assignees
2. You can point out specific action items to create
3. I can create tasks for bullet points you specify

What would you like to do?
```

---

### Mixed Formats

If some action items have assignees and some don't:

```
I found [N] action items:
- [X] with clear assignees
- [Y] without assignees

Should I:
1. Create all [N] tasks ([X] assigned, [Y] unassigned)
2. Only create the [X] tasks with assignees
3. Ask you to assign the [Y] unassigned tasks

Which option would you prefer?
```

---

### Assignee Name Variations

If the same person is mentioned different ways:

```
Notes mention: @sarah, Sarah, Sarah J.

These likely refer to the same person. I'll look up "Sarah" once and use 
that account ID for all three mentions. Is that correct?
```

---

### Duplicate Action Items

If the same task appears multiple times:

```
I found what appears to be the same action item twice:
1. "@Sarah to create user stories" (line 15)
2. "Action: Sarah - create user stories" (line 42)

Should I:
1. Create one task (combine duplicates)
2. Create two separate tasks
3. Skip the duplicate

What would you prefer?
```

---

### Long Task Descriptions

If action item text is very long (>200 characters):

```
The task "[long text...]" is quite detailed.

Should I:
1. Use first sentence as summary, rest in description
2. Use full text as summary
3. Let you edit it to be more concise

Which would you prefer?
```

---

## Tips for High-Quality Results

### Do:
✅ Use consistent @mention format in notes  
✅ Include full names when possible  
✅ Be specific in action item descriptions  
✅ Add context (why/what/when)  
✅ Review parsed tasks before confirming  

### Don't:
❌ Mix multiple tasks for one person in one bullet  
❌ Use ambiguous names (just "John" if you have 5 Johns)  
❌ Skip action verbs (unclear what to do)  
❌ Forget to specify project  

### Best Meeting Notes Format

```
# Meeting Title - Date

Attendees: [Names]

## Decisions
[What was decided]

## Action Items
- @FullName to [specific task with context]
- @AnotherPerson will [specific task with context]
- etc.
```

---

## When NOT to Use This Skill

This skill is for **converting meeting action items to Jira tasks only**.

**Don't use for:**
❌ Summarizing meetings (no task creation)  
❌ Finding meeting notes (use search skill)  
❌ Creating calendar events  
❌ Sending meeting notes via email  
❌ General note-taking  

**Use only when:** Meeting notes exist and action items need to become Jira tasks.

---

## Examples

### Example 1: Simple @Mentions

**Input:**
```
Team Sync - Dec 3, 2025

Action Items:
- @Sarah to create user stories for chat feature
- @Mike will update the architecture doc
- @Lisa should review design mockups
```

**Process:**
1. Parse → 3 action items found
2. Project → "PROJ"
3. Lookup → Sarah (123), Mike (456), Lisa (789)
4. Present → User confirms
5. Create → PROJ-100, PROJ-101, PROJ-102

**Output:**
```
✅ Created 3 tasks in PROJ:

1. PROJ-100 - Create user stories for chat feature
   Assigned to: Sarah Johnson
   
2. PROJ-101 - Update the architecture doc
   Assigned to: Mike Chen
   
3. PROJ-102 - Review design mockups
   Assigned to: Lisa Park
```

---

### Example 2: Mixed Formats

**Input:**
```
Product Review Meeting

Discussed new features and priorities.

Follow-ups:
- Sarah will draft the PRD
- Mike: implement API changes
- TODO: Review security audit (Lisa)
- Update stakeholders on timeline
```

**Process:**
1. Parse → Found 4 items (3 with assignees, 1 without)
2. Ask → "Found 3 with assignees, 1 without. Create all or only assigned?"
3. User → "All, make the last one unassigned"
4. Create → 4 tasks (3 assigned, 1 unassigned)

---

### Example 3: Name Lookup Issue

**Input:**
```
Sprint Planning

Action Items:
- @John to update tests
- @Sarah to refactor code
```

**Process:**
1. Parse → 2 action items
2. Lookup "John" → Found 3 Johns!
3. Ask → "Which John? (John Smith, John Doe, John Wilson)"
4. User → "John Smith"
5. Create → Both tasks assigned correctly

---

## Quick Reference

**Primary tool:** `getConfluencePage` (if URL) or use pasted text  
**Account lookup:** `lookupJiraAccountId(searchString)`  
**Task creation:** `createJiraIssue` with `assignee_account_id`  

**Action patterns to look for:**
- `@Name to/will/should X`
- `Name to/will/should X`
- `Action: Name - X`
- `TODO: X (Name)`
- `Name: X`

**Always:**
- Present parsed tasks before creating
- Handle name lookup failures gracefully
- Include context in task descriptions
- Provide summary with links

**Remember:**
- Human-in-loop is critical (show before creating)
- Name lookup can fail (have fallback)
- Be flexible with pattern matching
- Context preservation is important

Referenced files: 1

generate-status-report11 KB

View saved version →

---
name: generate-status-report
description: "Generate project status reports from Jira issues and publish to Confluence. When an agent needs to: (1) Create a status report for a project, (2) Summarize project progress or updates, (3) Generate weekly/daily reports from Jira, (4) Publish status summaries to Confluence, or (5) Analyze project blockers and completion. Queries Jira issues, categorizes by status/priority, and creates formatted reports for delivery managers and executives."
---

# Generate Status Report

## Keywords
status report, project status, weekly update, daily standup, Jira report, project summary, blockers, progress update, Confluence report, sprint report, project update, publish to Confluence, write to Confluence, post report

Automatically query Jira for project status, analyze issues, and generate formatted status reports published to Confluence.

**CRITICAL**: This skill should be **interactive**. Always clarify scope (time period, audience, Confluence destination) with the user before or after generating the report. Do not silently skip Confluence publishing—always offer it.

## Workflow

Generating a status report follows these steps:

1. **Identify scope** - Determine project, time period, and target audience
2. **Query Jira** - Fetch relevant issues using JQL queries
3. **Analyze data** - Categorize issues and identify key insights
4. **Format report** - Structure content based on audience and purpose
5. **Publish to Confluence** - Create or update a page with the report

## Step 1: Identify Scope

**IMPORTANT**: If the user's request is missing key information, ASK before proceeding with queries. Do not assume defaults without confirmation for Confluence publishing.

Clarify these details:

**Project identification:**
- Which Jira project key? (e.g., "PROJ", "ENG", "MKTG")
- If the user mentions a project by name but not key, search Jira to find the project key

**Time period:**
- If not specified, ask: "What time period should this report cover? (default: last 7 days)"
- Options: Weekly (7 days), Daily (24 hours), Sprint-based (2 weeks), Custom period

**Target audience:**
- If not specified, ask: "Who is this report for? (Executives/Delivery Managers, Team-level, or Daily standup)"
- **Executives/Delivery Managers**: High-level summary with key metrics and blockers
- **Team-level**: Detailed breakdown with issue-by-issue status  
- **Daily standup**: Brief update on yesterday/today/blockers

**Report destination:**
- **ALWAYS ASK** if not specified: "Would you like me to publish this report to Confluence? If so, which space should I use?"
- If user says yes: Ask for space name or offer to list available spaces
- Determine: New page or update existing page?
- Ask about parent page if creating under a specific section

## Step 2: Query Jira

Use the `searchJiraIssuesUsingJql` tool to fetch issues. Build JQL queries based on report needs.

### Common Query Patterns

For comprehensive queries, use the `scripts/jql_builder.py` utility to programmatically build JQL strings. For quick queries, reference `references/jql-patterns.md` for examples.

**All open issues in project:**
```jql
project = "PROJECT_KEY" AND status != Done ORDER BY priority DESC, updated DESC
```

**Issues updated in last week:**
```jql
project = "PROJECT_KEY" AND updated >= -7d ORDER BY priority DESC
```

**High priority and blocked issues:**
```jql
project = "PROJECT_KEY" AND (priority IN (Highest, High) OR status = Blocked) AND status != Done ORDER BY priority DESC
```

**Completed in reporting period:**
```jql
project = "PROJECT_KEY" AND status = Done AND resolved >= -7d ORDER BY resolved DESC
```

### Query Strategy

For most reports, execute multiple targeted queries rather than one large query:

1. **Completed issues**: Get recently resolved tickets
2. **In-progress issues**: Get active work items
3. **Blocked issues**: Get blockers requiring attention
4. **High priority open**: Get critical upcoming work

Use `maxResults: 100` for initial queries. If pagination is needed, use `nextPageToken` from results.

### Data to Extract

For each issue, capture:
- `key` (e.g., "PROJ-123")
- `summary` (issue title)
- `status` (current state)
- `priority` (importance level)
- `assignee` (who's working on it)
- `created` / `updated` / `resolved` dates
- `description` (if needed for context on blockers)

## Step 3: Analyze Data

Process the retrieved issues to identify:

**Metrics:**
- Total issues by status (Done, In Progress, Blocked, etc.)
- Completion rate (if historical data available)
- Number of high priority items
- Unassigned issue count

**Key insights:**
- Major accomplishments (recently completed high-value items)
- Critical blockers (blocked high priority issues)
- At-risk items (overdue or stuck in progress)
- Resource bottlenecks (one assignee with many issues)

**Categorization:**
Group issues logically:
- By status (Done, In Progress, Blocked)
- By priority (Highest → Low)
- By assignee or team
- By component or epic (if relevant)

## Step 4: Format Report

Select the appropriate template based on audience. Templates are in `references/report-templates.md`.

### For Executives and Delivery Managers

Use **Executive Summary Format**:
- Brief overall status (🟢 On Track / 🟡 At Risk / 🔴 Blocked)
- Key metrics (total, completed, in progress, blocked)
- Top 3 highlights (major accomplishments)
- Critical blockers with impact
- Upcoming priorities

**Keep it concise** - 1-2 pages maximum. Focus on what matters to decision-makers.

### For Team-Level Reports

Use **Detailed Technical Format**:
- Completed issues listed with keys
- In-progress issues with assignee and priority
- Blocked issues with blocker description and action needed
- Risks and dependencies
- Next period priorities

**Include more detail** - Team needs issue-level visibility.

### For Daily Updates

Use **Daily Standup Format**:
- What was completed yesterday
- What's planned for today
- Current blockers
- Brief notes

**Keep it brief** - This is a quick sync, not comprehensive analysis.

## Step 5: Publish to Confluence

**After generating the report, ALWAYS offer to publish to Confluence** (unless user explicitly said not to).

If user hasn't specified Confluence details yet, ask:
- "Would you like me to publish this report to Confluence?"
- "Which Confluence space should I use?"
- "Should this be nested under a specific parent page?"

Use the `createConfluencePage` tool to publish the report.

**Page creation:**
```
createConfluencePage(
    cloudId="[obtained from getConfluenceSpaces or URL]",
    spaceId="[numerical space ID]",
    title="[Project Name] - Status Report - [Date]",
    body="[formatted report in Markdown]",
    contentFormat="markdown",
    parentId="[optional - parent page ID if nesting under another page]"
)
```

**Title format examples:**
- "Project Phoenix - Weekly Status - Dec 3, 2025"
- "Engineering Sprint 23 - Status Report"
- "Q4 Initiatives - Status Update - Week 49"

**Body formatting:**
Write the report content in Markdown. The tool will convert it to Confluence format. Use:
- Headers (`#`, `##`, `###`) for structure
- Bullet points for lists
- Bold (`**text**`) for emphasis
- Tables for metrics if needed
- Links to Jira issues: `[PROJ-123](https://yourinstance.atlassian.net/browse/PROJ-123)`

**Best practices:**
- Include the report date prominently
- Link directly to relevant Jira issues
- Use consistent naming conventions for recurring reports
- Consider creating under a "Status Reports" parent page for organization

### Finding the Right Space

If the user doesn't specify a Confluence space:

1. Use `getConfluenceSpaces` to list available spaces
2. Look for spaces related to the project (matching project name or key)
3. If unsure, ask the user which space to use
4. Default to creating in the most relevant team or project space

### Updating Existing Reports

If updating an existing page instead of creating new:

1. Get the current page content:
```
getConfluencePage(
    cloudId="...",
    pageId="123456",
    contentFormat="markdown"
)
```

2. Update the page with new content:
```
updateConfluencePage(
    cloudId="...",
    pageId="123456",
    body="[updated report content]",
    contentFormat="markdown",
    versionMessage="Updated with latest status - Dec 8, 2025"
)
```

## Complete Example Workflow

**User request:** "Generate a status report for Project Phoenix and publish it to Confluence"

**Step 1 - Identify scope:**
- Project: Phoenix (need to find project key)
- Time period: Last week (default)
- Audience: Not specified, assume executive level
- Destination: Confluence, need to find appropriate space

**Step 2 - Query Jira:**
```python
# Find project key first
searchJiraIssuesUsingJql(
    cloudId="...",
    jql='project = "PHOENIX" OR project = "PHX"',
    maxResults=1
)

# Query completed issues
searchJiraIssuesUsingJql(
    cloudId="...",
    jql='project = "PHX" AND status = Done AND resolved >= -7d',
    maxResults=50
)

# Query blocked issues
searchJiraIssuesUsingJql(
    cloudId="...",
    jql='project = "PHX" AND status = Blocked',
    maxResults=50
)

# Query in-progress high priority
searchJiraIssuesUsingJql(
    cloudId="...",
    jql='project = "PHX" AND status IN ("In Progress", "In Review") AND priority IN (Highest, High)',
    maxResults=50
)
```

**Step 3 - Analyze:**
- 15 issues completed (metrics)
- 3 critical blockers (key insight)
- Major accomplishment: API integration completed (highlight)

**Step 4 - Format:**
Use Executive Summary Format from templates. Create concise report with metrics, highlights, and blockers.

**Step 5 - Publish:**
```python
# Find appropriate space
getConfluenceSpaces(cloudId="...")

# Create page
createConfluencePage(
    cloudId="...",
    spaceId="12345",
    title="Project Phoenix - Weekly Status - Dec 3, 2025",
    body="[formatted markdown report]",
    contentFormat="markdown"
)
```

## Tips for Quality Reports

**Be data-driven:**
- Include specific numbers and metrics
- Reference issue keys directly
- Show trends when possible (e.g., "completed 15 vs 12 last week")

**Highlight what matters:**
- Lead with the most important information
- Flag blockers prominently
- Celebrate significant wins

**Make it actionable:**
- For blockers, state what action is needed and from whom
- For risks, provide mitigation options
- For priorities, be specific about next steps

**Keep it consistent:**
- Use the same format for recurring reports
- Maintain predictable structure
- Include comparable metrics week-over-week

**Provide context:**
- Link to Jira for details
- Explain the impact of blockers
- Connect work to business objectives when possible

## Resources

### scripts/jql_builder.py
Python utility for programmatically building JQL queries. Use this when you need to construct complex or dynamic queries. Import and use the helper functions rather than manually concatenating JQL strings.

### references/jql-patterns.md
Quick reference of common JQL query patterns for status reports. Use this for standard queries or as a starting point for custom queries.

### references/report-templates.md
Detailed templates for different report types and audiences. Reference this to select the appropriate format and structure for your report.

Referenced files: 3

jira-sprint-dashboard15.1 KB

View saved version →

---
name: jira-sprint-dashboard
description: >-
  Create a visual Jira sprint dashboard from Jira project, space, sprint, board,
  filter, JQL, work item keys, or Jira URL data. Use when the user asks for a
  Jira sprint dashboard, standup dashboard, sprint review, delivery review,
  engineering manager dashboard, WIP review, planning view, closeout view, or a
  visual snapshot of Jira work that is more useful than a flat report. Use the
  richest dashboard format supported by the current agent, such as Cursor
  Canvas, an interactive artifact, HTML, or Markdown.
---

# Jira Sprint Dashboard

Build a focused dashboard that helps an engineering manager, tech lead, or
senior engineer see current Jira work quickly enough to decide what needs
attention. The output is a dashboard, not a prose report and not a generic
health score.

This skill is read-only by default. Do not create, update, transition, assign,
or comment on Jira work items unless the user explicitly asks for a write action
after reviewing the dashboard.

## Output Mode

Use the richest dashboard renderer supported by the current environment. The
dashboard content, claims, counts, and source appendix must stay consistent
across renderers; only the presentation changes.

Choose the renderer in this order:

1. Cursor Canvas, if running in Cursor with Canvas support.
2. Interactive artifact, if the current agent supports HTML, React, or similar
   artifact output.
3. Static HTML file, if file creation is available and useful.
4. Markdown dashboard, if no richer visual renderer is available.
5. Structured JSON plus concise summary, only if visual rendering is impossible.

Do not mention that Cursor Canvas is unavailable unless the user specifically
asked for Cursor Canvas. If the user asked for a dashboard generally, use the
best available renderer without apologizing for the environment.

## Cursor Canvas Renderer

Use this section only when running in Cursor with Canvas support.

Read `~/.cursor/skills-cursor/canvas/SKILL.md` before writing canvas code. If
you need exact exports or prop shapes, read the files in
`~/.cursor/skills-cursor/canvas/sdk/`.

Canvas constraints:

- Create one `.canvas.tsx` file in the Cursor canvases directory.
- Import only from `cursor/canvas`. Do not import `react`, `CSSProperties`,
  `JSX`, Atlaskit, or other packages.
- Embed Jira data inline in the canvas; do not fetch from the canvas.
- Prefer Canvas primitives such as `Stack`, `Grid`, `Card`, `Stat`, `Table`,
  `Pill`, `Callout`, `UsageBar`, `BarChart`, `LineChart`, `PieChart`, and `Code`
  over raw HTML.
- Use `useHostTheme()` for custom styles. Do not hardcode hex colors, gradients,
  box shadows, ADS variables, unsupported CSS frameworks, or `@atlaskit/*`.
- Do not publish or share the canvas unless the user asks.

## Portable Renderers

Use this section when Cursor Canvas is unavailable.

For an interactive artifact renderer:

- Render the same dashboard model as an interactive artifact.
- Prefer tables, compact charts, stat rows, and collapsible source details.
- Keep interactions lightweight: filtering, expanding details, or switching
  chart/table views is fine; do not require live Jira fetching from the artifact.

For static HTML:

- Create a self-contained dashboard file with embedded data.
- Use responsive layout, accessible tables, and simple chart-like visuals when
  chart libraries are unavailable.
- Do not fetch Jira data from the HTML file.

For Markdown:

- Preserve the dashboard order.
- Use compact tables for stats, owner load, risks, highest-priority work, and
  source appendix.
- Use textual chart substitutes only when they remain honest, such as counts,
  percentages, and simple bars.
- Avoid turning the output into a long prose report.

For JSON fallback:

- Return the normalized dashboard model.
- Include a short human-readable summary with the highest-signal risks and the
  source scope.

## Get The Scope

Do not guess the Jira scope. If the user does not provide a project key, space
key, board, sprint, filter, JQL, work item keys, or Jira URL, stop and ask for
one. A dashboard from a random visible project or guessed team context is worse
than no dashboard.

If the user gives a project or space key but no sprint, board, or filter, start
with the Jira JQL `project` field and the user's key:

```jql
project = "SPACE_KEY" AND sprint in openSprints() ORDER BY Rank ASC
```

If the open sprint result is empty, stale, or misleading, switch to snapshot
mode and say so in a compact caveat below the top bar:

```jql
project = "SPACE_KEY" AND statusCategory != Done ORDER BY priority DESC, updated ASC
project = "SPACE_KEY" AND updated >= -60d ORDER BY updated DESC
```

Use a 60-day recent movement window by default unless the user asks for another
period.

## Query Jira

Use read-only Jira search. Request only fields needed for the dashboard and
tolerate missing fields.

Useful fields: `key`, `summary`, `status`, `statusCategory`, `assignee`,
`priority`, `issuetype`, `created`, `updated`, `resolutiondate`, `duedate`,
`parent`, `issuelinks`, `labels`, `components`, `fixVersions`, `sprint`, and any
available estimate/story point field.

Start with `maxResults: 100`. For complete sprint, board, or filter dashboards,
paginate until the scope is complete or too large for useful work-item-level
rendering.

Default to one complete paginated scope query. Derive ordinary dashboard signals
locally from the returned work item set instead of issuing separate JQL calls for
each signal.

Derive these locally when the scope query returned the required fields:

- Recently completed from `statusCategory = Done` and `resolutiondate`.
- Aging unfinished from `statusCategory != Done` and `updated`.
- Unowned unfinished from `statusCategory != Done` and empty `assignee`.
- High-priority unfinished from `statusCategory != Done` and `priority`.
- Status or label blockers from `status`, `statusCategory`, and `labels`.
- Owner load, stale work, due date risk, and planning gaps from the normalized
  scope dataset.

Use targeted follow-up queries only when they are needed to support a visible
claim that cannot be derived safely from the scope data, when the scope is too
large for useful local processing, or when the user asks for an audit-style
dashboard with exact evidence per signal.

Rule of thumb:

- Small or medium sprint dashboard: prefer one full paginated scope query, with
  at most one targeted blocker-text or dependency-status follow-up when needed.
- Large scope dashboard: use narrower follow-up queries when pulling and
  processing the full work-item set would be slow or low-value.
- Evidence-heavy review: multiple focused queries are acceptable when the exact
  JQL evidence matters more than minimizing calls.

Examples of targeted follow-up queries, only when justified:

- Recently completed: `<scope> AND statusCategory = Done ORDER BY resolutiondate DESC`
- Aging unfinished: `<scope> AND statusCategory != Done AND updated <= -3d ORDER BY updated ASC`
- Unowned unfinished: `<scope> AND statusCategory != Done AND assignee is EMPTY ORDER BY priority DESC, updated ASC`
- High-priority unfinished: `<scope> AND statusCategory != Done AND priority in (Highest, High) ORDER BY priority DESC, updated ASC`
- Blocked signal: `<scope> AND statusCategory != Done AND (status = Blocked OR text ~ "blocked" OR labels in (blocked, blocker)) ORDER BY priority DESC, updated ASC`

Do not make negative claims such as "no blockers" or "no dependencies" unless
the source appendix shows the query or returned field coverage that supports the
claim. If only status and labels were checked for blockers, say that no
status/label blockers were found rather than claiming there are no blockers. If
a signal was not checked, say so.

For derived signals, cite the base scope JQL and field coverage in the source
appendix instead of inventing separate support queries. Include additional JQL
only for targeted follow-up queries that were actually run.

For work item links (`issuelinks`), fetch linked work item status/category when
possible. If linked details are unavailable, show dependency status as unknown
rather than resolved.

## Normalize

Before designing the output, create a compact renderer-independent work item
model with:

- Key, URL, summary, type, status, status category, priority
- Assignee display name or `Unassigned`
- Owner status as `active`, `inactive`, `unknown`, or `unassigned`
- Created age, updated age, resolution age when done, due date distance
- Parent/epic/workstream, sprint, estimate, components, versions, labels
- Linked work item keys, direction, link type, and linked status when available

Derived signals should stay explainable from Jira facts: done, active, not
started, stale, very stale, blocked, unowned, inactive owner, time-sensitive,
support-impacting, cross-space dependency, and missing planning data. Mark weak
text-only signals as inferred.

## Dashboard Model

Create a dashboard model before rendering. Every renderer should use this same
model.

Include:

- Context metadata: title, project or space, sprint, board, filter, JQL, window,
  query timestamp, and mode.
- Four top stats: committed or total scope, done or completed, active or in
  progress, and needs attention.
- Scope caveat, only when sprint data is missing, mixed, stale, or blended with
  recent project movement.
- Optional capacity or commitment segments, only when real data exists.
- Optional chart data, only when categories, values, units, and time ranges are
  available.
- Owner load and gaps.
- Risk and attention items.
- Highest-priority work item table.
- Recently completed work.
- Source appendix with exact JQL, field coverage, assumptions, and the
  composition of `Needs attention`.

Do not invent data to fill the model. Empty or unsupported sections should be
omitted.

## Dashboard Shape

Keep the visible dashboard simple and deterministic. When the data exists,
broadly follow this order:

1. **Compact context header**
   - Show title plus project, space, board, sprint, or window metadata.
   - Keep it short. Do not put queries, field coverage, or executive-summary
     prose at the top.

2. **Four-stat top bar**
   - Show exactly four stat values.
   - Default to committed/total scope, done/completed, active/in progress, and
     needs attention.
   - Use work item counts when story points are unavailable.
   - `Needs attention` should combine the highest-signal risks: blocked, stale,
     unassigned, time-sensitive, or unresolved linked work.
   - Put secondary counts below the fold only when they change the readout.

3. **Scope caveat, only when needed**
   - Use one compact caveat below the top bar when sprint data is missing,
     mixed, stale, or blended with recent project movement.
   - Keep it to 1 to 2 short sentences.

4. **Capacity or commitment bar**
   - Render a capacity or commitment visual only when capacity, commitment, or
     allocation segment data is available.
   - Skip it rather than inventing capacity, segment, or buffer values.

5. **Sprint charts**
   - If available, render remaining work over time as a line chart.
   - Beside it, render status distribution as a pie chart or compact status
     visual.
   - Below those, render resolved/completed per working day as a bar chart.
   - Skip any chart whose categories, values, units, or time range are missing.
     Never render placeholder, sample, empty, or guessed charts.

6. **Owner load and gaps**
   - Show active, stale, blocked, support-impacting, and done counts by assignee.
   - Include unassigned, inactive-owner, and unknown-owner-status buckets.
   - Keep it compact; prefer a small table or bar chart over per-owner cards.

7. **Risk and attention**
   - Place this below owner load.
   - Include only the work items most likely to need manager or lead attention.
   - For each item, show key, reason, evidence, owner, age, and next question.
   - Use a callout or highlighted row for the single highest delivery risk when
     one stands out.

8. **Highest-priority work item table**
   - Include a compact table of top sprint work items or top attention items.
   - Do not render every low-signal work item by default.

9. **Recently completed and optional detail**
   - If recently completed work exists, put it in a collapsed section or compact
     table below the main readout.
   - Workstream grouping and dependencies should appear only when they change
     what the viewer should inspect next.
   - Keep dependencies to unresolved or unknown-status linked work by default.

10. **Source appendix**
    - Put exact JQL, query timestamps, field coverage, assumptions, and the
      composition of `Needs attention` at the bottom.

If the full data set is unavailable, preserve the same broad order and omit the
sections or charts that cannot be rendered honestly.

## Content And Style

- Use charts and tables where they beat paragraphs.
- Follow the reference layout order when the data supports it; skip unsupported
  charts instead of changing the whole page shape.
- Keep work item summaries short; avoid full descriptions unless a short excerpt
  is needed to explain impact.
- Tie every recommendation or next question to work item keys or aggregate
  counts.
- Separate Jira facts from derived or inferred signals.
- Use semantic tones where the renderer supports them: `success` for done,
  `warning` for stale/deadline risk, `danger` for blocked/overdue/severe risk,
  `info` for caveats/linked work, and `neutral` for low-signal facts.
- Pair color with labels. Prefer work item key links over large buttons.
- Keep the first screen focused on status and attention, not process notes.

## Renderer-Specific Style

For Cursor Canvas:

- Use Canvas components and host theme styles.
- Keep the top area compact: context header followed by exactly four stats.
- Prefer Canvas tables and charts over custom layout code.

For interactive artifacts or static HTML:

- Use a restrained dashboard layout with compact cards, tables, and simple
  charts.
- Keep text readable on mobile and desktop.
- Use accessible labels for chart substitutes and status colors.
- Keep source details below the main dashboard.

For Markdown:

- Use short section headings.
- Prefer tables over paragraphs.
- Keep caveats and recommendations concise.
- Put source queries at the bottom.

## Self-Check

Before returning:

- Scope came from the user or a provided URL; missing or ambiguous scope was
  clarified before querying.
- The selected renderer matches the current environment's capabilities.
- Cursor Canvas instructions were used only when Cursor Canvas is available.
- If Cursor Canvas was used, the canvas imports only from `cursor/canvas`.
- The top area is a compact context header followed by exactly four stats.
- There is no query list, field coverage, or executive summary above the top
  bar.
- Ordinary signals were derived from the paginated scope query when possible;
  targeted follow-up queries were used only when they supported a visible claim
  that the scope data could not safely support.
- Counts reconcile with the queried work item set.
- Empty sections are omitted.
- Charts are rendered only when their categories, values, units, and time ranges
  are available.
- Risk labels are explainable from visible Jira data.
- Source appendix includes exact JQL and field coverage for visible claims.
- No Jira write tools were used.
search-company-knowledge16.7 KB

View saved version →

---
name: search-company-knowledge
description: "Search across company knowledge bases (Confluence, Jira, internal docs) to find and explain internal concepts, processes, and technical details. When an agent needs to: (1) Find or search for information about systems, terminology, processes, deployment, authentication, infrastructure, architecture, or technical concepts, (2) Search internal documentation, knowledge base, company docs, or our docs, (3) Explain what something is, how it works, or look up information, or (4) Synthesize information from multiple sources. Searches in parallel and provides cited answers."
---

# Search Company Knowledge

## Keywords
find information, search company knowledge, look up, what is, explain, company docs, internal documentation, Confluence search, Jira search, our documentation, internal knowledge, knowledge base, search for, tell me about, get information about, company systems, terminology, find everything about, what do we know about, deployment, authentication, infrastructure, processes, procedures, how to, how does, our systems, our processes, internal systems, company processes, technical documentation, engineering docs, architecture, configuration, search our docs, search internal docs, find in our docs

## Overview

Search across siloed company knowledge systems (Confluence, Jira, internal documentation) to find comprehensive answers to questions about internal concepts, systems, and terminology. This skill performs parallel searches across multiple sources and synthesizes results with proper citations.

**Use this skill when:** Users ask about internal company knowledge that might be documented in Confluence pages, Jira tickets, or internal documentation.

---

## Workflow

Follow this 5-step process to provide comprehensive, well-cited answers:

### Step 1: Identify Search Query

Extract the core search terms from the user's question.

**Examples:**
- User: "Find everything about Stratus minions" → Search: "Stratus minions"
- User: "What do we know about the billing system?" → Search: "billing system"
- User: "Explain our deployment process" → Search: "deployment process"

**Consider:**
- Main topic or concept
- Any specific system/component names
- Technical terms or jargon

---

### Step 2: Execute Parallel Search

Search across all available knowledge sources simultaneously for comprehensive coverage.

#### Option A: Cross-System Search (Recommended First)

Use the **`search`** tool (Rovo Search) to search across Confluence and Jira at once:

```
search(
  cloudId="...",
  query="[extracted search terms]"
)
```

**When to use:** 
- Default approach for most queries
- When you don't know which system has the information
- Fastest way to get results from multiple sources

**Example:**
```
search(
  cloudId="...",
  query="Stratus minions"
)
```

This returns results from both Confluence pages and Jira issues.

#### Option B: Targeted Confluence Search

Use **`searchConfluenceUsingCql`** when specifically searching Confluence:

```
searchConfluenceUsingCql(
  cloudId="...",
  cql="text ~ 'search terms' OR title ~ 'search terms'"
)
```

**When to use:**
- User specifically mentions "in Confluence" or "in our docs"
- Cross-system search returns too many Jira results
- Looking for documentation rather than tickets

**Example CQL patterns:**
```
text ~ "Stratus minions"
text ~ "authentication" AND type = page
title ~ "deployment guide"
```

#### Option C: Targeted Jira Search

Use **`searchJiraIssuesUsingJql`** when specifically searching Jira:

```
searchJiraIssuesUsingJql(
  cloudId="...",
  jql="text ~ 'search terms' OR summary ~ 'search terms'"
)
```

**When to use:**
- User mentions "tickets", "issues", or "bugs"
- Looking for historical problems or implementation details
- Cross-system search returns mostly documentation

**Example JQL patterns:**
```
text ~ "Stratus minions"
summary ~ "authentication" AND type = Bug
text ~ "deployment" AND created >= -90d
```

#### Search Strategy

**For most queries, use this sequence:**

1. Start with `search` (cross-system) - **always try this first**
2. If results are unclear, follow up with targeted searches
3. If results mention specific pages/tickets, fetch them for details

---

### Step 3: Fetch Detailed Content

After identifying relevant sources, fetch full content for comprehensive answers.

#### For Confluence Pages

When search results reference Confluence pages:

```
getConfluencePage(
  cloudId="...",
  pageId="[page ID from search results]",
  contentFormat="markdown"
)
```

**Returns:** Full page content in Markdown format

**When to fetch:**
- Search result snippet is too brief
- Need complete context
- Page seems to be the primary documentation

#### For Jira Issues

When search results reference Jira issues:

```
getJiraIssue(
  cloudId="...",
  issueIdOrKey="PROJ-123"
)
```

**Returns:** Full issue details including description, comments, status

**When to fetch:**
- Need to understand a reported bug or issue
- Search result doesn't show full context
- Issue contains important implementation notes

#### Prioritization

**Fetch in this order:**
1. **Official documentation pages** (Confluence pages with "guide", "documentation", "overview" in title)
2. **Recent/relevant issues** (Jira tickets that are relevant and recent)
3. **Additional context** (related pages mentioned in initial results)

**Don't fetch everything** - be selective based on relevance to user's question.

---

### Step 4: Synthesize Results

Combine information from multiple sources into a coherent answer.

#### Synthesis Guidelines

**Structure your answer:**

1. **Direct Answer First**
   - Start with a clear, concise answer to the question
   - "Stratus minions are..."

2. **Detailed Explanation**
   - Provide comprehensive details from all sources
   - Organize by topic, not by source

3. **Source Attribution**
   - Note where each piece of information comes from
   - Format: "According to [source], ..."

4. **Highlight Discrepancies**
   - If sources conflict, note it explicitly
   - Example: "The Confluence documentation states X, however Jira ticket PROJ-123 indicates that due to bug Y, the behavior is actually Z"

5. **Provide Context**
   - Mention if information is outdated
   - Note if a feature is deprecated or in development

#### Synthesis Patterns

**Pattern 1: Multiple sources agree**
```
Stratus minions are background worker processes that handle async tasks.

According to the Confluence documentation, they process jobs from the queue and 
can be scaled horizontally. This is confirmed by several Jira tickets (PROJ-145, 
PROJ-203) which discuss minion configuration and scaling strategies.
```

**Pattern 2: Sources provide different aspects**
```
The billing system has two main components:

**Payment Processing** (from Confluence "Billing Architecture" page)
- Handles credit card transactions
- Integrates with Stripe API
- Runs nightly reconciliation

**Invoice Generation** (from Jira PROJ-189)
- Creates monthly invoices
- Note: Currently has a bug where tax calculation fails for EU customers
- Fix planned for Q1 2024
```

**Pattern 3: Conflicting information**
```
There is conflicting information about the authentication timeout:

- **Official Documentation** (Confluence) states: 30-minute session timeout
- **Implementation Reality** (Jira PROJ-456, filed Oct 2023): Actual timeout is 
  15 minutes due to load balancer configuration
- **Status:** Engineering team aware, fix planned but no timeline yet

Current behavior: Expect 15-minute timeout despite docs saying 30 minutes.
```

**Pattern 4: Incomplete information**
```
Based on available documentation:

[What we know about deployment process from Confluence and Jira]

However, I couldn't find information about:
- Rollback procedures
- Database migration handling

You may want to check with the DevOps team or search for additional documentation.
```

---

### Step 5: Provide Citations

Always include links to source materials so users can explore further.

#### Citation Format

**For Confluence pages:**
```
**Source:** [Page Title](https://yoursite.atlassian.net/wiki/spaces/SPACE/pages/123456)
```

**For Jira issues:**
```
**Related Tickets:**
- [PROJ-123](https://yoursite.atlassian.net/browse/PROJ-123) - Brief description
- [PROJ-456](https://yoursite.atlassian.net/browse/PROJ-456) - Brief description
```

**Complete citation section:**
```
## Sources

**Confluence Documentation:**
- [Stratus Architecture Guide](https://yoursite.atlassian.net/wiki/spaces/DOCS/pages/12345)
- [Minion Configuration](https://yoursite.atlassian.net/wiki/spaces/DEVOPS/pages/67890)

**Jira Issues:**
- [PROJ-145](https://yoursite.atlassian.net/browse/PROJ-145) - Minion scaling implementation
- [PROJ-203](https://yoursite.atlassian.net/browse/PROJ-203) - Performance optimization

**Additional Resources:**
- [Internal architecture doc link if found]
```

---

## Search Best Practices

### Effective Search Terms

**Do:**
- ✅ Use specific technical terms: "OAuth authentication flow"
- ✅ Include system names: "Stratus minions"
- ✅ Use acronyms if they're common: "API rate limiting"
- ✅ Try variations if first search fails: "deploy process" → "deployment pipeline"

**Don't:**
- ❌ Be too generic: "how things work"
- ❌ Use full sentences: Use key terms instead
- ❌ Include filler words: "the", "our", "about"

### Search Result Quality

**Good results:**
- Recent documentation (< 1 year old)
- Official/canonical pages (titled "Guide", "Documentation", "Overview")
- Multiple sources confirming same information
- Detailed implementation notes

**Questionable results:**
- Very old tickets (> 2 years, may be outdated)
- Duplicate or conflicting information
- Draft pages or work-in-progress docs
- Personal pages (may not be official)

**When results are poor:**
- Try different search terms
- Expand search to include related concepts
- Search for specific error messages or codes
- Ask user for more context

---

## Handling Common Scenarios

### Scenario 1: No Results Found

If searches return no results:

```
I searched across Confluence and Jira but couldn't find information about "[topic]".

This could mean:
- The concept hasn't been documented yet
- It might be called something else (can you provide alternative names?)
- Documentation might be in a different system I don't have access to

Would you like me to:
1. Try searching with different terms?
2. Search for related concepts?
3. Look for mentions in recent Jira tickets?
```

### Scenario 2: Too Many Results

If search returns 50+ results:

- Focus on most recent and most relevant (top 10-15)
- Prioritize official documentation over random tickets
- Group similar results: "I found 15 tickets related to authentication bugs..."
- Offer to narrow search: "Would you like me to focus on [specific aspect]?"

### Scenario 3: Ambiguous Query

If the user's question is vague:

```
I found information about several topics related to "[term]":
1. [Topic A] - from Confluence page X
2. [Topic B] - from Jira tickets Y, Z
3. [Topic C] - from documentation W

Which aspect are you most interested in?
```

### Scenario 4: Outdated Information

If you find information is old:

```
I found documentation about [topic], but note that it's from [date] and may be outdated.

[Provide the information anyway]

You may want to verify this is still current, especially if it's from more than 
a year ago.
```

### Scenario 5: Restricted/Private Content

If search returns inaccessible content:

```
Search results mention [topic] in the following locations, but I don't have 
access to view the full content:
- Confluence page: [title] (Space: [SPACE])
- Jira issue: PROJ-123

You may need to access these directly or check your permissions.
```

---

## Examples

### Example 1: Clear Documentation Available

**User:** "What are Stratus minions?"

**Process:**
1. Search: `search(cloudId="...", query="Stratus minions")`
2. Find: Confluence page "Stratus Architecture" + 3 Jira tickets
3. Fetch: Get full Confluence page content
4. Synthesize: Combine architectural overview with implementation details from tickets
5. Cite: Provide links to all sources

**Answer:**
```
Stratus minions are background worker processes that handle asynchronous task 
processing in the Stratus system.

**Key Characteristics:**
- Run independently from web servers
- Process jobs from a Redis queue
- Can be scaled horizontally for increased throughput
- Handle tasks like email sending, report generation, and data processing

**Architecture:**
According to the Stratus Architecture documentation, minions follow a 
worker-queue pattern where:
1. Web application enqueues tasks
2. Minions poll the queue for work
3. Tasks are processed asynchronously
4. Results are stored in the database

**Implementation Notes:**
From Jira ticket PROJ-203, the current deployment runs 5 minion instances, 
with plans to scale to 10 for handling increased load.

## Sources
- [Stratus Architecture Guide](link)
- [PROJ-203](link) - Minion scaling implementation
```

### Example 2: Conflicting Information

**User:** "How long is our session timeout?"

**Process:**
1. Search across Confluence and Jira
2. Find: Docs say 30 min, but ticket reports actual timeout is 15 min
3. Fetch both sources for complete context
4. Clearly note the discrepancy

**Answer:**
```
There is a discrepancy between documented and actual behavior:

**Official Documentation** (Security Guidelines):
Session timeout is configured for 30 minutes of inactivity.

**Actual Behavior** (PROJ-456, reported Oct 2023):
Users are being logged out after 15 minutes due to a load balancer configuration 
that overrides the application setting.

**Current Status:**
The engineering team is aware of this issue. The load balancer timeout needs to 
be adjusted to match the application setting. No fix timeline has been set.

**Recommendation:** Plan for 15-minute timeout until this is resolved.

## Sources
- [Security Guidelines](link) - Official documentation
- [PROJ-456](link) - Timeout discrepancy bug report
```

### Example 3: Partial Information

**User:** "Explain our deployment process"

**Process:**
1. Search finds some information but not complete
2. Synthesize what is available
3. Note gaps in documentation

**Answer:**
```
Based on available documentation, here's what I found about the deployment process:

**Build Phase** (from Confluence "CI/CD Guide"):
1. Code pushed to main branch triggers GitHub Actions
2. Automated tests run (unit, integration)
3. Docker image built and pushed to registry

**Deployment Phase** (from Jira PROJ-789):
4. Staging deployment happens automatically
5. Manual approval required for production
6. Blue-green deployment strategy used

**Gaps in Documentation:**
I couldn't find documented information about:
- Rollback procedures
- Database migration handling
- Post-deployment verification steps

These details may exist in tribal knowledge or need to be documented.

## Sources
- [CI/CD Guide](link)
- [PROJ-789](link) - Deployment pipeline implementation

Would you like me to search for more specific aspects of deployment?
```

---

## Tips for High-Quality Answers

### Do:
✅ Always search before answering (don't rely on general knowledge)
✅ Cite all sources with links
✅ Note discrepancies explicitly
✅ Mention when information is old
✅ Provide context and examples
✅ Structure answers clearly with headers
✅ Link to related documentation

### Don't:
❌ Assume general knowledge applies to this company
❌ Make up information if search returns nothing
❌ Ignore conflicting information
❌ Quote entire documents (summarize instead)
❌ Overwhelm with too many sources (curate top 5-10)
❌ Forget to fetch details when snippets are insufficient

---

## When NOT to Use This Skill

This skill is for **internal company knowledge only**. Do NOT use for:

❌ General technology questions (use your training knowledge)
❌ External documentation (use web_search)
❌ Company-agnostic questions
❌ Questions about other companies
❌ Current events or news

**Examples of what NOT to use this skill for:**
- "What is machine learning?" (general knowledge)
- "How does React work?" (external documentation)
- "What's the weather?" (not knowledge search)
- "Find a restaurant" (not work-related)

---

## Quick Reference

**Primary tool:** `search(cloudId, query)` - Use this first, always

**Follow-up tools:**
- `getConfluencePage(cloudId, pageId, contentFormat)` - Get full page content
- `getJiraIssue(cloudId, issueIdOrKey)` - Get full issue details
- `searchConfluenceUsingCql(cloudId, cql)` - Targeted Confluence search
- `searchJiraIssuesUsingJql(cloudId, jql)` - Targeted Jira search

**Answer structure:**
1. Direct answer
2. Detailed explanation
3. Source attribution
4. Discrepancies (if any)
5. Citations with links

**Remember:**
- Parallel search > Sequential search
- Synthesize, don't just list
- Always cite sources
- Note conflicts explicitly
- Be clear about gaps in documentation
spec-to-backlog17 KB

View saved version →

---
name: spec-to-backlog
description: "Automatically convert Confluence specification documents into structured Jira backlogs with Epics and implementation tickets. When an agent needs to: (1) Create Jira tickets from a Confluence page, (2) Generate a backlog from a specification, (3) Break down a spec into implementation tasks, or (4) Convert requirements into Jira issues. Handles reading Confluence pages, analyzing specifications, creating Epics with proper structure, and generating detailed implementation tickets linked to the Epic."
---

# Spec to Backlog

## Overview

Transform Confluence specification documents into structured Jira backlogs automatically. This skill reads requirement documents from Confluence, intelligently breaks them down into logical implementation tasks, **creates an Epic first** to organize the work, then generates individual Jira tickets linked to that Epic—eliminating tedious manual copy-pasting.

## Core Workflow

**CRITICAL: Always follow this exact sequence:**

1. **Fetch Confluence Page** → Get the specification content
2. **Ask for Project Key** → Identify target Jira project
3. **Analyze Specification** → Break down into logical tasks (internally, don't create yet)
4. **Present Breakdown** → Show user the planned Epic and tickets
5. **Create Epic FIRST** → Establish parent Epic and capture its key
6. **Create Child Tickets** → Generate tickets linked to the Epic
7. **Provide Summary** → Present all created items with links

**Why Epic must be created first:** Child tickets need the Epic key to link properly during creation. Creating tickets first will result in orphaned tickets.

---

## Step 1: Fetch Confluence Page

When triggered, obtain the Confluence page content:

### If user provides a Confluence URL:

Extract the cloud ID and page ID from the URL pattern:
- Standard format: `https://[site].atlassian.net/wiki/spaces/[SPACE]/pages/[PAGE_ID]/[title]`
- The cloud ID can be extracted from `[site].atlassian.net` or by calling `getAccessibleAtlassianResources`
- The page ID is the numeric value in the URL path

### If user provides only a page title or description:

Use the `search` tool to find the page:
```
search(
  cloudId="...",
  query="type=page AND title~'[search terms]'"
)
```

If multiple pages match, ask the user to clarify which one to use.

### Fetch the page:

Call `getConfluencePage` with the cloudId and pageId:
```
getConfluencePage(
  cloudId="...",
  pageId="123456",
  contentFormat="markdown"
)
```

This returns the page content in Markdown format, which you'll analyze in Step 3.

---

## Step 2: Ask for Project Key

**Before analyzing the spec**, determine the target Jira project:

### Ask the user:
"Which Jira project should I create these tickets in? Please provide the project key (e.g., PROJ, ENG, PRODUCT)."

### If user is unsure:
Call `getVisibleJiraProjects` to show available projects:
```
getVisibleJiraProjects(
  cloudId="...",
  action="create"
)
```

Present the list: "I found these projects you can create issues in: PROJ (Project Alpha), ENG (Engineering), PRODUCT (Product Team)."

### Once you have the project key:
Call `getJiraProjectIssueTypesMetadata` to understand what issue types are available:
```
getJiraProjectIssueTypesMetadata(
  cloudId="...",
  projectIdOrKey="PROJ"
)
```

**Identify available issue types:**
- Which issue type is "Epic" (or similar parent type like "Initiative")
- What child issue types are available: "Story", "Task", "Bug", "Sub-task", etc.

**Select appropriate issue types for child tickets:**

The skill should intelligently choose issue types based on the specification content:

**Use "Bug" when the spec describes:**
- Fixing existing problems or defects
- Resolving errors or incorrect behavior
- Addressing performance issues
- Correcting data inconsistencies
- Keywords: "fix", "resolve", "bug", "issue", "problem", "error", "broken"

**Use "Story" when the spec describes:**
- New user-facing features or functionality
- User experience improvements
- Customer-requested capabilities
- Product enhancements
- Keywords: "feature", "user can", "add ability to", "new", "enable users"

**Use "Task" when the spec describes:**
- Technical work without direct user impact
- Infrastructure or DevOps work
- Refactoring or optimization
- Documentation or tooling
- Configuration or setup
- Keywords: "implement", "setup", "configure", "optimize", "refactor", "infrastructure"

**Fallback logic:**
1. If "Story" is available and content suggests new features → use "Story"
2. If "Bug" is available and content suggests fixes → use "Bug"
3. If "Task" is available → use "Task" for technical work
4. If none of the above are available → use the first available non-Epic, non-Subtask issue type

**Store the selected issue types for use in Step 6:**
- Epic issue type name (e.g., "Epic")
- Default child issue type (e.g., "Story" or "Task")
- Bug issue type name if available (e.g., "Bug")

---

## Step 3: Analyze Specification

Read the Confluence page content and **internally** decompose it into:

### Epic-Level Goal
What is the overall objective or feature being implemented? This becomes your Epic.

**Example Epic summaries:**
- "User Authentication System"
- "Payment Gateway Integration"  
- "Dashboard Performance Optimization"
- "Mobile App Notifications Feature"

### Implementation Tasks
Break the work into logical, independently implementable tasks.

**Breakdown principles:**
- **Size:** 3-10 tasks per spec typically (avoid over-granularity)
- **Clarity:** Each task should be specific and actionable
- **Independence:** Tasks can be worked on separately when possible
- **Completeness:** Include backend, frontend, testing, documentation, infrastructure as needed
- **Grouping:** Related functionality stays in the same ticket

**Consider these dimensions:**
- Technical layers: Backend API, Frontend UI, Database, Infrastructure
- Work types: Implementation, Testing, Documentation, Deployment
- Features: Break complex features into sub-features
- Dependencies: Identify prerequisite work

**Common task patterns:**
- "Design [component] database schema"
- "Implement [feature] API endpoints"
- "Build [component] UI components"
- "Add [integration] to existing [system]"
- "Write tests for [feature]"
- "Update documentation for [feature]"

**Use action verbs:**
- Implement, Create, Build, Add, Design, Integrate, Update, Fix, Optimize, Configure, Deploy, Test, Document

---

## Step 4: Present Breakdown to User

**Before creating anything**, show the user your planned breakdown:

**Format:**
```
I've analyzed the spec and here's the backlog I'll create:

**Epic:** [Epic Summary]
[Brief description of epic scope]

**Implementation Tickets (7):**
1. [Story] [Task 1 Summary]
2. [Task] [Task 2 Summary]  
3. [Story] [Task 3 Summary]
4. [Bug] [Task 4 Summary]
5. [Task] [Task 5 Summary]
6. [Story] [Task 6 Summary]
7. [Task] [Task 7 Summary]

Shall I create these tickets in [PROJECT KEY]?
```

**The issue type labels show what type each ticket will be created as:**
- [Story] - New user-facing feature
- [Task] - Technical implementation work
- [Bug] - Fix or resolve an issue

**Wait for user confirmation** before proceeding. This allows them to:
- Request changes to the breakdown
- Confirm the scope is correct
- Adjust the number or focus of tickets

If user requests changes, adjust the breakdown and re-present.

---

## Step 5: Create Epic FIRST

**CRITICAL:** The Epic must be created before any child tickets.

### Create the Epic:

Call `createJiraIssue` with:

```
createJiraIssue(
  cloudId="...",
  projectKey="PROJ",
  issueTypeName="Epic",
  summary="[Epic Summary from Step 3]",
  description="[Epic Description - see below]"
)
```

### Epic Description Structure:

```markdown
## Overview
[1-2 sentence summary of what this epic delivers]

## Source
Confluence Spec: [Link to Confluence page]

## Objectives
- [Key objective 1]
- [Key objective 2]
- [Key objective 3]

## Scope
[Brief description of what's included and what's not]

## Success Criteria
- [Measurable criterion 1]
- [Measurable criterion 2]
- [Measurable criterion 3]

## Technical Notes
[Any important technical context from the spec]
```

### Capture the Epic Key:

The response will include the Epic's key (e.g., "PROJ-123"). **Save this key**—you'll need it for every child ticket.

**Example response:**
```json
{
  "key": "PROJ-123",
  "id": "10001",
  "self": "https://yoursite.atlassian.net/rest/api/3/issue/10001"
}
```

**Confirm Epic creation to user:**
"✅ Created Epic: PROJ-123 - User Authentication System"

---

## Step 6: Create Child Tickets

Now create each implementation task as a child ticket linked to the Epic.

### For each task:

**Determine the appropriate issue type for this specific task:**
- If the task involves fixing/resolving an issue → use "Bug" (if available)
- If the task involves new user-facing features → use "Story" (if available)
- If the task involves technical/infrastructure work → use "Task" (if available)
- Otherwise → use the default child issue type from Step 2

Call `createJiraIssue` with:

```
createJiraIssue(
  cloudId="...",
  projectKey="PROJ",
  issueTypeName="[Story/Task/Bug based on task content]",
  summary="[Task Summary]",
  description="[Task Description - see below]",
  parent="PROJ-123"  # The Epic key from Step 5
)
```

**Example issue type selection:**
- "Fix authentication timeout bug" → Use "Bug"
- "Build user dashboard UI" → Use "Story"
- "Configure CI/CD pipeline" → Use "Task"
- "Implement password reset API" → Use "Story" (new user feature)

### Task Summary Format:

Use action verbs and be specific:
- ✅ "Implement user registration API endpoint"
- ✅ "Design authentication database schema"
- ✅ "Build login form UI components"
- ❌ "Do backend work" (too vague)
- ❌ "Frontend" (not actionable)

### Task Description Structure:

```markdown
## Context
[Brief context for this task from the Confluence spec]

## Requirements
- [Requirement 1]
- [Requirement 2]
- [Requirement 3]

## Technical Details
[Specific technical information relevant to this task]
- Technologies: [e.g., Node.js, React, PostgreSQL]
- Components: [e.g., API routes, database tables, UI components]
- Dependencies: [e.g., requires PROJ-124 to be completed first]

## Acceptance Criteria
- [ ] [Testable criterion 1]
- [ ] [Testable criterion 2]
- [ ] [Testable criterion 3]

## Related
- Confluence Spec: [Link to relevant section if possible]
- Epic: PROJ-123
```

### Acceptance Criteria Best Practices:

Make them **testable** and **specific**:
- ✅ "API returns 201 status on successful user creation"
- ✅ "Password must be at least 8 characters and hashed with bcrypt"
- ✅ "Login form validates email format before submission"
- ❌ "User can log in" (too vague)
- ❌ "It works correctly" (not testable)

### Create all tickets sequentially:

Track each created ticket key for the summary.

---

## Step 7: Provide Summary

After all tickets are created, present a comprehensive summary:

```
✅ Backlog created successfully!

**Epic:** PROJ-123 - User Authentication System
https://yoursite.atlassian.net/browse/PROJ-123

**Implementation Tickets (7):**

1. PROJ-124 - Design authentication database schema
   https://yoursite.atlassian.net/browse/PROJ-124

2. PROJ-125 - Implement user registration API endpoint
   https://yoursite.atlassian.net/browse/PROJ-125

3. PROJ-126 - Implement user login API endpoint
   https://yoursite.atlassian.net/browse/PROJ-126

4. PROJ-127 - Build login form UI components
   https://yoursite.atlassian.net/browse/PROJ-127

5. PROJ-128 - Build registration form UI components
   https://yoursite.atlassian.net/browse/PROJ-128

6. PROJ-129 - Add authentication integration to existing features
   https://yoursite.atlassian.net/browse/PROJ-129

7. PROJ-130 - Write authentication tests and documentation
   https://yoursite.atlassian.net/browse/PROJ-130

**Source:** https://yoursite.atlassian.net/wiki/spaces/SPECS/pages/123456

**Next Steps:**
- Review tickets in Jira for accuracy and completeness
- Assign tickets to team members
- Estimate story points if your team uses them
- Add any additional labels or custom field values
- Schedule work for the upcoming sprint
```

---

## Edge Cases & Troubleshooting

### Multiple Specs or Pages

**If user references multiple Confluence pages:**
- Process each separately, or ask which to prioritize
- Consider creating separate Epics for distinct features
- "I see you've provided 3 spec pages. Should I create separate Epics for each, or would you like me to focus on one first?"

### Existing Epic

**If user wants to add tickets to an existing Epic:**
- Skip Epic creation (Step 5)
- Ask for the existing Epic key: "What's the Epic key you'd like to add tickets to? (e.g., PROJ-100)"
- Proceed with Step 6 using the provided Epic key

### Custom Required Fields

**If ticket creation fails due to required fields:**
1. Use `getJiraIssueTypeMetaWithFields` to identify what fields are required:
   ```
   getJiraIssueTypeMetaWithFields(
     cloudId="...",
     projectIdOrKey="PROJ",
     issueTypeId="10001"
   )
   ```

2. Ask user for values: "This project requires a 'Priority' field. What priority should I use? (e.g., High, Medium, Low)"

3. Include in `additional_fields` when creating:
   ```
   additional_fields={
     "priority": {"name": "High"}
   }
   ```

### Large Specifications

**For specs that would generate 15+ tickets:**
- Present the full breakdown to user
- Ask: "This spec would create 18 tickets. Should I create all of them, or would you like to adjust the scope?"
- Offer to create a subset first: "I can create the first 10 tickets now and wait for your feedback before creating the rest."

### Subtasks vs Tasks

**Some projects use "Subtask" issue types:**
- If metadata shows "Subtask" is available, you can use it for more granular work
- Subtasks link to parent tasks (not Epics directly)
- Structure: Epic → Task → Subtasks

### Ambiguous Specifications

**If the Confluence page lacks detail:**
- Create fewer, broader tickets
- Note in ticket descriptions: "Detailed requirements need to be defined during refinement"
- Ask user: "The spec is light on implementation details. Should I create high-level tickets that can be refined later?"

### Failed API Calls

**If `createJiraIssue` fails:**
1. Check the error message for specific issues (permissions, required fields, invalid values)
2. Use `getJiraProjectIssueTypesMetadata` to verify issue type availability
3. Inform user: "I encountered an error creating tickets: [error message]. This might be due to project permissions or required fields."

---

## Tips for High-Quality Breakdowns

### Be Specific
- ❌ "Do frontend work"
- ✅ "Create login form UI with email/password inputs and validation"

### Include Technical Context
- Mention specific technologies when clear from spec
- Reference components, services, or modules
- Note integration points

### Logical Grouping
- Related work stays in the same ticket
- Don't split artificially: "Build user profile page" includes both UI and API integration
- Do split when different specialties: Separate backend API task from frontend UI task if worked on by different people

### Avoid Duplication
- Don't create redundant tickets for the same functionality
- If multiple features need the same infrastructure, create one infrastructure ticket they all depend on

### Explicit Testing
- Include testing as part of feature tasks ("Implement X with unit tests")
- OR create separate testing tasks for complex features ("Write integration tests for authentication flow")

### Documentation Tasks
- For user-facing features: Include "Update user documentation" or "Create help articles"
- For developer tools: Include "Update API documentation" or "Write integration guide"

### Dependencies
- Note prerequisites in ticket descriptions
- Use "Depends on" or "Blocks" relationships in Jira if available
- Sequence tickets logically (infrastructure → implementation → testing)

---

## Examples of Good Breakdowns

### Example 1: New Feature - Search Functionality

**Epic:** Product Search and Filtering

**Tickets:**
1. [Task] Design search index schema and data structure
2. [Task] Implement backend search API with Elasticsearch
3. [Story] Build search input and results UI components
4. [Story] Add advanced filtering (price, category, ratings)
5. [Story] Implement search suggestions and autocomplete
6. [Task] Optimize search performance and add caching
7. [Task] Write search integration tests and documentation

### Example 2: Bug Fix - Performance Issue

**Epic:** Resolve Dashboard Load Time Issues

**Tickets:**
1. [Task] Profile and identify performance bottlenecks
2. [Bug] Optimize database queries with indexes and caching
3. [Bug] Implement lazy loading for dashboard widgets
4. [Bug] Add pagination to large data tables
5. [Task] Set up performance monitoring and alerts

### Example 3: Infrastructure - CI/CD Pipeline

**Epic:** Automated Deployment Pipeline

**Tickets:**
1. [Task] Set up GitHub Actions workflow configuration
2. [Task] Implement automated testing in CI pipeline
3. [Task] Configure staging environment deployment
4. [Task] Implement blue-green production deployment
5. [Task] Add deployment rollback mechanism
6. [Task] Create deployment runbook and documentation

Referenced files: 3

triage-issue18.9 KB

View saved version →

---
name: triage-issue
description: "Intelligently triage bug reports and error messages by searching for duplicates in Jira and offering to create new issues or add comments to existing ones. When an agent needs to: (1) Triage a bug report or error message, (2) Check if an issue is a duplicate, (3) Find similar past issues, (4) Create a new bug ticket with proper context, or (5) Add information to an existing ticket. Searches Jira for similar issues, identifies duplicates, checks fix history, and helps create well-structured bug reports."
---

# Triage Issue

## Keywords
triage bug, check duplicate, is this a duplicate, search for similar issues, create bug ticket, file a bug, report this error, triage this error, bug report, error message, similar issues, duplicate bug, who fixed this, has this been reported, search bugs, find similar bugs, create issue, file issue

## Overview

Automatically triage bug reports and error messages by searching Jira for duplicates, identifying similar past issues, and helping create well-structured bug tickets or add context to existing issues. This skill eliminates manual duplicate checking and ensures bugs are properly documented with relevant historical context.

**Use this skill when:** Users need to triage error messages, bug reports, or issues to determine if they're duplicates and take appropriate action.

---

## Workflow

Follow this 6-step process to effectively triage issues:

### Step 1: Extract Key Information

Analyze the bug report or error message to identify search terms.

#### Extract These Elements:

**Error signature:**
- Error type or exception name (e.g., "NullPointerException", "TimeoutError")
- Error code or status (e.g., "500", "404", "ERR_CONNECTION_REFUSED")
- Specific error message text (key phrases, not full stack trace)

**Context:**
- Component or system affected (e.g., "authentication", "payment gateway", "API")
- Environment (e.g., "production", "staging", "mobile app")
- User actions leading to error (e.g., "during login", "when uploading file")

**Symptoms:**
- Observable behavior (e.g., "page blank", "infinite loading", "data not saving")
- Impact (e.g., "users can't login", "payments failing")

#### Example Extractions:

**Input:** "Users getting 'Connection timeout' error when trying to login on mobile app"
**Extracted:**
- Error: "Connection timeout"
- Component: "login", "mobile app"
- Symptom: "can't login"

**Input:** "NullPointerException in PaymentProcessor.processRefund() line 245"
**Extracted:**
- Error: "NullPointerException"
- Component: "PaymentProcessor", "refund"
- Location: "processRefund line 245"

---

### Step 2: Search for Duplicates

Search Jira using extracted keywords to find similar or duplicate issues.

#### Search Strategy:

Execute **multiple targeted searches** to catch duplicates that may use different wording:

**Search 1: Error-focused**
```
searchJiraIssuesUsingJql(
  cloudId="...",
  jql='project = "PROJ" AND (text ~ "error signature" OR summary ~ "error signature") AND type = Bug ORDER BY created DESC',
  fields=["summary", "description", "status", "resolution", "created", "updated", "assignee"],
  maxResults=20
)
```

**Search 2: Component-focused**
```
searchJiraIssuesUsingJql(
  cloudId="...",
  jql='project = "PROJ" AND text ~ "component keywords" AND type = Bug ORDER BY updated DESC',
  fields=["summary", "description", "status", "resolution", "created", "updated", "assignee"],
  maxResults=20
)
```

**Search 3: Symptom-focused**
```
searchJiraIssuesUsingJql(
  cloudId="...",
  jql='project = "PROJ" AND summary ~ "symptom keywords" AND type = Bug ORDER BY priority DESC, updated DESC',
  fields=["summary", "description", "status", "resolution", "created", "updated", "assignee"],
  maxResults=20
)
```

#### Search Tips:

**Use key terms only:**
- ✅ "timeout login mobile"
- ✅ "NullPointerException PaymentProcessor refund"
- ❌ "Users are getting a connection timeout error when..." (too verbose)

**Search recent first:**
- Order by `created DESC` or `updated DESC` to find recent similar issues
- Recent bugs are more likely to be relevant duplicates

**Don't over-filter:**
- Include resolved issues (might have been reopened or regression)
- Search across all bug statuses to find fix history

---

### Step 3: Analyze Search Results

Evaluate the search results to determine if this is a duplicate or a new issue.

#### Duplicate Detection:

**High confidence duplicate (>90%):**
- Exact same error message in summary or description
- Same component + same error type
- Recent issue (< 30 days) with identical symptoms
- **Action:** Strongly recommend adding comment to existing issue

**Likely duplicate (70-90%):**
- Similar error with slight variations
- Same component but different context
- Resolved issue with same root cause
- **Action:** Present as possible duplicate, let user decide

**Possibly related (40-70%):**
- Similar symptoms but different error
- Same component area but different specific error
- Old issue (> 6 months) that might be unrelated
- **Action:** Mention as potentially related

**Likely new issue (<40%):**
- No similar issues found
- Different error signature and component
- Unique symptom or context
- **Action:** Recommend creating new issue

#### Check Fix History:

If similar resolved issues are found:

**Extract relevant information:**
- Who fixed it? (assignee on resolved issues)
- How was it fixed? (resolution comment or linked PRs)
- When was it fixed? (resolution date)
- Has it regressed? (any reopened issues)

**Present this context** to help with triage decision.

---

### Step 4: Present Findings to User

**CRITICAL:** Always present findings and wait for user decision before taking any action.

#### Format for Likely Duplicate:

```
🔍 **Triage Results: Likely Duplicate**

I found a very similar issue already reported:

**PROJ-456** - Connection timeout during mobile login
Status: Open | Priority: High | Created: 3 days ago
Assignee: @john.doe
https://yoursite.atlassian.net/browse/PROJ-456

**Similarity:**
- Same error: "Connection timeout"
- Same component: Mobile app login
- Same symptoms: Users unable to login

**Difference:**
- Original report mentioned iOS specifically, this report doesn't specify platform

**Recommendation:** Add your details as a comment to PROJ-456

Would you like me to:
1. Add a comment to PROJ-456 with your error details
2. Create a new issue anyway (if you think this is different)
3. Show me more details about PROJ-456 first
```

#### Format for Possibly Related:

```
🔍 **Triage Results: Possibly Related Issues Found**

I found 2 potentially related issues:

**1. PROJ-789** - Mobile app authentication failures
Status: Resolved | Fixed: 2 weeks ago | Fixed by: @jane.smith
https://yoursite.atlassian.net/browse/PROJ-789

**2. PROJ-234** - Login timeout on slow connections
Status: Open | Priority: Medium | Created: 1 month ago
https://yoursite.atlassian.net/browse/PROJ-234

**Assessment:** Your error seems related but has unique aspects

**Recommendation:** Create a new issue, but reference these related tickets

Would you like me to create a new bug ticket?
```

#### Format for No Duplicates:

```
🔍 **Triage Results: No Duplicates Found**

I searched Jira for:
- "Connection timeout" errors
- Mobile login issues
- Authentication failures

No similar open or recent issues found.

**Recommendation:** Create a new bug ticket

**Note:** I found 1 old resolved issue (PROJ-123 from 8 months ago) about login timeouts, but it was for web, not mobile, and was resolved as "configuration error."

Would you like me to create a new bug ticket for this issue?
```

---

### Step 5: Execute User Decision

Based on user's choice, either add a comment or create a new issue.

#### Option A: Add Comment to Existing Issue

If user wants to add to existing issue:

**Fetch the full issue first** to understand context:
```
getJiraIssue(
  cloudId="...",
  issueIdOrKey="PROJ-456"
)
```

**Then add the comment:**
```
addCommentToJiraIssue(
  cloudId="...",
  issueIdOrKey="PROJ-456",
  commentBody="[formatted comment - see below]"
)
```

**Comment Structure:**
```markdown
## Additional Instance Reported

**Reporter:** [User's name or context]
**Date:** [Current date]

**Error Details:**
[Paste relevant error message or stack trace]

**Context:**
- Environment: [e.g., Production, iOS 16.5]
- User Impact: [e.g., 50+ users affected in last hour]
- Steps to Reproduce: [if provided]

**Additional Notes:**
[Any unique aspects of this instance]

---
*Added via triage automation*
```

#### Option B: Create New Issue

If user wants to create new issue:

**First, check available issue types:**
```
getJiraProjectIssueTypesMetadata(
  cloudId="...",
  projectIdOrKey="PROJ"
)
```

**Determine appropriate issue type:**
- For bugs/errors → Use "Bug" (if available)
- For issues without errors → Use "Task" or "Issue" 
- Fallback → First available non-Epic, non-Subtask type

**Create the issue:**
```
createJiraIssue(
  cloudId="...",
  projectKey="PROJ",
  issueTypeName="Bug",
  summary="[Clear, specific summary - see below]",
  description="[Detailed description - see below]",
  additional_fields={
    "priority": {"name": "Medium"}  # Adjust based on user input severity assessment
  }
)
```

**Summary Format:**
Use the pattern: `[Component] [Error Type] - [Brief Symptom]`

**Examples:**
- ✅ "Mobile Login: Connection timeout during authentication"
- ✅ "Payment API: NullPointerException in refund processing"
- ✅ "Dashboard: Infinite loading on reports page"
- ❌ "Error in production" (too vague)
- ❌ "Users experiencing issues" (not specific)

**Description Structure:**
```markdown
## Issue Description
[1-2 sentence summary of the problem]

## Error Details
```
[Error message or stack trace]
```

## Environment
- **Platform:** [e.g., Mobile iOS, Web, API]
- **Version:** [if known]
- **Environment:** [Production/Staging/etc]

## Steps to Reproduce
1. [Step 1]
2. [Step 2]
3. [Step 3]

## Expected Behavior
[What should happen]

## Actual Behavior
[What actually happens]

## User Impact
- **Frequency:** [e.g., Every time, Intermittent]
- **Affected Users:** [e.g., All users, Mobile users only]
- **Severity:** [e.g., Users cannot complete checkout]

## Additional Context
[Any other relevant information]

## Related Issues
[If applicable, reference similar issues found during triage]
- See also: PROJ-123 (similar but resolved)

---
*Created via automated triage*
```

---

### Step 6: Provide Summary

After taking action, confirm what was done.

#### If Comment Added:

```
✅ **Comment Added Successfully**

Added details to existing issue: **PROJ-456**
https://yoursite.atlassian.net/browse/PROJ-456

**What I included:**
- Your error details
- Environment context
- User impact information

**Next Steps:**
- The assignee (@john.doe) will be notified
- Monitor PROJ-456 for updates
- If this turns out to be different, we can still create a separate ticket
```

#### If New Issue Created:

```
✅ **New Issue Created**

**PROJ-890** - Mobile Login: Connection timeout during authentication
https://yoursite.atlassian.net/browse/PROJ-890

Type: Bug | Priority: Medium | Status: Open

**What's Included:**
- Complete error details and stack trace
- Environment and reproduction steps
- User impact assessment
- References to related issues (PROJ-123, PROJ-789)

**Next Steps:**
- Issue will be reviewed during next triage meeting
- Consider setting priority based on user impact
- Assign to appropriate team member
```

---

## Edge Cases & Troubleshooting

### Multiple Potential Duplicates

If you find 3+ very similar issues:

```
🔍 **Triage Results: Multiple Possible Duplicates**

I found 3 issues that might be related:

**Most Likely Duplicate:**
**PROJ-456** - [summary] (Open, 2 days ago)
Match: 95% - Same error and component

**Also Possibly Related:**
**PROJ-234** - [summary] (Open, 1 month ago)
Match: 70% - Similar symptoms, different error

**PROJ-123** - [summary] (Resolved, 8 months ago)
Match: 60% - Related component, but was fixed

**Recommendation:** 
1. Add to PROJ-456 (most similar)
2. Reference PROJ-234 in your comment (might be related)
3. Note PROJ-123 was previously fixed (possible regression)

Which issue should I add your details to? (Or create new)
```

### Unclear Project Context

If user doesn't specify which project:

```
Which Jira project should I search for similar issues?

Available projects:
- BACKEND (Backend Services)
- MOBILE (Mobile Apps)
- WEB (Web Platform)
- INFRA (Infrastructure)

Or tell me the project key directly (e.g., BACKEND, MOBILE)
```

### Insufficient Information

If the bug report lacks critical details:

```
I need more information to effectively triage this issue:

**What I have:**
- Error: "Something went wrong"

**What would help:**
- Specific error message or code
- Which part of the system (login, payment, etc.)
- What the user was trying to do
- Which environment (production, staging, mobile, web)

Can you provide any of these details?
```

### Resolved Regression

If you find a resolved issue that matches:

```
🔍 **Triage Results: Possible Regression**

This looks like it might be a regression of a previously fixed issue:

**PROJ-567** - [Same issue description]
Status: Resolved (Fixed) | Fixed: 3 months ago | Fixed by: @jane.smith
Resolution: [Brief description of fix]
https://yoursite.atlassian.net/browse/PROJ-567

**This suggests:**
- The original fix may not have fully addressed the root cause
- OR there's been a regression in recent changes
- OR this is a different issue with similar symptoms

**Recommendation:** Create a new issue and link it to PROJ-567 as "may be related to" or "regression of"

Should I create a new issue with this context?
```

### Custom Required Fields

If creating an issue fails due to required fields:

1. **Check what fields are required:**
```
getJiraIssueTypeMetaWithFields(
  cloudId="...",
  projectIdOrKey="PROJ",
  issueTypeId="10001"
)
```

2. **Ask user for values:**
```
This project requires additional fields to create a Bug:
- Severity: [High/Medium/Low]
- Affected Version: [Version number]

Please provide these values so I can create the issue.
```

3. **Retry with additional fields:**
```
createJiraIssue(
  ...existing parameters...,
  additional_fields={
    "priority": {"name": "High"},
    "customfield_10001": {"value": "Production"}
  }
)
```

---

## Tips for Effective Triage

### For Search:

**Do:**
✅ Use multiple search queries with different angles
✅ Include both open and resolved issues in search
✅ Search for error signatures and symptoms separately
✅ Look at recent issues first (last 30-90 days)
✅ Check for patterns (multiple reports of same thing)

**Don't:**
❌ Search with entire error messages (too specific)
❌ Only search open issues (miss fix history)
❌ Ignore resolved issues (miss regressions)
❌ Use too many keywords (reduces matches)

### For Issue Creation:

**Do:**
✅ Write clear, specific summaries with component names
✅ Include complete error messages in code blocks
✅ Add environment and impact details
✅ Reference related issues found during search
✅ Use "Bug" issue type for actual bugs

**Don't:**
❌ Create vague summaries like "Error in production"
❌ Paste entire stack traces in summary (use description)
❌ Skip reproduction steps
❌ Forget to mention user impact
❌ Hard-code issue type without checking availability

### For Duplicate Assessment:

**High Confidence Duplicates:**
- Exact same error + same component + recent (< 30 days)
- Same root cause identified

**Likely Different Issues:**
- Different error signatures
- Different components/systems
- Significantly different contexts

**When Unsure:**
- Present both options to user
- Lean toward creating new issue (can be closed as duplicate later)
- Linking issues is better than hiding information

---

## Examples

### Example 1: Clear Duplicate Found

**User Input:**
```
Triage this error: "Connection timeout error when users try to login on iOS app"
```

**Process:**
1. Extract: "Connection timeout", "login", "iOS"
2. Search: Find PROJ-456 (open, 2 days ago) with exact same error
3. Analyze: 95% match - same error, component, symptom
4. Present: Show PROJ-456 as duplicate, recommend adding comment
5. Execute: User confirms, add comment with iOS-specific details
6. Confirm: Comment added to PROJ-456

**Output:**
```
✅ Comment added to PROJ-456

Your iOS-specific error details have been added to the existing issue.
The assignee will be notified.
```

### Example 2: New Issue with Related Context

**User Input:**
```
Error: NullPointerException in PaymentProcessor.processRefund() at line 245
Stack trace: [full stack trace]
```

**Process:**
1. Extract: "NullPointerException", "PaymentProcessor", "processRefund", "line 245"
2. Search: Find PROJ-789 (resolved, 3 weeks ago) about payment errors, but different line
3. Analyze: Related component but different specific error
4. Present: No duplicates, found related issue, recommend new ticket
5. Execute: User confirms, create new Bug with context
6. Confirm: PROJ-890 created

**Output:**
```
✅ New Issue Created

PROJ-890 - Payment API: NullPointerException in refund processing
https://yoursite.atlassian.net/browse/PROJ-890

References related issue PROJ-789 for context.
```

### Example 3: Possible Regression

**User Input:**
```
Users can't upload files larger than 5MB, getting "Upload failed" error
```

**Process:**
1. Extract: "Upload failed", "5MB", "file upload"
2. Search: Find PROJ-234 (resolved 2 months ago) - exact same issue
3. Analyze: Was fixed but now happening again
4. Present: Possible regression, recommend new issue linked to old one
5. Execute: Create new issue, link to PROJ-234 as "may be caused by"
6. Confirm: PROJ-891 created with regression context

**Output:**
```
✅ New Issue Created (Possible Regression)

PROJ-891 - File Upload: Upload failed for files >5MB (Regression?)
https://yoursite.atlassian.net/browse/PROJ-891

This may be a regression of PROJ-234, which was resolved 2 months ago.
Issue includes reference to original fix for investigation.
```

---

## When NOT to Use This Skill

This skill is for **triaging bugs and errors only**. Do NOT use for:

❌ Feature requests (use spec-to-backlog)
❌ General task creation (use capture-tasks-from-meeting-notes)
❌ Searching for information (use search-company-knowledge)
❌ Generating status reports (use generate-status-report)

**Use this skill specifically for:**
✅ "Is this a duplicate bug?"
✅ "Triage this error message"
✅ "Has this been reported before?"
✅ "Create a bug ticket for this"

---

## Quick Reference

**Primary workflow:** Extract → Search → Analyze → Present → Execute → Confirm

**Search tool:** `searchJiraIssuesUsingJql(cloudId, jql, fields, maxResults)`

**Action tools:**
- `addCommentToJiraIssue(cloudId, issueIdOrKey, commentBody)` - Add to existing
- `createJiraIssue(cloudId, projectKey, issueTypeName, summary, description)` - Create new

**Issue type:** Always prefer "Bug" for error reports, check with `getJiraProjectIssueTypesMetadata`

**Remember:**
- Multiple searches catch more duplicates
- Present findings before acting
- Include error details and context
- Reference related issues
- Use "Bug" issue type when available

Referenced files: 2

Technical details
First seen
Sep 30, 2026 · 22:02 UTC
Last seen
Oct 1, 2026 · 18:00 UTC
Collection status
Collected

plugin_asdk_app_6a83901dde988191b3f3cefdcc19acfa

Download listing JSON