Creates well-structured JIRA tickets in the HYPERFLEET project with required fields including What/Why/Acceptance Criteria, story points, and activity type. Activates when users ask to create a ticket, story, task, or epic.
Creates well-structured JIRA tickets in the HYPERFLEET project with required What/Why/Acceptance Criteria, story points, and activity type. Activates when users ask to create a ticket, story, task, or epic.
/plugin marketplace add openshift-hyperfleet/hyperfleet-claude-plugins/plugin install hyperfleet-jira@hyperfleet-claude-pluginsThis skill inherits all available tools. When active, it can use any tool Claude has access to.
YOU MUST USE JIRA WIKI MARKUP SYNTAX - NEVER USE MARKDOWN!
| Element | ❌ WRONG | ✅ CORRECT |
|---|---|---|
| Header | ### What | h3. What (space required!) |
| Bullets | - Item or • Item | * Item |
| Nested | - Nested | ** Nested |
| Inline Code | `code` | {{code}} |
| Bold | **text** | *text* |
| Path Params | /api/{id} | /api/:id or /api/ID |
| Placeholders | {customer-id} | CUSTOMER_ID or :customer_id |
If you use Markdown syntax, the ticket will render incorrectly in JIRA!
See "CRITICAL: JIRA Wiki Markup Formatting" section below for complete reference.
Activate this skill when the user:
Every ticket created MUST include:
Clear, concise description of what needs to be done. Should be 2-4 sentences explaining the work.
Business justification and context. Explain:
Minimum 2-3 clear, testable criteria that define "done":
All Stories, Tasks, and Bugs must have story points:
Set priority via CLI using -y or --priority:
Blocker - Blocks development/testing, must be fixed immediatelyCritical - Crashes, data loss, severe memory leakMajor - Major loss of functionNormal - Default priority for most workMinor - Minor loss of function, easy workaroundSet activity type via CLI using --custom activity-type="<value>". Valid types:
Associate Wellness & Development - Training, onboarding, team growthIncidents & Support - Customer escalations, production issuesSecurity & Compliance - CVEs, security patches, complianceQuality / Stability / Reliability - Bugs, tech debt, toil reduction, SLOsFuture Sustainability - Tooling, automation, architecture improvementsProduct / Portfolio Work - New features, strategic product workAdditional sections can be added as needed:
JIRA uses wiki markup, NOT Markdown!
h3. What ✅ Correct (space after period!)
h3. Why ✅ Correct
**What** ❌ Wrong (Markdown syntax)
### What ❌ Wrong (Markdown syntax)
* Item 1 ✅ Correct
** Nested item ✅ Correct (two asterisks)
- Item 1 ❌ Wrong (Markdown syntax)
• Item 1 ❌ Wrong (Unicode bullet)
- Nested ❌ Wrong (indentation + dash)
Real Example - HYPERFLEET-255 (WRONG):
### Summary ❌ Markdown header - won't render!
• POST /api/... ❌ Unicode bullet - won't render!
Should Have Been:
h3. Summary ✅ JIRA wiki header
* POST /api/... ✅ JIRA wiki bullet
{{package/path}} ✅ Correct
{{variable_name}} ✅ Correct
`package/path` ❌ Wrong (Markdown syntax)
*bold text* ✅ Correct
_italic text_ ✅ Correct
**bold** ❌ Wrong (Markdown syntax)
DO NOT use code blocks in CLI-created tickets! They don't render properly.
{code:go} ❌ Don't use via CLI (renders as empty gray box)
package main
{/code}
Instead:
{{package_name}}*POST* /api/v1/clusters/:id ✅ Correct (bold HTTP method, colon notation)
*GET* /api/v1/clusters/CLUSTER_ID ✅ Correct (placeholder text)
*POST* /api/v1/clusters/{id} ❌ Wrong - curly braces break rendering!
{{POST /api/v1/clusters/{id}}} ❌ Wrong (nested braces break rendering)
NEVER use curly braces {} in ticket descriptions - they break JIRA rendering!
wif-{customer-id}-key ❌ Wrong - curly braces break rendering!
{{wif-{customer-id}-key}} ❌ Wrong - nested braces also break!
wif-CUSTOMER_ID-key ✅ Correct - use CAPS or other notation
/api/v1/clusters/{id} ❌ Wrong - path parameter braces break!
/api/v1/clusters/:id ✅ Correct - use colon notation
/api/v1/clusters/CLUSTER_ID ✅ Correct - use placeholder text
Alternatives to curly braces:
wif-CUSTOMER_ID-key/api/v1/clusters/:idwif-<customer-id>-keywif-[customer-id]-keyNEVER include YAML comments in code blocks! The # character is interpreted as h1. header.
Wrong:
{code:yaml}
# This is a comment
field: value
{/code}
Correct Option 1 - Descriptive text:
Configuration fields:
* {{field: value}} - Description of field
Correct Option 2 - Code block without comments:
{code:yaml}
field: value
{/code}
Explanation outside code block...
Ask the user clarifying questions if needed:
⚠️ CRITICAL: Always create a temporary file with JIRA wiki markup (NOT Markdown!):
DO NOT USE:
### Headers (Markdown)- bullets or • bullets (Markdown/Unicode)`inline code` (Markdown)**bold** (Markdown)USE ONLY:
h3. Headers (JIRA wiki - space required!)* bullets (JIRA wiki){{inline code}} (JIRA wiki)*bold* (JIRA wiki)Template for Stories/Tasks (JIRA Wiki Markup):
h3. What
Brief description paragraph.
Detailed explanation paragraph (optional).
h3. Why
* Reason 1
* Reason 2
* Reason 3
h3. Acceptance Criteria:
* {{Component}} created/implemented/configured
* Feature X works correctly:
** Detail 1
** Detail 2
* Tests achieve >80% coverage
* Documentation updated
h3. Technical Notes:
* Use {{package-name}} for implementation
* Configuration in {{/path/to/config.yaml}}
* Important consideration
* Reference {{AnotherComponent}}
h3. Out of Scope:
* Item not included
* Another exclusion
Template for Epics:
h1. Epic Title
h3. Overview
Brief overview paragraph.
h3. What
* Key deliverable 1
* Key deliverable 2
** Sub-item
* Key deliverable 3
h3. Why
Explanation of business value and impact.
h3. Scope
*In Scope*:
* Item 1
* Item 2
*Out of Scope*:
* Item 3
* Item 4
h3. Success Criteria
* Criterion 1
* Criterion 2
* Criterion 3
Use the estimation scale (from jira-story-pointer):
| Points | Meaning | Typical Scope | Notes |
|---|---|---|---|
| 0 | Tracking Only | Quick/easy task with stakeholder value | Rarely used. For tasks worth tracking but with negligible effort compared to a 1-pointer |
| 1 | Trivial | One-line change, extremely simple task | The smallest issue possible - everything scales from here. No risk, very low effort, very low complexity |
| 3 | Straightforward | Time consuming but fairly straightforward work | Doesn't have to be complex, but usually time consuming. Minor risks possible |
| 5 | Medium | Requires investigation, design, collaboration | Probably needs discussion with others. Can be quite time consuming or complex. Risks involved |
| 8 | Large | Big task requiring investigation and design | Requires collaboration with others. Solution can be quite challenging. Risks are expected. Design doc required |
| 13 | Too Large | Should be split into smaller stories | Ideally, this shouldn't be used. If you see an issue this big, it must be broken down |
Consider:
Choose based on work category:
Reactive Work (Non-Negotiable First):
Associate Wellness & Development - Training, onboarding, team growthIncidents & Support - Customer escalations, production issuesSecurity & Compliance - CVEs, security patches, complianceCore Principles (Quality Focus):
Quality / Stability / Reliability - Bugs, tech debt, toil reduction, SLOsProactive Work (Balance Capacity):
Future Sustainability - Tooling, automation, architecture improvementsProduct / Portfolio Work - New features, strategic product workIMPORTANT: Use the patterns that actually work!
# 1. Save description to temporary file
cat > /tmp/story-description.txt << 'EOF'
h3. What
Description of what needs to be done.
h3. Why
* Reason 1
* Reason 2
h3. Acceptance Criteria:
* Criterion 1
* Criterion 2
* Criterion 3
h3. Technical Notes:
* Use {{package-name}}
* Configuration in {{/path/to/config}}
EOF
# 2. Create story with story points, priority, and activity type
jira issue create --project HYPERFLEET --type Story \
--summary "Story Title (< 100 chars)" \
--custom story-points=5 \
--custom activity-type="Product / Portfolio Work" \
--priority Normal \
--no-input \
-b "$(cat /tmp/story-description.txt)"
# 3. Note the ticket number from output (e.g., HYPERFLEET-123)
# Same as Story, just change --type to Task
cat > /tmp/task-description.txt << 'EOF'
h3. What
Task description.
h3. Why
Justification.
h3. Acceptance Criteria:
* Criterion 1
* Criterion 2
EOF
jira issue create --project HYPERFLEET --type Task \
--summary "Task Title" \
--custom story-points=3 \
--custom activity-type="Future Sustainability" \
--priority Normal \
--no-input \
-b "$(cat /tmp/task-description.txt)"
CRITICAL: Epics require the Epic Name field!
# 1. Create description file
cat > /tmp/epic-description.txt << 'EOF'
h1. Epic Full Title
h3. Overview
Overview paragraph.
h3. What
* Deliverable 1
* Deliverable 2
h3. Why
Explanation.
h3. Success Criteria
* Criterion 1
* Criterion 2
EOF
# 2. Create epic with Epic Name (required field!)
jira issue create --project HYPERFLEET --type Epic \
--summary "Epic: Full Title Here" \
--custom epic-name="Short Name" \
--template /tmp/epic-description.txt \
--no-input
# Note: Use --custom epic-name="Name" (not epicName or customfield_12311141)
cat > /tmp/bug-description.txt << 'EOF'
h3. What
Description of the bug and its impact.
h3. Why
Why this needs to be fixed urgently.
h3. Acceptance Criteria:
* Bug is reproducible
* Root cause identified
* Fix is verified
* Regression test added
EOF
jira issue create --project HYPERFLEET --type Bug \
--summary "Bug: Brief Description" \
--custom story-points=5 \
--custom activity-type="Quality / Stability / Reliability" \
--priority Major \
--no-input \
-b "$(cat /tmp/bug-description.txt)"
After creating a ticket via CLI, these may need to be done manually via web UI:
Link to Epic (for Stories)
Add Labels
Add Code Examples (if needed)
{code:language}...{/code} blocksNote: Story points, priority, and activity type can all be set via CLI.
# View created ticket
jira issue view HYPERFLEET-XXX --plain
# Check in web UI
# URL: https://issues.redhat.com/browse/HYPERFLEET-XXX
Return to user:
When creating a ticket, provide this output to the user:
### Ticket Created: HYPERFLEET-XXX
**Type:** [Story/Task/Epic/Bug]
**Summary:** [Title]
**Link:** https://issues.redhat.com/browse/HYPERFLEET-XXX
---
#### Description Structure (✅ Created via CLI)
**What:**
[What description]
**Why:**
[Why description]
**Acceptance Criteria:**
* Criterion 1
* Criterion 2
* Criterion 3
**Story Points:** [X points - set via CLI]
**Priority:** [Priority - set via CLI]
**Activity Type:** [Activity type - set via CLI]
---
#### Manual Steps Required (⚠️ Must be done via Web UI)
Please complete these steps in the JIRA web interface:
1. **Link to Epic**: [If applicable: Link to HYPERFLEET-XXX]
2. **Add Labels**: [Suggested: label1, label2]
3. **Add Code Examples**: [If needed: Add via web UI description editor]
**Why manual?** Epic links and code blocks don't render reliably via jira-cli.
FORMATTING (Most Common Mistakes!):
### What, ## Summary- Item, • Item`code`**text**h3.What (needs h3. What)TICKET EXAMPLES OF WRONG FORMATTING:
### Summary and • bullets - headers didn't render!CURLY BRACES (Break JIRA Rendering!):
6. ❌ Use curly braces {} anywhere - e.g., {customer-id}, /api/{id} - breaks rendering!
7. ❌ Use {{}} around content with braces - doubly broken!
OTHER MISTAKES:
8. ❌ Include code blocks with {code}...{/code} via CLI (renders as empty boxes)
9. ❌ Put YAML comments (#) in code blocks (breaks rendering)
10. ❌ Use --body-file flag (doesn't exist!)
11. ❌ Mix Markdown and JIRA wiki markup in same ticket
TICKET EXAMPLES OF CURLY BRACE ISSUES:
{customer-id} - broke rendering! Fixed with CUSTOMER_ID-b "$(cat /tmp/file.txt)"--no-input for non-interactive creation--custom story-points=X--priority Normal--custom activity-type="Product / Portfolio Work"*POST* /api/path{{/path/to/file}}Error: customfield_12311141: Epic Name is required.
Solution:
--custom epic-name="Short Name" ✅ Correct
--custom epicName="Name" ❌ Wrong
--custom customfield_12311141 ❌ Wrong
Solution: Don't include code blocks via CLI. Add them manually via web UI after creation.
Solution: Ensure space after period: h3. What (not h3.What)
Solution: Use * not -, and ** for nested (not indentation)
Solution: Use the exact syntax --custom story-points=X where X is 0, 1, 3, 5, 8, or 13. Example:
jira issue create --project HYPERFLEET --type Story \
--summary "Title" --custom story-points=5 --no-input \
-b "$(cat /tmp/desc.txt)"
Note: Activity type must still be set via web UI.
# Create ONE test ticket
jira issue create --project HYPERFLEET --type Story \
--summary "TEST - Delete Me" \
-b "$(cat /tmp/test-description.txt)" \
--no-input
# Verify in CLI and web UI
jira issue view HYPERFLEET-XXX
# If good, create remaining tickets
# Delete test ticket when done
Don't create tickets with inline strings. Always use files:
# Good
cat > /tmp/description.txt << 'EOF'
...
EOF
jira issue create ... -b "$(cat /tmp/description.txt)"
# Bad
jira issue create ... -b "h3. What\n\nLong description..."
As tickets are created, track them:
# Epic created: HYPERFLEET-105
# Stories: HYPERFLEET-106, HYPERFLEET-107, HYPERFLEET-108
After creating multiple tickets via CLI:
This skill complements:
Create Story:
cat > /tmp/desc.txt << 'EOF'
h3. What
...
h3. Why
...
h3. Acceptance Criteria:
* ...
EOF
jira issue create --project HYPERFLEET --type Story \
--summary "Title" \
--custom story-points=5 \
--custom activity-type="Product / Portfolio Work" \
--priority Normal \
--no-input \
-b "$(cat /tmp/desc.txt)"
Create Epic:
jira issue create --project HYPERFLEET --type Epic \
--summary "Epic: Title" \
--custom epic-name="Short Name" \
--template /tmp/epic-desc.txt \
--no-input
Story Points via CLI:
| Points | When to Use |
|---|---|
--custom story-points=0 | Tracking only, negligible effort |
--custom story-points=1 | Trivial, one-line change |
--custom story-points=3 | Straightforward, time consuming |
--custom story-points=5 | Medium, needs investigation/collaboration |
--custom story-points=8 | Large, design doc required |
--custom story-points=13 | Too large - break it down! |
Priority via CLI:
| Priority | When to Use |
|---|---|
--priority Blocker | Blocks development/testing, fix immediately |
--priority Critical | Crashes, data loss, severe memory leak |
--priority Major | Major loss of function |
--priority Normal | Default for most work |
--priority Minor | Minor loss of function, easy workaround |
Activity Type via CLI:
| Activity Type | When to Use |
|---|---|
--custom activity-type="Associate Wellness & Development" | Training, onboarding, team growth |
--custom activity-type="Incidents & Support" | Customer escalations, production issues |
--custom activity-type="Security & Compliance" | CVEs, security patches, compliance |
--custom activity-type="Quality / Stability / Reliability" | Bugs, tech debt, toil reduction |
--custom activity-type="Future Sustainability" | Tooling, automation, architecture |
--custom activity-type="Product / Portfolio Work" | New features, strategic product work |
Manual Steps (Web UI):
Formatting:
h3. Text (space!)* and **{{code}}*text**POST* /api/path/:idCreate employment contracts, offer letters, and HR policy documents following legal best practices. Use when drafting employment agreements, creating HR policies, or standardizing employment documentation.
Implement GDPR-compliant data handling with consent management, data subject rights, and privacy by design. Use when building systems that process EU personal data, implementing privacy controls, or conducting GDPR compliance reviews.